diff --git a/build/awips-ade/Dockerfile.awips-ade.el6 b/build/awips-ade/Dockerfile.awips-ade.el6 index dbca758e1a..f18b177ff6 100644 --- a/build/awips-ade/Dockerfile.awips-ade.el6 +++ b/build/awips-ade/Dockerfile.awips-ade.el6 @@ -5,9 +5,10 @@ MAINTAINER Michael James USER root +COPY el6-dev.repo /etc/yum.repos.d/awips2.repo + RUN groupadd fxalpha && useradd -G fxalpha awips -RUN wget -O /etc/yum.repos.d/awips2.repo https://www.unidata.ucar.edu/software/awips2/doc/el6-dev.repo?20180627 RUN yum -y clean all RUN yum groupinstall awips2-ade -y diff --git a/build/awips-ade/Dockerfile.awips-ade.el7 b/build/awips-ade/Dockerfile.awips-ade.el7 index db6d82ac8c..34c4113720 100644 --- a/build/awips-ade/Dockerfile.awips-ade.el7 +++ b/build/awips-ade/Dockerfile.awips-ade.el7 @@ -5,9 +5,10 @@ MAINTAINER Michael James USER root +COPY el7-dev.repo /etc/yum.repos.d/awips2.repo + RUN groupadd fxalpha && useradd -G fxalpha awips -RUN wget -O /etc/yum.repos.d/awips2.repo https://www.unidata.ucar.edu/software/awips2/doc/el7-dev.repo RUN yum -y clean all RUN yum groupinstall awips2-ade -y diff --git a/build/awips-ade/el6-dev.repo b/build/awips-ade/el6-dev.repo new file mode 100644 index 0000000000..dad863b1f7 --- /dev/null +++ b/build/awips-ade/el6-dev.repo @@ -0,0 +1,7 @@ +[awips2repo] +name=AWIPS II Repository +baseurl=http://www.unidata.ucar.edu/repos/yum/el6-dev/ +enabled=1 +protect=0 +gpgcheck=0 +proxy=_none_ diff --git a/build/awips-ade/el7-dev.repo b/build/awips-ade/el7-dev.repo new file mode 100644 index 0000000000..f8543756d0 --- /dev/null +++ b/build/awips-ade/el7-dev.repo @@ -0,0 +1,7 @@ +[awips2repo] +name=AWIPS II Repository +baseurl=http://www.unidata.ucar.edu/repos/yum/el7-dev/ +enabled=1 +protect=0 +gpgcheck=0 +proxy=_none_ diff --git a/build/buildEnvironment.sh b/build/buildEnvironment.sh index 782c1bec0b..45333ccdfe 100755 --- a/build/buildEnvironment.sh +++ b/build/buildEnvironment.sh @@ -1,7 +1,7 @@ #!/bin/bash # Version export AWIPSII_VERSION="18.1.1" -export AWIPSII_RELEASE="4" +export AWIPSII_RELEASE="5" # Author export AWIPSII_BUILD_VENDOR="UCAR" export AWIPSII_BUILD_SITE="Unidata" diff --git a/cave/build/features.txt b/cave/build/features.txt index 79b5c28be8..1939201b8e 100644 --- a/cave/build/features.txt +++ b/cave/build/features.txt @@ -7,7 +7,6 @@ com.raytheon.uf.viz.dataplugins.feature com.raytheon.viz.feature.awips com.raytheon.uf.viz.application.feature com.raytheon.uf.viz.base.feature -com.raytheon.uf.viz.gisdatastore.feature com.raytheon.viz.dataaccess.feature com.raytheon.uf.viz.localization.perspective.feature com.raytheon.uf.viz.core.feature @@ -17,6 +16,7 @@ com.raytheon.uf.viz.aviation.advisory.feature com.raytheon.uf.viz.d2d.core.feature com.raytheon.uf.viz.kml.export.feature com.raytheon.viz.radar.feature +com.raytheon.viz.gfe.feature com.raytheon.uf.viz.grid.feature com.raytheon.uf.viz.displays.feature com.raytheon.uf.viz.d2d.damagepath.feature diff --git a/cave/build/p2-build.xml b/cave/build/p2-build.xml index 79d1f6549d..8c97b99188 100644 --- a/cave/build/p2-build.xml +++ b/cave/build/p2-build.xml @@ -280,6 +280,7 @@ + - - - -Adjust -
-
-Introduction -
-
-Adjust is a GFE SmartTool -that performs basic math functions like add, subtract, multiply and divide on a grid. -However, as is often useful with GFE, it allows options related to elevation (i.e., -adding mostly at higher elevations, or subtracting mostly at lower elevations), and -related to edit areas (i.e., adding most in the center of the edit area, or adding -nearly the same amount everywhere – but ‘ramping down’ to no change at the edge of -the edit area). You can combine these options in a variety of ways. This tool -really takes the place of many other tools previously on the SmartTool Repository -like UpMtn and DownValley, but it also provides many more combinations due to the -ability to specify the edge effect and elevation effect options ‘on-the-fly’. -
-
-
-How -the Procedure Works -
-
-The basic function of the tool -is to take the specified value and perform the specified action of Add, Subtract, Multiply -or Divide:

-Adjust
-
-
-The value can be any number, -either an integer or floating-point number, and can be negative (multiplying by negative -one is especially useful for changing the sign of a grid). The final grid values, -however, will not be allowed to lie outside the range of valid values for that particular -grid parameter. Dividing by zero is, of course, not allowed. -

-Adding and Subtracting is useful for most parameters, such as adding or subtracting a -few degrees from temperatures, or adding or subtracting a few percent from PoPs. -Multiply and Divide are most useful with certain parameters, such as increasing QPF -by multiplying by 1.5, or dividing by 2 to cut PoPs in half.
-
-
-
-Vector Option -
-
-For vector parameters, the -setting of the GFE Vector Editing Mode is ignored, but instead is controlled by the -vector setting on the tool itself (see graphic above). -

-If the vector setting is “Both” and the value is set to 10.0, then performing an -Addition operation will add 10 knots to the magnitude of a wind, and add 10 degrees -to the direction (veer the wind by 10 degrees). This is only rarely what you want, -so the Both option is rarely used. More typically you only operate on the vector -Magnitude, and that is why it is selected by default when you start the tool.
-
-
-
-Edge Option -
-
-The tool works either on an -edit area or the entire grid. When working on an edit area, the edge options can be -useful to “blend” your changes into the rest of the grid. -

-The Flat option, makes no attempt to “blend” your changes into the edges of your edit -area. For example, if you start with a constant grid of 1 (let’s say it is a PoP grid) -and define an edit area.
-Adjust

-If you then add a value of 50, with an edge option of flat, you will get:
-Adjust

-Note that inside the edit areas, the value is now 51 (50 + 1), and there has been no -attempt to “blend” these values into the rest of the grid. If, however, the edge option -is chosen then the result would be:
-Adjust

-Note that most of the edit area still contains the value of 51 (50+1), but near the -edges of the edit area, the adjustment is “scaled back” down to zero along the edge, -so that it “blends in” with the rest of the grid. The width of the edge effect is -controlled by the Edge Width slider which defaults to 5, meaning the values are -blended in over 5 pixels, or gridboxes. If, however, the taper option is chosen -then the result of adding 50 will be:
-Adjust

-Note that only one pixel, furthest from the edge of the edit area, receives the full -adjustment of adding 50 and reaching a final value of 51. Everywhere else receives -a lesser amount of adjustment such that the value blends in across the entire edit area. -

-Note, however, that the taper function has an error if the edit area includes the edge -of the GFE grid. In this example, the grid includes the corner of the GFE grid and -the taper function produces an incorrect adjustment:
-Adjust

-It is worth pointing out that for addition and subtraction, the edge and taper options -trend to “zero” or “no-change” at the edge of the edit area. However, for -multiplication and division, the edge and taper options trend to “one” at the edge of -the edit area, because multiplying or dividing by 1.0 gives the “no-change” -effect.
-
-
-
-Elevation Option -
-
-The elevation option -allows you to perform your operation (add, subtract, multiply or divide) mostly -in areas of similar elevation. If the None option (the default) is chosen, then -elevation does not influence the operation. -

-However, if the Mountain option is chosen, then the full adjustment will take -place at the highest elevation in the edit area, and zero adjustment will take -place at the lowest elevation in the edit area. For example, with topography -like this:
-Adjust

-The highest elevation is along the extreme right edge of the edit area. -The lowest elevation is in the upper center of the edit area. The result -of adding 50 to our constant grid of 1, gives:
-Adjust

-Note how only one pixel gets the final value of 51, and it is the point inside -the edit area with the highest elevation. Likewise, if the Valley option is chosen -Then the effect is just the opposite, the full adjustment is made at the lowest -elevation inside the edit area, and zero adjustment is made at the highest -elevation:
-Adjust

-If the Specific option is chosen Then the full adjustment will take place at the -specific elevation. The effect will then taper down to zero adjustment at both -the highest and lowest elevation inside the edit area:
-Adjust

-Note that if the elevation specified is above the highest elevation inside the -edit area, then the effect will be exactly the same as choosing the “Mountain” -option. Likewise, if the elevation specified is below the lowest elevation -inside the edit area, then the effect will be exactly the same as choosing -the “Valley” option.
-
-
-Combined -Elevation and Edge Options -
-
-Any of the options -can be combined. As the examples above show, when using the elevation options -of Mountain, Valley, or Specific, there will likely be harsh gradients produced -at the edge of the edit area. If, for example, the Edge option is also chosen -along with the Mountain option, with an addition of 50, the result is:
-Adjust

-Note that the adjustment now blends in well with the rest of the grid, because -the edge effect is trending the adjustment back toward zero at the edges of the -edit area. However, also note that the adjustment is also putting most of the -adjustment at the higher elevations. It is worth pointing out that, in this case, -the gridbox that receives the full adjustment is not the gridbox with the highest -elevation (because that point is also on the edge of the edit area). -Instead, a point further inside the edit area, which has a high elevation, -receives the full adjustment:
-Adjust

-Mathematically, the two adjustment function are simply multiplied together, and -re-scaled, so that at least one gridbox receives the full adjustment. -

-Similarly, the combination of the Mountain option with the Taper option yields:
-Adjust

-Here, the taper option would like to put the most adjustment in the middle of the -edit area, but the lowest elevations are also in that area, so the combination -puts the maximum adjustment at a relatively high elevation, but as close to the -center of the edit area as possible:
-Adjust

-Old tools on the SmartTool repository were hard-coded combinations of some of these -options. For example, the UpMtn tool is essentially a combination of Add, Mountain -and Edge, with an edge width of 5 gridboxes. The DownValley tool is essentially a -combination of Subtract, Valley and Edge, with and edge width of 5 gridboxes. -The MultiplyDivide tool provided a combination of Multiply, None, Flat as well as -Divide, None, Flat options. Putting all these options into a single tool means -fewer tools on the GFE tool list, and provide some new combinations.
- - diff --git a/cave/com.raytheon.viz.gfe/help/Align_Grids.html b/cave/com.raytheon.viz.gfe/help/Align_Grids.html deleted file mode 100644 index 33acc748d1..0000000000 --- a/cave/com.raytheon.viz.gfe/help/Align_Grids.html +++ /dev/null @@ -1,63 +0,0 @@ - - - - - Align_Grids - - - - - - -Align_Grids -
-
-Overview -
-
-This procedure will align the time -breaks of selected weather elements to match the time breaks of the individual grids of a "source" -element. The main idea is to help minimize manual splitting and stretching of grids in the Grid -Manager. If a grid to align does not exist, then it will be created from scratch. Therefore one -use of this procedure could be to create default SnowAmt grids that match the time breaks of QPF -grids. In general, you will want to edit the source element first creating the desired time breaks -and then run this procedure to align other elements before editing them. For example, edit Wx, -then run Align_Grids to line up the floating PoP grids with the Wx grids, then edit PoP. -

-The data from an element's original time breaks are transformed to the new time breaks using the -following methods: -
    -
  • Wx: "MaxTime" - uses original grid with the dominant temporal coverage in the new - aligned time range.
  • -
  • PoP: "Max" - Maximum value of all original grids in the new time range of the - aligned grid.
  • -
  • Sky: "Max" - Maximum value of all original grids in the new time range of the - aligned grid.
  • -
  • WindGust: "Max" - Maximum value of all original grids in the new time range of the - aligned grid. NOTE: WindGust is always aligned to Wind grids.
  • -
  • Wind: "TimeWtAverage" - Time weighted average value
  • -
  • QPF: "Sum" - Summation of all grids
  • -
  • SnowAmt: "Sum" - Summation of all grids
  • -
  • IceAccum: "Sum, - Summation of all grids
  • -

-The logic for the procedure is as follows:
-
    -
  1. The procedure first copies the element to align to a temporary element.
  2. -
  3. New grids for the element to align are created from scratch to match the - time breaks of the source element's grids.
  4. -
  5. The grids in the temporary element are either fragmented (for rate based elements) - or split to match the time breaks of the source element.
  6. -
  7. Finally, the values in the temporary grids are assigned back to the aligned grids ' - using the getGrids method with the appropriate setting of the getGrids "mode" argument.
  8. -
- diff --git a/cave/com.raytheon.viz.gfe/help/Button3Popups.html b/cave/com.raytheon.viz.gfe/help/Button3Popups.html deleted file mode 100644 index e71f5b8aae..0000000000 --- a/cave/com.raytheon.viz.gfe/help/Button3Popups.html +++ /dev/null @@ -1,597 +0,0 @@ - - - - - - Button3Popups - - -

-Button3 Popup Menus

-
-The following popup menus are invoked from the GFE: - -


-

-
-

Time Scale Popup Menu

-Selecting MB3 over the Time Scale opens a submenu with the following -items: -
    -
  • Select Grids by Time -- Lists the available Select Time Range(s). -These -time ranges can be defined in the Define Select Time Ranges under the -Grids -Main Menu. Selecting one of the Time Ranges listed sets the selected -time -range to it.
  • -
  • Select All Weather Elements -- Selects all Weather Elements in -the Grid -Manager.
  • -
  • Deselect All -- Deselects any Weather Elements and Time Ranges -selected -in the Grid Manager.
  • -
-
-

Grid Manager Popup Menu

-The following items may appear when pressing MB3 over various locations -in the Grid Manager. Some items apply to particular grids, or to -Forecast -versus Model grids, or to Weather Elements listed within the Grid -Manager. -The applicable items will be listed depending on where you press -MB3. -Some entries are not available at all times. -
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Menu ItemDescription
Copy GridMake a copy of the grid and place it the copy buffer to be -pasted to -another location.
Paste GridPaste the grid in the copy buffer to the current location.
Fragment GridDivide the grid into the smallest duration possible. For -example, a -12 hour temperature grid may be divided into 12 hourly grids. This -applies -only to Forecast database grids.
-This operation differs from the Fragment operation available in the -GFE main menu.
-This MB3 Pop-up operation always fragments the entire grid identified -by the current
-cursor location. The GFE main menu option uses the selected time range -to fragment
-the portion of the grid selected. For more information on the -Fragment operation
-available from the main menu, see the section on Fragment -Grid in the Grid Manager
-Training Guide.
Split GridDivide the grid into two pieces at the nearest time -constraint to the -cursor location.  Note that this operation differs from the Split -operation offered in the GFE Grids-> menu. This operation uses -only -the current cursor location to divide the grid in exactly
-two parts. The other operation uses the selected time range to -define the times at which
-to Split the grid. See the section on Split -Grids in the GFE Grid Manager Training
-Guide for more information.
Assign <Default Value>Resets the data in the grid to a default value. For WEATHER -type grids, -the default is no weather. For VECTOR type grids, the default is zero -magnitude. -For SCALAR type grids, the default is the weather element's minimum -possible -value as defined in serverConfig.py -. For DISCRETE grids, it is the first-defined value in the serverConfig.py. -The menu label indicates the default value, e.g., "Assign <NoWx>".
Assign <Pickup Value>Sets the data in the grid to the current pickup value, while -ignoring -the vector edit mode and weather combine modes. The menu label -indicates -the current pickup value, e.g., "Assign 45"
Delete GridRemove the grid. This applies only to Forecast database grids.
Create From ScratchCreates a grid at the point you selected. The grid -is marked "e" -for editable and the grid background is made green -- which specifies -that -the grid is locked by you. This applies only to empty Forecast database -grids.
UndoReverses the last grid edit operation that was -performed.  You -are only able to reverse the very last operation -- but you can undo -the -last Undo.
Select All TimesDe-selects any Weather Elements first, then selects all times -(from -long in the past to far in the future) for the weather element where -the -pop-up action was initiated.
Display InfoThe Display Info Dialog appears.
Clear HighlightErases any "highlights" that may be present. Note that -certain -smart tools can highlight grids.
"Smart Tools"A set of smart tools (specified via gfeConfig) may appear. -The default -set is "Show_ISC_Area", "Show_ISC_Grid" and "Show_ISC_Highlight". These -tools are described in the Intersite Coordination -Training -Guide.
-

-

-
-

Display Info Dialog

-Opens a dialog window that displays information about the Weather -Element, -including the name, type, and edit state, and the Weather Element -grids.   -You can close the dialog by selecting Cancel. -
-
-

Spatial Editor Popup -Menu

-Selecting MB3 over the Spatial Editor opens a sub-menu with the -following -items: -
-
    -
  • A list of edit tools as defined in the GFE configuration file. -Some of -the basic tools that may appear are:
  • -
      -
    • Assign_Value -- Assigns pick-up value to active edit area over -active -time -range.
    • -
    • AdjustValue_Down -- Decrements grid points within the active -edit area -and -time range by the Delta Value.
    • -
    • AdjustValue_Up -- Increments grid points within the active edit -area and -time range by the Delta Value.
    • -
    • Smooth -- Smooths grid points within the active edit area over -the -active -time range.
    • -
    -
  • Undo Grid Edit -- Reverses the last grid edit operation that was -performed.  -You are only able to reverse the very last operation -- but you can -undo -the last Undo.
  • -
  • Undo Edit Area -- Reverses the last Edit Area operation that was -performed -in the Spatial Editor.  You are only able to reverse the very last -operation.  You can undo the last Undo.
  • -
  • Legends -- Brings up a cascade menu allowing you to hide the -legends, -show -the map legends, show all fcst legends, show just the active fcst -legend, -or show all weather element legends.
  • -
  • Select Homogeneous Area -- -Selects -an edit -area of grid points whose values are within the weather element's Fuzz -Value of the point at which MB3 was pressed. For example, suppose the -Fuzz -Value for T is 5 degrees and you press MB3 over a grid point that has a -value of 60 degrees. The edit area selected will consist of those -points -that are contiguous with the point at which you pressed and have values -between 50 and 70 degrees. Homogenous areas for WEATHER and DISCRETE -type -data consist of those areas that contain the same data value.
  • -
  • Deselect Contiguous Area -- Deselect the polygon of the active -edit -area -which includes the point at which MB3 was pressed. For example, if the -current edit area consists of two disjoint polygons and you press MB3 -over -one of them, it will disappear from the active edit area. This -operation -alters the active edit area.
  • -
  • Set Fuzz Value -- Brings up the Set -Fuzz Value Dialog which allows the user to set the fuzz value that -applies to selecting homogeneous areas. Applies only to SCALAR -and -VECTOR.
  • -
  • Vector Edit Mode -- Allows user to switch the vector edit mode -between -Magnitude Only, Direction Only, or Both components.  Available -only -when a Vector weather element is the active element.
  • -
  • Weather Edit Mode -- Allows user to switch the weather edit mode -between -Combine and Replace modes. Available only when a Weather weather -element is the active element.
  • -
  • Add ISC Marker -- Available when an ISC grid is directly -displayed (clicking on the ISC grid). Adds an marker -(similar -to a sample, but without the data value display) at the popup location. -Markers are used to indicate the ISC update time, site identifier, and -official database symbol. Refer to the Intersite -Coordination -User's Guide for more details on markers. Depending -upon the office type of the ISC grid, this adds the ISC marker to the -appropriate marker set.
    -
  • -
  • Remove ISC Marker -- Available when an ISC grid is directly -displayed (clicking on the ISC grid) and when near an -existing -marker. Removes an marker (similar to a sample, but without the data -value -display) near the popup location. Refer to the Intersite -Coordination User's Guide for more details on markers. -Depending upon the office type of the ISC grid, this removes the ISC -marker from the appropriate marker set.
    -
  • -
  • Zoom to -- Change the X-direction of the Spatial Editor display -to one -of the several distances.
  • -
    -  -
-
-

Legend Popup Menu

-The Legend Area Button3 Pop-Up is position-sensitive -- the Pop-Up that -is opened, and the commands it lists, pertain only to the particular -Weather -Element or Map whose legend you MB3-pressed over. The menu that -opens -allows you to: -
-
    -
  • Imaging -- Changes the Color Table of the Weather -Element -to one of several color enhancement curves. When you change the Color -Table -of a Weather Element, both it's Color Bar and it's display as image are -changed accordingly. Also provides access to the color chooser.
  • -
  • Change Graphic Color to -- Changes the graphic color of the -Weather -Element -or Map to the color you select. When you change the graphic color -of a Weather Element, both its graphic display color and its Legend -color -are changed accordingly. Also provides access to the Color -Chooser.
  • -
  • Line Width -- Changes the width of the lines that make up the -contour, -wind barb, wind arrow, or weather area.
  • -
  • Line Style -- Changes the texture of the line. Choices are: -SOLID, -DASHED, DOTTED, and DASH_DOTTED.
  • -
  • Density -- Changes the contour interval if the weather element is -displayed -as a graphic, much like the D2D system.
  • -
  • Magnification -- Changes the size of the contour labels for the -selected -weather element, the size of the wind barbs, or the label sizes for the -map backgrounds.
  • -
  • Unload -- Unloads the Weather Element or Map from the GFE -- the -Legend -of the Weather Element and its display in the Spatial Editor are both -removed.
  • -
  • Display As Image or Display As Graphic
  • -
  • Display Attributes -- The Spatial -Editor -Display Attributes Dialog appears.
  • -
  • Grid Ops -- Opens a cascade menu allowing you to do many of the -same -operations -as you can on the grid manager pop-up.
  • -
  • Label - Appears only for Map Legends, and denotes the label -attribute -to -appear for each of the map backgrounds.
  • -
-


-The Grid Ops cascade provides the following capabilities; these -operations apply to the weather element and grid identified by the -legend: -

-
    -
  • Delete Grid -- Deletes the current grid.
  • -
  • Create From Scratch -- Creates a grid from scratch.
  • -
  • Delete Grid -- Remove the grid.
  • -
  • Fragment Grid -- Divide the grid into the smallest duration -possible. -For -example, a 12 hour temperature grid may be divided into 12 hourly grids.
  • -
  • Assign Default Value -- Resets the data in the grid to a default -value. -For WEATHER type grids, the default is no weather. For VECTOR type -grids, -the default is zero magnitude. For SCALAR type grids, the default is -the -weather element's minimum possible value as defined in serverConfig.py -.  For DISCRETE type grids, the default is the first definition -for -the discrete key in the weather element definition in serverConfig.py. -The menu label indicates the default value, e.g., "Assign <NoWx>".
  • -
  • Assign PickUp Value -- Sets the data in the grid to the current -pickup -value, while ignoring the vector edit mode and weather combine modes. -The -menu label indicates the current pickup value, e.g., "Assign 45".
  • -
  • Copy Grid -- Make a copy of the grid and place it the copy buffer -to be -pasted to another location.
  • -
  • Paste Grid -- Paste the grid in the copy buffer to the current -location.
  • -
  • Display Info -- The Display Info Dialog -appears.
  • -
-
-

Spatial Editor Color -Bar Popup -Menu

-The color bar popup menu on the spatial editor changes depending upon -the -type of weather element displayed as an image. The menu that -opens -allows you to: -
-
    -
  • Fit to Data, brings up a submenu with several choices.  Each -changes -the assignment of the color table spectrum so that the entire spectrum -is scaled to the minimum to maximum data values found in the -grids. -These entries apply only to scalar and vector data.
  • -
      -
    • All Grids - Uses the data values in all grids over the entire -grid to -determine -the minimum and maximum values.
    • -
    • All Grids over Area - Uses the data values in all grids over -the active -edit area to determine the minimum and maximum values.
    • -
    • Single Grid - Uses the data values in just the current grid to -determine -the minimum and maximum values.
    • -
    • Single Grid over Area - Uses the data values in just the -current grid -over -the active edit area to determine the minimum and maximum values.
    • -
    -
  • Set Range -- Pops up the Set -Color Table Range Dialog allowing the user to specify the -minimum -and maximum scaled values for the color table spectrum for the weather -element currently displayed as an image.  Applies to scalar and -vector -weather element types only.
  • -
  • Full Default Range -- Changes the scaling for the color table -spectrum -so that the entire spectrum is scaled from the minimum possible value -to -the maximum possible value. Applies to scalar and vector weather -element types only.
  • -
  • Set Pickup Value -- Displays the Pickup -Value Dialog for the currently active weather element.
  • -
  • Set Delta Value -- Displays the Delta -Value Dialog for the currently active weather element.
  • -
  • Set to Recent Values --- Only used for WEATHER and DISCRETE type -of -weather -elements. Displays a cascade of recently set pick-up values that were -used -with the Assign Value tool.
  • -
  • Set to Common Values -- Only used for WEATHER and DISCRETE type -of -weather -elements.  Displays a cascade of commonly used pick-up -values.  -These are defined in the gfe configuration file's common -weather values entry. Multiple levels of cascades may be configured.
  • -
  • Set to Session Values -- Only used for WEATHER and DISCRETE type -of -weather -elements. Displays a cascade of user-set pick-up values. -These -values are added to this list from the Weather -Set Value Dialog's Add to Session command. The purpose of -this -list is to allow the user to pre-configure a set of values that can be -used -again and again for the current GFE session.
  • -
  • Change Color Table To... -- Provides a list of color table -spectrums -that -may be applied to the weather element displayed as an image. Also -provides access to the Color -Table Brightness Dialog and the Color -Table Editor.
  • -
-
    -
    -
-

-Spatial Editor Display Attributes -Dialog

-Opens a Display -Attributes Dialog that displays the following information -corresponding -to the grid you selected: -
    -
  • Image Visual Type
  • -
  • Graphic Visual Type
  • -
-You can change the settings of any of the attributes listed in the -dialog -and click OK. To close the dialog without making any changes, -simply -click Cancel. -

The "image"-type visual cannot be turned off for the image mode. At -least one graphic-type entry must be selected for the graphic mode. -
-

-
-

Temporal Editor Popup -Menu

-Selecting MB3 over the Temporal Editor opens sub-menus that will differ -depending on where you pressed. The following items may appear: -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Menu EntryMenu LocationPurpose
Display AttributesWeather Element LabelThe Temporal -Editor Display Attributes Dialog appears. This applies only to -Scalar -and Vector data.
UndoData AreaReverses the last grid edit operation that was -performed. You -are only able to reverse the very last operation -- but you can undo -them last Undo.
Move Weather ElementWeather Element Label, Data AreaAppears if over a weather element label or data area. Moves -the Weather -Element to the top of the Temporal Editor display. The Move -Weather Element Dialog opens that prompts you to confirm the move. -This allows you to group Weather Elements into the same Temporal Editor -data pane.
Full ViewWeather Element ScaleSets the temporal scale to the full range of values for the -weather -element.
Fit To DataWeather Element ScaleAdjusts the scale to the minimum/maximum values of the grid -data for -the weather element.
Set...Data AreaThis applies only to WEATHER and DISCRETE data. Brings -up the Temporal -Editor Set Weather Pickup Value dialog allowing the user to set and -edit the data.
Set to Recent Value...Data AreaThis applies only to WEATHER and DISCRETE data. Brings -up a cascade -of recently set pickup values.  Choosing an entry will set the -pickup -value and edit the data.
Set to Common Value...Data AreaThis applies only to WEATHER and DISCRETE data. Brings -up a cascade -of commonly set pickup values. These values are defined in the GFE -configuration -file's common -weather/discrete -values entry.
-

-

-
-
-

Back To TOC
-

-
- - diff --git a/cave/com.raytheon.viz.gfe/help/ButtonBarDialogs.html b/cave/com.raytheon.viz.gfe/help/ButtonBarDialogs.html deleted file mode 100644 index 9da114a47b..0000000000 --- a/cave/com.raytheon.viz.gfe/help/ButtonBarDialogs.html +++ /dev/null @@ -1,837 +0,0 @@ - - - - - - GFESuite Documentation - ButtonBarDialogs - - -

-Button Bar Dialogs

-The following dialogs are invoked directly or indirectly from the -Button -Bar: -
- -
-
-

Edit Actions Dialog

-The Edit Actions dialog is opened from the Button Bar. -It allows you to create, modify, and invoke a variety -of Spatial Editor Smart Tools. Please refer to the Smart Tool Training -Guide to understand the concepts of Smart Tools and for instruction on -modifying and creating your own. -

-

The Edit Action Dialog description is divided into three sections: -

- -

    -
    -

    Pull-Down Menus

    -One pull-down menu appears at the top of the Edit Actions Dialog: - -
    -

    File Menu

    -
    The File Menu opens a sub-menu with the -following -entries:
    -
    -
      -
      -
    • Screen Smart Tools -- If on, only the smart -tools -that edit -the active weather element will be displayed in the Smart Tools window.
    • -
    • Close -- Closes the window.
    • -
      -
    -
    -

    Scroll Window

    -The Smart Tools window is the default display of the Edit Actions -window. -The Smart Tools window allows you to select and activate Smart Tools by -pressing MB1 on the action. In general, to activate a Smart Tool, -follow -these steps: -
      -
    1. Make a Weather Element editable
    2. -
    3. Set the Edit Area
    4. -
    5. MB1-click over the Tool name 
    6. -
    -
    -
    -

    -
    -

    Action Buttons

    -The following action buttons appear at the bottom of the Edit Actions -dialog: -
      -
    • Pickup Value -- Opens the Pickup -Value Dialog which allows you to set the -value of the Assign Value Tool.
    • Delta -Value -- Opens the Delta -Value Dialog which allows you to set the -value of the AdjustValue_Up and AdjustValue_Down tools. -
    -
    -
    -
    -
-
-
-

Pickup Value Dialog

-The Pickup Value dialog is opened from the -Edit -Actions Dialog. It allows you to set the value that will be -used by Assign Value Tool for any loaded Weather Element. Optionally, -you -can choose to Assign the value you have chosen by clicking on the -"Assign" -button. -

The dialog displays a color scale, and the name of the Weather -Element -is shown at the top of the dialog. There are four different types -of dialogs: Scalar, Vector, Weather, and Discrete. -

-

Scalar PickUp Value Dialog

-There are two ways to set the current pickup value. MB1 click or drag -will -set the pickup value to whatever value you clicked. Or, if you -click -MB1 in the box labeled "Enter Value", you can enter a value using the -keyboard. -

-

The scaling can be changed by MB2 click over the scale. The -MB3 -Pop-Up menu that allows you to modify the display of the color scale is currently -not available from the Pickup Value dialog. -Select one of the follow Pop-Up menu items to modify the scale display -accordingly. -

-

Vector PickUp Value Dialog

-The vector pick up value dialog contains an entry field for direction -and -magnitude, selectors for the vector -edit mode, and a graphical entry for direction and magnitude. -The direction and magnitude may be entered in the entry fields at any -time, -regardless of the vector edit mode. The vector edit mode affects the -way -the direction and magnitude are specified using the graphical entry -method -and the way some edit tools behave when editing vector data. -

The graphical entry contains a circle representing the current -magnitude, -a wind barb and arrow representing both magnitude and direction, and a -meter readout also representing both magnitude and direction. -

-

The user can choose to set the direction through the graphical entry -in either the "to" or the "from" direction by starting the operation in -the appropriate hemisphere. If you start the entry operation -within -90 degrees of either side of the arrow, then you are specifying the -"to" -direction. If you start the entry operation within 90 degrees of -either -side of the wind barb, then you are specifying the "from" direction. -

-

Clicking or dragging in the graphic entry will set the magnitude and -direction, if the vector -edit mode is set to Both. If the vector edit mode is set to -Magnitude -Only, then only the magnitude may be set. If the vector edit mode -is set to Direction Only, then only the direction may be set. The -direction is determined by the angle from the center of the -circle. -The magnitude is determined by the distance your cursor is from the -center -of the circle. -

-


-

-

Weather PickUp Value Dialog

-The Weather PickUp Value dialog allows the user to define a new weather -pick-up value, and optionally perform an Assign Value of the new value -on the spatial editor. The table below explains each control of this dialog: -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current ValueShows the current weather value for the dialog. The weather key -is a composite of all of the weather type entry frames. Note that -certain coverages, probabilities, and intensities may be combined into -a more significant key. For example, if you have Sct RW- in one -entry frame and Sct RW + in another, the resulting value will be the more -significant event, which will be Sct RW +. Coverages and probabilities are -also combined in the same manner.
Reset to No WeatherResets the entry fields back to No Weather.
Add New Weather Type Entry FrameAdds a new weather type entry frame to allow the user to -specify an -additional weather type.
Toggle Replace/Combine ModeIf the Assign Value button is pressed, the current weather -key is assigned -to the active edit area. In replace mode, any existing data will -be replaced in the active edit area. In combine mode, the new -weather -will be combined with any existing weather.
Add to sessionAdds the currently displayed value to the list of -user-defined session -values. This is useful to set up a sequence of pick up values -which -can later be accessed from the color -bar pull-down menu.
Edit DataRuns the "Assign Value" tool on the active edit area.
Weather TypeThe weather type field consists of No Weather, precipitation, -and obstructions -to vision. The weather type should always be chosen first.
Coverage/ProbabilityThe coverage and probabilities option menu contents depends -upon the -weather type chosen. The default -may be specified in the GFE configuration file for each weather -type.
IntensityThe intensity option menu contents depends upon the weather -type chosen. -Some weather types don't have a valid intensity and thus the -<NoInten> -must be chosen. The default -may be specified in the GFE configuration file for each weather type.
VisibilityThe visibility option menu is fixed for all weather -types. The -selection of <NoVis> indicates that no visibility has been -defined.
Optional AttributesThe list of optional attributes is weather type -dependent.
-
-

-

The user may also control the Weather/Discrete -Combine Mode by using the Combine pushbutton. -"Description" information about each entry is available through the GFE -> Viewing -Preferences -> Wx/Discrete: Show Description menu option.
-

-

Discrete PickUp Value Dialog

-The Discrete PickUp Value dialog allows the user to define a new -discrete -pick-up value, and optionally perform an Assign Value of the new value -on the spatial editor. The table below explains each control of -this -dialog: -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current ValueShows the current discrete value for the dialog. The -discrete -key is a composite of all of the discrete value frames. For -non-overlapping, -there is only 1 frame available.
ResetResets the entry fields back the default value (1st entry -defined in -the discrete key definition in serverConfig)
Add New Entry FrameAdds a new weather type entry frame to allow the user to -specify an -additional discrete type. This may not appear for all weather -elements since some weather elements are not defined to allow for -overlapping types.
-
Toggle Replace/Combine ModeIf the Assign Value button is pressed, the current discrete -key is -assigned to the active edit area.  In replace mode, any existing -data -will be replaced in the active edit area.  In combine mode, the -new -discrete value will be combined with any existing discrete value.
Add to sessionAdds the currently displayed value to the list of -user-defined session -values. This is useful to set up a sequence of pick up values -which -can later be accessed from the color -bar pull-down menu.
Edit DataRuns the "Assign Value" tool on the active edit area.
Base Type
-
This is the base type of the -discrete value.
-
Aux Data
-
The aux data field is -optional. If enabled, only a certain width entry is -allowed. The purpose for the aux data is specific to the discrete -element.
-
-

-
-

-

The user may also control the Weather/Discrete -Combine Mode by using the Combine pushbutton. -"Description" information about each entry is available through the GFE --> Viewing Preferences -> Wx/Discrete: Show Description menu -option.
-
-

-
-
-
- -

-Delta Value Dialog

-The Delta Value Dialog is opened from the -Edit -Actions Dialog. It allows you to set the delta value of the -AdjustValue_Up -and AdjustValue_Down tools. Optionally, you can adjust the grid values -down or up by clicking on the "Adjust Down" or "Adjust Up" buttons. -

Type in the delta value and click OK or use the slider to set the -value. -

-

At any time you can click Cancel to cancel the operation and close -the -dialog. -

-
-
- -
-
-
-
- -

-Edit Area and Query Dialog

-Opens a dialog that allows you to load previously defined edit areas, -and -construct query expressions that create edit areas. One way to -define -an edit area is by defining a query. A query is a mathematical -expression -that describes one or more weather conditions (T < 32, Rain, Hail, -Snow, -and so forth). -

When a query is applied against a particular grid, its weather -conditions -are searched for. The result is a new edit area that consists of all -the -areas that match the query's weather conditions. -

-


-

-

Main Window

-There are several windows and buttons on the Edit Area and Query -Dialog: -
    -
  • Query -- The query expression.
  • -
  • Groups -- Edit Area Group(s). You may select which edit -areas you -wish to view in the Edit Areas window. Edit Areas that are not part of -any group are displayed under "Misc".
  • -
  • Edit Areas -- Named edit areas that have been saved.
  • -
  • Weather Elements -- Weather elements that can be used in -the -query -expression.
  • -
  • Active Edit Area -- Displays the current edit area. If it -is a query, -the expression will be shown. If it is simply polygons, the word -"Polygon" -will be displayed.
  • -
  • Clear Query -- Clears the query expression.
  • -
  • Recall Query -- Displays a list of past queries (limit 10). -If -chosen, -the query will appear in the Query window. The list will not contain -duplicates.
  • -
  • Undo Edit Area -- Reverts to previous edit area.
  • -
  • Convert to Location -- If the current edit area is defined -by a -query, -converts it to a polygon. After this operation, the edit area is a -static -set of points and will not change with the data.
  • -
  • Submit -- Submit the query for evaluation. Clears the query -expression.
  • -
  • Cancel -- Cancel and close the dialog.
  • -
-

-Save/Delete Menu

-The Save/Delete Menu at the top of the Dialog allows you to: - -

-Pickup Value Menu

-
The PickupValue Menu at the top of the Dialog -lists -each of the weather elements that are currently loaded into the -GFE. -Selecting one of these will paste its current pickup value into the -query -area. -
-

Wx/Dis Values Menu

-
-
The Wx/Dis Values brings up a menu with the -weather -and discrete weather elements listed. Choosing one of these will -bring up the Weather Value Dialog or Discrete Value Dialog. For -weather -elements, the user specifies the type, coverage/probability, intensity, -visibility, and any optional attributes. The edit area string will -then contain the "ugly" string for the comparison. See the Weather -Pick Up Dialog for more details on how to use the dialog.
- -

For Discrete elements, the user -specifies -the key. See the Discrete Pick Up -Dialog more more detailed on how to use the dialog. -

-

Set Discrete Dialog
-
-

-

Create Mask Menu

-
The Create Mask menu entry brings up a menu with -the weather and discrete weather elements listed. Choosing one of -these will bring up the Weather Contains or Discrete Contains -Dialog. -These dialogs allow you to choose a combination of various values and -the -query will include all grid points that contain ANY of the items -selected -in the dialog.
-
For weather elements, the dialog presents choices -for the coverages, types, intensities, visibilities, and attributes.
-


-

-

For discrete, the options are simply a list of the possible discrete -types: -

-


-

-

Components of Queries

-You can create a new query by entering one or more weather conditions. -Query values can combine any number of the following: -
    -
  • Named Edit Areas
  • -
  • Weather Element relational­expressions
  • -
  • Weather type relational­expressions
  • -
-Queries are written in numerical python, and thus the syntax is similar -to smart tools and smart -initialization. An edit area and a weather element are -basically -Python variables. An edit area is represented by a mask of bits -which -make up the edit area. A weather element is a numerical grid for -SCALAR, a tuple of two numerical grids for VECTOR, and a grid and a key -for both WEATHER and DISCRETE. -

Parenthesis are very important when using the OR ('|') or AND -('&') -operators since these operators have a high order of precedence. -The following statements are not equal: -

-
-

T > 32 | Topo > 7000 -
-(T > 32> | (Topo > 7000)

-
-

The following are valid queries for SCALAR data: -
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - -
T > 32Temperature greater than 32
T < 32Temperature less than 32
T == 32Temperature equal to 32 (exactly)
T != 32Temperature not equal to 32 (exactly)
T >= 32Temperature greater than or equal to 32
T <= 32Temperature less than or equal to 32
-

-

More complicated queries may also be performed such as the following -on SCALAR data (note that parenthesis must be provided): -
-
- - - - - - - - - - - - - - - - - - - -
T - Td > 10Dew Point Depression is greater than 10
T - 10 > TdDew Point Depression is greater than 10
(QPF > 0.10) & (PoP < 70)QPF greater than 0.10" and PoP less than 70%
(T > 32) & (Topo > 5000) & (Topo < 7000) -& ColoradoTemperatures less than 32, with topography between 5000ft and -7000ft, -in the state of Colorado.
-

-

Vector queries can be done on the magnitude and the direction -component, -note that Wind[0] refers to the magnitude and Wind[1] refers to the -direction, -as in smart initialization and smart tools: -
-
- - - - - - - - - - - - - - - -
Wind[0] > 25Wind speed greater than 25
(Wind[0] > 25 & (Wind[0] < 40)Wind speed between 25 and 40
(Wind[0] > 25 & (Wind[1] > 90 & (Wind[1] < -180)Wind speed greater than 25, with the direction between 90 and -180.  -The direction is the "FROM" direction.
-

-

Weather and Discrete queries are performed using the mask -function. The mask button on the dialog simply saves you from -typing -the word mask. The mask function is in this form: -mask(weatherElementName, -stringMatch, regExpressionYesNo). Normally you don't provide a -regular -expression so the mask is in this form: mask(weatherElementName, -stringMatch). Here are some examples of using the mask function -for -Weather and Discrete: -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
mask(Wx, ":R:")Wx  with Rain (R), with any coverage, visibility, -attributes.
mask(Wx, ":R:") | mask(Wx, ":RW:")Wx  with Rain (R) or Rain Showers (RW)
mask(Wx, "Sct:RW:")Wx with Scattered Rain Showers
mask(Highlights, "WntrStmWRN")Highlights with Winter Storm Warning
mask(Wx, "Sct:RW:+:<NoVis>")Wx with Scattered Heavy Rain Showers, No Visibility
mask(wx, "^Sct:RW:+:<NoVis>:\Z", 1)Wx with ONLY Scattered Heavy Rain Showers, No Visibility. -Note that -this is regular expression syntax with the '^' matching the beginning -of -the phrase and the '\Z' matching the end of the phrase.
-

-

The mask function uses substring searches of the keys to determine -what -grid points match the query. The PickUp Value and Wx/Dis Values -menus -provide a quick way to enter the pick up value or an exact match for -weather -and discrete weather elements. Note that since substring -comparisions -are performed, providing a query of mask(Wx, "Sct:RW:+:") will match -any -grid point that has Sct:RW:+: in it, so it will also match grid points -that have a weather key of: -"Iso:T:<NoInten>:<NoVis>:^Sct:RW:+:<NoVis>".  -The only way to find grid points that ONLY have the Sct:RW:+: in it -without -others is to use the regular expression option as shown above in the -table. -

-

The create mask menu option provides an easy way to select a set of -Wx or Discrete characteristics to search. -

-

Combining queries are performed through the "|" OR and -"&" -AND operators. Since the syntax in the query is numpy, there -are many other possibilities for the syntax. Here is an example -of -using the python absolute() function to calculate the absolute value of -an expression. In this case, we are selecting all T grid points -that -differ from the AVN model greater than 5 degrees: -

-

absolute(T - T_SFC__AVN) > 5 -

-

The name in the query, e.g., T, can be one of several forms: -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
TRefers to T_SFC_Fcst_00000000_0000 (Fcst database)
T_3KRefers to T @ 3K, for the Fcst database
T_SFC__NAMRefers to T @ SFC, from the latest run of the NAM model
T_SFC__NAM_20030310_1200Refers to T @ SFC, from the March 10th, 12z, run of the NAM -model
T_SFC_BOU_GRID__NAMSame as T_SFC__NAM (The BOU_GRID is optional)
T_SFC_BOU_GRID__NAM_20030310_1200Same as T_SFC__NAM_20030310_1200 (The BOU_GRID is optional.)
-

-

-
- -

-Save Edit Area Dialog

-The Save Edit Area Dialog allows you to name -and save the Active Edit Area. You may also designate which Edit Area -Group(s) -will include the Edit Area. -

To save the Active Edit Area, type a name in the Identifier box. -Select -the Edit Area Group(s) that are to include the Edit Area. If you want -the -area included in a new Group, simply type in the New Group name. No -Group(s) -need be selected -- including the Edit Area in Groups is optional and -can -be changed later using this or the -Save -Edit Area Groups Dialog. Click "Save" to save the Edit Area. You -may -Cancel the dialog at any time. -

-


-

- - -
- -

-Delete Edit Area Dialog

-The Delete Edit Area Dialog allows you to -delete -a saved Edit Area. -

To delete a saved Edit Area, click on its name which will appear in -the Identifier box and click "Delete." You may Cancel the dialog at any -time. -

-


- - -
- -

-Save Edit Area Group Dialog

-The Save Edit Area Group Dialog is -accessible -from the Edit Area and Query Dialog. -It allows you to name and save an Edit Area Group. You will designate -which -Edit Area(s) will be included in the Edit Area Group. These Groups can -then be used to filter the display in the Edit -Area and Query Dialog. or to limit the user selections when -generating -products. -

To save an Edit Area Group, type a name in the Identifier box or -select -a Group from the left-hand list box. Select/deselect the Edit Area(s) -that -are to be included the Edit Area Group. Click "Save" to save the Edit -Area -Group. -

-

You may Cancel the dialog at any time.

- - -
-

-Delete Edit Area Group Dialog

-The Delete Edit Area Group Dialog is -accessible -from the Edit Area and Query Dialog. -It allows you to delete an Edit Area Group. -

To delete a saved Edit Area Group, click on its name which will -appear -in the Identifier box and click "Delete Group." The Edit Areas included -in the Group will NOT be deleted unless you specifically choose to do -so -by checking the "Delete All Areas within Group" button. These areas -will -also then be deleted from any other groups in which they belong. If the -"With Verification" button is on, a dialog will appear for each Edit -Area -deleted so you can verify that you want it deleted. -

-

You may Cancel the dialog at any time. -

-


-
-

-

-
-
Back To Top -Back To TOC
- - - - diff --git a/cave/com.raytheon.viz.gfe/help/CHANGES.html b/cave/com.raytheon.viz.gfe/help/CHANGES.html deleted file mode 100644 index 96c1035cb7..0000000000 --- a/cave/com.raytheon.viz.gfe/help/CHANGES.html +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - GFESuite Release Notes - - -
-

GFESuite Release Notes

-
-Note: This file is generated for "real" releases. - - diff --git a/cave/com.raytheon.viz.gfe/help/CONFIG.html b/cave/com.raytheon.viz.gfe/help/CONFIG.html deleted file mode 100644 index 96c1035cb7..0000000000 --- a/cave/com.raytheon.viz.gfe/help/CONFIG.html +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - GFESuite Release Notes - - -
-

GFESuite Release Notes

-
-Note: This file is generated for "real" releases. - - diff --git a/cave/com.raytheon.viz.gfe/help/CarSnowAmt.html b/cave/com.raytheon.viz.gfe/help/CarSnowAmt.html deleted file mode 100644 index 534a935dc4..0000000000 --- a/cave/com.raytheon.viz.gfe/help/CarSnowAmt.html +++ /dev/null @@ -1,36 +0,0 @@ - - - - - CarSnowAmt - - - - - - -CarSnowAmt -
-
-Overview -
-
-This tool uses upper level temperatures, -vertical motion, and relative humidity to calculate a snowratio. The tool algorithm uses a blend of -approaches based on the findings Dube`(2003), and also in part Waldstreicher(2001), and the top-down -microphysical diagnostics of Baumgardt(2001). The derived snowratio is then multiplied by the QPF -field to yield a snow amount. The tool is capable of producing snowratios from 0 to 25:1. -Highest snowratios occur when vertical motion maxima coincide with snow production zone -(i.e. temperatures between -12 and -18 Celsius). - - diff --git a/cave/com.raytheon.viz.gfe/help/CheckTandTd.html b/cave/com.raytheon.viz.gfe/help/CheckTandTd.html deleted file mode 100644 index a59048ebbd..0000000000 --- a/cave/com.raytheon.viz.gfe/help/CheckTandTd.html +++ /dev/null @@ -1,141 +0,0 @@ - - - - - CheckTandTd - - - - - - -CheckTandTd -
-
-Introduction -
-
-The -CheckTandTd procedure is intended to -be a final check on the -Temperature (T) and Dew Point (Td) grids. The tool checks that the -following meteorological conditions are maintained throughout the -forecast database: -
-
-MinT <= -T <= MaxT -
-
-Td <= -T -
-
-Optionally, -the tool can be run to show the time and area over which the above -conditions are violated. -
-
-
-How -the Procedure Works -
-
-The -CheckTandTd procedure begins by retrieving all of the MinT, MaxT, T, -and Td grid inventory. These timeRanges are used later throughout -the code, and allow the tool to work in any time zone. Next, each -MinT grid and all T grids that correspond to the associated MinT -timeRange are retrieved. Using numpy, each T grid is -compared with the MinT grid to identify where T grid points are lower -than the MinT grid. A temporary grid is created (named TLessThanMin) -that highlights where this condition is met by flagging the grid with -a value of one (1). All other points are set to zero. An example of -the resulting “Highlight” grid is shown in Fig. 1. The points -that are set to one (appearing red by default) are used to create an -editArea, whereby a SmartTool can be called to set the T grid points -to the MinT grid values where T < MinT. -
-
-
-CheckTandTd grid -
-
-Fig. -1. Example of theTLessThanMin “Highlight” grid, with grid points -shaded in red where the T is less than the corresponding Minimum T. -
-
-An -identical set of steps is performed on the T grids again, but in this -case the MaxT grid is used for comparison, and a temporary highlight -grid (named TGreaterThanMax) is created. All grid points with T -greater than MaxT at the same point and time are used to make the -editArea. A different SmartTool is called to set the T grid points to -the MaxT grid values where T > MaxT. -
-
-Finally, -a third check is performed to ensure that the Td grids are always at -or below the T grid for the same point and time period. The same -steps are performed as in the previous two checks, and the resulting -highlight grid (TdGreaterThanT) shows where the Td grids are greater -than the T grids. Anywhere/time the Td grid points are greater than -the T grid, a SmartTool is called to adjust the Td to the T value. -
-
-
-Running -the Procedure -
-
-When -the Procedure is envoked, users are presented with two options: -“Check Only” and “Force” (see Fig. 2). The CheckOnly option -will not modify any grids. It will simply generate the respective -highlight grids at times where the T or Td grids violate the -meteorological checks. Forecasters may examine these grids to get a -better idea of where and when the grids are inconsistent. -
-
-
-CheckTandTd User Interface -
-
-Fig. -2. The CheckTandTd Tool GUI.
-
-
-The -second option, Force, will run the set of SmartTools that maintain -balance between the MinT, MaxT and T grids and between the T and Td -grids. Selecting this option and running the tool will likely cause -many T grids to be modified. Any grids that are locked by other -forecasters will, of course, not be modified, so it is important that -you make sure the entire set of T and Td grids are saved (unlocked) -before running this tool. -
-
-No -special configuration is required with this tool. - - diff --git a/cave/com.raytheon.viz.gfe/help/Collaborate_PoP_SnowAmt_QPF.html b/cave/com.raytheon.viz.gfe/help/Collaborate_PoP_SnowAmt_QPF.html deleted file mode 100644 index 27d2476176..0000000000 --- a/cave/com.raytheon.viz.gfe/help/Collaborate_PoP_SnowAmt_QPF.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - - Collaborate_PoP_SnowAmt_QPF - - - - - - -Collaborate_PoP_SnowAmt_QPF -
-
-Introduction -
-
-With the introduction of IFPS 11, the PoP, -SnowAmt, and QPF grids are now floating, i.e., they are no longer fixed to specific 6 or 12 hour intervals. -While this change allows for more flexibility in forecast preparation, it also creates two key problems -for forecasters. First, the duration of the PoP, SnowAmt, and QPF grids now varies considerably from -office to office, making the intersite coordination of these elements much more difficult. Second, the -NDFD Integrated Work Team has recommended that the graphics for these elements still need to be valid -for fixed durations (12 hours for the PoP graphics and 6 hours for the SnowAmt and QPF graphics). -

-The Collaborate_PoP_SnowAmt_QPF procedure addresses both of these forecast issues by creating fixed 12-hour -PoP (PoP12hr), 6-hour SnowAmt (SnowAmt6hr), and 6-hour QPF (QPF6hr) grids based on the values contained in -the floating PoP, SnowAmt, and QPF grids. These new grids may then be used for the purposes of intersite -coordination as well as web graphic generation. -

-In accordance with the NDFD, PoP12hr grids are created at 12-hour intervals through 7 days, QPF6hr grids -are created at 6-hour intervals through 72 hours, and the SnowAmt6hr grids are created at 6-hour intervals -through 36 hours. -

-The procedure calls several Smart Tools which populate the PoP12hr, SnowAmt6hr, and QPF6hr grids with -data from the floating PoP, SnowAmt, and QPF grids. The getMaxGrid Smart Tool reads the floating PoP -grids and assigns the maximum PoP value for each 12-hr period to the PoP12hr grids. The getSumGrids Smart -Tool is used to sum the SnowAmt and QPF grids into the SnowAmt6hr and QPF6hr grids. Note that these two -Smart Tools are designed to be called from a procedure and will generate an error if run interactively from -the Edit Actions dialog. A third SmartTool, MakeTmpGrid, is a generic SmartTool for creating a temporary -grid from the active grid. This is used in this procedure to copy and fragment the QPF and SnowAmt grids. -The procedure deletes these temporary grids when they are no longer needed within the tool.
-
-
-
-How -the Procedure Works -
-
-All of the floating PoP, SnowAmt, and QPF -grids have been created before running the procedure/tools. The PoP12hr, SnowAmt6hr, and QPF6hr elements -exist in GFE.

-After creating and saving the floating PoP, SnowAmt, and QPF grids, the forecaster need only run the -Collaborate_PoP_SnowAmt_QPF procedure once to generate the PoP12hr, SnowAmt6hr, and QPF6hr grids needed -for intersite coordination. -

-When the forecaster runs the procedure, he/she is presented with a dialog box that allows a choice of -"All" or "Selected Time". If All is chosen, the procedure will generate the collaboration grids over -preset time ranges. These time ranges begin with the current time and extend out to 192 hours for the -PoP12hr grids, 60 hours for the SnowAmt6hr grids, and 96 hours for the QPF6hr grids. These ranges are -longer than the required minimum collaboration times to account for the different times during the day -when new grids may be added on to the end of the forecast database. If Selected Time is chosen, only -grids that intersect the active time selection in the grid manager will be used to compute PoP12hr, -SnowAmt6hr, and QPF6hr grids. Regardless of which option is selected, the procedure checks for the -existence of the source grids so errors will not be generated if grids are missing from the end of the -time range. Errors are generated if the floating grids are missing within a selected time range. -

-Notable Methodology/Assumptions Used
-When the Collaborate_PoP_SnowAmt_QPF procedure is run by the forecaster, the floating SnowAmt and QPF -grids are first copied to two temporary elements, tmpSnowAmt and tmpQPF. The tmpSnowAmt and tmpQPF grids -are then automatically fragmented before being used by the getSumGrids Smart Tool to create the SnowAmt6hr -and QPF6hr grids. The usage of the temporary elements in this process allows the original floating SnowAmt -and QPF grids to be preserved; the fragmenting ensures that no tmpSnowAmt grid overlaps multiple SnowAmt6hr -grids/no tmpQPF grid overlaps multiple QPF6hr grids prior to running the getSumGrids tool. This latter -condition is important because such overlapping grids would cause the tool to produce inaccurate SnowAmt6hr -and QPF6hr grids. Once the getSumGrids Smart Tool has executed and the SnowAmt6hr and QPF6hr grids have been -produced, the temporary elements are automatically deleted. -

-To better illustrate the significance of fragmenting the tmpSnowAmt and tmpQPF grids, let=s consider a -simple example utilizing 3 forecast tmpSnowAmt grids. For the sake of simplicity, we will assume that the -default duration for the tmpSnowAmt grids is 3 hours, and that both the tmpSnowAmt and SnowAmt6hr grids are -based on Greenwich Mean Time (GMT). Note that the following also applies to tmpQPF even though it is not -discussed here. The forecast tmpSnowAmt grids are as follows:

-Grid 1 - Valid 12-15 GMT, amount = 0" throughout
-Grid 2 - Valid 15-21 GMT, amount = 4" throughout
-Grid 3 - Valid 21-24 GMT, amount = 0" throughout
-

-If these grids are not fragmented before running the getSumGrids Smart Tool, the tool will see a -tmpSnowAmt grid with 4" accumulations that overlaps both the corresponding 12-18 GMT and 18- 24 GMT -SnowAmt6hr grids - and will therefore assign 4" accumulations to both SnowAmt6hr grids. This in turn -would imply an event total of 8" - not exactly what had been intended by the forecaster. -

-On the other hand, fragmenting the tmpSnowAmt grids before running the getSumGrids Smart Tool results -in the following grids as input to the tool:

-Grid 1 - Valid 12-15 GMT, amount = 0" throughout
-Grid 2 - Valid 15-18 GMT, amount = 2" throughout
-Grid 3 - Valid 18-21 GMT, amount = 2" throughout
-Grid 4 - Valid 21-24 GMT, amount = 0" throughout


-Note that the 4" tmpSnowAmt grid valid from 15-21 GMT has been split into two three-hour grids containing -values of 2" throughout. This is because GFE assumes a constant snowfall rate when fragmenting the grids. -Naturally, this isn't always a valid assumption, but its currently the only one available for the software -to work with. -

-Executing the getSumGrids Smart Tool after fragmenting results in 2" accumulations in the corresponding -12-18 GMT and 18-24 GMT SnowAmt6hr grids, which would imply an event total of 4" - thereby matching the -original intent of the forecaster. -
- - diff --git a/cave/com.raytheon.viz.gfe/help/ColorBarDialogs.html b/cave/com.raytheon.viz.gfe/help/ColorBarDialogs.html deleted file mode 100644 index 348da2a791..0000000000 --- a/cave/com.raytheon.viz.gfe/help/ColorBarDialogs.html +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - Color Bar Dialogs - - - -

-Color Bar Dialogs

-The following dialogs are invoked directly or indirectly from the Button -Bar: - -The SetColorTableRange Dialog and the -Color Table Brightness Dialog -are invoked via a MB3 pop-up menu from the Color Bar. -

-


-

-Set Color Table Range Dialog

-The Set Color Table Range Dialog is accessed from the MB3 pop-up menu on -the color bar. Selecting Select Range... displays a dialog that allows -you to set the range of the current color table. To set a new -range, move one or both of the horizontal slider widgets to define your -new range and click OK. The same set of colors will now be defined -over this new range, thus modifying the color table temporarily. -

Note that each weather element saves the state of the current color -table. If you modify a color table, it will remain in that state -until explicitly changed or until the parm is unloaded from the GFE. -In the latter case, the default color table will be used the next time -that weather element is loaded. Currently, you are not allowed to -preserve color table changes of this type. -

-
-

-


-

-Color Table Brightness Dialog

-The Color Table Brightness Dialog is accessed from the MB3 pop-up menu -on the color bar, the "Change Color Table To..." entry on the Spatial -Editor Legends, and the pop-up menu on the Pickup -Value Dialog. -

The color table brightness may be varied in 10% steps from 0 to 100%. -By default, the brightness is set to 100% upon selection of a new color -table. -

-
-


-
Back To Top
- - diff --git a/cave/com.raytheon.viz.gfe/help/ColorDialogs.html b/cave/com.raytheon.viz.gfe/help/ColorDialogs.html deleted file mode 100644 index 301ee4e6bb..0000000000 --- a/cave/com.raytheon.viz.gfe/help/ColorDialogs.html +++ /dev/null @@ -1,468 +0,0 @@ - - - - - - - Color Chooser and Color Table Editor - - -

-Color Chooser and Color Table Editor Dialogs

-The color chooser and color -table editor dialogs are used to define custom colors and color -tables -for the GFE. -

-
-

Color Chooser -Dialog

-


-The Color Chooser Dialog is invoked from the GFE when you depress -MB3 over the graphic contour label in the spatial editor. -When -you MB3 graphic contour label, select the following sequence from -the pop-up menus: 'Change Color' -> 'Choose Color'. -

-
-

Color -Chooser -Dialog

-
-
-

-
-


-The Color Chooser Dialog can be used to change a single-colored -graphical feature (i.e., a contour). -

-

The Color Chooser Dialog consists of Hue, Saturation and Value (same as Brightness) -entry fields, a color wheel, a color swatch to indicate the old or -current color (bottom left corner), a color swatch to reflect the selected color, an "OK" button -and a "Cancel" button. The old color swatch (left) indicates the current -contour color until the 'OK' or 'Cancel' button is selected.

-

-

If you MB1 over the color wheel to the desired color, the circle -marker -is updated to the cursor location. The selected color is echoed -in -the 'NEW' color swatch and the Hue, Saturation and Brightness sliders -move -to the appropriate values corresponding to your selected color.

-

For advanced users, in A2, -an option to select color values numerically is also available as entry fields to the right -of the Hue/Saturation/Value entry fields and Color Name entry field that accepts color -names in hex. Also new in A2, the user now has the option of -selecting the general color family from the Palette row of colors along the bottom of the -dialog display. Lastly, the pipette icon allows the user to set the color by sampling it from -anywhere on the screen.

-

If you want to change your graphical-feature, a.k.a. contour, to the new -color, -select the 'OK' button. Otherwise the 'Cancel' button dismisses -the -Color Chooser without change to your graphical contour. -

-

A new color can also be selected using the Hue, Saturation or -Value entry fields. -

-

The various components of the ColorChooser are shown in the -following -table: -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ComponentDescription
Hue Entry FieldUsing MB1 or MB2, the Hue up/down arrows can be moved from 0 to 360 -degrees. Alternately, the new value can be manually typed into the field followed by Return. -When the Hue value is modified, the circle marker on the color wheel will -correspond to the Hue value in. -Simultaneously, the new color will be indicated in the new color -swatch.
Saturation Entry FieldUsing MB1 or MB2, the Saturation up/down arrows can be moved from 0 -to 100 percent. Alternately, the new value can be manually typed into the field followed -by Return. When the Saturation value is modified, the circle marker on -the color wheel will move along the radius indicating the appropriate color -with 0 percent saturation representing white. -Simultaneously, the new color will be indicated in the new color swatch.
Value Entry FieldUsing MB1 or MB2, the Brightness up/down arrows can be moved from 0 -to 100 percent. Alternately, the new value can be manually typed into the field followed -by Return. When the Brightness value is modified, the color wheel and -the new color swatch reflects the brightness selection with 0 percent -brightness representing black. Please note that there may be a -short delay in updating the color wheel.
RedRepresents numeric value for the amount of red within the color. - Can be either manually - typed in, or selected using MB1 or MB2 to move up/down arrows. The color wheel - and the new swatch will be modified simultaneously. Accepts values between 0 and - 255.
GreenRepresents numeric value for the amount of green within the color. - Can be either manually - typed in, or selected using MB1 or MB2 to move up/down arrows. The color wheel - and the new swatch will be modified simultaneously. Accepts values between 0 and - 255.
BlueRepresents numeric value for the amount of blue within the color. - Can be either manually - typed in, or selected using MB1 or MB2 to move up/down arrows. The color wheel - and the new swatch will be modified simultaneously. Accepts values between 0 and - 255.
Color NameRepresents the hex value for the selected the color. - This field is typed in manually and must be a valid color value. - The color wheel - and the new swatch will be modified simultaneously.
PaletteAllows the selection of the color family, i.e. shade. - MB1 on the selected swatch to select the shade. - The color wheel - and the new swatch will be modified simultaneously.
Pipette IconAllows color sampling from the screen. - MB1 on the pipette icon, then anywhere on the screen to select the color. - The color wheel - and the new swatch will be modified simultaneously.
ColorWheelContains a small circle showing the current value specified -by the -sliders. The color wheel will dim and brighten as the Brightness -slider is changed.
OLD SwatchThe previous color (current color when the dialog is first -presented) -is shown.
NEW SwatchThe new chosen color is shown.
-
-

-

-
-

ColorTableEditorDialog

-The ColorTableEditor Dialog is invoked from the GFE when you MB3 over -the color bar spectrum. Select the following sequence from the -pop-up -menus: 'Change Color Table to'->'Edit Color -Table'. The dialog -can also be opened by clicking MB3 on the contour map of an element -and selecting Edit Colors... -

The ColorTableEditor is used for Scalar and Vector data types. -There is no editor currently available for the Weather data type; the -Weather -data type is configured through the gfe -configuration file weather color table definitions. The -ColorTableEditor -for Discrete data types use the same data source as Scalar/Vector, but -its operations are different. Generally it is a good idea to -separate -out color tables for Scalar and Vector, from color tables for Discrete. -
-

-

Scalar/Vector Color Table Editing

-


-

-
-

ColorTableEditor -Dialog (Scalar/Vector)

-
-
-

-
-The Color Table Editor Dialog can be used to create a new color -spectrum -for a multi-colored graphical feature (i.e., an image). -

The Color Table Editor contains a Color -Chooser -(without the old color swatch area). A color spectrum -appears -in the middle section of the dialog. The left and right -triangular -pointers are labeled with minimum and maximum numerical values -corresponding -to the weather product. The '>>' and '<<' buttons enable -the user -to move the pointers in an increment defined by the two entry -fields. -The top row of the dialog allows the user to select RGB or HSB color model. -The bottom half of the dialog contains several buttons that control the -operations performed on the spectrum: 'Interpolate', 'Undo', -'Revert', 'Save...', 'Delete...' and 'Office Save As' buttons. -The 'Fill' and 'Set' buttons appear to the right of the top and bottom -spectrum selection areas. Please note in AWIPS2 any changes are applied -automatically. The user has to exit and re-enter GFE should they accidentally -exit the color chooser without reverting. -

-

After a color is selected using MB1 (i.e., MB1 somewhere within the -spectrum) or the Color Chooser, -it is reflected in the rectangular color swatch. To modify -the spectrum with the selected color, MB1 over either the left or -right pointer. The triangular area will assume the color of the -color -swatch. With the MB1, the left or right pointer can be moved to -the -desired weather product value. -

-
Exercise 1 -

1. Make Temperature an image on the GFE.

-

2. From the color bar, MB3->Change Color Table To...'->Edit Color Table...'

-

3. Select a color using the Color -Chooser -portion of the Color Table Editor.

-

4. MB1 over the left pointer and move the pointer to -50 -degrees Fahrenheit. The left triangular pointer will assume the -color -of the selected color and the color swatch will assume the new color.

-

5. Slide the top arrow to 40 degree F location of the -spectrum.

-

6. MB1 over the right pointer and move the pointer to -50 -degrees Fahrenheit. The right pointer will now assume the color -of -the color swatch.

-

7. Select the '>' button. The left and right -pointers will -advance 1 degree F to the right.

-

8. Select the '<' button. The right and left -pointers -will decrease 1 degree F to the left.

-

9. MB1 over the desired color on the spectrum. The -color -chosen will be reflected in the color swatch.

-

10. MB1 on the right pointer. The right pointer will -now -assume the color in the color swatch.

-
-After completing Exercise 1, you can modify -the -selected portion of the spectrum (eq., area between 40 and 90 degrees -Fahrenheit) -with the buttons located on the top half, bottom half, and right of the dialog: 'Fill', -'Set', 'Interpolate', -'Undo', 'Revert', 'Save...', 'Delete...' or 'Office Save As...'. -

The various controls are described in the following table: -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ControlDescription
FillThe 'Fill' button, will fill the selected portion of the -spectrum.
SetThe 'Set' button, will set the selected value of the -spectrum.
InterpolateYou can linearly interpolate the area selected between the -pointers -with one of two linear interpolation methods: Red-Green-Blue -interpolation -(i.e., 'RGB Interpolation' button) or Hue-Saturation-Brightness -interpolation -(i.e., 'HSB Interpolation' button). -

The HSB interpolation will 'linearly' interpolate along the -shortest -angle of the color wheel indicated by the colors of the pointers. -The RGB interpolation will linearly interpolate along the 0-255 -color -intensity scale of red, green and blue between the colors of the -pointers.

-
UndoThe 'Undo' button will restore the previous spectrum.
RedoThe 'Redo' button will restore the previously undone spectrum.
RevertThe 'Revert' button will restore the original spectrum with -which the -Color Table Editor Dialog started.
Save'Save' saves the changes to the currently loaded color table.
Save As...'Save As' brings up a dialog from which the user may enter a -name of a -color table. The color table is stored under this name and the -Transient -color table in use is removed. 'Save' has an implicit -'Apply'. -You cannot save a Transient color table to EDEX.
Office Save As...'Office Save As' brings up a dialog from which the user may enter a -name of a -color table specifically for the office currently loaded.
Delete...You can 'Delete' an existing color table and it doesn't need -to be -the one that is displayed. A dialog will be displayed showing a -list -of names. Highlight or type in an identifier and enter -'Okay'. -You can delete Transient color tables that exist in you GFE and other -color -tables that are stored on the server. CAUTION:  -If you delete a spectrum that is being used by another user, their -spectrum -will revert to the default spectrum. Please consider carefully -before -using the 'Delete' button.
-

-
Exercise 2 -

1.  Do Exercise 1.

-

2.  Select the HSB color model, then click 'Interpolate'. The selected area of the -spectrum -will be linearly interpolated along the HSB color scheme.

-

3.  Select the RGB color model, then click 'Interpolate'. The selected area of the -spectrum -will be linearly interpolated along the RGB color scheme.

-

4.  Select 'Undo'. The selected area of the spectrum -will -be restored to the pre-interpolation state.

-

5.  Select 'Fill'. The selected area of the spectrum -will -be filled with the color in the color swatch.

-

6.  Select 'Undo'. The selected area of the spectrum -will -be restored to previous spectrum.

-

7.  Select 'Set'. The selected area of the -spectrum will -be set to the color you selected.

-

8.  Select 'Undo'. The selected area of the spectrum -will -be restored.

-

9.  Select 'Revert'. The original spectrum that you -began -with is restored.

-

10.  Select the RGB color model and click 'Interpolate'. The selected area of the -spectrum -will again be linearly interpolated along the RGB color scheme.

-

12.  Select 'Save'. The new spectrum will be saved to the currently - loaded color map.

-

13.  Select 'Save As...'. The 'Save Color -Table' -dialog is brought up and you are prompted for a name (i.e., identifier) -for the spectrum that you've just created.

-

14.  Select 'OK'. The new spectrum is now saved.

-

15.  Select 'Delete'. The 'Delete Color Table' -dialog -allows you to highlight the spectrum to be deleted or type in the -identifier. CAUTION: -If you delete a spectrum that is being used by another user, their -spectrum -will revert to the default spectrum. Please consider carefully -before -using the 'Delete' button..

-

16.  Click the X mark in the top right corner. The dialog will - exit, however all changes are applied automatically.
-
-

-
-

-Discrete Color Table Editing

-


-

-
-

ColorTableEditor -Dialog (Discrete)

-
-
-

DialogDiscreteColorTable

-
-The Discrete Color Table Editor Dialog can be used to create a new -color -spectrum for a multi-colored graphical feature (i.e., an image). -

The Discrete ColorTable Editor contains a Color -Chooser (without the old color swatch area). -A color spectrum appears in the middle section of the dialog. The -text label contains the selected weather product name and units. -In AWIPS2 all of the buttons on the Color Table Editor for Scalar/Vector are -available on the Discrete Color Table Editor. -

-

After a color is selected using MB1 click (i.e., MB1 somewhere -within -the spectrum) or the Color Chooser, -it is reflected in the rectangular color swatch. To modify -the spectrum with the selected color, MB1 click over the desired -discrete key. When you move the mouse over a "block" in the spectrum, -the value of that "block", i.e., the discrete key, will be -displayed.
-

-

Note that Discrete color tables and Scalar color tables should not -be shared. Discrete color tables that are saved to EDEX -contain exactly the same number of entries as the possible entries in -the defined Discrete key. For example, if a KeyTest element -contains exactly 3 colors and you reuse that color -spectrum for a scalar/vector weather element, then there will only be -three colors in that color table.
-

-

If a discrete color table has -been saved to disk, then the definition for the discrete weather -element is expanded, then the new entries will be assigned to "black" -until the color table editor is used to define these colors. The -original colors for the original set of discrete keys will remain -assigned.
-

- - diff --git a/cave/com.raytheon.viz.gfe/help/ConfigureTextProducts.html b/cave/com.raytheon.viz.gfe/help/ConfigureTextProducts.html deleted file mode 100644 index 7b61596b35..0000000000 --- a/cave/com.raytheon.viz.gfe/help/ConfigureTextProducts.html +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - configureTextProducts User's Guide - - -

-configureTextProducts User's Guide

-
February 14, 2012
-
-

-Table of Contents

-

-Overview

-

-Running the configureTextProducts Program

-

-Example Output

-
-
-

-Overview

-
The configureTextProducts program is a utility -that -is automatically run during installation and each time EDEX is started. -Normally it is not -needed to be run manually. The program automatically configures -the GFESuite set -of formatters based on the afos2awips.txt PIL/WMOID table. There are -other options available with configureTextProducts as well. You can run -it to delete the templated formatters, list the pil/wmoid information -for -your site, or list the pil/wmoid information for all sites. -The information output is sent to stdout and may be rerouted to a file -if desired. The create and delete modes also modify files on disk.
-
-The configureTextProducts program can be used to specify an alternate -afos2awips.txt file rather than the official file. This -capability is normally only used for testing.
-
-
-
-

-Running the configureTextProducts Program

-
This program is run from the GFESuite bin -directory. The command line syntax is:
-
-
configureTextProducts -m MODE [--template=alterateA2AFile] -[--help] [--host]
-
-
-
A sample command line is:
-
-
configureTextProducts -m CREATE
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
Option SyntaxDescription
configureTextProducts -m CREATECreates the formatter templates based on pil/wmoid -information in the afos2awips.txt table.
configureTextProducts -m DELETEDeletes the formatter templates based on pil/wmoid -information in the afos2awips.txt table. This is normally used when -changing site identifiers (for purposes of service backup) to clean out -irrelevant products.
configureTextProducts -m INFODisplays the PIL/WMOID table for each GFE product for the -configured site.
configureTextProducts -m ALLINFODisplays the PIL/WMOID table for each GFE product for ALL -known sites.
configureTextProducts -m mode --template -a2aFile
-
Performs the "mode" indicated, -and uses the alternate afos2awips.txt file identified as "a2aFile".
-
-
-
- - diff --git a/cave/com.raytheon.viz.gfe/help/CopyFromModel.html b/cave/com.raytheon.viz.gfe/help/CopyFromModel.html deleted file mode 100644 index 01d0c6bda4..0000000000 --- a/cave/com.raytheon.viz.gfe/help/CopyFromModel.html +++ /dev/null @@ -1,71 +0,0 @@ - - - - - CopyFromModel - - - - - - -CopyFromModel -
-
-Overview -
-
-CopyFromModel is a simple -tool to allow you to copy model data into a particular edit area, possibly while -time-shifting the model data. -

-If you use the "Populate" method to fill in a Fcst grid, the ENTIRE model grid is -copied into your Fcst grid. Likewise, if you use the grid manager, button-3 menu -items of "copy" and "paste", the ENTIRE model grid is copied into your Fcst grid. -With this tool, if an edit area is active - it will only copy the model grid into -the specified edit area - NOT the entire grid. If no edit area is active - it -copies the entire grid. You can specify that a "taper grid" be used to smooth-in -your changes over a 5-gridbox band if you desire - so that there are not abrupt -gradient problems near the edge of your edit area. In addition, you can specify -a model "hour offset" so that you can copy the data from other model hours into -the hours of your Fcst grid. -

-If the timerange of the grid you are editing contains more than one model grid, -the model grids are averaged (in a time-weighted sense) before they are copied -into your Fcst grid. However, for QPF and SnowAmt, the model values are -accumulated - so that your Fcst grid will contain the total accumulation of -the model grids during the time period of your Fcst grid. For PoP grids, the -maximum model value is copied into your Fcst grid - so that it remains consistent -with the "floating PoP" concept. For Wx grids, it seems to read the "last" model -Wx grid and copies that into your Fcst grid - but I think you are crazy if you -use this tool for Wx grids. -

-If you use the "hour offset" feature, a negative offset means to read model data -from "earlier". For example, if you have a Fcst grid with a timerange of 12-15Z, -and you say to copy from the GFS Model with an offset of -6, it will read the GFS -model grids from 6-9Z and copy them into your Fcst grid (and, again, only in the active -edit area, if you have one defined). A positive offset means to read model data from -"later". For example, and offset of 6, with a Fcst grid timerange of 12-15Z, will -copy model data from 18-21Z. -

-This is a SmartTool - and, thus, it only operates on existing Fcst grids - so in -that sense it differs from the "Populate" or "Copy/Paste" methods which can -"create" grids for you. You must create a grid (possibly "from scratch") before -you can run this tool. -

-If you run the tool on multiple grids (i.e., with a selected time range), the -"hour offset" is applied separately to each grid. For example, with a -3 -"hour offset", a Fcst grid from 12-15Z will read model data from 9-12Z, while a -Fcst grid from 15-18Z will read model data from 12-15Z.
- - diff --git a/cave/com.raytheon.viz.gfe/help/EGTEditAreaActions.html b/cave/com.raytheon.viz.gfe/help/EGTEditAreaActions.html deleted file mode 100644 index 377b561d5e..0000000000 --- a/cave/com.raytheon.viz.gfe/help/EGTEditAreaActions.html +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - Edit Area Actions - - -Edit Area Actions -

Draw -a Freehand Edit Area -

Use the Select Points tool to define an Edit Area -by hand.  For more information see the section Define -an EditArea by Hand in the GFE Training Guide. -

Select -an Edit Area that includes four different forecast  zones of your -choice. -

There are several way to accomplish this, but -the easiest is to select it from one of the cascading menus found in the -Main Menu bar, EditAreas->Zones->[zone name].  -Note that to accumulate the edit areas, you will need to put the Spatial -Editor into UNION mode by selecting the "+" from the button labelled "=".  -For more detailed information, see the section Loading -Named Edit Areas in the GFE Training Guide. -

Select -an Edit Area based on a given elevation. -

Unless your site manager has already set up edit -areas based on elevation, you will need to do this from the Edit Area Query -Dialog.  Select the button labelled "?" -on the tool bar.  The Edit Area Query Dialog will appear. Next enter -your query using the buttons such as, "Topo -> 4000" (adjust the value based on your topography).   -Once you have defined the query select "Submit".  The query will execute -and a new edit area will be selected that matches the query you entered.  -For more information on queries, see the section, Edit -Area Queries in the GFE Training Guide. For more infomation on the -dialog, see the section, EditArea -and Query Dialog in the Button Bar Dialogs document. -

Select -an Edit Area that includes locations where the dew point is above a value -that you specifiy. -

This task is similar to the one above except that -this time you are using a different element to define the area. -
Make sure that the dew point weather element -is loaded into the GFE.  Open the query dialog (by selecting the button -labelled "?") and define your query such as, "Td -> 45".  Then select "Submit".  You -should see a new edit area displayed in the Spatial Editor that corresponds -to your query.  Note that when you animate or step frames the query -is re-run so that the edit area always reflects the currently displayed -grid. For more information on queries, see the section, Edit -Area Queries in the GFE Training Guide. For more infomation on the -dialog, see the section, EditArea -and Query Dialog in the Button Bar Dialogs document. -

Select -an Edit Area that covers locations with a certain type of weather. -

For this task, load the "Wx" weather element and -open the query dialog by selecting the button labelled "?". -Next define your query such as mask(Wx, ":RW:") -and click the submit button.  The new edit area should match your -query.  For more information on queries, see the section, Edit -Area Queries in the GFE Training Guide. For more infomation on the -dialog, see the section, EditArea -and Query Dialog in the Button Bar Dialogs document. -

Another way to select areas of the same weather -is to use the option available from the MB3 pop-up menu, "Select -Homogeneous Area".  Selecting this option -will create a new edit area defined by the type, coverage and intensity -of whatever weather value the cursor is over when you execute "Select Homogeneous -Area".  For more information, see the section, Select -Homogeneous Area based on Value in the GFE Training Guide. -

Save -an Edit Area in a Quick Set button, clear the Edit Area and restore it -with the same Quick Set button. -

For this task you use the Quickset buttons located -in the far right section of the button bar.  Create an edit area either -by hand, from the Main Menu or a query.  Then select "Q" -followed by any one of the numbers.  Now clear the edit area by pressing -the button labelled "C" -and then select the same number button that you did earlier.  Note -that the edit area that you just cleared has been redisplayed.  This -operation works for edit area queries as well.  Saving a query under -a QuickSet entry returns as a query when it is recalled.  When an -edit area query is loaded and executed it always runs on the currently -displayed grid.  See the section in the GFE Training Guide, Saving -Edit Areas as QuickSets for more information -

Zoom -the Spatial Editor so that only a portion of your CWA is displayed. -

There are two different ways to zoom the Spatial -Editor display.  One is to MB3 press and select the "Zoom -to" cascade menu and select one of the numbered -options.  These numbers represent the final width of the display (in -kilometers) after the display zooms. -

A short cut allows you to zoom in and out using -the mouse buttons.  Press and hold the SHIFT key on the keyboard and -click MB2 anywhere in the Spatial Editor display.  Note that the display -zooms in one level.  Zoom in further by clicking MB2 a few more times.  -Now zoom back ou by again holding the SHIFT key and clicking MB1. -

For more information on zooming the Spatial Editor -display see the section, Zooming -(enlarging) the Spatial Display in the GFE Training Guide. -
- - diff --git a/cave/com.raytheon.viz.gfe/help/EGTEditingActions.html b/cave/com.raytheon.viz.gfe/help/EGTEditingActions.html deleted file mode 100644 index 1ef4119246..0000000000 --- a/cave/com.raytheon.viz.gfe/help/EGTEditingActions.html +++ /dev/null @@ -1,274 +0,0 @@ - - - - - - Editing Actions - - -Editing actions -
-

Perform -an interpolation based on "Gaps". -

-

To interpolate based on "Gaps", first you must -select the time range over which you wish to interpolate. Move -the -cursor into the Grid Manager over the weather element you wish to -interpolate. -Move the cursor to the start time of the time range you wish to -interpolate -and press MB1 and drag to define the selected time range. See the -section, -Select -Weather Element and TimeRange for more information. Once this time -range is defined, select Grids->Interpolate..., -from the GFE's Main Menu. The Interpolate -Dialog pops up. Choose "By Gaps". You should see new grids -appear -within the time range that you selected earlier. See the section, -Interpolate -Grids for more information. -

-

Perform -an -interpolation based on "Edited Data". What needs to be done before -executing -this action? -

-

Before you can interpolate based on edited -data, -you must first edit some of the grids or else no interpolation will be -performed. To accomplish this, edit at least two grids in the -GFE. -Select these grid with the steps described in the section Select -Weather Element and TimeRange. Then from the Main Menu select -Grids->Interpolate....  -The Interpolate Dialog -pops up. Choose "Based on Edited Data". You should see grid -appear -only in the time period between the grids that you edited. Try -this -operation on a set of grids that have not been edited. Note that -no new grids appear and an error message appears at the bottom of the -GFE. -

-

Adjust -the values for an entire grid by a specified amount. -

-

To adjust a the value in a grid, select that -grid -in the Grid Manager. That will make the grid "editable". -Next -open the Edit -Actions -Dialog by clicking with MB1 on the icon labeled with the large "E" -located in the Button Bar. From this dialog set the Delta Value -by -selecting "Delta Value..." -and entering any value you choose.  Close the Delta -Value Dialog. Now from the Edit Actions Dialog select Adjust -Value Up or Adjust -Value Down. You may see a message -dialog -warning you that you are about to edit the entire grid. If so, -select -"Yes" and -note -that all of the values for the grid that you selected were changed by -the -amount that you specified. -

-

Adjust -the wind speeds for an entire grid by a specified amount. -

-

Adjusting the wind speed values for a grid -works -just like any other grid. Select the grid you wish to edit in the -Grid Manager with a MB1 click. Next open the Edit -Actions Dialog, if it is not open already. From this dialog -set -the delta value by clicking on the button labelled "Delta -Value..." and specify an adjust -amount.  -Close the Delta Value -Dialog and select Adjust Value Up -or Adjust Value Down -from the Edit Actions Dialog. You should see that all of the wind -speeds were changed by the amount you specified. -

-

Adjust -the values for just a portion of a grid by a specified amount. -

-

To adjust a portion of a grid, you must first -select an Edit Area in the Spatial Editor. To do this select the -button on the Button Bar that looks like this. - -Next move your cursor into the Spatial Editor and draw the area over -which -you want to edit by pressing MB1 and dragging. See the section Define -an Edit Area by Hand for more information. Next select Adjust -Value Up or Adjust -Value Down from the Edit -Actions Dialog and you will see the gridpoints you selected -previously -change in value. -

-

Adjust -the wind directions for a selected portion of a grid by a specified -amount. -

-

Adjusting the wind direction is a slight change from adjusting the -wind -speed, described above. Select a wind grid to edit from the Grid -Manager. Next, select a portion of the grid as you did in the -last -exercise. See the section Define -an Edit Area by Hand for more information. Now from the Main Menu -of -the GFE select, GFE->Editing -Preferences->Vector -Edit Mode->Direction Only. This -will -restrict all edit operations to wind direction without affecting the -wind -speed. Now open the Edit -Actions Dialog and select Adjust -Value -Up or Adjust -Value Down. Note that with each tool -execution the wind direction changes by 10 degrees up or down. -

-

Smooth -the data contained in a grid. -

-

The Smooth operation is available from the Edit -Actions Dialog.  To Smooth a grid, select a scalar or vector -to -edit and from the Edit -Actions Dialog select "Smooth". -You should see that the gradients in the grid are less harsh than they -were before the smooth operation. -

-

Pickup -a value from the spatial editor's color bar and assign it to a selected -Edit Area. -

-

To pickup a value to assign, simply click or drag MB1 or MB2 in the -color bar located at the top of the Spatial Editor. Note that as -you click or drag the value that you specified is indicated by the -shadowed -number displayed on the color bar. Now that you have specified a -pickup value, you can select an area as described in the section Define -an Edit Area by Hand. Finally, from the Edit -Action -menu select Assign Value. You should see the value of the area -that -you selected change to the current pickup value. -

-

Create -a new weather value of your choice and use it to assign weather to a -selected -Edit Area. -

-

To create a new weather value, you first need -to select a Wx grid from Grid Manager. Select an area in the -Spatial -editor to be changed. Next, from the color bar located at the top of -the -Spatial Editor, MB3 press and hold to display the pop-up menu. -From -the pop-up menu select Set Pickup Value.... -Now you should see the Set -Weather Dialog appear. Use this dialog to define a new -weather -type, coverage/probability, and intensity. See the section Set -Weather Dialog for more information. When you have -successfully -defined your new weather value, click on Assign -Value. You should see tool assign your -weather -value to the selected area. -

-

You can also use a quicker way to set the -weather, -if the weather you are setting is fairly common. Instead of choosing -Set -Pickup Value... from the popup menu, you -can -choose a value under Set To Common -Values... -The values appearing in this menu are -site-configurable. -
-  -

-

Create -a new discrete value of your choice and use it to assign discrete data -to a selected Edit Area. -

-

To create a new discrete value, you first need -to select a discrete grid from Grid Manager. The -"Headlines" grid -is an example of a discrete grid. Select an area in the Spatial editor -to be changed. Next, from the color bar located at the top of the -Spatial -Editor, MB3 press and hold to display the pop-up menu. From the -pop-up -menu select Set Pickup Value.... -Now you should see the Set -Discrete Value Dialog appear. Use this dialog to define a new -value. See the section Set -Discrete Value Dialog for more information.  When you -have -successfully defined your new value, click on Assign -Value. You should see tool assign your -discrete -value to the selected area. -

-

You can also use a quicker way to set the -discrete -value, if the discrete value you are setting is fairly common. -Instead of choosing -Set Pickup Value... -from the popup menu, you can choose a value under Set -To Common Values... The values -appearing in this menu are site-configurable. -
-
-

- - diff --git a/cave/com.raytheon.viz.gfe/help/EGTGridManager.html b/cave/com.raytheon.viz.gfe/help/EGTGridManager.html deleted file mode 100644 index efe32d3de9..0000000000 --- a/cave/com.raytheon.viz.gfe/help/EGTGridManager.html +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - Grid Manager Actions - - -Grid Manager actions -
-

Stretch -the valid time of any grid block. -

The Grid Manager has a built-in tool for stretching -the time over which a grid is valid. Move the cursor to the grid -block that you want to stretch. Press and hold MB2 while moving the -cursor to the left or right. Stretching the grid block to the left -changes the grid's start time while stretching the grid block to the right -changes that grid's end time. Note that you can only stretch the -start time or the end time per operation. To stretch both times, -you must perform this operation twice. See the section Stretch -a grid's valid time period in GFE Training Guide for more information. -

Copy the -contents of one grid block into another grid block. -

This task is accomplished using the MB3 pop-up -menu from inside the Grid Manager. Move the cursor over the grid -block that you wish to copy from. Press and hold MB3 and select "Copy -Grid" from the pop-up menu. Next, move -your cursor to the time at which you want to paste this grid. Press -and hold MB3 again, but this time select "Paste -Grid". Note that you can paste the grid -into a gap or onto an existing grid. Just the grid data values are -changed when pasting a grid. The valid time is not affected. -See the section in the GFE Training Guide, Copy -Grid for more information. -

Select -a time range and list of parameters, then copy data from a selected model -into the FCST database. -

This is a two-part task. First you must -select the time range, then copy grids from a model. To select the -time range, move the cursor to the start time of the selection and -over the first weather element you want to select. Press and hold -MB1 and drag diagonally. Motion in the horizontal direction selects -the time range. Motion in the vertical direction selects weather -element. When you have selected the time range and the set of weather -elements you want, release MB1. For more information on selecting -weather elements and time ranges in this way, see the GFE Training Guide -section Select Weather -Element and TimeRange. -

Next, you need to identify the model source to -copy in to your selected Weather Element/TimeRange. Go to the main -menu and select Populate->Copy Selected Grids -From... A dialog that contains all model -versions that are curently available will appear. Select the model -of your choice and select OK. -Grids generated from that model will be copied into your forecast. -For more information on this operation, see the GFE Training Guide, section -Copy -from Derived Model Grids. -

Create -a grid from Scratch. Stretch the valid time of that grid and split it into -more than one grid. -

This is a three-part task. To create a grid -from scratch, move your cursor over the weather element/timerange you wish, -press and hold MB3 to display the pop-up menu, and select "Create -From Scratch". You will see a new grid -block appear in the Grid Manager. See the section, Create -Grid from Scratch in the GFE Training Guide for more information. -

To stretch the valid time of the newly created -grid, see the instructions above, Stretch the valid -time of any grid block. -

Finally, to split the grid block, select a portion -of it using the instructions Select a time range... Then MB3 press -to display the pop up menu and select "Spilt Grid". You will end -up with two grids whose time boundaries are defined by whatever time range -you selected. -

Assign -a "null" value to an entire grid. -

To assign a "null" value (usually the lowest allowable -value) just move your cursor over your grid of choice and MB3 press -to display the pop-up menu. Select "Assign -[value]" where [value] is the null value defined -for that weather element. You will see that the null value was assigned -to every grid point in the grid. See the section Assign -Default Value in the GFE Training Guide. -

Select -several grids and use Time Shift to move the grids to another time -period. -

To TimeShift grids, you first need to select them. -See the section in the Grid Manager Training Select -Weather Element and TimeRange for more information on selecting -grids. -

Next, from the Main Menu select Grids->Time -Shift... to display the Time -Shift Dialog. Use the radio buttons to indicate whether to copy -or move and the  slider to indicate how many hours to time shift. -Then select OK. -Watch what happens to the grid that you selected. -
-
- - diff --git a/cave/com.raytheon.viz.gfe/help/EGTLoadWEs.html b/cave/com.raytheon.viz.gfe/help/EGTLoadWEs.html deleted file mode 100644 index af76ab2622..0000000000 --- a/cave/com.raytheon.viz.gfe/help/EGTLoadWEs.html +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - Loading Weather Elements Training</titile> -</head> -<body> -<font color="#3333FF"><font size=+2>Loading Weather Elements</font></font> -<br><font color="#3333FF"><font size=+2></font></font> -<p><a NAME="LoadTemps"></a><font color="#3333FF"><font size=+2>Load the -temperatures, dew points and winds from each of the short and medium range -models into the Grid Manager.</font></font> -<p><font color="#000000">You will need to use the <a href="MainMenuDialogs.html#WEBrowserDialog">Weather -Element Browser</a> to do this.  Open the <a href="MainMenuDialogs.html#WEBrowserDialog">Weather -Element Browser</a> from the Main Menu: </font><font color="#FF0000">Weather -Element->Weather Element Browser...</font><font color="#000000"> In the -column labelled "</font><font color="#FF0000">Source</font><font color="#000000">" -select each of the short and medium range models (e.g., NAM12, GFS80).  -Next, in the column labelled "Field" select "</font><font color="#FF0000">T</font><font color="#000000">", -"</font><font color="#FF0000">Td</font><font color="#000000">", and "</font><font color="#FF0000">Wind</font><font color="#000000">".  -From the third column, select the "</font><font color="#FF0000">Misc</font><font color="#000000">" -menu and select "</font><font color="#FF0000">SFC</font><font color="#000000">".  -Finally select the "</font><font color="#FF0000">Load and Dismiss</font><font color="#000000">" -button located at the bottom-left of the dialog.  The GFE will load -T, Td and Wind from each the models that you selected.</font> -<p><a NAME="LoadFireWx"></a><font color="#3333FF"><font size=+2>Load all -of the Fire Weather parameters into the Grid Manager.</font></font><font color="#3333FF"><font size=+2></font></font> -<p><font color="#330000">There are several ways to load the Fire Weather -elements into the GFE.  You could use the Weather Element Browser -as in the last exercise, but that might be somewhat tedious.  The -quickest way to accomplish this is to load the <a href="GFETrainingGridMgr.html#Load/UnloadWEsviaWEGroups">Weather -Element Group</a> that corresponds to the Fire Weather elements into the -GFE.  To load a Weather Element Group, from the Main Menu select the -item </font><font color="#FF0000">Weather Element->Weather Element Groups->FireWx</font><font color="#330000">.  -The GFE will then load those elements used for Fire Weather forecasts.</font> -<p><a NAME="LoadPublicWEs"></a><font color="#3333FF"><font size=+2>Load -all of the Public weather parameters into the Grid Manager.</font></font><font color="#3333FF"><font size=+2></font></font> -<p><font color="#330000">Loading the Public Weather elements is most easily -accomplished by selecting from the Main Menu: </font><font color="#FF0000">Weather -Element->Weather Element Groups->Public</font><font color="#330000">.  -See the section on <a href="GFETrainingGridMgr.html#Load/UnloadWEsviaWEGroups">Loading -Weather Element Groups</a> for more information.</font> -<p><a NAME="CreateNewWEGroup"></a><font color="#3333FF"><font size=+2>Create -a new Weather Element Group that contains QPF, Wx, Sky, and SnowAmt</font></font><a href="GFETrainingGridMgr.html#CreateanewWeatherElementGroup"></a> -<p><a href="GFETrainingGridMgr.html#CreateanewWeatherElementGroup">Creating -a new Weather Element Group</a> is done via the <a href="MainMenuDialogs.html#WEBrowserDialog">Weather -Element Browser</a>. First you use the Browser to define the set of weather -elements and then assign the set a name.  Start by displaying the -Weather Element Browser by selecting from the Main Menu: <font color="#FF0000">Weather -Element->Weather Element Browser</font>.  Then from Source select -<font color="#FF0000">Fcst</font>, from Field select the items <font color="#FF0000">QPF, -Sky, and SnowAmt</font>, and from Planes select <font color="#FF0000">SFC</font>.  -Now still in the Weather Element Browser select <font color="#FF0000">File->Save -Weather Element Group</font>.  Enter a name and select <font color="#FF0000">Save</font>.  -Now you can close the Weather Element Dialog.  From the GFE Main Menu, -select <font color="#FF0000">Weather Element->Weather Element Groups</font>. -You should see your newly created Weather Element Group in that list. -</body> -</html> diff --git a/cave/com.raytheon.viz.gfe/help/EGTMain.html b/cave/com.raytheon.viz.gfe/help/EGTMain.html deleted file mode 100644 index d0b2e8c2a6..0000000000 --- a/cave/com.raytheon.viz.gfe/help/EGTMain.html +++ /dev/null @@ -1,208 +0,0 @@ -<!doctype html public "-//w3c//dtd html 4.0 transitional//en"> -<html> -<head> - <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> - <meta name="GENERATOR" content="Mozilla/4.79 [en] (X11; U; Linux 2.4.9-34smp i686) [Netscape]"> - <title>GFE Techniques and Skills - - - -GFE Techniques and Skills -

Here is a listing of various techniques and skills which you need to -develop in order to gain the most utility from the gridded forecast editor -software package. This list is arranged by subject, but using the GFE software -requires thorough knowledge of a wide variety of operations. Through repetition, -executing each of these skills and techniques should become second nature, -like calling up a satellite picture on D2D. -

This document is intended for forecasters who have been thoroughly trained -on the operational use of the GFE; it it not for the novice.  Each -forecaster should be able to demonstrate a mastery of each of these skills -before attempting to use the GFE for complete operational forecasts. -
-

Edit Area actions -
-

    -
  1. -Draw a freehand Edit Area. Solution
  2. - -
    -
  3. -Select an Edit Area that includes four different forecast  zones of -your choice.  Solution
  4. - -
    -
  5. -Select an Edit Area based on a given elevation.    Solution
  6. - -
    -
  7. -Select an Edit Area that includes locations where the dew point is above -a value that you specifiy.    Solution
  8. - -
    -
  9. -Select an Edit Area that covers locations with a certain type of weather. -Solution
  10. - -
    -
  11. -Save an Edit Area in a Quick Set button, clear the Edit Area and restore -it with the same Quick Set button.    Solution
  12. - -
    -
  13. -Zoom the Spatial Editor so that only a portion of your CWA is displayed. -Hint: there are two ways to do this.    Solution
  14. -
-Grid Manager actions -
-
    -
  1. -Stretch the valid time of any grid block.    Solution
  2. - -
    -
  3. -Copy the contents of one grid block into another grid block.  Solution
  4. - -
    -
  5. -Select a time range and list of parameters, then copy data from a selected -model into the FCST database.    Solution
  6. - -
    -
  7. -Create a grid from Scratch. Stretch the valid time of that grid and split -it into more than one grid.    Solution
  8. - -
    -
  9. -Assign a "null" value to an entire grid.    Solution
  10. - -
    -
  11. -Select several grids and use Time Shift to move the  grids to another -time period.    Solution
  12. -
- -


Loading Weather Elements -

    -
  1. -Load the temperatures, dew points and winds from each of the short and -medium range models into the Grid Manager.    Solution
  2. - -
    -
  3. -Load all of the Fire Weather parameters into the Grid Manager.  Solution
  4. - -
    -
  5. -Load all of the Public weather parameters into the Grid Manager. Solution
  6. - -
    -
  7. -Create a new Weather Element Group that contains QPF, Wx, Sky, and SnowAmt -Solution
  8. -
- -


Editing actions -
-

    -
  1. -Perform an interpolation based on "Gaps".    Solution
  2. - -
    -
  3. -Perform an interpolation based on "Edited Data". What needs to be done -before executing this action?    Solution
  4. - -
    -
  5. -Adjust the values for an entire grid by a specified amount.  Solution
  6. - -
    -
  7. -Adjust the wind speeds for an entire grid by a specified amount. Solution
  8. - -
    -
  9. -Adjust the values for just a portion of a grid by a specified amount. Solution
  10. - -
    -
  11. -Adjust the wind directions for a selected portion of a grid by a specified -amount.    Solution
  12. - -
    -
  13. -Smooth the data contained in a grid.    Solution
  14. - -
    -
  15. -Pickup a value from the spatial editor's color bar and assign it to a selected -Edit Area.    Solution
  16. - -
    -
  17. -Create a new weather value of your choice and use it to assign weather -to a selected Edit Area.    Solution
    -
  18. - -
  19. -Create a new discrete value of your choice and use it to assign discrete -values to a selected Edit Area.    Solution
  20. -
- -


Smart Tools -

    -
  1. -Run a Smart Tool for just the area covered by your WFO.   Solution
  2. - -
    -
  3. -Adjust a QPF grid using the Orographic Smart Tool.    Solution
  4. - -
    -
  5. -Interpolate temperatures to hourly grids and derive a MaxTemp grid from -these grids using the Smart Tool.    Solution
  6. - -
    -
  7. -Derive a SnowAmt grid from the QPF field using the appropriate Smart Tool. -Solution
  8. - -
    -
  9. -Run a Smart Tool on multiple grids, but only over a selected Edit Area -Solution
  10. -
- -


Miscellaneous and More Complex -actions -
-

    -
  1. -Display a grid as an image, then change the Color Table that is being used. -Solution
  2. - -
    -
  3. -Change the color of a graphic. (Think how you would do this on D2D.) Solution
  4. - -
    -
  5. -Assign a weather type to the portion of a grid covered by a certain PoP -value.    Solution
  6. - -
    -
  7. -Assign values to a PoP grid based on different threshold values in the -QPF grid for that time.    Solution
  8. - -
    -
  9. -Save and Publish the data.    Solution
  10. -
- - - diff --git a/cave/com.raytheon.viz.gfe/help/EGTMisc.html b/cave/com.raytheon.viz.gfe/help/EGTMisc.html deleted file mode 100644 index caa3bd3030..0000000000 --- a/cave/com.raytheon.viz.gfe/help/EGTMisc.html +++ /dev/null @@ -1,73 +0,0 @@ - - - - - - Miscellaneous Actions Training - - -Miscellaneous and More Complex actions -
  -

Display -a grid as an image, then change the Color Table that is being used. -

To display a grid as an image, move the cursor -down to the legend that corresponds to that grid.  Press and hold -MB3 and select Display as Image.  This will change the grid to an -image.  For more information on this and other legend options, see -the section Legend -Pop-up Menu.  Changing the current color table is done via the -color bar located at the top of the Spatial Editor.  Move the cursor -to the color bar and press and hold MB3 to display the pop-up menu.  -Move the cursor to the item Change Color Table -To->  to see the list of available color -tables.  Select a new color table and watch the display of the grid -change. -

Change -the color of a graphic. (Think how you would do this on D2D.) -

This operation works nearly the same as on D2D.  -Move your cursor to the appropriate legend and press and hold MB3 to display -the pop-up menu.  From this menu, select Change -Graphic Color To -> and select any color you -like. -

Assign -a weather type to the portion of a grid covered by a certain PoP value. -

First you need to define an edit area based on PoP.  To do this -open the Edit Area -Query Dialog from the Button Bar.  This button looks like this .  -Define a query based on PoP.  For example, "PoP-> - 30" and submit the query.  For more information, see the -section on the  Edit -Area Query Dialog.  Once you have defined your edit area based -on PoP, then make the corresponding Wx grid active.  Select the appropriate -weather type, coverage and intensity and assign that value to the edit -area. -

Assign -values to a PoP grid based on different threshold values in the QPF grid -for that time. -

This task can be accomplished by submitting several -queries that identify areas based on the QPF value and then assigning various -PoP values after each query.  For example, open the  Edit -Area Query Dialog  and define a query at the low end of QPF such -as "QPF < 0.01".  Once this edit area has been defined, assign -a PoP value of 0%.  Next submit another query such as "QPF >= 0.01 -* QPF < 0.10". Once this edit area is defined, assign a different value -for PoP such as 20%.  Follow this with another query, and so on until -the entire range of QPF has been addressed. -

Smart Tools is another way to define this relationship with significantly -less work.  See the Smart Tools Training -Guide for more information on creating Smart Tools. -
  -

Save -and Publish the data. -

To save your gridded forecast data select from -the Main Menu Edit->Save Forecast.  Then select the Save Forecast -button.  You can also get to this dialog by selecting the Button Bar -button that looks like this.  -

To Publish your data to the Official database, -select from the Main Menu Products->Publish -to Official...  This will display the -Publish -Dialog that allows you to choose which weather elements to publish.  -To publish the  weather elements click on the Publish button. - - diff --git a/cave/com.raytheon.viz.gfe/help/EGTSmartTools.html b/cave/com.raytheon.viz.gfe/help/EGTSmartTools.html deleted file mode 100644 index 2d5852883d..0000000000 --- a/cave/com.raytheon.viz.gfe/help/EGTSmartTools.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - Smart Tools Training - - -Smart Tools -

Run a -Smart Tool for just the area covered by your WFO. -

Running a Smart tool is just like running any -of the other simple tools.  Select a grid to edit by MB1 clicking -on that grid in the Grid Manager or MB2 clicking on the label for that -grid in the Spatial Editor.  Next you will need to select the edit -area that corresponds to your WFO.  From the GFE Main Menu, select -Edit -Areas->WFOs->[Your site ID]. Open the Edit -Actions Dialog, if not already, and select the smart tool that you -wish to run.  That tool will be executed over your WFO and presumably -modify the data for the grid that you choose earlier. -

Adjust -a QPF grid using the QPF Smart Tool. -

Select a QPF grid to edit using the Grid Manager -or the legends in the Spatial Editor.  Then open the Edit -Actions Dialog and select QPF_SmartTool.  If there is any complex -terrain in your WFO area, you should see a terrain influence in the QPF -field based on the topography and the wind grid valid at the same time. -

Interpolate -temperatures to hourly grids and derive a MaxTemp grid from these grids -using the Smart Tool. -

To interpolate your temperature grids to hourly, -first select those grids in the Grid Mangaer using MB1 drag operation.  -See the section Select Weather Element and TimeRange for more information.  -Next, from the Main Menu item select Grids->Interpolate....  -The Interpolate Dialog -will be displayed, choose "By Gaps". You should see new grid appear in -between the grids that were already defined.  See the section on -Interpolate -Grids for more infomation.  When the interpolation is finished, -select a MaxT (max temperature) grid to edit from the Grid Manager that -corresponds to the same time as the time period that you interpolated.  -Then from the Edit Actions -Dialog select the Smart tool, select MaxT_SmartTool.  -You should see the values for the MaxT assign the maximum value of the -temperature grids in that same time range. -

Derive -a SnowAmt grid from the QPF field using the appropriate Smart Tool -

First you will need to define a QPF field either -by hand or from any model you choose.  Next create a SnowAmt grid -from scratch in the Grid Manager by moving the cursor to the same time -period in the SnowAmt element, MB3 press and hold to get the pop-up menu -and select Create -From Scratch.  See the section Create -Grid From Scratch for more information. Now open the Edit -Actions Dialog and select SnowAmt_SmartTool.  -You should see the newly created SnowAmt grid defined with new values.  -Note: this tool requires that a Temperature and Freezing Level grid also -be defined for the same time period.  Also note that if your temperature -grid is not at or below freezing the SnowAmt_SmartTool will (appropriately) -assign zero SnowAmt to all grid points. -

Run -a Smart Tool on multiple grids, but only over a selected Edit Area -

To accomplish this task you will need to select -a time period in the Grid Manager and then select and edit area from the -Spatial Editor.  These can be done in either order.  To select -a time period in the Grid Manager see the section Select -Weather Element and Time Range.  To select an edit area in the -Spatial Editor see the section Select -an Edit Area by Hand.  Once you have defined an edit area and -a time range,  select one of the tools in the Edit -Actions Dialog.  Note that all of the grids that you selected -in the Grid Manager turn a cyan -color while they are executing.  When the cyan -color turns back to gray, examine the grids and convince yourself that -the Smart tool was executed over the edit area that you chose and for each -of the grids that you selected. - - diff --git a/cave/com.raytheon.viz.gfe/help/ERQCcheck.html b/cave/com.raytheon.viz.gfe/help/ERQCcheck.html deleted file mode 100644 index e25c67ab8b..0000000000 --- a/cave/com.raytheon.viz.gfe/help/ERQCcheck.html +++ /dev/null @@ -1,440 +0,0 @@ - - - - - ERQCcheck - - - - - - -ERQCcheck -
-
-Introduction -
-
-Due to the increasing number of elements -and their forecast projection which must be produced, it has been difficult to keep track of all the -data in all the grids. There is a need for methods to assist in the managing of these grids in a -timely fashion. -

-One of the many challenges forecasters have is making sure all the grids are consistent with one -another (i.e. Td < T). With all of the different elements and their interrelationships, if the -data is not inspected carefully, glaring inconsistencies may show up. Another challenge is making -sure all grids required for NDFD are actually there, especially in the morning when the new day 7 -needs added. -

-ERQCCheck is designed to assist in these areas. It allows one to cross check elements against one -another to assure consistency. Where inconsistencies are found, the forecaster has the option to -either just see where the inconsistencies are, or have one element or the other forced so that they -are consistent. -

-It also includes a routine that check for the existence of grids required for NDFD. This routine -checks for the various weather elements required for the time intervals required, over the seven days. -It accounts for the different time intervals required for the different elements, or for the same -elements over different time ranges. For example, many elements are required at three hour -intervals out to 48 or 60 hours, then every six hours out through day 7. -

-The following table lists the Procedures and Tools used, and which elements the Tools check. -The first column lists all the Procedures and Tools. In addition to the master Procedure, -ERQCCheck, there are 2 Procedures within the Master Procedure, one being -CheckTandTd Procedure, which also deals with MaxT and MinT, the other being the NDFDgridCheck -procedure. -

-The tools are used directly by the master Procedure for all the other elements; each Procedure or -Tool used by the master Procedure is indented once. Procedures are so indicated in the second -column; all others are Smart Tools. The weather element edited by the Smart Tool is listed in the -third column. -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Procedure or ToolProcedureTool (Wx Element Edited)
NDFDgridCheckProcedure
CheckTandTdProcedureT and Td
SnowAmtQPFPoPWxCheckProcedure
CheckWindGustProcedureWind Gust
CheckSkyWithPoPSky
EnufCloudForPoPCloud
WindChillToolWind


-
-
-
-
-How -the Procedure Works -
-
-From the consistency menu, choose -ERQCcheck. Note that we are checking for internal inconsistencies, those found among one’s own -forecast grids, not inconsistencies between one’s own forecast and their neighbors forecast grids. -After selecting the procedure a GUI will appear:

-ERQCcheck
-
-
-The top section deals with selecting a -time range over which to check grids. To check grids over the selected time range in the grid -manager, just leave “Y” for “Use Selected Time Range from the Grid Manager.” To check for certain -periods, like Day4 or Day3 night to Day7, select “N” for “Use Selected Time range” and choose the -time periods at the right; the time to start with from the left column, and to end with from the -right. To check for Day4 only, for example, just choose Day4 for the start and end time. -If checking all the grids through time, simply pick the first period in the left column (Today -or Tonight) and Day 7 from the right column. -

-The column to the right allows one to choose which cycle one is on. This affects the time periods -chosen, as the day references change meaning from the 00Z to the 12Z cycle. Leaving the default, -“Auto,” will result in the cycle being automatically determined by ERQCcheck, so one need not worry -about this feature at all in most cases. However, the other two choices, one for each off the two -possible cycles one is on, are left available in case the Procedure doesn’t determine the desired -cycle right, such as during a borderline part of the day. -

-Next are the options for what to check, and whether to highlight only or actually fix. For each -weather element, one can choose whether to fix or just highlight where it is inconsistent with the -element it is being checked against. On the Wx check, just the highlight option is available, -although a fix option has been written, and will soon be added. On the WindGust check, just the -fix option is available at this time. The following table shows what elements can be checked -(Dependent Element), what element(s) they are checked against (Independent Element), and outlines -the options are available for each element.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Dependent ElementIndependent ElementHighlightFix
MinTPrevious MinTYesYes
MaxTPrevious MaxTYesYes
TMaxT, MinTYesYes
TdTYesYes
RH, Heat IndexT, TdYesYes
WindGustWind, WindGust rulesNoYes
SkyPoPYesYes
PoPSkyYesYes
PoPWxYesYes
WxPoP, PoP12hrYesNo
PoP12hrPoPYesYes
QPFPoPYesYes
SnowAmtPoPYesYes


-
-Note that leaving the defaults will -result in no action being taken by the Procedure at all. One must either pick an All option, -or one or more of the options that follow. -
-
-Brief Synopsis of each option: What - ERQCcheck does -
-
-What follows is an explanation of the -procedure and/or tool(s) behind each option and what they do. For the highlight option, temporary -grids are created and displayed at the bottom of the grid manager (but above the ISC grids, if -loaded). The grid name is the Element name prefixed with “Invalid,” Invalid[Element], such as -InvalidPoP. For the temperature checks, the grid names are something to the effect: -TgreaterThanMaxT. -

-Usually, the highlight grids will be purple over areas that are OK, and red over areas where the -value for that element is not consistent with the element it was checked against. A grid of -zeroes and ones is produced. The purple area will have a value of 0, indicating OK, and the red -area a value of 1, indicating an inconsistency, but not by how much. -

-Only the ISC_Send area is checked, so the forecaster is not bothered with the many inconsistencies -that may show up well outside the forecast area. In general, areas highlighted in red are areas -that “would have” been fixed if the fixed option were chosen. -

-All (overrides other choices if not No)
-This first option is a quick way to have all the weather elements this Procedure can check or fix, -checked or fixed at once. If left No, the procedure will check or fix weather elements according -to the options selected below. -

-Checking Highlight only will run all the available checks, and produce the highlight grids -for those grids containing inconsistencies. The Fix All option fixes those grids which are -found inconsistent: they force grid values in line with values being compared against. -

-NDFD Grid Check is the routine that checks for the existence of all grids required for the -NDFD. It checks for all seven days, regardless of the time range chosen. It doesn’t highlight or -“fill in” missing grids; rather, it lists the missing grids and the times for which they are -missing When finished, “-- Missing grids listed below !! --“ appears in the status bar in the -lower left portion of the GFE display. Just open up the message window by clicking on the up arrow -just to its left of the status bar to see which grids are missing for which times. If all grids are -present, a message, “-- All necessary grids found --” appears in the status bar instead. -

-Just to the right of the NDFD option is a place to check for public, fire or marine weather -elements (the marine option can be removed for inland offices). For the public elements, heat -index is checked for in the summer; wind chill in winter. NDFD requires snow amount grids 12 -months a year over the CONUS. All other public weather elements are all year round. -

-CheckTandTd (All 7 days only)
-The temperature checks are carried out for all 7 days, regardless of the time periods chosen. -MinT and MaxT grids are checked against one another in chronological order. Values in the first -MaxT grid are made to at least equal values in the previous MinT grid, i.e., the grid from the night -before. Likewise, values in the first MinT grid are made to at most equal values in the previous -MaxT grid, i.e., the grid from the day before. This assures all values in a given MinT grid end up -at or below all values in both adjacent MaxT grids, and all values in a given MaxT grid end up at or -above all values in both adjacent MinT grids. -

-For the highlight only option, the actual error is shown in the red area in the temporary -Invalid[Element] grid. So, if MaxT is too low compared to the following MinT grid, negative -values will appear showing how much too low the grid is at each point. -

-Values in T grids are then forced to at least equal values in corresponding MinT grids, and/or at -most equal all values in corresponding MaxT grids. For the highlight option, values shown in red -in the temporary grid show where T is above the corresponding MaxT or below the corresponding MinT. -The purple area is where T is OK. -

-Td
-This is done automatically with the CheckTandTd option. After forcing T within MinT and MaxT, Td is -forced to at most equal T. -

-For the highlight option, values shown in red in the temporary grid show where Td is above T. -

-RH, Heat Index (For Fix Option Only)
-Since T and Td values are potentially changed, the RH, Wind Chill and Heat Index are all -automatically recomputed with the CheckTandTd option, the latter two only if loaded in GFE at the -time, a quick way to do only what is “in season.” -

-WindGust (Fix only)
-This check forces wind gust values to be no lower than the sustained wind speed, as required. -There is an option to limit wind gusts in relation to the sustained wind speed. This is to avoid -wording like “5 to 10 mph with gusts to 40 mph.” It is defaulted to 12 kts, and can be changed. -Any wind gust values that exceed the sustained wind speed by more than this value are reduced so -that they exceed the wind gust by exactly this value. In this way, if the user chooses 10, -10G35KT becomes 10G20KT, in theory. In actuality, it may still come out something like 10G25KT, -on account of the analysis methods in the ZPF text formatter. Wind speeds are averaged while the -maximum is taken for wind gusts. -

-CheckSkyWithPoP
-Although there is no quantitative relationship between PoP and Sky, generally there is a qualitative -relationship that high PoPs require high Sky values, although high Sky values do not necessarily -mean the PoPs have to be high. This option checks Sky against PoP, allowing the forecaster to -choose from three possible Sky-PoP relationships, then control the relationship chosen, according -to the meteorological situation at hand. These relationship options appear just to the right of -CheckSkyWithPoP; the “For Sky and PoP” section, allowing one to control the relationship chosen, -appears just below the CheckSkyWithPoP option. -

-The first two relationships are based on the premise that the Sky should be at least equal to, if -not greater than, the PoP. In essence, if there’s a 50% chance of rain, then it should be at least -partly cloudy, if not mostly cloudy. It certainly shouldn’t be mostly clear if there’s that good a -chance for rain. On the other hand, if there are a lot of clouds, there may not be much -precipitation around. This is OK; the tool leaves these areas alone. -

-Relationship 1: Sky greater than PoP by a fixed amount. For this option, one chooses “add” -under “Sky vs PoP Relationship.” In the “For Sky and PoP” options below, one chooses the amount by -which the Sky should be greater than the PoP; the default is 20. -

-For the fix option, all Sky values not exceeding the PoP by at least the amount entered will be -increased just enough to do so. Sky values already exceeding the PoP by more than the amount -entered are simply left alone. For the highlight option, areas that “would have” been fixed are -simply highlighted with ones in a grid of ones (red) and zeros (purple). -

-Relationship 2: Sky greater than PoP by a factor. For this option, one chooses “multiply” -under “Sky vs PoP Relationship:” In the “For Sky and PoP” options below, one chooses the factor by -which the Sky should be greater than the PoP. The default of 20 should almost definitely be -changed, usually to a much lower value, such as 1.5 or 2. -

-For the fix option, all Sky values not exceeding the PoP by at least the factor entered will be -increased just enough to do so. For example, if the factor entered is two, then the Sky values -should always be at least double what the PoP is; those values that aren’t are increased to exactly -double the PoP. Sky values already exceeding the PoP by more than the factor entered are simply -left alone. For the highlight option, areas that “would have” been fixed are simply highlighted -with ones in a grid of ones (red) and zeros (purple). -

-Relationship 3: Sky is at least a certain value (or lower limit) wherever there is weather. -For this option, one chooses “Sky limit” under “Sky vs PoP Relationship.” In the “For Sky and PoP” -options below, one decides 1) how much Sky cover there should be to support weather, and 2) how -much Sky cover there should be to support a 5% PoP. For the former, weather is required for PoP -values of 15 or greater; this is hard-coded. Here, one is really entering how much Sky cover there -should be to support a 5% PoP, and a 15% PoP, with values in between linearly interpolated. -

-We are only concerned here with Sky values for the onset of weather: PoP values of between 5% -(onset of possible trace events) and 15% (onset of measurable precipitation). The idea here is that -the Sky limit entered should be the lowest Sky value found anywhere the PoP is 15% or greater. -Note here that higher PoP values do not affect the algorithm: if 60 is left for Sky Limit, then all -values lower than 60 should be raised to 60 for PoPs anywhere from 15% to 100%. Sky cover for PoPs -of 5% to 15% should vary linearly from the values entered for a 5% PoP to the value entered for a -15% PoP. Sky values for PoP of less than 5% are left alone. -

-For the fix option, the Sky is raised to that value entered for PoP needed to support measurable -precipitation wherever the PoP is 15% or greater, the definition for a forecast of measurable -precipitation. Sky is raised to that value entered for 5% PoP where the PoP is 5%, and left alone -regardless of its original value where the Pop is less than 5%. For PoP values between 5% and 15%, -a slope is created to determine the new minimum Sky in this range, varying linearly from the Sky -value entered for 5% PoP and that entered to support measurable precipitation. -

-For the highlight option, a grid of zeroes (purple) and ones (red) are shown, the ones indicating -where the Sky grid is inconsistent with the PoP grid, areas that “would have” been fixed using the -“Fix” option. -

-SnowAmtQPFPoPWxCheck
-Performs two, simple consistency checks on the SnowAmt grid:

-

    -
  1. Where SnowAmt >= 0.5 inches, checks to ensure QPF >= 0.01 inches.
  2. -
  3. Where SnowAmt >= 0.1 inches, checks to ensure Wx contains S, SW, and/or IP. The frozen - precipitation type can be mixed with any liquid and/or freezing precipitation type. The procedure - does not consider coverage, intensity, and/or visibility of the frozen precipitation in the Wx - grid. There are two cases, which are subtly different:
  4. -
      -
    • If the SnowAmt grid is 6-hr long and starts at 00, 06, 12, or 18 UTC, then at least - one of the overlapping Wx grids must contain S, SW, and/or IP.
    • -
    • All other SnowAmt grids will have to have all overlapping Wx grids contain S, SW, - and/or IP. The more stringent check is required because if the GFE grid time constraints are - offset from the NDFD time constraints, it is possible for the GFE to return a consistent - result but have the NDFD believe the grids are inconsistent.
    • -
    -

-The procedure also performs two, simple consistency checks on the QPF grid:

-
    -
  1. Where QPF > 0.0, checks to ensure at least one of the overlapping PoP grids is greater - than zero. The PoP grids here are the “floating” PoP grids.
  2. -
  3. Where QPF > 0.0, checks to ensure that the overlapping Wx grids have at least one of - the precipitating Wx types, which includes L and ZL. The check is made against the Wx type - only. The procedure does not consider coverage, intensity, and/or visibility of the - precipitating Wx type. There are two cases, which are subtly different:
  4. -
      -
    • If the QPF grid is 6-hr long and starts at 00, 06, 12, or 18 UTC, then at least - one of the overlapping Wx grids must contain precipitating weather.
    • -
    • All other QPF grids will have to have all overlapping Wx grids contain precipitating - weather. The reasons for the more stringent test are the same as with the SnowAmt/Wx - consistency check.
    • -
    -

-Notes:
-
    -
  1. In case it's not clear, for both the SnowAmt/Wx and QPF/Wx checks, if you have a mixture - of SnowAmt/QPF grids where some meet the 6-hr definition and some do not, then the “any” Wx grid - check applies for the 6-hr grids and the “all” Wx grid check applies to the others.
  2. -
  3. For all checks, if the initial threshold is not met, then the grids are considered - consistent by definition. In other words:
  4. -
      -
    • If SnowAmt < 0.5 inches, then SnowAmt and QPF are always consistent.
    • -
    • If SnowAmt < 0.1 inches, then SnowAmt and Wx are always consistent.
    • -
    • If QPF = 0, then QPF and PoP are always consistent.
    • -
    • If QPF = 0, then QPF and Wx are always consistent.
    • -
    -
-If the procedure finds any inconsistencies, it will highlight the inconsistent grids and create -temporary grids which show where the inconsistencies occur. The values in all the temporary grids -are either zero (consistent) or one (inconsistent). The procedure does not modify any grids. -It's left up to the forecaster to determine how, if at all, to handle the inconsistencies. -The issue of a check only versus a check/force procedure was discussed by the STSIT and the -consensus recommendation was a check only procedure. The STSIT feels strongly that there are -no meteorologically sound ways to force consistency of these grids. -

-When the procedure is run, the forecaster is presented with several choices. The first is whether -to run checks or to “Cleanup”. By default, the procedure will run checks. The “Cleanup” option -will undo any highlighting and remove any temporary grids. If you leave “Check” selected, then -you can choose which of the checks you wish to run by toggling on and off the appropriate button. -By default, all checks will be run. -
- - diff --git a/cave/com.raytheon.viz.gfe/help/EXAMPLESmartInit_MyNAM.py b/cave/com.raytheon.viz.gfe/help/EXAMPLESmartInit_MyNAM.py deleted file mode 100644 index a4f7fb8d7f..0000000000 --- a/cave/com.raytheon.viz.gfe/help/EXAMPLESmartInit_MyNAM.py +++ /dev/null @@ -1,41 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## -# EXAMPLE OF MODIFYING AN EXISTING ALGORITHM, AND ADDING A NEW RH ALGORITHM -# FOR THE NAM12 MODEL. - - -from NAM12 import * - -class MyNAM12Forecaster(NAM12Forecaster): - def __init__(self): - NAM12Forecaster.__init__(self) - - def calcSnowAmt(self, T, QPF): - m2 = less_equal(T, 32) - snowamt = where(m2, 10.0 * QPF, float32(0)) - return snowamt - - def calcRH(self, rh_FHAG2): - return clip(rh_FHAG2, 0, 100) - -def main(): - MyNAM12Forecaster().run() - - diff --git a/cave/com.raytheon.viz.gfe/help/EXAMPLESmartInit_NAM.py b/cave/com.raytheon.viz.gfe/help/EXAMPLESmartInit_NAM.py deleted file mode 100644 index d8dd25d66e..0000000000 --- a/cave/com.raytheon.viz.gfe/help/EXAMPLESmartInit_NAM.py +++ /dev/null @@ -1,559 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## -from Init import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from NAM model -## output. -## -##-------------------------------------------------------------------------- -class NAM12Forecaster(Forecaster): - def __init__(self): - Forecaster.__init__(self, "NAM12", "NAM12") - -##-------------------------------------------------------------------------- -## These levels will be used to create vertical soundings. These are -## defined here since they are model dependent. -##-------------------------------------------------------------------------- - def levels(self): - return ["MB1000", "MB950", "MB900","MB850","MB800","MB750", - "MB700","MB650","MB600","MB550", "MB500", - "MB450", "MB400", "MB350"] - -##-------------------------------------------------------------------------- -## Returns the maximum of the specified MaxT and the T grids -##-------------------------------------------------------------------------- - def calcMaxT(self, T, MaxT): - if MaxT is None: - return T - return maximum(MaxT, T) - -##-------------------------------------------------------------------------- -## Returns the minimum of the specified MinT and T grids -##-------------------------------------------------------------------------- - def calcMinT(self, T, MinT): - if MinT is None: - return T - return minimum(MinT, T) - -##-------------------------------------------------------------------------- -## Calculates the temperature at the elevation indicated in the topo -## grid. This tool uses the model's boundary layers to calculate a lapse -## rate and then applies that lapse rate to the difference between the -## model topography and the true topography. This algorithm calculates -## the surface temperature for three different sets of points: those that -## fall above the boundary layer, in the boundary layer, and below the -## boundary layer. -##-------------------------------------------------------------------------- - def calcT(self, t_FHAG2, t_BL030, t_BL3060, t_BL6090, t_BL90120, - t_BL12015, p_SFC, topo, stopo, gh_c, t_c): - p = self.newGrid(-1) - tmb = self.newGrid(-1) - tms = self.newGrid(-1) - # go up the column to figure out the surface pressure - for i in xrange(1, gh_c.shape[0]): - higher = greater(gh_c[i], topo) - # interpolate the pressure at topo height - val = self.linear(gh_c[i], gh_c[i-1], - log(self.pres[i]), log(self.pres[i-1]), topo) - val = clip(val, -.00001, 10) - p = where(logical_and(equal(p, -1), higher), - exp(val), p) - # interpolate the temperature at true elevation - tval1 = self.linear(gh_c[i], gh_c[i-1], t_c[i], t_c[i-1], topo) - tmb = where(logical_and(equal(tmb, -1), higher), - tval1, tmb) - # interpolate the temperature at model elevation - tval2 = self.linear(gh_c[i], gh_c[i-1], t_c[i], t_c[i-1], stopo) - tms = where(logical_and(equal(tms, -1), greater(gh_c[i], stopo)), - tval2, tms) - - p_SFC = p_SFC / 100 # get te surface pres. in mb - # define the pres. of each of the boundary layers - pres = [p_SFC, p_SFC - 15, p_SFC - 45, p_SFC - 75, p_SFC - 105, - p_SFC - 135] - # list of temperature grids - temps = [t_FHAG2, t_BL030, t_BL3060, t_BL6090, t_BL90120, t_BL12015] - st = self.newGrid(-1) - # Calculate the lapse rate in units of pressure - for i in xrange(1, len(pres)): - val = self.linear(pres[i], pres[i-1], temps[i], temps[i-1], p) - gm = greater(pres[i-1], p) - lm = less_equal(pres[i], p) - mask = logical_and(gm, lm) - st = where(logical_and(equal(st, -1), mask), - val, st) - - # where topo level is above highest level in BL fields...use tmb - st = where(logical_and(equal(st,-1),less(p,p_SFC-135)),tmb,st) - - # where topo level is below model surface...use difference - # of t at pressure of surface and tFHAG2 and subtract from tmb - st = where(equal(st, -1), tmb - tms + t_FHAG2, st) - return self.KtoF(st) - -##-------------------------------------------------------------------------- -## Calculates dew point from the specified pressure, temp and rh -## fields. -##-------------------------------------------------------------------------- - def calcTd(self, p_SFC, T, t_FHAG2, stopo, topo, rh_FHAG2): - # at the model surface - sfce = rh_FHAG2 / 100 * self.esat(t_FHAG2) - w = (0.622 * sfce) / ((p_SFC + 0.0001) / 100 - sfce) - # at the true surface - tsfce = self.esat(self.FtoK(T)) - dpdz = 287.04 * t_FHAG2 / (p_SFC / 100 * 9.8) # meters / millibar - newp = p_SFC / 100 + (stopo - topo) / dpdz - ws = (0.622 * tsfce) / (newp - tsfce) - rh = w / ws - # Finally, calculate the dew point - tsfcesat = rh * tsfce - tsfcesat = clip(tsfcesat, 0.00001, tsfcesat) - b = 26.66082 - log(tsfcesat) - td = (b - sqrt(b * b - 223.1986)) / 0.0182758048 - td = self.KtoF(td) - td = where(w > ws, T, td) - return td - -##------------------------------------------------------------------------- -## Calculates RH from the T and Td grids -##------------------------------------------------------------------------- - def calcRH(self, T, Td): - Tc = .556 * (T - 32.0) - Tdc = .556 * (Td - 32.0) - Vt = 6.11 * pow(10,(Tc * 7.5 / (Tc + 237.3))) - Vd = 6.11 * pow(10,(Tdc * 7.5 / (Tdc + 237.3))) - RH = (Vd / Vt) * 100.0 - # Return the new value - return RH - -##------------------------------------------------------------------------- -## Returns the maximum of the specified MaxRH and the RH grids -##-------------------------------------------------------------------------- - def calcMaxRH(self, RH, MaxRH): - if MaxRH is None: - return RH - return maximum(MaxRH, RH) - -##------------------------------------------------------------------------- -## Returns the minimum of the specified MinRH and RH grids -##-------------------------------------------------------------------------- - def calcMinRH(self, RH, MinRH): - if MinRH is None: - return RH - return minimum(MinRH, RH) - -##-------------------------------------------------------------------------- -## Calculates QPF from the total precip field out of the model -##-------------------------------------------------------------------------- - def calcQPF(self, tp_SFC): - qpf = tp_SFC / 25.4 # convert from millimeters to inches - return qpf - - def calcSky(self, rh_c, gh_c, topo, p_SFC): - return self.skyFromRH(rh_c, gh_c, topo, p_SFC) - -##-------------------------------------------------------------------------- -## Calculates Prob. of Precip. based on QPF and RH cube. Where there -## is QPF > 0 ramp the PoP from (0.01, 35%) to 100%. Then in areas -## of QPF < 0.2 raise the PoP if it's very humid. -##-------------------------------------------------------------------------- - def calcPoP(self, gh_c, rh_c, QPF, topo): - rhavg = where(less(gh_c, topo), float32(-1), rh_c) - rhavg[greater(gh_c, topo + 5000 * 0.3048)] = -1 - count = not_equal(rhavg, -1) - rhavg[equal(rhavg, -1)] = 0 - count = add.reduce(count, 0, dtype=float32) - rhavg = add.reduce(rhavg, 0) - ## add this much based on humidity only - dpop = where(count, rhavg / (count + .001), 0) - 70.0 - dpop[less(dpop, -30)] = -30 - ## calculate the base PoP - pop = where(less(QPF, 0.02), QPF * 1000, QPF * 350 + 13) - pop += dpop # add the adjustment based on humidity - pop.clip(0, 100, pop) # clip to 100% - return pop - -##-------------------------------------------------------------------------- -## Calculates the Freezing level based on height and temperature -## cubes. Finds the height at which freezing occurs. -##-------------------------------------------------------------------------- - def calcFzLevel(self, gh_c, t_c, topo): - fzl = self.newGrid(-1) - # for each level in the height cube, find the freezing level - for i in xrange(gh_c.shape[0]): - try: - val = gh_c[i-1] + (gh_c[i] - gh_c[i-1]) / (t_c[i] - t_c[i-1])\ - * (273.15 - t_c[i-1]) - except: - val = gh_c[i] - ## save the height value in fzl - fzl = where(logical_and(equal(fzl, -1), - less_equal(t_c[i], 273.15)), val, fzl) - - return fzl * 3.28 # convert to feet - -##------------------------------------------------------------------------- -## Calculates the Snow level based on wet-bulb zero height. -##------------------------------------------------------------------------- - def calcSnowLevel(self, gh_c, t_c, rh_c): - # Only use the levels that are >= freezind (plus one level) - # This is a performance and memory optimization - clipindex = 2 - for i in xrange(t_c.shape[0]-1, -1, -1): - if maximum.reduce(maximum.reduce(t_c[i])) >= 273.15: - clipindex = i + 1 - break - gh_c = gh_c[:clipindex,:,:] - t_c = t_c[:clipindex,:,:] - rh_c = rh_c[:clipindex,:,:] - - snow = self.newGrid(-1) - # - # make pressure cube - # - pmb=ones_like(gh_c) - for i in xrange(gh_c.shape[0]): - pmb[i]=self.pres[i] - pmb=clip(pmb,1,1050) - # - # convert temps to C and limit to reasonable values - # - tc=t_c-273.15 - tc=clip(tc,-120,60) - # - # limit RH to reasonable values - # - rh=clip(rh_c,0.5,99.5) - # - # calculate the wetbulb temperatures - # (this is expensive - even in numeric python - and somewhat - # wasteful, since you do not need to calculate the wetbulb - # temp for all levels when it may cross zero way down toward - # the bottom. Nevertheless - all the gridpoints will cross - # zero at different levels - so you cannot know ahead of time - # how high up to calculate them. In the end - this was the - # most expedient way to code it - and it works - so I stuck - # with it. - # - wetb=self.Wetbulb(tc,rh,pmb) - tc = rh = pmb = None - # - # find the zero level - # - for i in xrange(1, gh_c.shape[0]): - try: - val=gh_c[i-1]+(gh_c[i]-gh_c[i-1])/(wetb[i]-wetb[i-1])\ - *(-wetb[i-1]) - except: - val=gh_c[i] - snow=where(logical_and(equal(snow,-1),less_equal(wetb[i],0)), - val,snow) - # - # convert to feet - # - snow=snow*3.28 - - return snow - -##-------------------------------------------------------------------------- -## Calculates Snow amount based on the Temp, Freezing level, QPF, -## topo and Weather grid -##-------------------------------------------------------------------------- - def calcSnowAmt(self, T, FzLevel, QPF, topo, Wx): - # figure out the snow to liquid ratio - m1 = less(T, 9) - m2 = greater_equal(T, 30) - snowr = T * -0.5 + 22.5 - snowr[m1] = 20 - snowr[m2] = 0 - # calc. snow amount based on the QPF and the ratio - snowamt = self.empty() - fzLevelMask = less_equal(FzLevel - 1000, topo / 0.3048) - snowamt[fzLevelMask] = snowr[fzLevelMask] * QPF[fzLevelMask] - - # Only make snow at points where the weather is snow - snowmask = logical_or(equal(Wx[0], 1), equal(Wx[0], 3)) - snowmask = logical_or(snowmask, logical_or(equal(Wx[0], 7), - equal(Wx[0], 9))) - snowamt[logical_not(snowmask)] = 0 - return snowamt - -##-------------------------------------------------------------------------- -## Calculate the Haines index based on the temp and RH cubes -## Define self.whichHainesIndex to be "HIGH", "MEDIUM", or "LOW". -## Default is "HIGH". -##-------------------------------------------------------------------------- - def calcHaines(self, t_c, rh_c): - return self.hainesIndex(self.whichHainesIndex, t_c, rh_c) - -##-------------------------------------------------------------------------- -## Calculates the mixing height for the given sfc temperature, -## temperature cube, height cube and topo -##-------------------------------------------------------------------------- - def calcMixHgt(self, T, topo, t_c, gh_c): - mask = greater_equal(gh_c, topo) # points where height > topo - pt = [] - for i in xrange(len(self.pres)): # for each pres. level - p = self.newGrid(self.pres[i]) # get the pres. value in mb - tmp = self.ptemp(t_c[i], p) # calculate the pot. temp - pt = pt + [tmp] # add to the list - pt = array(pt) - pt[mask] = 0 - avg = add.accumulate(pt, 0) - count = add.accumulate(mask, 0) - mh = self.newGrid(-1) - # for each pres. level, calculate a running avg. of pot temp. - # As soon as the next point deviates from the running avg by - # more than 3 deg. C, interpolate to get the mixing height. - for i in xrange(1, avg.shape[0]): - runavg = avg[i] / (count[i] + .0001) - diffpt = pt[i] - runavg - # calc. the interpolated mixing height - tmh = self.linear(pt[i], pt[i-1], gh_c[i], gh_c[i-1], runavg) - # assign new values if the difference is greater than 3 - mh = where(logical_and(logical_and(mask[i], equal(mh, -1)), - greater(diffpt, 3)), tmh, mh) - return (mh - topo) * 3.28 - -##-------------------------------------------------------------------------- -## Converts the lowest available wind level from m/s to knots -##-------------------------------------------------------------------------- - def calcWind(self, wind_FHAG10): - mag = wind_FHAG10[0] # get the wind grids - dir = wind_FHAG10[1] # get wind dir - mag = mag * 1.94 # convert to knots - dir = clip(dir, 0, 359.5) - return (mag, dir) # assemble speed and dir into a tuple - -##-------------------------------------------------------------------------- -## Calculates the wind at 3000 feet AGL. -##-------------------------------------------------------------------------- - def calcFreeWind(self, gh_c, wind_c, topo): - wm = wind_c[0] - wd = wind_c[1] - # Make a grid that's topo + 3000 feet (914 meters) - fatopo = topo + 914.4 # 3000 feet - # find the points that are above the 3000 foot level - mask = greater_equal(gh_c, fatopo) - # initialize the grids into which the value are stored - famag = self.newGrid(-1) - fadir = self.newGrid(-1) - # start at the bottom and store the first point we find that's - # above the topo + 3000 feet level. - for i in xrange(wind_c[0].shape[0]): - # Interpolate (maybe) - magMask = logical_and(equal(famag, -1), mask[i]) - dirMask = logical_and(equal(fadir, -1), mask[i]) - famag[magMask] = wm[i][magMask] - fadir[dirMask] = wd[i][dirMask] - fadir.clip(0, 359.5, fadir) # clip the value to 0, 360 - famag *= 1.94 # convert to knots - return (famag, fadir) # return the tuple of grids - -##-------------------------------------------------------------------------- -## Calculates the average wind vector in the mixed layer as defined -## by the mixing height. This function creates a mask that identifies -## all grid points between the ground and the mixing height and calculates -## a vector average of the wind field in that layer. -##-------------------------------------------------------------------------- - def calcTransWind(self, MixHgt, wind_c, gh_c, topo): - nmh = MixHgt * 0.3048 # convert MixHt from feet -> meters - u, v = self._getUV(wind_c[0], wind_c[1]) # get the wind grids - # set a mask at points between the topo and topo + MixHt - mask = logical_and(greater_equal(gh_c, topo), - less_equal(gh_c, nmh + topo)) - # set the points outside the layer to zero - u[logical_not(mask)] = 0 - v[logical_not(mask)] = 0 - mask = add.reduce(mask).astype(float32) # add up the number of set points vert. - mmask = mask + 0.00001 - # calculate the average value in the mixed layerlayer - u = where(mask, add.reduce(u) / mmask, float32(0)) - v = where(mask, add.reduce(v) / mmask, float32(0)) - # convert u, v to mag, dir - tmag, tdir = self._getMD(u, v) - tdir.clip(0, 359.5, tdir) - tmag *= 1.94 # convert to knots - tmag.clip(0, 125, tmag) # clip speed to 125 knots - return (tmag, tdir) - - -##-------------------------------------------------------------------------- -## Uses a derivation of the Bourgouin allgorithm to calculate precipitation -## type, and other algorithms to determine the coverage and intensity. -## The Bourgoin technique figures out precip type from calculating how -## long a hydrometer is exposed to alternating layers of above zero (C) and -## below zero temperature layers. This tool calculates at each grid point -## which of the four Bourgouin cases apply. Then the appropriate algorithm -## is applied to that case that further refines the precip. type. Once the -## type is determined, other algorithms are used to determine the coverage -## and intensity. See the Weather and Forecasting Journal article Oct. 2000, -## "A Method to Determine Precipitation Types", by Pierre Bourgouin -##-------------------------------------------------------------------------- - def calcWx(self, QPF, T, p_SFC, t_c, gh_c, topo, tp_SFC, cp_SFC, - bli_BL0180): - gh_c = gh_c[:13,:,:] - t_c = t_c[:13,:,:] - T = self.FtoK(T) - p_SFC = p_SFC / 100 # sfc pres. in mb - pres = self.pres - a1 = self.empty() - a2 = self.empty() - a3 = self.empty() - aindex = self.empty() - # Go through the levels to identify each case type 0-3 - for i in xrange(1, gh_c.shape[0] - 1): - # get the sfc pres. and temp. - pbot = where(greater(gh_c[i-1], topo), pres[i-1], p_SFC) - tbot = where(greater(gh_c[i-1], topo), t_c[i-1], T) - # Calculate the area of this layer in Temp/pres coordinates - a11, a22, cross = self.getAreas(pbot, tbot, pres[i], t_c[i]) - topomask = greater(gh_c[i], topo) - - m = logical_and(equal(aindex, 0), topomask) - a1[m] += a11 - - m = logical_and(equal(aindex, 1), topomask) - a2[m] += a11 - - m = logical_and(equal(aindex, 2), topomask) - a3[m] += a11 - - topomask = logical_and(topomask, cross) - aindex[topomask] += 1 - - m = logical_and(equal(aindex, 0), topomask) - a1[m] += a22 - - m = logical_and(equal(aindex, 1), topomask) - a2[m] += a22 - - m = logical_and(equal(aindex, 2), topomask) - a3[m] += a22 - - # Now apply a different algorithm for each type - key = ['::::', - "Wide:S:-::", "Wide:R:-::", - "Wide:S:-::^Wide:R:-::", - 'Wide:ZR:-::', 'Wide:IP:-::', - 'Wide:ZR:-::^Wide:IP:-::', - "Sct:SW:-::", "Sct:RW:-::", - "Sct:SW:-::^Sct:RW:-::", - "Chc:ZR:-::", 'Chc:IP:-::', - 'Chc:ZR:-::^Chc:IP:-::'] - - wx = self.empty(int8) - # Case d (snow) - snowmask = equal(aindex, 0) - wx[logical_and(snowmask, greater(a1, 0))] = 2 - wx[logical_and(snowmask, less_equal(a1, 0))] = 1 - - # Case c (rain / snow / rainSnowMix) - srmask = equal(aindex, 1) - wx[logical_and(srmask, less(a1, 5.6))] = 1 - wx[logical_and(srmask, greater(a1, 13.2))] = 2 - wx[logical_and(srmask, - logical_and(greater_equal(a1, 5.6), - less(a1, 13.2)))] = 3 - - - # Case a (Freezing Rain / Ice Pellets) - ipmask = equal(aindex, 2) - ipm = greater(a1, a2 * 0.66 + 66) - wx[logical_and(ipmask, ipm)] = 5 - zrm = less(a1, a2 * 0.66 + 46) - wx[logical_and(ipmask, zrm)] = 4 - zrm = logical_not(zrm) - ipm = logical_not(ipm) - wx[logical_and(ipmask, logical_and(zrm, ipm))] = 6 - - # Case b (Ice pellets / rain) - cmask = greater_equal(aindex, 3) - ipmask = logical_and(less(a3, 2), cmask) - wx[logical_and(ipmask, less(a1, 5.6))] = 1 - wx[logical_and(ipmask, greater(a1, 13.2))] = 2 - wx[logical_and(ipmask, logical_and(greater_equal(a1, 5.6), - less_equal(a1, 13.2)))] = 3 - - ipmask = logical_and(greater_equal(a3, 2), cmask) - wx[logical_and(ipmask, greater(a1, 66 + 0.66 * a2))] = 5 - wx[logical_and(ipmask, less(a1, 46 + 0.66 * a2))] = 4 - wx[logical_and(ipmask, logical_and(greater_equal(a1, 46 + 0.66 * a2), - less_equal(a1, 66 + 0.66 * a2)))] = 6 - - # Make showers (scattered/Chc) - convecMask = greater(cp_SFC / (tp_SFC + .001), 0.5) - wx[logical_and(not_equal(wx, 0), convecMask)] += 6 - - # Thunder - for i in xrange(len(key)): - tcov = string.split(key[i], ":")[0] - if tcov == "Chc" or tcov == "": - tcov = "Sct" - key.append(key[i] + "^" + tcov - + ":T:::") - wx[less_equal(bli_BL0180, -3)] += 13 - - # No wx where no qpf - wx[less(QPF, 0.01)] = 0 - return(wx, key) - -##-------------------------------------------------------------------------- -## Calculates chance of wetting rain based on QPF. -##-------------------------------------------------------------------------- - def calcCWR(self, QPF): - m1 = less(QPF, 0.01) # all the places that are dry - m2 = greater_equal(QPF, 0.3) # all the places that are wet - # all the places that are 0.01 to 0.10 - m3 = logical_and(greater_equal(QPF, 0.01), less_equal(QPF, 0.1)) - # all the places that are 0.1 to 0.3 - m4 = logical_and(greater(QPF, 0.1), less(QPF, 0.3)) - # assign 0 to the dry grid point, 100 to the wet grid points, - # and a ramping function to all point in between - cwr = where(m1, float32(0), where(m2, float32(100), - where(m3, 444.4 * (QPF - 0.01) + 10, - where(m4, 250 * (QPF - 0.1) + 50, - QPF)))) - return cwr - -##-------------------------------------------------------------------------- -## Calculates Lightning Activity Level based on total precip., lifted index -## and 3-D relative humidity. -##-------------------------------------------------------------------------- - def calcLAL(self, bli_BL0180, tp_SFC, cp_SFC, rh_c, rh_FHAG2): - lal = self.newGrid(1) - # Add one to lal if we have 0.5 mm of precip. - lal[logical_and(greater(cp_SFC, 0), greater(tp_SFC / cp_SFC, 0.5))] += 1 - - # make an average rh field - midrh = add.reduce(rh_c[6:9], 0) / 3 - # Add one to lal if mid-level rh high and low level rh low - lal[logical_and(greater(midrh, 70), less(rh_FHAG2, 30))] += 1 - - # Add on to lal if lifted index is <-3 and another if <-5 - lal[less(bli_BL0180, -3)] += 1 - lal[less(bli_BL0180, -5)] += 1 - return lal - - -def main(): - NAM12Forecaster().run() - diff --git a/cave/com.raytheon.viz.gfe/help/EXAMPLESmartInit_NewModel.py b/cave/com.raytheon.viz.gfe/help/EXAMPLESmartInit_NewModel.py deleted file mode 100644 index c2076c02af..0000000000 --- a/cave/com.raytheon.viz.gfe/help/EXAMPLESmartInit_NewModel.py +++ /dev/null @@ -1,46 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## -#Example file for adding a new model. There are other steps that are -#necessary to make this work, such as adding new databases to your localConfig -#and setting up the init stream to recognize this file. Refer to the -#SmartInit documentation for details. - -#This example will extract the WaveHeight and Wind information out of the -#GWW model and make an IFP database with that information. - -from Init import * -class GWWForecaster(Forecaster): - def __init__(self): - Forecaster.__init__(self, "GWW", "GWW") - - def calcWaveHeight(self, htsgw_SFC): - grid = where(greater(htsgw_SFC, 50), 0.0, htsgw_SFC/3.048) - return clip(grid, 0, 100) - - def calcWind(self, wind_SFC): - mag = where(greater(wind_SFC[0], 50), float32(0), wind_SFC[0]*1.94) - dir = where(greater(wind_SFC[0], 50), float32(0), wind_SFC[1]) - dir = clip(dir, 0, 359.5) - return (mag, dir) - -def main(): - GWWForecaster().run() - - diff --git a/cave/com.raytheon.viz.gfe/help/EXAMPLEimage.py b/cave/com.raytheon.viz.gfe/help/EXAMPLEimage.py deleted file mode 100644 index dc554f8702..0000000000 --- a/cave/com.raytheon.viz.gfe/help/EXAMPLEimage.py +++ /dev/null @@ -1,46 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## -# Example ifpIMAGE configuration file. - -# Must always import from gfeConfig (or your site configuration) -from gfeConfig import * -import gfeConfig - - -# Defines the T and Wind Official database weather elements for display -Png_parms = ['T_SFC:_Official -1', 'Wind_SFC:_Official -1'] - -# Defines the T should be the image -Png_image = 'T' - -# We want the legend to be in localtime, not Zulu time -Png_localTime = 1 - -# We only want the States map background -MapBackgrounds_default = ['States'] - -# Clip the data to the edit area called "BOU" -BOU_mask = "BOU" - -# Limit the color table to a range of 20 to 90. -T_maxColorTableValue = 90.0 -T_minColorTableValue = 20.0 - - diff --git a/cave/com.raytheon.viz.gfe/help/EXAMPLEimageBackColor.py b/cave/com.raytheon.viz.gfe/help/EXAMPLEimageBackColor.py deleted file mode 100644 index 8d4b0d9e05..0000000000 --- a/cave/com.raytheon.viz.gfe/help/EXAMPLEimageBackColor.py +++ /dev/null @@ -1,39 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## -# Example ifpIMAGE configuration file. - -# Must always import from gfeConfig (or your site configuration) -from gfeConfig import * -import gfeConfig - - -# Defines the T as the displayable weather element -Png_parms = ['T_SFC:_Official -1'] -Png_image = 'T' - -# Change the background color to white -bgColor = 'white' - -# But since the legend is normally written in white, we also need -# to change its color -ImageLegend_color = 'blue' - - - diff --git a/cave/com.raytheon.viz.gfe/help/EXAMPLEimageBorder.py b/cave/com.raytheon.viz.gfe/help/EXAMPLEimageBorder.py deleted file mode 100644 index a34a437f04..0000000000 --- a/cave/com.raytheon.viz.gfe/help/EXAMPLEimageBorder.py +++ /dev/null @@ -1,33 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## -# Example ifpIMAGE configuration file. - -# Must always import from gfeConfig (or your site configuration) -from gfeConfig import * -import gfeConfig - -# Specify the expansion values of the border. -OfficeDomain_expandLeft = 5 -OfficeDomain_expandRight = 20 -OfficeDomain_expandTop = 10 -OfficeDomain_expandBottom = 30 - - - diff --git a/cave/com.raytheon.viz.gfe/help/EXAMPLEimageColorTable.py b/cave/com.raytheon.viz.gfe/help/EXAMPLEimageColorTable.py deleted file mode 100644 index e18d6d85cb..0000000000 --- a/cave/com.raytheon.viz.gfe/help/EXAMPLEimageColorTable.py +++ /dev/null @@ -1,45 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## -# Example ifpIMAGE configuration file. - -# Must always import from gfeConfig (or your site configuration) -from gfeConfig import * -import gfeConfig - - -# Defines the T as the weather element to display -Png_parms = ['T_SFC:_Official -1'] - -# Defines the T should be the image -Png_image = 'T' - -# Want to use the Gridded Data color table -T_defaultColorTable = 'Gridded Data' - -# Want to change the mapping from 0 to 50 degrees -T_maxColorTableValue = 50.0 -T_minColorTableValue = 0.0 - -# It doesn't make sense, but we will use a logrithmetic factor -# instead of linear for temperature -T_LogFactor = 0.01 - - - diff --git a/cave/com.raytheon.viz.gfe/help/EXAMPLEimageGraphicAtt.py b/cave/com.raytheon.viz.gfe/help/EXAMPLEimageGraphicAtt.py deleted file mode 100644 index 5ba0aa6694..0000000000 --- a/cave/com.raytheon.viz.gfe/help/EXAMPLEimageGraphicAtt.py +++ /dev/null @@ -1,46 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## -# Example ifpIMAGE configuration file. - -# Must always import from gfeConfig (or your site configuration) -from gfeConfig import * -import gfeConfig - - -# Defines the T, Wind as the weather elements to display -Png_parms = ['T_SFC:_Official -1', 'Wind_SFC:_Official -1'] - -# Make the Temperature contour labels larger, make the Temperature -# contours blue, decrease the density of the contours -Contour_font = 4 -T_graphicColor = 'blue' -T_density = -2 - -# Make the Wind red, make the wind barbs bigger, increase the -# density (packing) of the wind barbs. -Wind_graphicColor = 'red' -Wind_fontOffset = 2 -Wind_density = 20 - - - - - - diff --git a/cave/com.raytheon.viz.gfe/help/EXAMPLEimageGraphicTypes.py b/cave/com.raytheon.viz.gfe/help/EXAMPLEimageGraphicTypes.py deleted file mode 100644 index 995120980d..0000000000 --- a/cave/com.raytheon.viz.gfe/help/EXAMPLEimageGraphicTypes.py +++ /dev/null @@ -1,36 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## -# Example ifpIMAGE configuration file. - -# Must always import from gfeConfig (or your site configuration) -from gfeConfig import * -import gfeConfig - - -# Defines the T weather element for display -Png_parms = ['T_SFC:_Official -1'] - -# Defines the T should be the image -Png_image = 'T' - -# We want both contours and the image for Temperature -T_spatialImageType = ["Image","Contour"] - - diff --git a/cave/com.raytheon.viz.gfe/help/EXAMPLEimageInfoFile.txt b/cave/com.raytheon.viz.gfe/help/EXAMPLEimageInfoFile.txt deleted file mode 100644 index 1f97b7759a..0000000000 --- a/cave/com.raytheon.viz.gfe/help/EXAMPLEimageInfoFile.txt +++ /dev/null @@ -1,4 +0,0 @@ -ValidTime: 20010317_0000 -NumOfGrids: 2 -Grid: T_SFC:BOU_GRID__Fcst_00000000_0000 20010317_0000 20010317_0100 blue IMAGE -Grid: Wind_SFC:BOU_GRID__Fcst_00000000_0000 20010317_0000 20010317_0100 #00ff00 GRAPHIC diff --git a/cave/com.raytheon.viz.gfe/help/EXAMPLEimageLegend.py b/cave/com.raytheon.viz.gfe/help/EXAMPLEimageLegend.py deleted file mode 100644 index ffd70731f2..0000000000 --- a/cave/com.raytheon.viz.gfe/help/EXAMPLEimageLegend.py +++ /dev/null @@ -1,33 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## -# Example ifpIMAGE configuration file. - -# Must always import from gfeConfig (or your site configuration) -from gfeConfig import * -import gfeConfig - - -# Defines the T as the displayable weather element -Png_parms = ['T_SFC:_Official -1'] -Png_image = 'T' - -# Turn off the legend -Png_legend = 0 - diff --git a/cave/com.raytheon.viz.gfe/help/EXAMPLEimageLegendFormat.py b/cave/com.raytheon.viz.gfe/help/EXAMPLEimageLegendFormat.py deleted file mode 100644 index c001636bcf..0000000000 --- a/cave/com.raytheon.viz.gfe/help/EXAMPLEimageLegendFormat.py +++ /dev/null @@ -1,36 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## -# Example ifpIMAGE configuration file. - -# Must always import from gfeConfig (or your site configuration) -from gfeConfig import * -import gfeConfig - - -# Defines the Wind and Wx as the displayable weather element -Png_parms = ['Wind_SFC:_Official -1', 'Wx_SFC:_Official -1'] - -# Change the format of the legend -Png_localTime = 1 -Png_legendFormat_LT_dur = "%H hours " -Png_legendFormat_LT_start = " " -Png_legendFormat_LT_end = "ending %a %b %d, %Y %I:%M %p" - - diff --git a/cave/com.raytheon.viz.gfe/help/EXAMPLEimageLegendTime.py b/cave/com.raytheon.viz.gfe/help/EXAMPLEimageLegendTime.py deleted file mode 100644 index f20cbd2e33..0000000000 --- a/cave/com.raytheon.viz.gfe/help/EXAMPLEimageLegendTime.py +++ /dev/null @@ -1,33 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## -# Example ifpIMAGE configuration file. - -# Must always import from gfeConfig (or your site configuration) -from gfeConfig import * -import gfeConfig - - -# Defines the T as the displayable weather element -Png_parms = ['T_SFC:_Official -1'] -Png_image = 'T' - -# Set the legend to local time. -Png_localTime = 1 - diff --git a/cave/com.raytheon.viz.gfe/help/EXAMPLEimageLegendTitle.py b/cave/com.raytheon.viz.gfe/help/EXAMPLEimageLegendTitle.py deleted file mode 100644 index 2e2ece912b..0000000000 --- a/cave/com.raytheon.viz.gfe/help/EXAMPLEimageLegendTitle.py +++ /dev/null @@ -1,34 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## -# Example ifpIMAGE configuration file. - -# Must always import from gfeConfig (or your site configuration) -from gfeConfig import * -import gfeConfig - - -# Defines the T as the displayable weather element -Png_parms = ['T_SFC:_Official -1'] -Png_image = 'T' - -# Use the long name for the weather element title -Png_descriptiveWeName = "LONG" - - diff --git a/cave/com.raytheon.viz.gfe/help/EXAMPLEimageLogo.py b/cave/com.raytheon.viz.gfe/help/EXAMPLEimageLogo.py deleted file mode 100644 index 765a508ce4..0000000000 --- a/cave/com.raytheon.viz.gfe/help/EXAMPLEimageLogo.py +++ /dev/null @@ -1,39 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## -# Example ifpIMAGE configuration file - -# Must always import from gfeConfig (or your site configuration) -from gfeConfig import * -import gfeConfig - -# make the legend smaller than the default -SELegend_font = 2 - -# set the width to 350 -Png_width = 350 - -# MaxT is what we are generating images for -Png_image = 'MaxT' -Png_parms = ['MaxT_SFC:_Fcst -1'] - -# Turn on the logo -Png_logo = 1 -Png_logoString = "NWS Timbuktoo" - diff --git a/cave/com.raytheon.viz.gfe/help/EXAMPLEimageMapAttr.py b/cave/com.raytheon.viz.gfe/help/EXAMPLEimageMapAttr.py deleted file mode 100644 index 180740c308..0000000000 --- a/cave/com.raytheon.viz.gfe/help/EXAMPLEimageMapAttr.py +++ /dev/null @@ -1,47 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## -# Example ifpIMAGE configuration file. - -# Must always import from gfeConfig (or your site configuration) -from gfeConfig import * -import gfeConfig - - -# Defines the T as the weather element to display -Png_parms = ['T_SFC:_Official -1'] - -# Defines the T should be the image -Png_image = 'T' - -# Set the State map background to red with fat lines -States_graphicColor = 'red' -States_lineWidth = 3 - -# Set the CWA map background to green and make it dotted -CWA_graphicColor = 'green' -CWA_linePattern = "DOTTED" - - - - - - - - diff --git a/cave/com.raytheon.viz.gfe/help/EXAMPLEimageMaps.py b/cave/com.raytheon.viz.gfe/help/EXAMPLEimageMaps.py deleted file mode 100644 index 594b0bbd9c..0000000000 --- a/cave/com.raytheon.viz.gfe/help/EXAMPLEimageMaps.py +++ /dev/null @@ -1,40 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## -# Example ifpIMAGE configuration file. - -# Must always import from gfeConfig (or your site configuration) -from gfeConfig import * -import gfeConfig - - -# Defines the T as the weather element to display -Png_parms = ['T_SFC:_Official -1'] - -# Defines the T should be the image -Png_image = 'T' - -# Set the set of background maps to States and Counties -MapBackgrounds_default = ['States', 'Counties'] - - - - - - diff --git a/cave/com.raytheon.viz.gfe/help/EXAMPLEimageMasking.py b/cave/com.raytheon.viz.gfe/help/EXAMPLEimageMasking.py deleted file mode 100644 index 3a7c6ae0f6..0000000000 --- a/cave/com.raytheon.viz.gfe/help/EXAMPLEimageMasking.py +++ /dev/null @@ -1,41 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## -# Example ifpIMAGE configuration file. - -# Must always import from gfeConfig (or your site configuration) -from gfeConfig import * -import gfeConfig - - -# Defines the T as the weather element to display -Png_parms = ['T_SFC:_Official -1'] - -# Defines the T should be the image -Png_image = 'T' - -# Mask the data based on the edit area called "BOU". The Python -# variable name is the site (e.g., BOU). -BOU_mask = "BOU" - - - - - - diff --git a/cave/com.raytheon.viz.gfe/help/EXAMPLEimageOverlay.py b/cave/com.raytheon.viz.gfe/help/EXAMPLEimageOverlay.py deleted file mode 100644 index 0ca6853710..0000000000 --- a/cave/com.raytheon.viz.gfe/help/EXAMPLEimageOverlay.py +++ /dev/null @@ -1,36 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## -# Example ifpIMAGE configuration file. - -# Must always import from gfeConfig (or your site configuration) -from gfeConfig import * -import gfeConfig - - -# Defines the T and Wind Official database weather elements for display -Png_parms = ['T_SFC:_Official -1', 'Wind_SFC:_Official -1'] - -# Defines the T should be the image -Png_image = 'T' - -# We want the Wind to be shown as Wind Barbs -Wind_spatialGraphicType = ["WindBarb"] - - diff --git a/cave/com.raytheon.viz.gfe/help/EXAMPLEimagePngParms.py b/cave/com.raytheon.viz.gfe/help/EXAMPLEimagePngParms.py deleted file mode 100644 index aadd5179db..0000000000 --- a/cave/com.raytheon.viz.gfe/help/EXAMPLEimagePngParms.py +++ /dev/null @@ -1,29 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## -# Example ifpIMAGE configuration file. - -# Must always import from gfeConfig (or your site configuration) -from gfeConfig import * -import gfeConfig - -# Defines the T and Wind Official database weather elements for display -Png_parms = ['T_SFC:_Official -1', 'Wind_SFC:_Official -1'] - - diff --git a/cave/com.raytheon.viz.gfe/help/EXAMPLEimagePrefix.py b/cave/com.raytheon.viz.gfe/help/EXAMPLEimagePrefix.py deleted file mode 100644 index 1431b0747e..0000000000 --- a/cave/com.raytheon.viz.gfe/help/EXAMPLEimagePrefix.py +++ /dev/null @@ -1,49 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## -# Example ifpIMAGE configuration file. - -# Must always import from gfeConfig (or your site configuration) -from gfeConfig import * -import gfeConfig - - -# Defines the T and Wind Official database weather elements for display -Png_parms = ['T_SFC:_Official -1', 'Wind_SFC:_Official -1'] - -# Defines the T should be the image -Png_image = 'T' - -# We want the legend to be in localtime, not Zulu time -Png_localTime = 1 - -# We only want the States map background -MapBackgrounds_default = ['States'] - -# Clip the data to the edit area called "BOU" -BOU_mask = "BOU" - -# Limit the color table to a range of 20 to 90. -T_maxColorTableValue = 90.0 -T_minColorTableValue = 20.0 - -# Add a prefix to the filename -Png_filenamePrefix = 'T_Wind_' - - diff --git a/cave/com.raytheon.viz.gfe/help/EXAMPLEimageSamples.py b/cave/com.raytheon.viz.gfe/help/EXAMPLEimageSamples.py deleted file mode 100644 index 5855af235f..0000000000 --- a/cave/com.raytheon.viz.gfe/help/EXAMPLEimageSamples.py +++ /dev/null @@ -1,48 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## -# Example ifpIMAGE configuration file. - -# Must always import from gfeConfig (or your site configuration) -from gfeConfig import * -import gfeConfig - - -# Defines the T and Wind the weather elements to display -Png_parms = ['T_SFC:_Official -1', 'Wind_SFC:_Official -1'] - -# Defines the T should be the image -Png_image = 'T' - -# Add contours to the Temperature -T_spatialImageType = ["Image", "Contour"] - -# Use the sample set defined as pngSamples -DefaultSamples = ['pngSamples'] - -# set the format for the wind samples to "ddff" -WindFormat = "ddff" - -# turn off the sample shadowing -ShowSampleShadows = "no" - - - - - diff --git a/cave/com.raytheon.viz.gfe/help/EXAMPLEimageSingleImage.py b/cave/com.raytheon.viz.gfe/help/EXAMPLEimageSingleImage.py deleted file mode 100644 index eae5ad2538..0000000000 --- a/cave/com.raytheon.viz.gfe/help/EXAMPLEimageSingleImage.py +++ /dev/null @@ -1,34 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## -# Example ifpIMAGE configuration file. - -# Must always import from gfeConfig (or your site configuration) -from gfeConfig import * -import gfeConfig - - -# Defines the T for the only weather element to display -Png_parms = ['T_SFC:_Official -1'] - -# Defines the T should be the image -Png_image = 'T' - - - diff --git a/cave/com.raytheon.viz.gfe/help/EXAMPLEimageSize.py b/cave/com.raytheon.viz.gfe/help/EXAMPLEimageSize.py deleted file mode 100644 index 20e8390690..0000000000 --- a/cave/com.raytheon.viz.gfe/help/EXAMPLEimageSize.py +++ /dev/null @@ -1,29 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## -# Example ifpIMAGE configuration file. - -# Must always import from gfeConfig (or your site configuration) -from gfeConfig import * -import gfeConfig - -# Simply change the output size of the image to 100 pixels in height -Png_height = 100 - - diff --git a/cave/com.raytheon.viz.gfe/help/EXAMPLEimageSkyImage.py b/cave/com.raytheon.viz.gfe/help/EXAMPLEimageSkyImage.py deleted file mode 100644 index d04d6a3a33..0000000000 --- a/cave/com.raytheon.viz.gfe/help/EXAMPLEimageSkyImage.py +++ /dev/null @@ -1,34 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## -# Example ifpIMAGE configuration file. - -# Must always import from gfeConfig (or your site configuration) -from gfeConfig import * -import gfeConfig - - -# Defines the Sky to be displayed as the only weather element -Png_parms = ['Sky_SFC:_Official -1'] - -# Defines the Sky should be the image, comment this out if you want -# Sky to be a graphic. -Png_image = 'Sky' - - diff --git a/cave/com.raytheon.viz.gfe/help/EXAMPLEimageSmooth.py b/cave/com.raytheon.viz.gfe/help/EXAMPLEimageSmooth.py deleted file mode 100644 index 8e65f838c5..0000000000 --- a/cave/com.raytheon.viz.gfe/help/EXAMPLEimageSmooth.py +++ /dev/null @@ -1,33 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## -# Example ifpIMAGE configuration file. - -# Must always import from gfeConfig (or your site configuration) -from gfeConfig import * -import gfeConfig - - -# Defines T the weather element to be display -Png_parms = ['T_SFC:_Official -1'] - -Png_smoothImage = 1 - - - diff --git a/cave/com.raytheon.viz.gfe/help/EXAMPLEimageSmoothClip.py b/cave/com.raytheon.viz.gfe/help/EXAMPLEimageSmoothClip.py deleted file mode 100644 index 595c81f771..0000000000 --- a/cave/com.raytheon.viz.gfe/help/EXAMPLEimageSmoothClip.py +++ /dev/null @@ -1,39 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## -# Example ifpIMAGE configuration file. - -# Must always import from gfeConfig (or your site configuration) -from gfeConfig import * -import gfeConfig - - -# Defines T as the weather element to be display -Png_parms = ['T_SFC:_Official -1'] - -# Defines 'BOU' CWA as the mask -BOU_mask = "BOU" - -# Sets the Temperature grid to the 'BOU' mask -BOU_T_mask = "BOU" - -Png_smoothImage = 1 -Png_smoothClip = 0 - - diff --git a/cave/com.raytheon.viz.gfe/help/EXAMPLEimageWx.py b/cave/com.raytheon.viz.gfe/help/EXAMPLEimageWx.py deleted file mode 100644 index 07033f539c..0000000000 --- a/cave/com.raytheon.viz.gfe/help/EXAMPLEimageWx.py +++ /dev/null @@ -1,47 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## -# Example ifpIMAGE configuration file. - -# Must always import from gfeConfig (or your site configuration) -from gfeConfig import * -import gfeConfig - - -# Defines Wx as the display and make it an image -Png_parms = ['Wx_SFC:_Official -1'] -Png_image = 'Wx' - -# Change the color/pattern mapping -WeatherCoverage_names = ["Iso", "WSct", "Sct", "Num", "Wide", "Ocnl", "SChc", - "Chc", "Lkly", "Def", "Patchy", ""] -WeatherCoverage_fillPatterns = ["OCNL", "WIDE_SCATTERED", - "SCATTERED", "LKLY", "WHOLE", "OCNL", - "WIDE_SCATTERED", "SCATTERED", "LKLY", - "WIDE", "SCATTERED", "WHOLE"] -WeatherType_names = ["", "T", "A", "R", "RW", "L", "ZR", "ZL", - "S", "SW", "IP", "F", "H", "BS", "K", "BD", - "SA", "LC", "FR", "AT", "TRW"] -WeatherType_colors = ["brown", "red3", "DeepPink", "Green", - "ForestGreen", "CadetBlue1", "darkorange1", - "goldenrod1", "blue", "Grey65", "plum1", - "khaki4", "Gray75", "snow", "grey30", "Brown", - "blue1", "coral1", "pale turquoise", "DeepPink", - "red3"] - diff --git a/cave/com.raytheon.viz.gfe/help/EXAMPLEinterval.py b/cave/com.raytheon.viz.gfe/help/EXAMPLEinterval.py deleted file mode 100644 index 9f2aa84fa4..0000000000 --- a/cave/com.raytheon.viz.gfe/help/EXAMPLEinterval.py +++ /dev/null @@ -1,40 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## -# Example ifpIMAGE configuration file. - -# Must always import from gfeConfig (or your site configuration) -from gfeConfig import * -import gfeConfig - - -# Defines T to be display and as an image -Png_parms = ['T_SFC:_Official -1'] -Png_image = 'T' - -#To display the snapshotTime at the interval offsets -Png_snapshotTime = 1 - -#Set the interval to 6 and the offset to 1. This will produce grids at -#01z, 07z, 13z and 19z. -Png_interval = 6 -Png_intervalOffset = 1 - - - diff --git a/cave/com.raytheon.viz.gfe/help/EXAMPLElocalConfig.py b/cave/com.raytheon.viz.gfe/help/EXAMPLElocalConfig.py deleted file mode 100644 index 9d93d6ef38..0000000000 --- a/cave/com.raytheon.viz.gfe/help/EXAMPLElocalConfig.py +++ /dev/null @@ -1,30 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## -# This is an example localConfig.py file - -# Always include these lines at the top of your localConfig.py file. -from serverConfig import * -import serverConfig - -# Add relative humidity to forecast and official databases -rh = ("RH", SCALAR, "%", "Relative Humidity", 100.0, 0.0, 0, NO) -parms = [([rh], TC1)] - - diff --git a/cave/com.raytheon.viz.gfe/help/EXAMPLElocalConfigAddElement.py b/cave/com.raytheon.viz.gfe/help/EXAMPLElocalConfigAddElement.py deleted file mode 100644 index 071f9dce40..0000000000 --- a/cave/com.raytheon.viz.gfe/help/EXAMPLElocalConfigAddElement.py +++ /dev/null @@ -1,31 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## -# This is an example localConfig.py file - -# Always include these lines at the top of your localConfig.py file. -from serverConfig import * -import serverConfig - -# Add relative humidity to forecast and official databases -# The time constraints will be the 1 hr standard -rh = ("RH", SCALAR, "%", "Relative Humidity", 100.0, 0.0, 0, NO) -parms = [([rh], TC1)] - - diff --git a/cave/com.raytheon.viz.gfe/help/EXAMPLElocalConfigD2DDIR.py b/cave/com.raytheon.viz.gfe/help/EXAMPLElocalConfigD2DDIR.py deleted file mode 100644 index ea9b1b345a..0000000000 --- a/cave/com.raytheon.viz.gfe/help/EXAMPLElocalConfigD2DDIR.py +++ /dev/null @@ -1,31 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## -# This is an example localConfig.py file - -# Always include these lines at the top of your localConfig.py file. -from serverConfig import * -import serverConfig - -# modifying the list of D2DMODELS directories seen from the GFE, and scanned -# by EDEX -serverConfig.D2DMODELS.append = (('SREF12', 'SREF')) - - - diff --git a/cave/com.raytheon.viz.gfe/help/EXAMPLElocalConfigModParmGroups.py b/cave/com.raytheon.viz.gfe/help/EXAMPLElocalConfigModParmGroups.py deleted file mode 100644 index 765f38abec..0000000000 --- a/cave/com.raytheon.viz.gfe/help/EXAMPLElocalConfigModParmGroups.py +++ /dev/null @@ -1,42 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## -# This is an example localConfig.py file to modify the weather element -# and time constraint relationship for the Fcst and Official Databases -# to the following: -# T, Td, Wind, Wx, Sky: 3 hours long, no gaps -# MaxT : 4am - 10pm local time -# MinT : 4pm - 10am local time - -# Always include these lines at the top of your localConfig.py file. -from serverConfig import * -import serverConfig - -# define the new time constraints for MaxT and MinT. Doesn't really matter -# what I call them. -MaxTTC18 = localTC(4*HOUR, 24*HOUR, 18*HOUR, 0) -MinTTC18 = localTC(16*HOUR, 24*HOUR, 18*HOUR, 0) - -# define the new parm groupings. Can only use one parms= in the config file. -parms = [([T, Td, Wind, Wx, Sky], TC3NG), - ([MaxT], MaxTTC18), ([MinT], MinTTC18)] - - - - diff --git a/cave/com.raytheon.viz.gfe/help/EXAMPLElocalConfigModWxElem.py b/cave/com.raytheon.viz.gfe/help/EXAMPLElocalConfigModWxElem.py deleted file mode 100644 index 10a3b48db0..0000000000 --- a/cave/com.raytheon.viz.gfe/help/EXAMPLElocalConfigModWxElem.py +++ /dev/null @@ -1,29 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## -# This is an example localConfig.py file - -# Always include these lines at the top of your localConfig.py file. -from serverConfig import * -import serverConfig - -# Modify the maximum and minimum temperature values to -60 to +120. -serverConfig.Temp = ("T", SCALAR, "F", "Surface Temperature", \ - 120.0, -60.0, 0, NO) - diff --git a/cave/com.raytheon.viz.gfe/help/EXAMPLElocalConfigNewDB.py b/cave/com.raytheon.viz.gfe/help/EXAMPLElocalConfigNewDB.py deleted file mode 100644 index bfb13ef3bb..0000000000 --- a/cave/com.raytheon.viz.gfe/help/EXAMPLElocalConfigNewDB.py +++ /dev/null @@ -1,54 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## -# This is an example localConfig.py file - -# Always include these lines at the top of your localConfig.py file. -from serverConfig import * -import serverConfig - -# Adding a new database is fairly complicated. Multiple steps must be -# defined and done in the correct order. - -# We want T, Td, rh, and maxrh in this database. Since rh and max rh are -# not defined in serverConfig, we add it in localConfig.py. -rh = ("RH", SCALAR, "%", "Relative Humidity", 100.0, 0.0, 0, NO) -maxrh = ("MaxRH", SCALAR, "%", "Maximum Relative Humidity", 100.0, 0.0, 0, NO) - -# We want the maxRH to have a special time constraint that is not defined -# in serverConfig. The other elements use already defined configurations. -# This time constraint starts at 6am and is 4 hours long, repeats daily. -LT4gap = localTC(6*HOUR, 24*HOUR, 4*HOUR, 0) - -# Now we define the database attributes. Our database is called Ag, is -# model-based (not singleton), and we only want 1 version of it. -Ag = ('Ag', GRID, '', NO, NO, 1, 0) - -# Now we define the new parm groupings which relate weather elements to -# time constraints. The T and Td come from serverConfig.py. The T, Td, and -# rh get the basic 1 hourly time constraints. -AG_MODEL = [([Temp,Td,rh], TC1), ([maxrh], LT4gap)] - -# Very important step so that server sees this new definition. -# There can only be ONE dbs line in the localConfig.py -dbs = [(Ag, AG_MODEL)] - - - - diff --git a/cave/com.raytheon.viz.gfe/help/EXAMPLElocalConfigProjection.py b/cave/com.raytheon.viz.gfe/help/EXAMPLElocalConfigProjection.py deleted file mode 100644 index 90b666c564..0000000000 --- a/cave/com.raytheon.viz.gfe/help/EXAMPLElocalConfigProjection.py +++ /dev/null @@ -1,40 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## -# This is an example localConfig.py file - -# Always include these lines at the top of your localConfig.py file. -from serverConfig import * -import serverConfig - -# We want to change the projection so that North is up for our longitude. -# Basically we still want to keep the Grid211 and define a new one. -# Here is the definition for the new projection -Local211 = ('Local211', LAMBERT_CONFORMAL, - (-133.459, 12.190), (-49.385, 57.290), (-116.0, 25.0), - 25.0, 25.0, (1, 1), (93, 65), 0.0, 0.0, 0.0) - -# Now we need to tell the server that our site (Boise in this example) -# should use this new projection. We need to completely redefine the -# grid domain information for the site and include the new projection. -SITES['BOI'] = ([45, 45], (25.00, 34.00), (11.0, 11.0), 'MST7MDT', Local211, 'wfo') - - - - diff --git a/cave/com.raytheon.viz.gfe/help/EXAMPLElocalConfigResolution.py b/cave/com.raytheon.viz.gfe/help/EXAMPLElocalConfigResolution.py deleted file mode 100644 index 0dfedc5cfb..0000000000 --- a/cave/com.raytheon.viz.gfe/help/EXAMPLElocalConfigResolution.py +++ /dev/null @@ -1,31 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## -# This is an example localConfig.py file - -# Always include these lines at the top of your localConfig.py file. -from serverConfig import * -import serverConfig - -# We wish to have 5 km resolution for our site (SLC). The approximate -# grid size will be 144. -SITES['SLC'] = ([144, 144], (30.00, 28.00), (10.0, 10.0), 'MST7MDT', Grid211, - 'wfo') - - diff --git a/cave/com.raytheon.viz.gfe/help/EXAMPLElocalConfigSATDIR.py b/cave/com.raytheon.viz.gfe/help/EXAMPLElocalConfigSATDIR.py deleted file mode 100644 index 9f81383884..0000000000 --- a/cave/com.raytheon.viz.gfe/help/EXAMPLElocalConfigSATDIR.py +++ /dev/null @@ -1,33 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## -# This is an example localConfig.py file - -# Always include these lines at the top of your localConfig.py file. -from serverConfig import * -import serverConfig - -# modifying the list of SATDATA directories seen from the GFE, and scanned -# by EDEX -pfix = "NESDIS/GOES-11(L)/" -serverConfig.SATDATA.append = [(pfix + "West CONUS/Imager Visible", "visibleWest"), - (pfix + "East CONUS/Imager 6.7-6.5 micron IR (WV)", "waterVaporWest")] - - - diff --git a/cave/com.raytheon.viz.gfe/help/EXAMPLElocalConfigTC.py b/cave/com.raytheon.viz.gfe/help/EXAMPLElocalConfigTC.py deleted file mode 100644 index 3a9e470b0c..0000000000 --- a/cave/com.raytheon.viz.gfe/help/EXAMPLElocalConfigTC.py +++ /dev/null @@ -1,36 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## -# This is an example localConfig.py file - -# Always include these lines at the top of your localConfig.py file. -from serverConfig import * -import serverConfig - -# In this example, we want to add a new field called Clearing, and have -# its time constraints be every 4 hours, aligned with midnight local time. -# Since there isn't a time constraint for this, we need to define a new one -# first, before defining the new weather element. -LT4 = localTC(0*HOUR, 4*HOUR, 4*HOUR, 0) - -# Now we define the new "Clearing" weather element. -elem1 = ("Clearing", SCALAR, "pot", "Clearing Potential", 100.0, 0.0, 0, NO) -parms = [([elem1], LT4)] - - diff --git a/cave/com.raytheon.viz.gfe/help/EXAMPLElocalMaps.py b/cave/com.raytheon.viz.gfe/help/EXAMPLElocalMaps.py deleted file mode 100644 index b82af5fd2a..0000000000 --- a/cave/com.raytheon.viz.gfe/help/EXAMPLElocalMaps.py +++ /dev/null @@ -1,44 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## -# Example localMaps.py configuration file - -# You must include the following line -from Maps import * - -# Example of adding a group of edit areas. This one is called "WYCounties" -# on the GFE Edit Areas menu, uses the County table, is filtered to include -# just the Wyoming counties. Edit areas are automatically generated" -# and named WY_countyName. -WYcounties = ShapeTable('County') -WYcounties.filter(lambda x : x['state'] == "WY") -WYcounties.name = 'WYCounties' -WYcounties.editAreaName = ['state','countyname'] -WYcounties.groupName = 'WYCounties' -maps.append(WYcounties) - - -# The following few lines removes the maps that are not wanted. -maps.remove(CWAmzones) -maps.remove(Mzones) -maps.remove(rfc) - -# The following renames the CWAzones map to "MyCWAZones". -CWAzones.name = "MyCWAZones" - diff --git a/cave/com.raytheon.viz.gfe/help/EXAMPLElocalMapsAdd.py b/cave/com.raytheon.viz.gfe/help/EXAMPLElocalMapsAdd.py deleted file mode 100644 index 18ae5b7e52..0000000000 --- a/cave/com.raytheon.viz.gfe/help/EXAMPLElocalMapsAdd.py +++ /dev/null @@ -1,36 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## -# Example localMaps.py configuration file - -# You must include the following line -from Maps import * - -# Example of adding a group of edit areas. This one is called "WYCounties" -# on the GFE Edit Areas menu, uses the County table, is filtered to include -# just the Wyoming counties. Edit areas are automatically generated" -# and named WY_countyName. -WYcounties = ShapeTable('County') -WYcounties.filter(lambda x : x['state'] == "WY") -WYcounties.name = 'WYCounties' -WYcounties.editAreaName = ['state','countyname'] -WYcounties.groupName = 'WYCounties' -maps.append(WYcounties) - - diff --git a/cave/com.raytheon.viz.gfe/help/EXAMPLElocalMapsMod.py b/cave/com.raytheon.viz.gfe/help/EXAMPLElocalMapsMod.py deleted file mode 100644 index 007d19806a..0000000000 --- a/cave/com.raytheon.viz.gfe/help/EXAMPLElocalMapsMod.py +++ /dev/null @@ -1,38 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## -# Example localMaps.py configuration file - -# You must include the following line -from Maps import * - -# The following changes the configuration of the CWAzones maps. It overrides -# every possible item that can be overridden. - -# Rename by name of the CWAzones map -CWAzones.name = "MyCWAZones" - -# Change the filter to only include "OH" (Ohio) zones -CWAzones.filter(lambda x : x['state'] == "OH") - -# Change the edit area naming to be state_zone (e.g. OH_123) -CWAzones.editAreaName = ['state', 'zone'] - -# Change the edit area group name to be OH_Zones -CWAzones.groupName = 'OH_Zones' diff --git a/cave/com.raytheon.viz.gfe/help/EXAMPLElocalMapsRemove.py b/cave/com.raytheon.viz.gfe/help/EXAMPLElocalMapsRemove.py deleted file mode 100644 index b08c778443..0000000000 --- a/cave/com.raytheon.viz.gfe/help/EXAMPLElocalMapsRemove.py +++ /dev/null @@ -1,30 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## -# Example localMaps.py configuration file - -# You must include the following line -from Maps import * - -# The following few lines removes the edit areas that are not wanted. The -# names are the Python variable names. The following removes the -# CWA marine zones, marine zones. -maps.remove(CWAmzones) -maps.remove(Mzones) - diff --git a/cave/com.raytheon.viz.gfe/help/EXAMPLElocalWxConfig.py b/cave/com.raytheon.viz.gfe/help/EXAMPLElocalWxConfig.py deleted file mode 100644 index 044eb67585..0000000000 --- a/cave/com.raytheon.viz.gfe/help/EXAMPLElocalWxConfig.py +++ /dev/null @@ -1,54 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## -from serverConfig import * -import serverConfig - -# redefine the visibilities -serverConfig.visibilities = ['', '0', '1/4', '1/2', '3/4', '1', '11/2', - '2', '21/2', '3', '4', '5', '6', 'P6'] - -# add Coverage/Probabilities for SPARSE, modify ISOD -SPARSE = ('Sparse', 'Sparse') -ISOD = ('Isod', 'Isolated') - -# define a new set of values for convenience -COV = [ISOD, SCT, NUM, WIDE, SPARSE] - - -# add new intensity SUPERHEAVY, modify INTEN_MOD -SUPERHEAVY = ('+++', "Super Heavy") -INTEN_MOD = ('mod', 'Moderate') - -# define a new set of values for convenience -PCPINTEN = [INTEN_VERYLIGHT, INTEN_LIGHT, INTEN_MOD, INTEN_HEAVY, SUPERHEAVY] - -# add a new attribute LOUSY, modify existing FQTLTG -LOUSY = ('Lsy', 'Lousy') -FQTLTG = ('FqLt', 'Frequent Lightning') - -# now define all changed weather types, which include any that might -# use the definitions you have changed above in this file -RAIN = ('R', 'Rain', COV, PCPINTEN, [FQTLTG]) -SNOW = ('S', 'Snow', [WIDE, SPARSE], [INTEN_LIGHT, INTEN_HEAVY], - [LOUSY, OVRPASS]) - -# put all of the types together. The value must be "types =". -types = [NOWX, RAIN, SNOW] - diff --git a/cave/com.raytheon.viz.gfe/help/EXAMPLEsnapshotTimeStamp.py b/cave/com.raytheon.viz.gfe/help/EXAMPLEsnapshotTimeStamp.py deleted file mode 100644 index ee13189fee..0000000000 --- a/cave/com.raytheon.viz.gfe/help/EXAMPLEsnapshotTimeStamp.py +++ /dev/null @@ -1,35 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## -# Example ifpIMAGE configuration file. - -# Must always import from gfeConfig (or your site configuration) -from gfeConfig import * -import gfeConfig - - -# Defines T and Sky as the weather elements to be display -Png_parms = ['T_SFC:_Official -1', 'Sky_SFC:_Official -1'] - - -Png_snapshotTime = 1 -Png_legendFormat_Zulu_snapshot = "%b%d%H%MZ" - - - diff --git a/cave/com.raytheon.viz.gfe/help/EditableListbox.html b/cave/com.raytheon.viz.gfe/help/EditableListbox.html deleted file mode 100644 index 2d2337cc87..0000000000 --- a/cave/com.raytheon.viz.gfe/help/EditableListbox.html +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - Editable Listbox - - -
-

Editable Listbox -Description

-
-
Editable listboxes are -used in many GFE dialogs to allow you to run items such -as smart tools and procedures. Pressing MB3 -over an item in the box opens a pop-up menu which will contain a subset -of the following options.
-
    -
  • - Info... -- Shows information about the -item
  • -
- - diff --git a/cave/com.raytheon.viz.gfe/help/Enhanced_Wx.html b/cave/com.raytheon.viz.gfe/help/Enhanced_Wx.html deleted file mode 100644 index ffc16a0964..0000000000 --- a/cave/com.raytheon.viz.gfe/help/Enhanced_Wx.html +++ /dev/null @@ -1,174 +0,0 @@ - - - - - Enhanced_Wx - - - - - - -Enhanced_Wx -
-
-Introduction -
-
-The Enhanced_WxTool -is a significant enhancement to the original Wx_SmartTool, which was written. -Both tools assign Wx based on the corresponding PoP grids; however the -Enhanced_WxTool offers the following additional functionality:
-
    -
  1. The forecaster is allowed considerable freedom in choosing individual - weather types (RW, R, SW, S, IP, ZR, L, ZL, and F are all supported).
  2. -
  3. Up to three weather types may be mixed together and a different - intensity (very light [--], light [-], moderate [m], or heavy [+]) may be - assigned to each. So for example, it is possible to assign weather such - as RmSmIP- with this tool.
  4. -
  5. The forecaster can also choose whether to include thunder (T) - with any other supported weather type; if thunder is included, he or she also - has the option of specifying whether the thunder is severe in nature (T+).
  6. -
  7. The forecaster can assign either probability qualifiers or areal coverage - qualifiers (where allowed) to the chosen weather types. If a forecaster attempts - to use an invalid qualifier for a weather type, the tool will generate an error - message appears indicating that this is not allowed.
  8. -
  9. For each individual weather type, the forecaster can override the default - probability/coverage obtained from the PoP grid if desired. The same is also true - for thunder (T). This makes it possible to: create weather combinations such as - “Lkly RW:Chc SW” or “Def RW:Chc T”; and assign weather types of F, L, or ZL, - which aren’t necessarily derived from the PoP grids.
  10. -
  11. For categorical PoPs, the forecaster can use alternate probability/coverage - terms (other than "Def" or "Wide") if desired. The following options are - available: "Ocnl", "Frq", "Brf", "Pds", and "Inter". When used, this setting - applies to all categorical precip coverages that are derived from the PoP grid.
  12. -
  13. If thunder is included with the precipitation, the forecaster also has the - additional option of specifying the following thunderstorm attributes, if - desired:
  14. -
      -
    • Small Hail (SmA)
    • -
    • Heavy Rain (HvyRn)
    • -
    • Gusty Winds (GW)
    • -
    • Frequent Lightning (FL)
    • -
    • Large Hail (LgA)
    • -
    • Damaging Winds (DmgW)
    • -
    • Tornadoes (TOR)
    • -
    -
-
-The tool is designed so that the last three attributes (LgA, DmgW, and TOR) can only be -assigned when severe thunderstorms (T+) are forecast. Similarly, the tool will also -only allow SmA and GW to be used with non-severe thunderstorms (T). If the forecaster -tries to assign a thunderstorm attribute that is invalid, the tool will display a -message indicating this, and will automatically ignore such attributes and run to -completion. -

-It should be noted that the tool does not apply any scientific principle to derive -the final Wx type; the Wx type assigned is solely decided upon by the forecaster. -The forecaster chooses the Wx type through the use of a GUI interface that appears -when the tool is executed.
-
-
-
-How -the Procedure Works -
-
-The floating PoP grids for the time -period in question must exist before running the tool. After creating all of the necessary -floating PoP grids, to run the tool the forecaster needs only to select the BUF_WxTool from the -list of available smart tools in GFE; this action brings up the following GUI:

-Enhanced_Wx
-
-
-Here is a brief overview of each section: -

-Qualifier Type: Allows you to toggle between the use of Probability and Areal Coverage terms. -The default setting is “Prob”. -

-Alter Terms Cat PoPs (new): Allows you to use alternate probability/coverage terms ("Ocnl", -"Frq", "Brf", "Pds", and "Inter") when categorical PoPs are used. When used, this setting -will apply to all categorical precipitation probabilities/coverages that are derived from -the PoP grid. The default setting is “None”. -

-1st/2nd/3rd Type: Allows you to select/combine up to 3 different weather types. -In version 2.0, the lists of available weather types have been expanded to include L, ZL, and F. -

-1st/2nd/3rd Inten: Allows you to specify the intensity of each weather type (--, -, m, or +). -In the case of fog (F), only + (dense) is a valid intensity. If F is selected with any other -intensity, the tool will automatically remove the intensity to prevent any errors. The default -setting is “-“ (light). -

-1st/2nd/3rd Type Alternate Prob/Cov (new): Allows you to override the default probability/coverage -obtained from the corresponding PoP grid for each individual weather type. This allows the easy -creation of weather types such as "Lkly RW:Chc SW". This approach also allows for the use of -other weather types (for example, F, L, and ZL) which aren't necessarily PoP-dependent. -The default setting is “None” - meaning the probability/coverage terms for each weather type -are derived from the PoP grid by default. -
-Thunder?: Allows you to specify whether you want thunder included with the other weather type(s) -selected. Options are “No”, “Yes (T)”, and “Yes (T+)” (severe T). The default setting is “No”. -

-Thunder Alternate Prob/Cov (new): Allows you to specify an alternate probability/coverage for -T if desired. This setting will override the default probability/coverage obtained from the -corresponding PoP grid, and makes it possible to create precip types such as "Def RW:Chc T". -The default setting is “None” - meaning the probability/coverage term for T is derived from -the PoP grid by default. -

-Tstm Attributes?: Allows you to specify Thunderstorm Attributes if you choose to include -Thunder in the Wx grid. -

-Once the forecaster has made their selections from the above GUI, he/she then assigns the -desired weather by clicking either of the Run or Run/Dismiss buttons within the GUI. -When this is done, a single weather type is created based on the forecaster input. Unless -specifically overridden by the forecaster, probability or areal coverage qualifiers will -be determined from the PoP grid in accordance with the following table:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PoP Value (rounded to the nearest %)Probability QualifierAreal Coverage Qualifier
0 - SChc_min_PoP_threshold*None; is assignedNone; is assigned
SChc_min_PoP_threshold* - 24Slight Chance (SChc)Isolated (Iso)
25 - 54Chance (Chc)Scattered (Sct)
55 - 74Likely (Lkly)Numerous (Num)
75 - 100Definite (Def)Widespread (Wide)


-* - SChc_min_PoP_threshold is the minimum PoP needed for a SChc (slight chance) of weather to -be included in the Wx grid. This value is site-customizable; the default value is 14.5%. -Please see the Installation/Configuration section below if you would like to change this -setting at your site.
- - diff --git a/cave/com.raytheon.viz.gfe/help/Extrapolate.html b/cave/com.raytheon.viz.gfe/help/Extrapolate.html deleted file mode 100644 index d0fbb6250c..0000000000 --- a/cave/com.raytheon.viz.gfe/help/Extrapolate.html +++ /dev/null @@ -1,97 +0,0 @@ - - - - - Extrapolate - - - - - - -Extrapolate -
-
-Introduction -
-
-Extrapolate is a procedure -that allows one to linearly extrapolate features in time. In combination with tools for -populating Sky grids from satellite data and PoP grids from radar data, this can be useful -in extrapolating satellite and radar data. Of course, linear extrapolation is only good -up to a point, depending upon the weather situation. This may not be useful at all in a -lot of cases, as precipitation either forms, dissipates, expands, contacts and/or changes -speed and direction. -
-
-
-How -the Procedure Works -
-
-Extrapolate uses movement -information from a choice of models, the Fcst database, or user-entered sources to -linearly extrapolate features through time. Given a direction and speed of motion, -the tool will shift the data on the GFE domain as though moving at that speed in -that direction for one hour. A screenshot of the Extrapolate tool GUI is shown below.

-Extrapolate
-
-
-The most important input in -the tool GUI is determining which source you wish to use to advect features. For instance, -if extrapolating satellite or radar data, one can use the distance-speed tool in D2D to arrive -at the direction and speed of motion, and then enter these values directly into the procedure -GUI. To use these values, one must use the default “Observed (enter below)” for “Source:” -

-Other movement sources available include model data and forecast surface wind information. -For the model sources, one can pick one of several levels or layers available under -“Wind Level if using model:” If a layer is chosen, then the models winds at all available -model levels within that layer, including both the top and bottom pressure levels indicated, -are averaged. The surface wind forecast information may not often be that useful, though one -could always create, say, a temporary Fcst wind grid for use as a steering current. -

-Note that, if using wind information from a model database or the Fcst database, the movement -values will vary across the grid. This portion of the tool was written to apply the wind -information from the chosen source at each point, so if the flow varies across the grid domain, -then this would be reflected in the output. -

-The NAM12 and the RAP13 have data only every three hours; the GFS40 only every six. -Originally, the code was written to let GFE interpolate model data between its valid times, -but this did not work in offices whose GFE default for missingDataMode was not set equal to -‘create,’ i.e., interpolate, and forcing ‘create’ in the smartTool call up command had no -effect for reasons unknown. -

-To get around this problem, the code was re-written to always look in a three (six) hour window -around the hour of interest, so model data is always there. It looks 1 (2) hour(s) back and -2 (4) hours forward, so that the hour half way between valid model times uses forward data, -which makes more sense when extrapolating data forward. The motion used may not be as ‘precise,’ -but performance is not dependent upon variables outside the control of the Extrapolate procedure. -

-The GUI also provides forward and backward options, so one can also extrapolate backward in time. -This could be useful in blending a PoP forecast at a future hour with current radar data. -

-The Extrapolate procedure uses a smart tool called “MoveFeatureBySpeed”. The portion of this -tool that uses an observed speed and direction of movement entered by the forecaster was adapted -from Les Colins’ EditAreaAdjust tool, and allows one to shift the data in any scalar grid by the -speed and direction entered. Overall, the procedure and tool are set up to extrapolate an hour -at a time, using wind information from the hour before. Wind information for hours in between -model grids are derived via linear interpolation. -

-Used as a stand-alone tool, MoveFeatureBySpeed will shift the data as though moving at that -speed in that direction for one hour, but only on the selected grid itself rather than the -grid for the next hour. As such, the forward and backward options are not available from the -stand-alone tool. A screenshot of the “MoveFeatureBySpeed” tool GUI is shown below.
-Extrapolate
- - diff --git a/cave/com.raytheon.viz.gfe/help/FillPatterns.html b/cave/com.raytheon.viz.gfe/help/FillPatterns.html deleted file mode 100644 index ec812b351f..0000000000 --- a/cave/com.raytheon.viz.gfe/help/FillPatterns.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - Fill Patterns - - -

-Fill Patterns

-This document shows the available set of fill patterns used in the GFE. -Through the use of the gfe configuration file, certain displays may be -tailored to use these patterns. -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Fill PatternImage
LKLY
OCNL
SCT
SELECTED_AREA
TRANS_25PC_135DEG
TRANS_25PC_45DEG
WHOLE
WIDE
WIDE_SCATTERED
DUALCURVE
CURVE
VERTICAL
CROSS
HORIZONTAL
BIGCROSS
- - - diff --git a/cave/com.raytheon.viz.gfe/help/FormatterLauncher.html b/cave/com.raytheon.viz.gfe/help/FormatterLauncher.html deleted file mode 100644 index 88d1de8239..0000000000 --- a/cave/com.raytheon.viz.gfe/help/FormatterLauncher.html +++ /dev/null @@ -1,1486 +0,0 @@ - - - - - Formatter Launcher User's Guide - - -

Formatter Launcher User's Guide

-
March 7, 2012
-
-
-
-The Formatter Launcher Dialog is used to define zone groupings, queue -formatters for execution, monitor their progress, display and edit the -final product, and send the product to AWIPS for transmission.
-
-

-
-
-

Table of Contents

-
-Components
-Zone Combiner
-Product Editor
-Output Log
-
-
-


-

-

Components

-The Formatter Launcher consists of the main menu bar, product tabs and -product canvas area, and status bar.
-
Components
-
-
-
-

Main Menu Bar

-

Products

-The products menu permits selection of the products to appear in the -panes. The menu is divided into "Site-level" products, then -Hazard and Civil Emergency, then Baseline, Regional, and Hazard -backup product configurations, and then the Product Editor / Make -Correction -tab.   -Each selection will -open a new tab.  The Product Editor / Make Correction tab brings -up an -empty editor, allowing for loading existing products from the AWIPS -text database and making corrections to a product.
-
-

Data Source

-The data source menu allows the forecaster to change the source -database for all products to one of the four options: Official, -Fcst, ISC, or Default. The Default setting uses the database -definition contained within each formatter to determine which database -should be used as a data source.
-
-The default data source is configured within each -formatter's definition section as one of the following:
-
Definition['database'] -= "Official"
-Definition['database'] -= "Fcst"
-Definition['database'] -= "ISC"
-
-
-Note in GFE PRACTICE mode, the -only Data Source is the Practice Forecast database; in GFE TEST mode, the only Data Source -is the Test Forecast database.
-

Processor

-Formatters execute either on the server platform or the local -platform. Better performance for the local GFE and faster -formatter execution should be realized when the processor is set to -"Server". This item is not configurable on a per-product -basis. The default is "Server". Setting the item to "Local" -will run the formatters locally. The default may be changed -through the gfe configuration entry FormatterLauncherDialog_Processor.
-
-
-

Issued By

-The Issued By option brings up a dialog allowing the forecaster to -enter his/her site identifier (3-letters).  The entry is only used -when the site is performing service backup for another -site. Defining an "Issued By" entry will result in the -generated products containing the Issued By statement in the product -header.
-
-

Help

-The Help menu simply provides a color legend for the Product Tabs.
-
-

Product Tabs

-

-There -is a product tab for each selected entry in the Products -Selector. Clicking on one of the tabs will then display that -product's Product Canvas Area. The Product Canvas Area contains -the zone combiner (if applicable), editor window, output log, and -several other controls. The color state of the buttons indicate -whether the product is queued, running, or finished as shown below:
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Tab Color
-
Meaning
-
Gray
-
Product has not been requested -to be started, or has been reset to the initial state (due to -conflicts).
-
Yellow
-
Product is queued for execution -and is pending.
-
Pink
-
Product is currently running.
-
Green
-
Product has finished and is -ready to be edited if needed.  Also used to indicate a Draft has -been loaded and is ready to be edited if needed.
-
Red
-
Product has failed or has been -aborted.
-
Blue
-
Product has been transmitted and -editor is now locked.
-
-
-

Product -Canvas Area

-The Product Canvas Area appears for each product that has been -selected.  Use the Product Tabs to display the specific Product -Canvas Area of interest. The Product Canvas consists of a control -panel and the canvas area. Depending upon the state of the -product, some of the controls are dimmed and not accessible.
-
-Controls
-The controls perform the following functions:
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-
Zone Combiner
-
When selected, the zone combiner -will appear in the Product Canvas Area. This button is dimmed if -the product doesn't support zone combinations, or while the formatter -is currently running.
-

-
Product Editor
-
When selected, the product -editor will appear in the Product Canvas Area. Initially, this -pane is blank. When the product has finished generation, the -contents of the generated product will appear in the canvas. This -button is dimmed until the formatter has completed.
-

-
Output Log
-
When selected, the output from -the formatter execution will appear in the Product Canvas Area. -Initially this pane is blank. Only when the formatter has -completed, will the output log button be undimmed and the contents -available. If you wish to monitor the progress of a formatter -during its execution, please use the Process Monitor.
-
Load Draft
-
Load Draft
-
When selected, the Formatter -Launcher is switched to the product editor and the saved draft for the -product is loaded. If there isn't a saved draft, then a -message will be displayed to the forecaster indicating that no draft -exists.
-

-
Run Formatter
-
This button will queue the -formatter for execution. Once it is queued, the button will -be dimmed until the product is completed. Queuing a product will -cause the zone combiner, product editor, and output log buttons to be -dimmed.
-

-
Stop Formatter
-
This button is available during -the execution of a formatter. If selected, the formatter will be -aborted.
-

-
Close Tab
-
This button will close the tab -and ABORT any running formatter.  Use this button only after the -formatter is complete and you have stored or sent the product, or data -loss will occur.
-
-
-
-If the GFE is started in PRACTICE mode, an additional Formatting button -is -available as shown below.  The button only affects the product in -that tab, and no other tabs.  The selection must be made before -the Run Formatter button is pressed:
-
Toolbar in Practice mode
-
-
-The Formatting button defaults to the VTECMessageType -definition for the product, but the user may change it depending upon -the task at hand.   Here are the available options:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Option
-
Meaning
-
Normal: NoVTEC
-
Product will be formatted -normally (no test wording), and will not contain VTEC.
-
Normal: O-Vtec
-
Product will be formatted -normally (no test wording), and will contain Operational VTEC (O-code).
-
Normal: E-Vtec
-
Product will be formatted -normally (no test wording), and will contain Experimental VTEC (E-code).
-
Normal: X-Vtec
-
Product will be formatted -normally (no test wording), and will containg Experimental in an -Operational Product VTEC (X-code).
-
Test: NoVTEC
-
Product will be formatted with -test wording, and will not contain VTEC.
-
Test: T-Vtec
-
Product will be formatted with -test wording and will contain Test VTEC (T-code).
-
-
-
-More details on the output log, zone combiner, and product editor are -found later in this document.
-
-

Status Bar

-The bar is used to relay important messages to the forecaster.  -The status bar is used for displaying routine (as green), significant -(as yellow), alert (as orange), and urgent (as red) messages.  A -partial list of -messages is shown in -the table below:
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Message -Contents
-
Significance
-
Description
-
Formatters Queued: [prod1, -prod2, prod3]
-
Regular
-
Indicates that formatters have -been queued for execution.
-
Map mapname not available
-
Urgent
-
Indicates that the zone combiner -could not find or load the map background required by the zone -combiner.  The map background is defined in the -Definition['mapNameForCombinations'] of each product formatter needing -combinations. No zone combinations may be changed for the product.
-
Bad format in Combo file: combofilename
-
Significant
-
The user has attempted to load a -previously saved combinations file from the Combo Sets -> Load menu, -and the format of the combinations file is corrupted. The zone combiner -may still be used, but the current set of combinations is cleared.
-
Combo file has python syntax -errors: combofilename
-
Significant
-
The product's combination file -was retrieved from EDEX, but could not be decoded. The -zone combiner may still be used, but the current set of combinations is -cleared.
Combo file is not in combo -format: combofilename
-
Significant
-
The retrieved combination file -(from EDEX) was not in the correct format, i.e., not a list of -tuples containing a list of zones and a label. The zone combiner -may still be used, but the current set of combinations is cleared.
Combinations file saved: combofilename
-
Regular
-
Indicates that a combinations -file was saved. If a GFE red banner appears, then there may have -been a problem with the save.
-
Missing Color file or errors in -Color file
-
Significant
-
The color file for the zone -combiner was not found or there were errors in the color file.
-
Removed Unknown Edit Areas: [ea1, ea2, ea3...]
-
Significant
-
Informs the user that the -combinations file contained zones that were not in the map background -assigned to the product, and thus these names have been removed from -the combinations file.
-
Missing zones have been added [ea1, ea2, ea3...]
-
Regular
-
Zones identified on the map -background but not included in the combinations file have been added to -the combinations file as individual zones, i.e., not combined.
-
-
-
-

Zone Combiner

-The Zone Combiner is used to view and modify the set of combined zones -for the product.  Not all products support zone selection.  -In the case of a product that doesn't support a zone selection, the -zone combiner selection button is dimmed.  The Zone Combiner -contains a menu bar, the canvas depicting the zones, and a label -containing the product name and combinations filename, and the Apply -Zone Combo button.
-
-Unlike most configuration files throughout GFESuite which adhere to the -BASE/SITE/User concept,  the Zone Combiner color table, saved -combination sets, and saved combination files are shared among all -users.
-
-
FormatterLauncher
-
-
-

Zone Combiner Menus

-

-

Combo Sets

-The combo sets menu contains three entries as shown in the following -table:
- - - - - - - - - - - - - - - - - - -
Save...
-
Brings up the SaveComboSets -Dialog allowing the user to save the current set of combinations for -later retrieval.  Only those combinations that apply to the -current map background are displayed.  The user can select an -existing name (to overwrite a combo) or type in a new name.  -Pressing "Save" will save the combinations.
-
Load
-
Loads in a saved set of -combinations.  Another menu will be displayed showing the list of -saved combinations.
-

-
Delete
-
Brings up the DeleteComboSets -Dialog allowing the user to delete saved sets of combinations.  -Only those combinations that apply to the current map background are -displayed.  The user can select an existing name from the list and -then press "Delete" to delete the combination.
-
-
-Combinations are available based on the base map background in use for -each formatter.  Each formatter requiring zone combinations -contains a definition defining the map background.  An example is: -Definition["mapNameForCombinations"] -= "Zones_BOU" . If the definition is missing, then zone -combinations may not be changed for the product.
-
-The Combo Sets menu entry is dimmed if there are no combinations being -shown in the zone combiner.
-
-
-

Combo Actions

-The Combo Actions menu controls the Zone Combiner and provides commonly -used actions, such as clear.
-
- - - - - - - - - - - - - - - - - - - - - -
Clear
-
Removes -all zone combinations from the zone combiner.
-
Revert
-
Reverts -the zone combinations to the last saved (e.g., last applied) -combination setup.
-
Examine/Clear Groups...
-
Brings up a dialog which is used -to clear zone groupings.  This dialog can also be used to examine -the currently defined set of zone groupings.
-
Shuffle Groups...
-
Brings up a dialog which is used -to shuffle (move the order) of groups.   Multiple selections -may be made and the group will move top/down together.  The Up and -Down buttons move the selection one step at a time.  The Top and -Bottom move the selection to the top or bottom of the groups.
-

-
-
-
-
-The Combo Actions menu is dimmed if there are no combinations being -shown in the zone combiner.
-
-

Combo Options

-The Combo Options menu provides display and execution options for the -Zone Combiner, as shown in the following table:
-
- - - - - - - - - - - - - - - - - - - - -
Include All Zones
-
If -include all zones is selected, then all zones will be part of the -combinations file.  If Include All Zones is off, then zones that -are not part of a specific combination will be stand alone, or will be -indicated as not included.  Generating a product with some zones -that aren't included will result in a product that does not represent -all of the zones.  Toggling Include All Zones on will take all -zones that were previously not included and place them as individual -zones.
-
Label Zones
-
If Label -Zones is selected, then the zone label identifiers will be placed for -each zone on the map background.
-
Label Zone Groups
-
If Label -Zone Groups is selected, then the zone grouping numbers will appear on -the map background.  Zone groups are counted from 1.
-
Zone -Colors...
-
The Zone Colors... selection -brings up the Zone Color Table Editor. There is only one color -map for all products, and the size of the color map depends upon the -maximum number of zones that have been color-edited. The color -editor works simlarily to the other Color -Table Editors in the GFE. Pressing "Apply" will change -the color mapping of the Zone Combiner as well as save the new color -table to EDEX.
-
-
-The Combo Options menu entry is dimmed if there are no combinations -being shown in the zone combiner.
-
-

Zoom

-The map background in the zone combiner may be zoomed. The scroll -bars around the map are used to pan the display. The -options on the zoom menu control the amount of zooming, from "No Zoom" -to various zoom factors.
-
-
-

Zone Combiner Canvas

-
-The canvas is the drawing area of the zone combiner. -Through a series of clicks and drags, the set of zone combinations may -be edited.
-
-The canvas may be resized. Its initial size is configurable -through the gfe configuration file. By default, the zone -combiner dialog is about 80% the height and width of the display.
-
-

Drawing a New Combination

-Using MB1, press over a zone that is "grayed-out" which represents an -individual zone, and drag through that zone into zones you wish to be -part of the same combination. The "zone color" is chosen -automatically for you. You can change the zone colors if desired -through the Zone Colors.... -menu entry.
-
-

Picking Up a Zone Combination

-A MB2 click over a zone will "pick-up" that zone's configuration. -This is useful for adding another zone to a combination or changing the -existing configuration of a zone to that which was "picked-up".
-
-

Adding Another Zone to a Combination - Contiguous

-Using MB1, press over the zone which you want to extend. Drag -through the new zones (whether they are already assigned or not doesn't -matter). As you drag through the zones, they become part of the -same combination.
-
-

Adding Another Zone to a Combination - Non-Contiguous

-MB2 click over a zone in the combination you wish to extend to pick up -its value. MB1 click over the zone you wish to add. You may need -to MB1 click more than once.
-
-

Toggling Zones

-MB1 clicks will toggle a zone from the combination, to a new group, and -to "off" or non-included zone. If the "Include -All Zones" is selected, then the clicks will toggle between the -combination and a new group.
-
-

Apply Zone Combo
-

-This button is enabled when the zone combination has been modified but -not saved.  Press this button to save the zone combination to the -server.
-
-


-

-

Proper Formatter and Configuration Setup

-
-The zone combiner requires certain Definition section items to be set -up in each formatter. It also requires map backgrounds to be configured properly in -the EDEX.
-
-

Definition section of product
-

-
- - - - - - - - - - - - - - - - - - - - - - - -
Definition['mapNameForCombinations'] -= "Zones_PBZ"
-
Mandatory
-
Defines the map background used -for this product's zone combinations. All edit areas in the -combinations file must match the map backgrounds's attribute -"EDITAREANAME"'s values.
-
Definition['defaultEditAreas'] = -"combinations Name"
-
Mandatory
-
Defines the combinations file to -be used for this product. If default edit areas is not a -combinations file, i.e., it is a list of edit areas, then the zone -combiner will not be available. 
-
Definition['singleComboOnly'] = 1
-
Optional
-
If this definition is set to 1, -then the zone combiner will only allow ONE combination.  Some -products are intentionally restricted for this capability.
-
Definition['subDomainUGCs'] = -["ugc1", "ugc2", "ugc3"]
-
Optional
-
Limits the zone combinations to -just those zones listed in the subDomainUGCs entry. This is -normally only used for those sites whose domain is split into several -products.
-
-Note: the combinations file must be read-write in the server in order -for the user to modify the zone combinations. If a combinations -file is marked read-only, then the zone combiner will not be displayed.
-
-

Map Configuration in EDEX
-

-The map background configuration defines the editAreaName for certain -map backgrounds. If this attribute is defined, then edit areas -will be automatically generated for the map background, based on the -attributes specified. The Zone Combiner uses the edit area names -associated with each shape in the map background to map combination -edit area names to map background names. If your -combinations file uses other names, then the zone combiner will reject -those names and start out with an empty set of zone combinations.
-
-
-
-
-

Product Editor

-The Product Editor is used to display the finished product to the -forecaster, and then allows the forecaster to edit, save to a file, -save as a draft, store, and -transmit it.. It consists of a menu bar, the text editor, -and to save a draft and transmit the product.
-
-Some fields in the product editor may appear in a different color -(default is blue). These fields are "Locked" and cannot be edited -by the forecaster. NWS policy requires quality control on -the UGC, VTEC, and other components of the product thus requires that -the forecaster not be -able to edit that field. Some fields may appear in another color -(default is red). These fields are "framing codes" and indicate -to the forecaster that the text within the framing codes and the -framing code deliminators must be edited/removed by the forecaster.
-
-A special entry on the Products menu called "Product Editor / Make -Correction" brings up -a blank slate. You can load files from the AWIPS Text Database, text -file on disk, type an original product, or make a correction to an -existing product.
-
-
FL
-
-
-

Menu Bar

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
File
-
Save File...
-
Brings up a file chooser to -allow the user to save the contents of the -text buffer to a disk file. The default location is defined in -the -Definition['outputFile'] part of the formatter.
Store...
-
Brings up an entry field -containing the 8 or 9-letter PIL (Product Inventory List) that will -be used to store the product into the AWIPS text database. -The default pil is defined in the Definition['textdbPil'] part -of the formatter. Use with caution: Saving to the text -database will cause triggers for that PIL if they have been -defined. This button is colored Blue when in practice mode and -the product won't get stored to the AWIPS text database.  Normally -the button is gray.
- Store
-The user can change the AWIPS Product ID if necessary, -and then presses the "Store" button to store the product.  -The Store Countdown timer counts down from 5 seconds giving the user -the chance to abort the store operation. If the operation -is not aborted, the product will be stored into the AWIPS text -database. Use with caution: -Saving to the text database will cause -triggers -for that PIL if they have been defined. If the store was not -successful, then an error dialog is raised which -contains the traceback on the store failure.
-
Transmit...
-
Brings up an entry field -containing the 9 or 10-letter AWIPS WAN PIL -(Product Inventory List) that will be used to transmit the product onto -the AWIPS WAN.  The product is also stored into the text database -during this operation. The default pil is defined in the -Definition['awipsWANPil'] part of the formatter. This button is -colored RED if live transmission is enabled and colored BLUE if live -transmission is disabled due to practice mode.
-
Print
-
Sends the contents of the editor -to the lpr command. This should cause the contents of the editor -to be printed. However, the lpr command must be configured at the -system level for this to work.
-
Load Draft
-
This option only appears for -product tabs.  It retreives a previously saved draft and places it -into the product editor for editing. If there is no previously -saved draft, a message is displayed to the forecaster.
-
Save Draft
-
This option only appears for -product tabs. It saves the current text in the editor along with -the product definition for later callup with Load Draft.
-
Open File
-
This option only appears for the -"Product Editor"tab. It allows you to bring any local file into -the text editor. Products brought into this window are set to routine -products with an option to set them to Corrected, Updated, Delayed, or -Resend mode through the "Type" pulldown menu choice at the bottom of -the Formatter Launcher window.
-
Load Product / Make Correction
-
This option only appears for the -"Product Editor" tab. It allows you to specify a pil, then -retrieves the product from the AWIPS text database and loads it into -the editor. The editor is placed into Resend mode automatically -when selecting this option. Typing in the product changes the mode to -Corrected automatically.
-
Edit
-
Undo
-
Undoes the last edit operation.
-
Redo
-
Undoes the Undo.
-
Cut
-
Cuts the selected text from the -buffer and saves it temporarily for pasting.
-
Copy
-
Copies the selected text and -saves it temporarily for pasting.
-
Paste
-
Pastes the Cut or Copied text at -the cursor location.
-
Find...
-
Brings up the Find dialog, -allowing the user to find words. There are many options -available, such as backwards and forwards searches, regular expression -or exact searches, ignoring case, starting at the start, end, or at the -cursor position.
-
Replace...
-
Brings up the Replace dialog, -allowing the user to find and replace words. Various options are -available to find and replace forwards, backwards, using regular -expressions or exact matches, and starting at the beginning, end, or -cursor location.

-
Spell Check...
-
Brings up the spell -checker. As each mispelled word is found, suggestions are -provided and the user can choose the suggestion or type in the correct -spelling. Capabilities are provided to add a word to your -personal dictionary, or to ignore the mispelling.
-
-
-
Wrap Selected
-
Rewraps the selected portion of -the product based on the wrap length. You probably will want to -wrap paragraph by paragraph rather than selecting the entire -text. The Product Editor does understand certain types of -paragraphs, such as blank lines denoting paragraphs and ".xxx..." -syntax such as ".TONIGHT..." as paragraphs.
-
Options
-
Auto Wrap
-
Enables/disables automatic -wrapping while typing. The default value may be set through the -gfe configuration file on a per-pil basis.
-
Wrap Length
-
Specifies the wrap length.
-
CallToActions
-
Hazard...
-
Based on the editor insertion -point which defines the segment, brings up the possible set of call to -action statements for the VTEC hazards identified within the -segment. The user selects a call to action and the text is -inserted at the insertion point in the editor. Call to action -statements are configurable through the CallToActions -TextUtility. If the cursor is not in a segment that has VTEC -hazards, then the Call To Actions dialog will be empty. The text -appearing in the dialog is either the actual Call To Action text or a -descriptive string, depending upon the Call To Action entry format.
- CallToActions
-
Product...
-
Based on the editor insertion -point, brings -up the set of product-specific call to action statements.   -The user -selects a call to action and -the text is inserted at the insertion point in the editor.
-
Generic...
-
Based on the editor insertion -point, brings -up the set of generic call to action statements. The user -selects a call to action and -the text is inserted at the insertion point in the editor. Call to -action statements are configurable through the CallToActions -TextUtility.
-
Help
-
Tab Color Key...
-
Displays the various Product Tab -colors and their meaning.
-
-
-
-

Text Window

-The Text Window is the text editor. Clicking on a location will -set the cursor position to that location. Typing will then insert -characters at that point. Dragging over text will select -the text, which then can be used in cut/copy/paste operations.
-
-The WMOID block, headlines, and UGC blocks cannot be edited and appear -in a different color -(configurable through the GFE configuration file). The UGC block -consists of the UGC codes, any VTEC lines, the list of zone names, the -list of city names, and the date-time group.
-
-A MB3 popup menu is available that duplicates the functions found on -the menu bar.
-

Buttons

-There are usually three buttons available: Save File..., Store, and -Transmit. During GFE Practice -mode, the buttons are labeled the same, but have a different -appearance.
-
- - - - - - - - - - - - - - - - - - - - - - - -
Save Draft
-
Saves the current text and -product definition to EDEX. The name of the file -is based on the Definition['awipsWANPil']. This allows -other workstations to access the text/product to continue edits.
-
Transmit
-
Brings up an Transmit Dialog -containing the 9 or 10-letter AWIPS WAN PIL (Product Inventory List) -that will be used to transmit the product onto the AWIPS WAN. The -product is also stored into the text database during this -operation. The default pil is defined in the -Definition['awipsWANPil'] part of the formatter. If live -transmission is enabled, then this button is RED. If live -transmission is disabled, as in PRACTICE mode, then this button is -BLUE. -In practice mode, this action emulates the normal sending out of the -product via the AWIPS WAN, the receipt of the product via the SBN, and -the running of the VTEC Decoder.

-
The Check button will rescan the -text in the product editor.  It searches for framing codes and -rehighlights the framing section ("red" is the default color). It -updates the transmission time in the WMOID header block and each UGC -block.  It rescans the headlines.  It checks the VTEC times -and updates those to the current time.  It also checks for invalid -products, which can occur in situations when the ending VTEC time is -earlier than the present time.  If the VTEC is determined to be -invalid, then the editor is disabled and a red banner message is -displayed.
-
Type
-
This pulldown menu provides the -type of the product.  Changing the product to AAA, AAB, or AAC -will result in the "UPDATED" wording to be appended to the product's -MND header.  Changing the product to RRA, RRB, or RRC results in -the "DELAYED" wording to be appended to the product's MND header.  -Changing the product to "res" indicates this is a retransmission, no -"bbb" field is included in the WMO line, but the MND header will -contain "RESENT".  "rou" indicates a normal -type of product.   When the editor is put into Correction -Mode, -only the CCA, CCB, and CCC options are available and the MND header is -appended with CORRECTED.
-
Product Expiration Time
-
The user may adjust the product -expiration time in the segments by changing the selectors in 15 minute -increments.  The interval plus the calculated expiration time is -shown on the interface.   Each segment will receive the -earlier of the specified time, 1 hour if a segment only contains a CAN -VTEC code, or the end of any event.
-
-
-
-

Transmit Dialog

-The Transmit Dialog is presented when the user chooses the "Transmit" -button.  The user can change the AWIPS Product ID if necessary, -and -then presses the "Store" button to store the product.   The -Transmit -Countdown timer counts down from 5 seconds giving the user the chance -to abort the transmit operation.   If the operation is not -aborted, the -product will be transmited to the AWIPS WAN.
-
-
TransmitDialog
-
-
-If the transmit was not successful, then an error dialog is raised -which contains the traceback on the transmit failure.
-
-
-

Changes to Product when Transmitting, Storing, or Saving

-Whenever products are transmitted, stored, or saved, certain -modifications are made to the product text (Except as noted for -Corrections below):
-
    -
  • The issuance time in the CI header is updated to the present time.
  • -
  • The descriptive text indicating the issuance time, such as 400 AM -MST THU DEC 25 2004, is updated to the present time.
  • -
  • The product purge times for each segment are updated.
  • -
  • VTEC codes that have an explicit starting time that is now in the -past, are updated to the present time.
  • -
-For Corrections (from the Product Editor tab):
-
    -
  • The MND time stamp remains unchanged.
  • -
  • The product purge times for each segment are updated.
  • -
  • VTEC codes that have an explicit starting time that is now in the -past, are updated to the present time.
  • -
-In addition, other checks are made:
-
    -
  • If any VTEC string ending time is now earlier than the present -time, the operation is aborted and the product is invalidated.
  • -
  • If a VTEC notification is received that your WFO has updated some -of the VTEC strings in the product, usually by running and transmitting -another product in the office, then the operation is aborted and the -product is invalidated.
  • -
  • All text is changed to Upper Case, per the 10-1701 product -directive.
    -
  • -
-If the product is invalidated, you can still save the text to a -temporary file or Save Draft,  but will be unable to transmit it -or store -it.   You will need to regenerate the product.
-
-Once a product is transmitted, you can no longer transmit the same -product.  Instead you need to re-run the -formatter.
-
-

Locked Out Fields and Editing Headlines

-Due to NWS Quality Control rules, the CI, MND, VTEC lines, UGC lines, -Zone and City Names, Issuance Date Lines, and Headlines are locked and -cannot be edited by the forecaster.
-
-Headlines do allow additional phrasing to be added at the end of each -Headline.  This is to accomondate specific phrases such as "ABOVE -9000 FEET".   The text must be added right before the "..." -or "TEST..." in the headline.   Your additional headlines, or -added words to existing headlines should not contain any of the -following words, or your headline will lock.
-
-The words that should NOT be used in local headlines or added phrases -to headlines are:
-
    -
  • AFTERNOON
  • -
  • CANCELLED
  • -
  • EFFECT
  • -
  • EXPIRED
  • -
  • EVENING
  • -
  • FRIDAY
  • -
  • MONDAY
  • -
  • MORNING
  • -
  • NIGHT
  • -
  • SATURDAY
  • -
  • SUNDAY
  • -
  • THURSDAY
  • -
  • TODAY
  • -
  • TONIGHT
  • -
  • TUESDAY
  • -
  • WEDNESDAY
  • -
  • IS FOR TEST PURPOSES ONLY
    -
  • -
-
    -
-
-This example illustrates adding words to the end of the headline.  -The blue text is locked and cannot be edited.  The black text is -editable.  The cursor was placed right before the "..." and the -user typed ABOVE 9000 FEET.
-
-

-
-
-It is important to realize that some headlines that are edited by the -user will lock and thus not be correctable.   If the -forecaster uses different words that what is expected the software will -not be able to distinguish the words from the non-editable portion of -the headline.
-
-Automatic word wrap is disabled in the headlines for technical reasons -and thus the forecaster will need to provide the appropriate word -wrapping.
-
- -

Using Load Draft and Save Draft

-The Load Draft / Save Draft feature provides several benefits:
-
    -
  • Provides a quick way to save a copy of the current product "just -in case" a system problem or editing mistake is made.
  • -
  • Provides a way for one forecaster to edit part of the product, -and then hand off the product to another forecaster for review or -further editing.
    -
  • -
-The saved draft is put into the EDEX -/awips2/edex/data/utility/cave_static/site/SITE/gfe/drafts directory and is -named via the Definition['awipsWANpil'] contained in the product -definition. The saved information consists of the product text -and the product definition. The product definition contains -important attributes for the product, such as line length and segment -expiration time characteristics. EDEX monitors -incoming VTEC notifications and compares them to the contents of the -draft products and invalidates the draft products if there is a match; -this prevents the loading of a draft that might contain invalid VTEC -and then transmitting a product with invalid VTEC. Loading a -draft that has been invalidated will result in the editor being -disabled and a message indicating that there is a possibility of -invalid VTEC so the product must be regenerated.
-
-Once the draft is saved, the same forecaster or different forecasters -may load the draft into their product editor. Loading a -draft is accomplished by selecting Products -> XXX in the Formatter -Launcher, where XXX is the product name, to create the product -pane. Then the forecaster clicks on the Load Draft (LoadDraft) button and the previously saved -text and its product definition are loaded into the editor.
-
-The forecaster than continues to edit the product until it is ready for -transmission.
-
-Drafts are automatically purged from the server when the segment -expiration time has been reached.
-
-NOTE: Due to VTEC QC -requirements, and the calculations of segment expiration times, it is -NOT recommended to use the Save File... and Open File..., nor Store... -and Load Product... capabilities to faciliate multiple forecasters -editing the product.  The VTEC QC will be bypassed and the segment -expiration times may be miscalculated since the product definition will -not be reinstated from the plain text that was previously saved.
-

Making Corrections - from the Product Editor tab
-

-The Product Editor has a correction mode.   Correction mode -is entered automatically when a user opens the "Product Editor" tab on -the Formatter Launcher and then uses the "Load Product" option.  -This option loads a product from the AWIPS Text Database.   -If the user modifies the headline, such as in the following example, -the VTEC action codes for the segment will change to "COR" and the MND -product header will have "...CORRECTED" appended.  The "Type" -field in the editor is automatically set to "CCA".  The user can -change this to "CCB" or "CCC" if necessary.
-
-
-
 
-
-
-
-Note that using the "Open File" option or no option at all, i.e., blank -editor, will not put the editor into correction mode.
-
-
-

Resent, Updated, Delayed Products
-

-The "Type" selector at the bottom of the product editor allows the user -to specify the type of the product as shown below:
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
Type Field
-
Meaning
-
rou
-
Routine product, no additional -words added to the MND header.
-
res
-
Product that has been -resent.  The word RESENT is added to the MND header.  This is -only available from the "blank" product editor tab.
-
AAA...
-
Updated product.  The word -UPDATED is added to the MND header.
-
RRR...
-
Delayed product.  The word -DELAYED is added to the MND header.
-
CCC...
-
Corrected product.  In the -blank Product Editor with a loaded product from -the AWIPS text database, the word CORRECTED is added to the MND header -and changes made to any segment text will result in the corresponding -VTEC lines to indicate a "COR" action.  This is only available -from the "blank" product editor.
-
-
-
-

Adding the Update Reason Field

-Some products require adding a reason for the update or -correction.   -The user can insert a new line, which will be unlocked, between the UGC -block and the headline.  The cursor is placed between the UGC -block -and any headline and then the text is added.  Be sure to follow -polices and leave a blank line between the UGC block, the update -reason, -and the headline.
-
-

-
-

Framing Codes

-Some of the product formatters and Call To Action statements may -contain "Framing Codes".  These codes are highlighted in 'red' by -default in the Product Editor.   The product will not be able to -be saved to a file, stored, or transmitted if there are framing codes -present in the product.  An example of a product with framing -codes is shown below; the user must remove the frame codes prior to -attempting to save the product.   The software only checks -for pairs of framing codes; i.e., if a single framing code is left in -the editor, it may be transmitted.
-
-In the example below, locked text is shown in blue, and framing code -text is shown in red:
-
-

-
-
-
-

Simulated Transmit

-If the GFE is brought up in PRACTICE mode,  then the Store and -Transmit are simulated.  The dialogs appear different and state -that the simulated store/transmit operations.  The dialogs look -like:
-
-
-
-In PRACTICE mode, the Store operation writes the product to the -GFESuite products/PRACTICE directory as a time-stamped and pil-stamped -file.  The first three characters of the AWIPS product id are -ignored.   The Transmit operation in practice mode writes the -product to the GFESuite products/PRACTICE directory in the same manner -as the Store operation, and then runs the VTEC Decoder on the product -to simulate sending the product on the WAN and re-receiving -it.     The operational VTEC -active table is not used during practice mode, instead a special -active table called PRACTICE is used.
-
-

-
-
-
-

Output Log

-The Output Log is available after the product has finished.  It -contains the log and print statement output from the formatter -run.  It can be used to look for errors that may have -occurred.  A Save As... button is available to allow the contents -to be saved to file for later use.
-
-
-

-
- - diff --git a/cave/com.raytheon.viz.gfe/help/GFEMainMenu.html b/cave/com.raytheon.viz.gfe/help/GFEMainMenu.html deleted file mode 100644 index 046608dab2..0000000000 --- a/cave/com.raytheon.viz.gfe/help/GFEMainMenu.html +++ /dev/null @@ -1,913 +0,0 @@ - - - - - - GFEMainMenu - - -

-GFE Main Menu

-February 15, 2012
-
-This document describes the main menu of the GFE (Graphical Forecast -Editor). -
-main menu
-
-

Table of Contents

-GFE -
-   Editing -Preferences -
-   Viewing -Preferences -
-   Show Warnings -
-   Break Lock... -
-    Delete Users.... -
-   Define Config -and ifpIMAGE Files... -
-   Define Smart Tools... -
-   Define Procedures... -
-   Define Text Products... -
-   Define Time Ranges -
-   Site Activation -
-WeatherElement -
-   Weather -Element Groups -
-   Weather -Element Browser... -
-   Manage Hidden -Weather Elements
-Populate -
-   Procedures (List of Procedures) -
-   Copy -Selected Grids From... -
-   Copy All -Grids -From... -
-Grids -
-   Interpolate... -
-   Split Grids -
-   Fragment Grids -
-   Create Grids From -Scratch -
-   Assign -Default -Value -
-   Assign PickUp Value -
-   Delete Grids -
-   Select Grids -By Time -
-   Select All Weather -Elements -
-   Deselect All -
-   Time Shift... -
-    Find -Weather Element -
-Edit -
-   Undo Grid Edit -
-   Undo Edit Area -
-   Procedures -(List -of procedures) -
-   Save Forecast... -
-   Revert -Forecast... -
-Consistency -
-   Procedures -(List of ISC Procedures) -
-   Clear -Selected Highlights -
Clear All -Highlights -
Send Intersite Grids
-   ISC Request/Reply
ISC Send Enable
-Products
-   Publish to -Official... -
-   Formatter Launcher...
-   Scripts...
-   Process Monitor...
-   GHG Monitor...
-Maps -
-   Topography -
-   Samples -
-    ISC Markers -
-   Map List -
-Edit Areas -
-Verify -
-   Procedures -
-Hazards
-   Procedures
-Reset Practice
-    Clear VTEC -Practice Table
-    Clear Fcst Grids
-Help -
-   Online -Table Of Contents... -
-   Show Tool Tips -
-   About CAVE -
-   Workstation -
-

GFE Menu

-

-Editing Preferences

-

-Missing Data Mode

-
The Missing Data Mode specifies how to handle -missing -data when running a Smart Tool. The options are:
-
    -
  • Stop on Missing Data: The system stops execution -of the Smart Tool if -requested -data is missing.
  • -
  • Skip on Missing Data: The system will skip grids -for which there is -missing -data. A User Alert message will report which grids were skipped.
  • -
  • Create on Missing Data: The system will -automatically interpolate grids -to supply the missing grids. A User Alert message will report which -grids -were created through interpolation. Note that if a grid to be created -is -not between two existing grids, it will not be extrapolated. In this -case, -the grid being edited will be skipped. If the created grids are in the -Fcst database, they will be added to the Fcst database. If running from -the GFE, they can be optionally be saved by the user. If running in -background -mode, they will be automatically saved at the end of the procedure with -all other edited grids. If the created grids are in a non-mutable -database, -they will not be added to the database and will be discarded after -execution -of the tool.
  • -
-

-Temporal Editor Mode: Relative

-Allows the user to choose the Temporal Editor Mode to be either -Relative -or Absolute. If the button is selected, the mode is Relative. -Otherwise, -the mode is Absolute. The default is as set for -TemporalEditorAbsoluteEditMode -in the gfe configuration file. -

When performing an edit in the absolute mode, each point in the Edit -Area will be set to the value indicated in the Temporal Editor. When -performing -an edit in the relative mode, each point in the Edit Area will be -incremented -or decremented by the magnitude of the edit in the Temporal Editor. -

-

Vector Editor Mode

-Allows the user to control the component of the data to be modified -when -performing an Edit Action. The possible options are Magnitude Only, -Direction -Only, or Both. The default is as set for WindEditMode in the gfe -configuration -file. This may also be set from the Vector -PickUp Dialog. -
-

Smoothing Algorithm

-Allows the user to control the amount (area) of smoothing.  The -popup -menu items reflect the smoothing influence by the number of grid -cells. -The Smoothing default value and the selection of values may be configured -in the gfe configuration file. -

Wx/Discrete: Combine

-Allows the user to control whether an edit action replaces the existing -weather/discrete data or combines the new value with the existing -weather/discrete -data. If the button is selected, an edit action will combine -weather/discrete -data. Otherwise, the weather/discrete data will be replaced. The -default -is as set for WeatherDiscreteCombineMode in the gfe configuration -file. -The Weather Combine Mode may also be set from the Weather -PickUp Dialog and Discrete -PickUp Dialog. -

Select Grids When Stepping

-Specifies whether the selection time range will track the spatial -editor -time when time stepping.  Time stepping is accomplished using the -GFE -toolbar stepping buttons or the keyboard -shortcuts. -When this preference is enabled (i.e., yes), the selection time range -will -be set to: -
    -
  • the one hour period surrounding the spatial editor time, if there -is no -active weather element, or
  • -
  • the time constraint box for the active weather element, if there -is no -grid that intersects the spatial editor time, or
  • -
  • the valid time of the grid for the active weather element that -intersects -the spatial editor time.
  • -
-In addition, all weather elements except the active weather element -will -be deselected. -

When this preference is disabled (i.e., no), the selection time -range, -and the set of selected weather elements will not change when using the -GFE -toolbar step buttons and -keyboard shortcuts. -

-

Auto Save...

-The Auto Save Interval entry brings up the Auto -Save Interval Dialog. This dialog allows the user to enable or -disable -the automatic saving of modified weather elements.  If enabled, -then -every few minutes all modified grids will be saved to the -database. -The interval may be changed from 1 minute to 60 minutes. -

Contour Server Selection

-Allows the user to choose which algorithm is to be used for the -conversion -of contours into a gridded field by selecting one of the buttons. The -default -is as set for ContourServer in the gfe configuration file. We recommend -that you try both methods and choose the one which works the best for -you. - - - - - - - - - - - - - - - -
ModeDescription
Contour AnalyzerThe Contour Analyzer makes a grid from paints on contour -lines, using -a simple analysis technique similar to Barnes.
Internal SIRS ServerThe Internal SIRS Server makes grids from contour lines -using -the TDL SIRS algorithm as written by FSL for the GFE.
-

-Interpolate Algorithm

-The Interpolate Algorithm entry brings up the Interpolation -Algorithm Dialog. This dialog allows the user to select the -appropriate -interpolation algorithm for each scalar weather element. -
-

Viewing Preferences

-

-Quick View Mode

-Allows the user to set the behavior of the Spatial Editor when the -pointer -is moved over the Grid Manager. If the button is selected, the data -displayed -in the Spatial Editor is controlled by the cursor position over the -Grid -Manager (i.e. the Spatial Editor displays the grid under the cursor). -Otherwise, -the data displayed in the Spatial Editor does not change when the -cursor -is moved over the Grid Manager time blocks. The default is off. -

Image on Edit

-Allows the user to set the display mode of the of a grid made editable. -If the button is selected, a grid made editable is automatically -displayed -as an image in the Spatial Editor. Otherwise, the display mode (Image -versus -Graphic) is not changed when a grid is made editable. The default is as -set for ImageOnActiveSE in the gfe configuration file. -

Temporal Editor Overlay Mode

-Allows the user to control the loading of new Weather Elements into the -Temporal Editor. If the button is selected, the Temporal Editor will -attempt -to overlay a newly loaded weather element with another weather element -of identical units. Otherwise, each newly loaded weather element will -have -its own pane in the Temporal Editor. The default is as set for -TemporalEditorOverlay -in the gfe configuration file. -
-

Temporal Editor -Weather -Element Mode

-This cascade menu permits choices of "All Weather Elements", "All -Weather -Elements w/o ISC", "Fcst Weather Elements", "Active Weather -Element", -and "Visible Elements Only". It controls the set of weather -elements -that appear in the temporal editor. Selection of "All Weather -Elements" -will mirror the weather elements that are loaded into the spatial -editor. -Selection of "All Weather Elements except ISC" will set the temporal -editor -to display all weather elements loaded into the spatial editor, except -for any ISC elements. Selection of "Fcst Weather Elements" will mirror -just those elements loaded into the spatial editor that are mutable, -i.e., -from the Fcst database. Selection of the "Active Weather Element" -will set the temporal editor to have only the active weather element to -be displayed in the temporal editor. Selection of the "Visible Elements -Only" will set the editor to only have the visible set of weather -elements -that are displayed in the Grid Manager. -

Temporal Editor Statistics Mode

-Brings up the Temporal -Editor Statistics Mode Dialog, which permits the user to define the -type of statistics that are presented with the range-style -visualizations -in the temporal editor. -
-

Time Scale Periods...

-Brings up the Time -Scale Displayed Periods Dialog, which permits the user to define -which -of the named selection time ranges are displayed on the Time -Scale. -The initial setting can also be defined in the gfe configuration file -entry -Time -Scale Periods. -
-
-

Edit Area Appearance...

-Brings up the Edit -Area Appearance Dialog, which permits the user to define a color -and -a line width for the appearance of the edit area on the spatial -editor. -The initial setting can also be defined in the gfe configuration file -entry -Edit -Area Color and Border Width. -
-
-

Wx/Discrete Show Description

-If Show Description is on, then the Weather Pick Up -Value Dialog and Discrete Pick -Up Value Dialog will contain additional descriptive information for -each symbol. In addition to the two dialogs, the Spatial -Editor Color Bar and Temporal Editor Data Pane's MB3 Popup Menu items Set Common -Values To, Set Recent Values To..., and Set Session Values To... -also will contain the descriptive information. The default can be -controlled through the GFE configuration -file.
-
-

Show Warnings

-Allows the user to enable or disable the display of warning messages. -If -the button is selected for a particular warning message, the message is -automatically displayed in the GFE. -

Show Edit Action Time Range Warning -

-

The Show Edit Action Time Range warning is displayed when the user -attempts -to edit data over a selected time range which -extends over more than one grid. Proceeding at this point will modify -more than one grid. -

-

Show Empty Edit Area Warning -

-

The Show Empty Edit Area warning is displayed when the user attempts -to edit data without having selected an edit area. Proceeding at this -point -will modify data over the entire grid. The defaults are as set for -ShowTimeRangeWarning -and ShowEmptyEditAreaWarning in the gfe configuration file. -
-

-

Break Lock...

-Breaks the lock(s) created by a different user or during a previous -session. -The Break Locks dialog -brings up the all of the lock(s) found in the mutable database and -allows -the user to select which lock(s) to break. Users are not required to -select -a time range prior to breaking locks. -
-

Define Config and -ifpIMAGE -Files...

-Brings up the Define -Configuration Dialog, which is used to create, view, delete, and -modify -configuration files for the GFE and for ifpIMAGE. -

Define Smart Tools...

-Brings up the Edit -Action -Dialog , which is used to create, view and execute smart tools. -

Define Procedures...

-Brings up the Define -Procedures dialog allowing the user to define procedures. A new -procedure -can be created or an existing one modified by pressing button 3 over -the -dialog and selecting new or modify. A template for defining procedures -appears in a Python window. -

Define Text Products...

-Brings up the Define -Text Products dialog allowing the user to define text products. A -new -product can be created or an existing one modified by pressing button 3 -over the dialog and selecting new or modify. A template for defining -the -product appears in a Python window. -

Define Select Time Ranges

-

-Save Select Time Range...

-Brings up the -Save -Selection Time Range dialog allowing the user to define and save a -selection time range relative to 0000LT today or 0000Z. -

Delete Select Time Range...

-Brings up the -Delete -Selection Time Range dialog allowing the user to delete a selection -time range. -

Site Activation

-Opens a site activation dialog. Activating a second site allows GFE to -operate as the secondary site. Localization must be in place for the -secondary site to operate correctly. -
-
-

Weather Element

-

-Weather Element Groups

-Lists the Weather Element Groups available. Selecting a group loads it -into the Grid Manager. A Weather Element Group can be saved (defined) -in -the Weather Element Browser, under the browser's File menu. -Note that any unsaved (modified) weather elements will not be unloaded -when you swich to another weather element group.
-

Weather Element Browser...

-Brings up the Weather -Element -Browser dialog which allows the user to load and unload Weather -Elements. -Weather Element Groups can also be saved, deleted, or loaded -under -the browser File menu. The dialog lower box highlights all the Weather -Elements to be loaded. To deselect a highlighted Weather Element, -simply -click on it.
-
-

Manage Hidden Weather -Elements...

-Brings up the Manage -Hidden Weather Elements dialog which allows the user to display or -unload hidden weather elements. Hidden weather elements are those -that are not seen in the Grid Manager, Spatial Editor, or Temporal -Editor, but yet they exist. They are created as part of the Show -Intersite Coordination and Virtual Parms, as well as temporary weather -elements during smart tool execution.
-
-
-

Populate

-

-Procedures

-Lists the Procedures available. Selecting a procedure runs it. -

Copy Selected Grids From...

-Brings up the Copy -Selected Grids From dialog allowing the user to select the model -from -which the data for the selected grids is to be copied. -

Copy All Grids From...

-Brings up the -Copy -All Grids From dialog allowing the user to select the model from -which -the data for all loaded grids is to be copied. -
-
-

Grids

-These menu items will be dimmed when the Temporal Editor is displayed -since -most operations apply to grids selected in the Grid Manager. -

Interpolate...

-Interpolates between two or more grids and adds additional grids. There -are two methods of performing interpolation: By Gaps, and Based On -Edited -Data. The "By Gaps" feature replaces all gaps within the selected time -range with multiple interpolated time blocks aligned with the split -boundaries. -The "Based On Edited Data" first clears all non-user edited blocks in -the -selected time range and then does an interpolate. The user may -also -select the interpolation interval and the interpolated grid's duration. -The Interpolate button brings up the -Interpolation -Dialog. Refer to Interpolation -Algorithm -to details on choosing the interpolation algorithm. -
-

Split Grids

-Splits the selected grid block into two or more blocks. The block is -split -at the start and end boundaries of the selected time range. -

Fragment Grids

-Fragments the selected grid block into equal size grids. The size of -the -fragments is determined by the time constraint for the given grid. -

Create Grids From Scratch...

-The create grids from scratch entry brings up the Create -From Scratch Dialog. The dialog allows for the creation of -multiple -grids over the selected time range. The user has control over the -creation interval and duration of the grids. The value assigned to the -created grids is either the default value, or the current pick-up -value. -

Assign Default Value

-Assigns the default value to the selected grids. This function can be -used -to reset the value of a grid if the user wants to eliminate the -modifications -made to a grid and start over. The default value for a grid corresponds -to the minimum value for the given weather element. -

Assign PickUp Value

-Assigns the current pickup value to the selected grids. All grid -points within the selected grids will be set to the pickup value. -The user should first ensure that the appropriate pickup value is set by -using the color bar -or by using the Pick -Up Value dialog. -

Delete Grids

-Deletes the selected grids in the Grid Manager. -

Select Grids By Time

-Lists the available Select Time Range(s). These time ranges can be -defined -in the Save Select Time Ranges under the Grids main menu. Selecting one -of the Time Ranges listed sets the selected time range to it. -

Select All Weather Elements

-Selects all loaded weather elements in the Grid Manager. The -grids selected also depends on the Selected Time Range. -

Deselect All

-Deselects all selected grids for all selected weather elements. -

Time Shift...

-Brings up the -Time Shift -dialog allowing the user to either move or copy a selected grid. -The -grids can be copied/moved either forward or backward. The default is -set to move. -

Find Weather Element

-Lists all the loaded weather elements. Selecting a weather element -makes -it visible in the Grid Manager or Temporal Editor. If the weather -element is already visible, nothing is done. -
-
-

Edit

-

-Undo Grid Edit

-Undoes the last edit performed on the editable grid. Only one Undo can -be done. Doing a second Undo is equivalent to performing a Redo. -

Undo Edit Area

-Undoes the last Edit Area operation in the Spatial Editor. -

Procedures

-Lists the Procedures available. Selecting a procedure runs it. -

Save Forecast...

-Brings up the -Save Forecast -dialog allowing the user to select which weather element(s) are to -be saved to the Forecast database. -

Revert Forecast...

-Brings up the -Revert -Forecast dialog allowing the user to select which weather -element(s) -are to be reverted. A revert returns the data to the last saved state. -
-
-

Consistency

-

-

-

Procedures

-Lists the Procedures available. Selecting a procedure runs it. A -Intersite -Coordination Procedure is set up to appear as a system defaults -ISC_Disrepancies. For more information on these -procedures -see the Intersite Coordination Training Guide. -

Clear Selected Highlights

-Clears the highlighting for grids in the Grid Manager over the selected -time range. -

Clear All Highlights

-Clears all the highlighting for grids in the Grid Manager.
-
-

Send Intersite Grids

-Brings up the Send -Intersite Grids Dialog which allows the forecaster to specify grids -to send via ISC.
-
-

ISC Request/Reply
-

-Brings up the Request -Intersite Grids Dialog - allowing the user to freshen the ISC database by obtaining grids -directly from other sites.
-
-

ISC Send Enable
-

-Controls the state of the ISC Transmit capability for this -client. If EDEX isn't configured for sending ISC, -then this menu option will not be available. If configured, -then the ISC Send Enable can be turned on or turned off through this -menu item. A "traffic light" will appear in the lower right -of the status bar showing the current configuration.
-
-In order for the GFE to send grid via ISC, the ISC Send Enable must be -on, and the ISCxmt traffic light in the status bar appearing -green. If the ISC Send Enable is off, then the GFE will not -be able to send ISC grids even when EDEX is configured for -sending grids on save.
-
-

Products

-

-Publish to Official...

-Brings up the -Publish -To Official dialog allowing the user to choose the source, the -weather -element(s), and the time range to publish to the Official database. The -data must be saved prior to attempting to publish it. The Official -database -is the one from which products will be generated. The dialog will also -permit sending your grids to configured sites for intersite -coordination.
-
-

Formatter Launcher...

-Brings up the Formatter -Launcher dialog allowing the user to choose the products to -generate using the GFE Text Formatters. One or more of the listed -products may be generated. The forecast -must be published to the Official database prior to generating products -(if the user wants the lastest modified forecast). Text formatters -must be properly configured in order for entries to appear in this -dialog. -Refer to the Text Formatter's User's Guide -for configuration information.
-

Scripts...

-Brings up the -Scripts dialog -allowing the user to choose the script to run. The Scripts entry in the gfe configuration -file define the entries that appear in the dialog. Depending upon -the scripts entry, additional dialogs may -appear allowing the user to specify the parameters. -
-
-

Process Monitor...

-Brings up the Process -Monitor Dialog which shows the status of background processes. The -Dialog allows the process queue to be viewed and manipulated.
-

GHG Monitor...

-Brings up the GHG Monitor - which allows the forecaster to view the list of current hazards -in effect.
-
-

Maps

-

-Topography

-Toggles the Topography grid on and off. Toggling the Topography grid -off unloads it. -

Samples

-

-Load...

-Brings up the Load -Sample -Set dialog listing the sample sets available from the server. -Selecting -one of the sample sets loads it for display in the Spatial Editor. This -dialog allows the user to add to, delete, or replace the previously -loaded sample set(s). -

Clear

-Clears the sample set(s) currently displayed in the Spatial Editor. -

Save...

-Brings up the -Save Sample -Set dialog allowing the user to save a new sample set. -

Delete...

-Brings up the -Delete -Sample Set dialog allowing the user to delete an existing sample -set. -

Define by Lat/Lon...

-The Define by Latitude/Longitude entry brings up the Define -Samples via Lat/Lon dialog allowing the user to enter sample points -by location. -

Show Lat/Lon

-If enabled, the latitude/longitude of the sample points, or roaming -sample -will be shown with the data values. The format is lat/lon. The -bottommost -entry is the latitude/longitude and is always painted in white. -
-

Show ISC Update Time on Data Samples

-If enabled and in Intersite Coordination Mode or displaying ISC data, -the -number of hours since the last update for the underlying data will be -displayed. -Refer to the Intersite Coordination User's Guide -for more details. -

Show ISC Site ID on Data Samples

-If enabled and in Intersite Coordination Mode or displaying ISC data, -the -originating site for the underlying data will be displayed. Refer to -the -Intersite -Coordination User's Guide for more details. -
-

Show ISC Official DB Symbol -on Data Samples

-If enabled and in Intersite Coordination Mode or displaying ISC data, a -"P" will be appended to the sample points for the underlying data that -came from an Official (published) database. Refer to the Intersite -Coordination User's Guide for more details. -
-
-

ISC Markers

-

-Show ISC Markers

-This control turns on and off the set of defined ISC Markers. ISC -Markers are only visible when displaying ISC data or when in Intersite -Coordination Mode. Refer to the Intersite -Coordination -User's Guide for more details. -
-  -

Show ISC Update Time on Marker

-If enabled and in Intersite Coordination Mode or displaying ISC data, -the -number of hours since the last update for the underlying data will be -displayed. -Markers are similar to sample points, except that no data values are -shown. -Refer to the Intersite Coordination User's Guide -for more details. -

Show ISC Site ID on Marker

-If enabled and in Intersite Coordination Mode or displaying ISC data, -the -originating site for the underlying data will be displayed. Markers are -similar to sample points, except that no data values are shown. Refer -to the -Intersite Coordination User's Guide for more -details. -
-

Show ISC Official DB -Symbol on Marker

-If enabled and in Intersite Coordination Mode or displaying ISC data, a -"P" will be appended to the sample points for the underlying data that -came from an Official (published) database. Markers are similar to -sample -points, except that no data values are shown. Refer to the Intersite -Coordination User's Guide for more details. -
-

Map List

-Lists all the available maps. If the map button is checked on, the map -is displayed. Clicking on a map that is already loaded will unload it -and remove if from the Spatial Editor display. -
-
-

Edit Areas

-This menu lists the edit areas by Edit Area Group. To load an edit -area, -simply choose it from the cascading menu. -
-

Verify

-

-

Procedures

-Lists the Procedures available. Selecting a procedure runs it.
-
-
-

Hazards

-

Procedures

-Lists the Procedures available. Selecting a procedure runs it. -The standard procedures provided under "Hazards" are used in creating -the Hazards grid. These are MakeHazard, SeparateHazards, -MergeHazards, PlotTPCEvents, PlotSPCWatches, and ViewWCL.
-
-

Reset Practice

-This menu only appears while in GFE Practice Mode.
-
-

Clear VTEC Practice Table

-This option is only available while in GFE Practice Mode. It -immediately clears, i.e., empties, all entries in the VTEC active table -used for PRACTICE mode. It does not affect the operational -VTEC table. The primary use for this capability is to reset -the VTEC active table to a known state.
-
-

Clear Fcst Grids

-This option is only available while in GFE Practice Mode. It -breaks all existing locks in the Prac_Fcst database and then removes -all grids. It does not affect the operational Fcst database.
-
-
-

Help

-

-Online Table Of Contents...

-Brings up a Netscape page with links to online help. -

-Show Tool Tips

-Activates tool tips when a screen item is rolled over with the mouse. -

About CAVE

-Brings up the About -Dialog -which lists general build and server information. -

Workstation

-Where CAVE is running. -
-
-
-Return to TOC - - diff --git a/cave/com.raytheon.viz.gfe/help/GFEStartup.html b/cave/com.raytheon.viz.gfe/help/GFEStartup.html deleted file mode 100644 index 31f31531ed..0000000000 --- a/cave/com.raytheon.viz.gfe/help/GFEStartup.html +++ /dev/null @@ -1,229 +0,0 @@ - - - - - - GFE Startup - - -

-GFE Startup Information

-February 16, 2012
-
-Table of Contents
-
-Command Line Options
-Standard Startup of GFE
-Special Configuration Files
-Special GFE Startup Modes for TEST and PRACTICE
-
-

Command Line Options

-


-cave.sh [-server serverURL] [-mode TEST|PRACTICE|OPERATIONAL] [-site xxx] -[-u user] [-component componentName] [-perspective perspecitiveName] [-noredirect]
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Command Line OptionOptional?Meaning
-server serverURLYES - Overrides the http server URL in the localization preferences.
- The URL should match the HTTP_SERVER setting in /awips2/edex/bin/setup.env of the desired server. -
-mode TEST|PRACTICE|OPERATIONALYESCauses CAVE to be started in the specified mode. OPERATIONAL by default.
-site xxxYESOverrides the localization site preference setting forcing CAVE to start as the specified site. -
-u userYESOverrides the user workstation login with the specified user id. Note: SITE is NOT a user id in AWIPS2. -
-component componentNameYESUsed to start specialized CAVE sessions like textWS, avnMenu, ServiceBackup, etc.
-perspective perspecitiveNameYESCauses CAVE to start in the specified perspective, i.e, GFE, D2D, etc. No perspective - buttons will be displayed. You must use the CAVE->Perspective menu to change perspectives.
-noredirectYESCauses stdout and stderr to not be redirected but instead display in the terminal window - for debugging use.
-

-
-

Standard Startup of GFE

-GFE is normally started with the appLauncher menu activated by -clicking anywhere on an AWIPS workstation desktop.

-

To start GFE -via the command line execute the /awips2/cave/cave.sh script with the -switch -component GFE. -When this is done, the GFE begins and contacts EDEX. If EDEX cannot -be contacted successfully, an error dialog is presented to the user.
-
- - - - - - -
-
-
-
-In normal situations once the server has been contacted, the user is -presented with the GFE start up dialog. -GFE will query EDEX and determine -the available list of configuration files that are available to the -user. -The standard "gfeConfig" is shipped with the system. The site may -have overridden it and users may override them too. See the base, -site, user concepts guide for information. The gfe -configuration -file can be tailored to the site's or user's needs. See the gfe -configuration guide for details. The user selects the appropriate -configuration file from the -list. -The user is not allowed to enter a new configuration file since gfe -requires an existing configuration file to start.
-


-

-

The user positions the cursor over the Ok button and -clicks. -GFE will now start and just the splash screen will be shown:
-

-


-

-


-If the GFE does not come up properly, a -bad configuration file is likely the cause.
-

-
-

Special Configuration Files

-GFE comes with some special -configuration files which can be used to modify special grids. If a GFE -is started using one of these files, then various special -weather elements can be edited. -

EditTopo

-Starting the GFE with this config file allows for the editing of the topo grid. You can -use the standard startup, and enter EditTopo into the configuration -entry field of the startup dialog. -

Once the GFE is running, there will be no weather elements appearing -in the grid manager. One weather element will be loaded, of a persistent -nature, into the spatial editor. This element is called Topo SFC -Topo_EditTopo. You can edit the topography and once saved, the remainder -of the GFESuite system will see the modified topography when those -programs are started.
-

-

-

Special GFE Startup Modes for Test and -Practice

-The GFE may be started with three special modes. These modes -allow for product testing and GFE practice. This section defines -the behavior of the GFE in these modes.
-
-

TEST mode

-Starting the GFE with a -mode TEST -switch will place the GFE in TEST mode. All products issued in -this mode will be issued with TEST mode enabled. The -forecaster edits a Test database instead of a Fcst -database, thus no impact is made on formal operations.
-
-Test mode on products means that products that normally have VTEC will -have the "T" code enabled, regardless of the definition in the -VTECMessageType file (as long as there is a definition for the product -in the VTECMessageType file). Test products mean that the -MND header will contain the "...TEST..." and so will any headlines in -the product.
-
-The characteristics of the GFE is changed while in TEST mode:
-
    -
  • The forecaster edits a Test database instead of a Fcst -database, thus no impact is made on formal operations.
  • -
  • Product can be transmitted.
    -
  • -
  • There is no Official database available.
  • -
  • Sending of ISC grids and Publishing to Official is disabled.
  • -
  • The FormatterLauncher data source is set to the Test database.
  • -
  • The VTEC "active" table is used since these products can be -transmitted.
  • -
  • The enabled VTEC modes specified in VTECMessageType is used only -to determine if VTEC is enabled or not for a product. If a -product does not normally -contain VTEC, then in TEST mode no VTEC will appear. However, if -vtec is enabled for a product, that vtec mode is switched to "T" mode.
    -
  • -
  • The background color of the GFE is changed, to make it clear to -the forecaster that they are in a special mode. The word -TEST is placed in the window manager title.
  • -
-
-An example of the GFE in TEST mode is shown below:
-
-
TEST mode
-
-
-

PRACTICE mode

-Starting the GFE with a -mode PRACTICE -switch will place the GFE in PRACTICE mode. In this mode the -following characteristics are changed:
-
    -
  • The forecaster edits a Practice database instead of a Fcst -database, thus no impact is made on formal operations.
  • -
  • There is no Official database available.
  • -
  • Sending of ISC grids and Publishing to Official is disabled.
  • -
  • The FormatterLauncher data source is set to the Practice database.
  • -
  • An alternate active table is used to ensure there is no conflict -with real operations.
  • -
  • The ability to store products in the AWIPS text database and -transmit them is not available, although the GUI will still -exist. The Transmit GUI will clearly indicate that the transmit -is being simulated.
  • -
  • A special Formatting entry appears on the Formatter Launcher to -allow the forecaster to select the type of practice formatting. -Choices range from the 3 operational VTEC modes and no VTEC for -operational/normal wording, and two choices for test wording (with and -without VTEC).
    -
  • -
  • The background color of the GFE is changed, to make it clear to -the forecaster that they are in a special mode. The word -PRACTICE is placed in the window manager title.
  • -
-The background of the GFE in Practice mode appears orange:
-
Practice Mode
-
-
-
- - diff --git a/cave/com.raytheon.viz.gfe/help/GFESuite.html b/cave/com.raytheon.viz.gfe/help/GFESuite.html deleted file mode 100644 index 7c12d34fa9..0000000000 --- a/cave/com.raytheon.viz.gfe/help/GFESuite.html +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - GFESuite Documentation - - -
-

GFESuite -Documentation Guides
-

-
-
Main Documentation Page -
-  -

-
-
-  -

Table of Contents

-GFE Training Guide - provides -step-by-step -introduction to the GFE and its capabilities. Contains exercises. -
-GFE Reference Manual - provides -descriptions -of dialogs, menus, popups, and other associated information. -
-Other GFESuite Programs - user -guides to other programs, such as product generation programs. -
-Configuration Guides - how to -configure -the GFE and database server. -
-Release Notes - release notes for this -version. -
-Testing Information - -testing information (test cases and procedures) for this -version.
-Splash Screens - descriptive -information about the GFESuite Splash Screens.
-

- - diff --git a/cave/com.raytheon.viz.gfe/help/GFESuiteConfiguration.html b/cave/com.raytheon.viz.gfe/help/GFESuiteConfiguration.html deleted file mode 100644 index 3875dfc36c..0000000000 --- a/cave/com.raytheon.viz.gfe/help/GFESuiteConfiguration.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - - GFESuite Documentation - Configuration - - -
-

GFESuite -Configuration Guide

-
-
-
-
The configuration guides provide information on -how-to configure the -GFE -and server, as well as provide some general concepts and directory -layout -information: -
-  -
-  -
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Base, Site, User -Configuration Concept
GFESuite Server ConfigurationServer -Configuration - -configuration -of available weather elements, limits, databases, map backgrounds, site -domains, resolutions
GFESuite GFE ConfigurationGFE Configuration - -configuration -of appearance of user interface and weather elements -
    -
-
Directory Structures
Smart Initialization Configuration
Intersite/Intrasite -Coordination -of Grids Configuration

-
VTEC -Configuration
-

-
Virtual -Weather Element Configuration
-
Log Files
-

-

-
-

 Back To Top -
-  -

-
- - diff --git a/cave/com.raytheon.viz.gfe/help/GFESuiteDialogs.html b/cave/com.raytheon.viz.gfe/help/GFESuiteDialogs.html deleted file mode 100644 index ea3f7ea1f7..0000000000 --- a/cave/com.raytheon.viz.gfe/help/GFESuiteDialogs.html +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - - GFESuite Documentation - GFESuite Dialogs - - -
-

GFESuite Dialogs

-
-
-
-
-User Interface Dialogs describes the various dialogs, including the -color table editor, that are used in the GFE. -
-  - - - - - - - -
  • Main Menu Dialogs
  • -
  • Button Bar Dialogs
  • -
  • Color Table -Editor -and Color -Chooser
  • -
  • Spatial Editor Dialogs
  • -
  • Temporal Editor Dialogs
  • -
  • Grid Manager Dialogs
  • -
  • Color Bar Dialogs
  • -
  • Formatter Launcher
  • -
    -
    -
    -
    -

    Back To TOC -
    -

    -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/GFESuiteDoc.html b/cave/com.raytheon.viz.gfe/help/GFESuiteDoc.html deleted file mode 100644 index 6b74795bad..0000000000 --- a/cave/com.raytheon.viz.gfe/help/GFESuiteDoc.html +++ /dev/null @@ -1,4 +0,0 @@ - - - diff --git a/cave/com.raytheon.viz.gfe/help/GFESuiteGFEConfiguration.html b/cave/com.raytheon.viz.gfe/help/GFESuiteGFEConfiguration.html deleted file mode 100644 index 31759c5099..0000000000 --- a/cave/com.raytheon.viz.gfe/help/GFESuiteGFEConfiguration.html +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - GFESuite Documentation - GFE Configuration - - -
    -

    GFESuite -GFE Configuration Guide

    -
    -
    -
    -

    -The GFE configuration guides describe the methods and syntax of -changing user interface and behavioral defaults for the Graphical -Forecast Editor:
    - - - - - - - - - - - -
    General -DescriptionDescribes the general technique -for modifying the gfe configuration.
    -
    SyntaxDescribes the syntax of the gfe -configuration file.
    -
    -
    -
    -

    -
    -

     Back To TOC -
    -
    -

    -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/GFESuiteOtherPgms.html b/cave/com.raytheon.viz.gfe/help/GFESuiteOtherPgms.html deleted file mode 100644 index 12390e3481..0000000000 --- a/cave/com.raytheon.viz.gfe/help/GFESuiteOtherPgms.html +++ /dev/null @@ -1,166 +0,0 @@ - - - - - - - GFESuite Documentation - Other Programs - - -
    -

    GFESuite Other -Program Guides
    -

    -
    -

    -
    -
    There are other GFE Suite programs besides the GFE.  Some -of these -are product generators in formats of ascii grid, and png (portable -network -graphics). -

    Programs other than the GFE are described in the following user -guides: -
    -  -
    -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Ascii Grid Generator (ifpAG)
    -
    IFP IMAGE File Generator
    ifpnetCDF Formatter
    Break All Locks

    -
    iscMosaic (used to input netCDF -files generated -from the ifpnetCDF formatter program -or other programs that write the netCDF files into that format). -This program is part of the intersite -coordination of grids -package.
    -
    moveGFEData (used to move -configuration -data from one user to another in the proper manner). This allows -movement -of color tables, edit areas, sample sets, weather element groups, edit -area groups, gfe and ifpIMAGE configuration files, selection time range -definitions, isc discrepancy value grids, and tools/procedures.
    -
    getNotify (diagnostic program to -"watch" -notifications from the awips qpid server to the clients). Simply outputs the -received -notifications for database inventory, grid inventory, sample set, edit -area, text data, and user messages.
    -
    ifpServerText is used to -save, retrieve, -inventory, or delete smart tools, procedures, text products, utilities, -and gfe/ifpIMAGE configuration files from the command line. Edit areas, -sample sets, color tables, weather element groups, and select time -range definitions may also be saved and retreived. Map background -inventory and data is accessible through ifpServerText.
    -

    -
    sendGfeMessage is a utility -to send a message to all connected EDEX clients, such as -GFEs. The message will appear in the status bar.
    -

    -

    -
    purgeAllGrids -is a utility that will remove all grids from the specified -database.  This needs to be used with caution.
    -

    -
    GHGMonitor
    -
    GHG -Monitor is a utility to monitor VTEC hazards and alert the -forecaster as products are about to expire.
    -

    -

    -
    dumpAT -is a utility to dump out the contents of the VTEC -active table.
    -

    -
    -

    -

    -

    -

    Back To TOC -
    -

    -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/GFESuiteReference.html b/cave/com.raytheon.viz.gfe/help/GFESuiteReference.html deleted file mode 100644 index fc8085bd92..0000000000 --- a/cave/com.raytheon.viz.gfe/help/GFESuiteReference.html +++ /dev/null @@ -1,122 +0,0 @@ - - - - - - - GFESuite Documentation - GFESuite Reference - - -
    -

    GFESuite Reference -Guide

    -
    -
    -

    The GFE Reference Guide describes GFE features by menu, dialog, or -other -component.  Its purpose is to supplement the GFE Training Guide -for -day-to-day operation. -

    -

    The reference manual is divided into several sections: -

    -

    GFE Startup Instructions and Options
    -

    -

    describes the options to -start -up the GFE, the splash screen, and entering the username and -configuration -file information. -

    - -


    -

    -

    User Interface Menus, Button Bar, and Status Bar

    -

    describes the menu -options, button bar actions, and the message status bar. -
    -  - - - - - - - - - - - - - - - -
    Main Menu
    Button Bar
    AlertViz
    -

    -
    -
    -

    User Interface Dialogs

    -
    -describes the various dialogs, including the -color table editor, that are used in the GFE. -
    -  - - - - - - - -
    GFESuite Dialogs
  • User Interface Dialogs
  • -
    -
    -


    -

    -

    Popup Menus

    -


    -The Popup Menus section describes -the -popup menus for each of the major components of the GFE.
    -

    -


    -

    -

    Smart Tools and Procedures
    -

    -The Smart Tools and Procedures -section -describes the baselined smart tools and procedures that are delivered -as part of the -GFESuite.
    -
    -
      -
    -
    -

    Misc. Reference Items

    -
    -Misc. Reference Items that describe other features of the GFESuite.
    - -
    -

    Back To TOC -
    -

    -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/GFESuiteServerConfiguration.html b/cave/com.raytheon.viz.gfe/help/GFESuiteServerConfiguration.html deleted file mode 100644 index cb27f4026d..0000000000 --- a/cave/com.raytheon.viz.gfe/help/GFESuiteServerConfiguration.html +++ /dev/null @@ -1,103 +0,0 @@ - - - - - - - GFESuite Documentation - - -
    -

    GFESuite Configuration Guide

    -
    -
    -
    -
    The GFESuite Configuration Guide -describes the various methods to configure GFE.
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    General DescriptionGeneral description describing -how GFE is configured.
    -
    Syntax -for serverConfig.pyDescription of the serverConfig -configuration file.
    -
    Syntax -for localConfig.pyDescription of the site -modification file to serverConfig.
    -
    Syntax -for localWxConfig.pyOverride file for the Wx -(Weather) definition.
    -
    Syntax -for Maps.pyBaseline map background -configuration file.
    -
    Syntax -for MapFiles.pyBaseline map background -shapefile name configuration file.
    -
    Syntax -for localMaps.pyOverride file for customizing -map backgrounds.
    Syntax -for VTECPartners.pyVTEC configuration for -coordination and decoding.
    -
    Syntax -for -localVTECPartners.pyOverride file for the VTEC -configuration.
    -
    Description -of EDEX required HDF5 FormatDescription of the "D2D" hdf5 -file convention.
    -
    -
    -
    -
    -

     Back To TOC -
    -

    -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/GFESuiteTraining.html b/cave/com.raytheon.viz.gfe/help/GFESuiteTraining.html deleted file mode 100644 index b02aebe001..0000000000 --- a/cave/com.raytheon.viz.gfe/help/GFESuiteTraining.html +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - - GFESuite Documentation - Training - - -
    -

    GFESuite Training -Guide
    -

    -
    -
    The GFE Training Guide describes how to use the -Graphical Forecast Editor. -It takes you through the basic features and provides exercises for you -to complete.  This guide is divided into different sections.  -We recommend that you use them in the following order: -
    -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    - -
    GFE Spatial Editor -Training -Guide
    GFE Grid Manager Training -Guide
    GFE Temporal Editor -Training -Guide
    GFESuite Python Tutorial and -Programming Guidelines
    GFE Smart Tools Training Guide - -
    GFE Text Products User Guide
    -
    - -
    Intersite Coordination Training Guide

    -The Essential GFE Techniques document -gives -you several dozen GFE operations to perform.  This document is a -good -test to see whether you have mastered the GFE.
    -
    -

    -

    Back To TOC -
    -

    -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/GFETrainingGridManagerAppearance.html b/cave/com.raytheon.viz.gfe/help/GFETrainingGridManagerAppearance.html deleted file mode 100644 index 938f4b554a..0000000000 --- a/cave/com.raytheon.viz.gfe/help/GFETrainingGridManagerAppearance.html +++ /dev/null @@ -1,287 +0,0 @@ - - GFESuite Documentation - Grid Manager Appearance - - -

    Grid Manager Appearance

    -


    -Normal Display Mode -
    -History Display Mode
    -Last Saved, Modified, Published, Sent -Display Modes
    -


    -
    The figure below is an annotated screen snapshot of -the -Grid Manager in normal display mode. Each major part is labeled and -then -described in the table below. These terms will be used throughout this -guide, so you should familiarize yourself with them. -
    -  -

    Grid Manager Component Descriptions - -Normal -Display Mode

    -
    - -
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      -
      Object
      -
      -
      Purpose
      -
      -
      Weather Element
      -
      Identifier
      -
      -
      The name of the weather element and -database (source) -and locale
      -
      -
      Weather Element Selector
      -
      -
      Selects and deselects a weather element -for Grid -Manager edit operations (e.g., delete interpolate, populate).
      -
      -
      Ordinary Grid Block
      -
      -
      Represents a single grid. Its position -and extent -indicate its valid period.
      -
      -
      Time Boundaries for Grid
      -
      -
      Displays the smallest time period that a -grid may -be assigned.
      -
      -
      Grid History
      -
      -
      Identifies the origin and source of the -grid, and -whether it has been modified. The origins of the grid include -"Interpolated", -"Populated from model", "Created from scratch", "Calculated", and -"Other".
      -
      -
      Editor Time Line
      -
      -
      The current Spatial Editor time.
      -
      -
      Editable Grid
      -
      in Spatial Editor
      -
      -
      Bright yellow grid block that identifies -the grid -that is currently editable in the Spatial Editor.
      -
      -
      Time Scroll Bar
      -
      -
      Allows users to scroll the Grid Manager -in time
      -
      -
      Pane Scroll Bar
      -
      -
      Allows users to scroll vertically to -reveal hidden -weather elements.
      -
      -
      Locked By Someone Else
      -
      (red background)
      -
      -
      Indicates which weather element-time -periods that -have been edited and not saved by another user and hence not editable -by -you.
      -
      -
      Locked By You
      -
      (green background)
      -
      -
      Indicates which weather element-time -periods that -you have edited (but not yet saved) and are hence locked by you.
      -
      -
    -
      -
      -

      Grid Manager -Component Descriptions - History -Display Mode

      -The figure below is an annotated screen snapshot of the Grid Manager in -history display mode. The Grid Manager may be toggled between -normal -display and history display using the -button on the toolbar. Try toggling the Grid Manager into History -Mode and observe the color scheme which indicates the source of the -grids.
      -
    - -

    Grid Manager Component Descriptions - History -Display Mode

    -
      -
        -
        Most of the general components of the Grid -Manager -do not change when it is toggled into the History mode.  However, -the grid colors and patterns are used for different purposes as shown -in -the table below.  There is no indication of the editable grid or -visible -grids.

        - - - - - - - - - - - - - - - - - - - -
        Grid Block AppearanceMeaning
        Solid colorGrid has not been modified by you or anyone else. -Grid has been -either interpolated, -created from scratch, or populated from a model.
        Hatching patternIndicates that the grid has been modified by you or -someone else. -If properly configured, -the pattern can indicate whether the grid was modified by you, -or whether someone else has modified it.
        ColorIndicates the origin and source of the grid. Each -model source -can be assigned a unique color, e.g., -NAM can be yellow while grids populated from GFS can be green. -Each origin's color can also be set, -e.g., Interpolated grids are blue, Calculated grids are red.
        -
      -
    -
      -
      -


      -

      -

      Grid Manager -Component Descriptions - Last Saved, Modified, Published, Sent Modes

      -The figure below is an annotated screen snapshot of the Grid Manager in -Last Saved mode. The Grid Manager may be toggled between normal -display and other modes using the -button on the toolbar. Try toggling the Grid Manager into Last -Saved ("Saved") and observe the color scheme which indicates the last -time the grids were saved. A table exists in the GFE -configuration that defines the time thresholds and the colors to use.
      -
      -
    -

    -
    -
    -
    The labels within each grid block -indicate the time since the grids were saved. There are -several different "Last" modes available as shown in the following -table.
    -
    - - - - - - - - - - - - - - - - - - - -
    Save
    -
    Indicates the time since the -grid was saved to the database by any user. If a grid has -been modified but not yet saved, the grid will be gray.
    -
    Modified
    -
    Indicates the time since the -grid was modified by any user. A grid can be modified, but -not saved. A grid can be saved, but not modified.
    -
    Published
    -
    Indicates the time since the -grid was published. Once a grid is modified after -publishing, the grid is no longer considered published and is shown as -"gray".
    -
    Sent
    -
    Indicates the time since the -grid was sent out via intersite coordination. Note that if you -publish to official and then send the Official grids out via ISC, the -Fcst grids will not indicate that its grids were sent (since they -really weren't).
    -
    -
    -
    -
    -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/GFETrainingGridManagerLoadUnloadWeatherElements.html b/cave/com.raytheon.viz.gfe/help/GFETrainingGridManagerLoadUnloadWeatherElements.html deleted file mode 100644 index 80e2e003bc..0000000000 --- a/cave/com.raytheon.viz.gfe/help/GFETrainingGridManagerLoadUnloadWeatherElements.html +++ /dev/null @@ -1,151 +0,0 @@ - - - - GFESuite Documentation - Load/Unload Weather Elements - - -

    Load/Unload Weather Elements

    -
    -Load/Unload Weather Elements -via Weather -Elements Groups -
    -Create a new Weather Element -Group -
    -
    With over a dozen weather elements per database and -many -databases, displaying all of the available weather elements in the GFE -would overly clutter the display. So, you can choose which weather -elements -you want to view and edit using the Weather Element Browser Dialog. -This -section describes how to use it.
    -
    -
    - -
      -
    -Before you can begin editing grids of sensible weather, you need to -load forecast weather elements into the GFE. The following set of -exercises -shows you how to load and unload weather elements to and from the GFE.
    -
      -
    • Purpose: Make weather elements -available for viewing and -editing.
    • -
    -
    -
      -
    1. From the main menu bar, select WeatherElement->Weather -Element Browser. You should see a dialog appear that looks similar -to the figure above.
    2. -
    3. Start from scratch by selecting Edit->Select None located at -the top -of -the Weather Element Browser dialog.
    4. -
    5. Using the Source menu, select Fcst.
    6. -
    7. Using the Field menu, select T, Td, Wind, and Wx. Note that all -of the -combinations of Fcst and the weather elements you selected now appear -in -the lower portion of the dialog.
    8. -
    9. Select Load (in the lower left corner.)
    10. -
    -
    -
    Note that the combination of sources (databases) and -weather elements listed in the lower portion of the dialog were loaded -and are now available for viewing and editing in the GFE. If you are -familiar -with the AWIPS Volume Browser you may notice some similarities.
    -
    Repeat this operation, but this time deselect Wind -and -Wx in the lower portion of the dialog by clicking with MB1. Note that -when -parameters are deselected, they are UNLOADED from the GFE. When the -Weather -Element Browser dialog first appears, the lower portion that lists -weather -elements reflects the list of weather elements that are currently -loaded. -Toggling off any weather element will cause that element to unload when -you select the Load button.
    -
    Continue to load and unload more parameters until you -understand how this dialog behaves and how it affects the set of -parameters -available for viewing and editing in the GFE.
    -

    -Load/Unload Weather Elements -via -Weather Element Groups

    -
    The Weather -Element Browser allows you to load and unload individual weather -elements, -but generally it is more convenient to load groups of parameters that -are -related. A Weather Element Group is a named group of weather elements -that -you can define.
    -
      -
      -
    1. From the main menu bar, press and hold MB1 over the Weather -Element -menu -item.
    2. -
    3. Slide the mouse cursor over the Weather Element Groups menu item.
    4. -
    5. Select one of the pre-defined Weather Element groups, such as -Public,  -from the Weather Element Groups cascade menu.
    6. -
    -
    -
    Note that when you selected the Weather Element -Group, -a new set of weather elements was loaded into the GFE. Also note that -the -set of weather elements that was loaded is now unloaded.
    -
    -Any weather elements that were modified will always remain loaded in -the Grid Manager.  The GFE refuses to unload unsaved weather -elements.  You must Save -or Revert them before they can -be unloaded.
    -
    -

    -Create a new Weather -Element -Group

    -
    Saving a group of weather elements as a Weather -Element -Group is done via the Weather Element Browser Dialog. To make your own -Weather Element Group, follow the steps below. -
  • Purpose: Create a Weather Element Group
  • -
    -
    -
    -
      -
    1. From the main menu bar, select WeatherElement->Weather -Element Browser.
    2. -
    3. Select any group of weather elements as you did in the previous -exercise.
    4. -
    5. From the Weather Element Browser dialog menu bar, select File->Save -Weather Element Group....
    6. -
    7. In the dialog that appears, enter a Weather Element Group name of -your -choice and select Save.
    8. -
    -
    -
    Now your new Weather Element Group has been saved and -is ready to be used. Close the weather Element Browser by clicking -Cancel -in the lower right corner.  Move your cursor to the Weather -Element -menu item and load your newly created Weather Element Group  to -verify -that you correctly created it. -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/GFETrainingGridManagerOperations.html b/cave/com.raytheon.viz.gfe/help/GFETrainingGridManagerOperations.html deleted file mode 100644 index bedb4cc61e..0000000000 --- a/cave/com.raytheon.viz.gfe/help/GFETrainingGridManagerOperations.html +++ /dev/null @@ -1,569 +0,0 @@ - - GFESuite Documentation - Grid Manager Operations - - -

    Grid Manager Operations

    -
    -Select Weather Element and TimeRange -
    -Copy from Derived Model Grids -
    -Interpolate Grids -
    -Copy Grid -
    -Paste Grid -
    -Stretch a Grid's Valid Time -Period -
    -Create Grid from Scratch -
    -Delete Grids -
    -Split Grids -
    -Fragment Grids -
    -Assign Default Value -
    -Run Smart Tools -
    -

    -
    -

    Grid Manager Operations

    -This section of the training guide covers grid operations that are -performed -on the Grid Manager. -

    -Select Weather Element and TimeRange

    -
    In this section we discuss how to populate your -forecast -by copying weather element grids based on model output and how to -temporally -interpolate, which fills in time gaps between grids. But first you need -to know how to identify the weather element and time range over which -these -operations will be performed.
    -
      -
    • Purpose: Select a TimeRange for edit -operations.
    • -
    -
    -
      -
    1. Press and drag MB1 over any time period of your choice inside one -of -the -weather element panes of the Grid Manager.
    2. -
    3. Release MB1.
    4. -
    -
    -
    As you drag the mouse cursor you should see blue -hatched -shading appear inside the weather element pane. This is how you -identify -a time period and weather element to which you will later apply an edit -operation. Later, you will encounter exercises that show you how this -selected -time period and weather element are used in Grid Manager edit -operations.
    - -
    You can also select a time period in a slightly -different -way using the Time Scale (located just above the Grid Manager). After -selecting -a time period in the Time Scale by dragging MB1, MB1 click in the small -box located in the upper-left of each weather element pane. Note that -the -time period for that pane now becomes selected. Using this method, you -can select the same time period for many different weather elements. -

    There is also a way to extend the currently selected TimeRange by -performing -a MB1-SHIFT click operation anywhere on the Grid Manager. Hold -down -the shift key while clicking MB1. The currently selected TimeRange will -be extended to the time on which you SHIFT-clicked. If you -SHIFT-MB1-click -insider the currently selected TimeRange it will have no effect. -This works for any WE pane or the TimeScale.

    -
    -
      -
    1. Press and hold MB3 over the Grid Manager and pick -Deselect All from the -pop-up menu. Note that your previously selected Weather Elements/ Time -Ranges are now deselected.
    2. -
    3. Select another set of Weather Elements over any time -period.
    4. -
    5. Next, press the button Deselect all -in the button bar to deselect. Note that you can deselect the set of -Weather -Elements from both the button bar and the pop-up menu.
    6. -
    -

    -Copy from Derived Model Grids

    -
    One of the GFESuite of programs derives surface-based -weather elements from numerical models such as NAM. Since it would be -too -time consuming for forecasters to create all forecast grids from -scratch, -these derived model grids provide a starting point on which your -gridded -forecast is based. The next section shows you how to copy these -model-based -grids into your forecast.
    -
      -
    • Purpose: Add new grids to your forecast -from a model.
    • -
    -
    Select a time period and one or more weather -elements -using the technique described in the previous exercise.
    -
      -
    1. Select from the main menu Bar: Populate->Copy -Selected Grids From...
    2. -
    3. Select one of the model sources listed in the -dialog, such as NAM12.
    4. -
    5. Select OK.
    6. -
    -
    You should see new grids appear in your forecast. If -not, make sure that you have selected a time period that matches at -least -a portion of the time period of the model you desire and repeat until -new -grids have been copied into your forecast. Click MB1 on one of the -grids -in the Grid Manager. The grid will appear in the Spatial Editor.
    -
    -
    -
    Note that there are some gaps in your forecast. -Because -models provide snapshots of the state of the atmosphere, for some -weather -elements, the system (arbitrarily) assigns a one-hour duration to most -grids. However, this duration is model and weather element dependent. -For -example, a grid representing 6-hour QPF has a 6-hour time duration.
    -
    -
    -
    If you want to initialize your entire forecast from a -particular model, you are not required to select every weather element -for the entire time period of the model. The next exercise shows you -how -to copy all the grids derived from a model in to your forecast.
    -
    -
      -
    1. From the main menu bar select Populate->Copy -All Grids From...
    2. -
    3. Select one of the model sources listed in the dialog.
    4. -
    5. Select OK.
    6. -
    -
    -
    Note that Copy All Grids From... ignores the selected -time range and the selected weather elements. All of the grids -available -from that model are copied into your forecast overwriting any grids -that -existed previously.
    -

    -Interpolate Grids

    -
    Since copying grids from the model-based databases -leaves -temporal gaps in the forecast, the GFE provides you a way to fill in -those -gaps. This next exercise show you how to interpolate over a time period -and weather element that you select.
    -
      -
    • Purpose: Fill in forecast gaps with -grids to provide a -smooth transition.
    • -
    -
    -
      -
    1. Select any time period and weather element that contains gaps in -the -forecast -(except Wx).
    2. -
    3. From the main menu bar, select Grids->Interpolate... The Interpolate -Dialog is displayed. Choose "By Gaps" and click on OK.
    4. -
    -
    -
    You should see new grids that appear and fill in the -gaps that you identified in step 1. If you visualize these grids in -sequence -by stepping through them using an MB1 click (or the animator), you will -notice that the values at each grid point progressively change in time -to provide a smooth transition from one original grid to the next.
    -
    -
    -
    Interpolating By Gaps uses all grids in the selected -time range to calculate new grids to fill the gaps. The other method of -interpolation uses only the grids that you modified to calculate the -new -grids and replaces any grids you did not modify with interpolated grids -(grids that you have modified are identified in the grid block by an -"m"). -For example, if you edit two of three grids copied from a model, select -these grids in the Grid manager and choose Grids->Interpolate... and -then -the "Based on Editing Data" from the Interpolation -Dialog, new interpolated grids will fill the gaps, the unedited -model -grids will be replaced by interpolated grids, and the edited grids will -remain unmodified. -

    The interpolation algorithm may be changed through the -GFE->Editing -Preferences->Interpolation Algorithm... menu entry.  This -brings up -the Interpolation -Algorithm Dialog, from which the type of interpolation may be -selected.

    -
    -

    -Copy Grid

    -
    Now and then it is useful to copy a grid from one -time -period to another. The next exercise shows you how to copy individual -grids -from one time to another.
    -
      -
    • Purpose: Copy a grid from one time -period to another.
    • -
    -
    The method described in this exercise allows you to -copy -any grid that is in the Grid Manager to any other weather element, -provided -that the destination weather element shares the same units (e.g., -Temperature -and Dew Point) or the units can be converted automatically.
    -
    -
      -
    1. Make sure there is a weather element with at least one grid block -and -one -gap visible.
    2. -
    3. MB3 press over the grid you wish to copy and select from the -pop-up -menu -Copy Grid.
    4. -
    5. Now move your cursor to a gap in the same Weather Element. Press -and -hold -down MB3 again, and this time select Paste Grid.
    6. -
    -
    -
    When you executed the Copy Grid operation, a copy of -that grid was place in a paste buffer. Selecting Paste Grid over a gap -or another grid replaces that gap or grid with the contents of the copy -buffer.
    -
    Load T (temperature) and Td (dewpoint) into the GFE -(if -they are not already loaded). Repeat this exercise using one of the T -grids -as the source and Td as the destination. Note that you may copy a grid -from one weather element to a different weather element as long as they -both share the same units (in this case degrees F) or the units can be -converted automatically. -

    Paste Grid

    -Now that you learned to copy a grid, you can paste the same grid into a -gap or over an existing grid. -
      -
    • Purpose: Paste a previously copied grid into a new time period.
    • -
    -
      -
    1. Perform the Copy Grid exercise above, if you have not already -done so.
    2. -
    3. Move the cursor over to a gap in the same weather element.
    4. -
    5. MB3 press and select Paste Grid.
    6. -
    -Note the the grid that you copied in the previous exercise has now been -pasted into a different time period.
    -

    -Stretch a grid's valid time -period

    -
      -
    • Purpose: Modify a grid's valid period -by stretching
    • -
    -
    Some weather elements such as Wx, frequently change -very -little over long time periods. In this case, rather than repeating the -same grid over and over, it is useful to define a single grid that is -valid -over the entire (longer) time period. This operation shows you how to -extend -the time period over which a grid is valid.
    -
      -
    1. Press and hold MB2 over a grid block that is -adjacent to a gap.
    2. -
    3. While holding down MB2, drag the cursor to the left -or right until you -see the grid block stretch.
    4. -
    5. Release MB2
    6. -
    -
    As you drag MB2 left and right, you should notice -that -you are extending the end time of the grid forward in time (right) or -extending -the start time backwards in time (left). There is no way to directly -shrink -a grid block in time. An indirect method is to Split -the grid, and then delete the unneeded grid.
    -
    Repeat this exercise, but this time stretch the grid -block so that it overlaps into one or more existing grid blocks. Once -you -release the mouse button, any grid blocks that overlapped the new grid -block (or portions thereof) are removed from the inventory. This is one -way to shorten the time over which a grid block is valid.
    -

    -Create Grid from Scratch

    -
      -
    • Purpose: Create a brand new grid -without using the "Copy -From..." -capability.
    • -
    -
    Occasionally, you may want to create a new grid from -scratch instead of copying one from a model, or another parameter, or -by -using interpolation. The Create From Scratch feature was made for this -situation.
    -
    -
      -
    1. Press and hold MB3 over a gap (a place with no grid block) within -an -editable -weather element.
    2. -
    3. Select Create From Scratch from the pop-up menu.
    4. -
    -
    -
    A new grid should appear over the gap block that you -selected. This new grid has the minimum time period allowed for that -weather -element, but it can always be stretched or copied to a new time period. -The default value of this grid varies by parameter, but is usually the -minimum value allowed (e.g., temperature, value = -30F). Generally the -next step is to define the values of the grid points using one of the -Spatial -Editor tools described in the Spatial Edit tools section. -

    Note that you can also create -grids from scratch through the GFE Main Menu's Grid's entry.

    -
    -

    -Delete Grids

    -
      -
    • Purpose: Remove one or more grids from -the forecast.
    • -
    -
    -
      -
    1. Using MB1, select a time period for any weather element that -contains -some -grid blocks.
    2. -
    3. From the main menu bar select Grids->Delete Grids.
    4. -
    -
    -
    Note that the grids that you identified were removed -from that weather element's inventory. Now try a variation on the -previous -exercise.
    -
    -
      -
    1. Find a grid block and stretch it until its duration is many hours -long.
    2. -
    3. Select a time period that corresponds to a portion of that same -time -block -using MB2,
    4. -
    5. From the main menu bar select Grids->Delete Grids.
    6. -
    -
    -
    This time, since you only selected a portion of the -grid -block, only that portion was deleted. This is another way that you can -shorten the time period over which a grid is valid. -

    Another technique can be used to delete a single grid. -

    -
      -
    1. Find a grid block.
    2. -
    3. MB3 popup over the grid block and select Delete Grid from the -popup.
    4. -
    -
    -

    -Split Grids

    -
      -
    • Purpose: Divide a grid into two or -three separate grids.
    • -
    -
    -
    -The Split operation is used to divide a single grid into two or three -parts in time. The resulting parts may then be edited independently, -providing -more temporal detail to the forecast. This particular split -operation -is invoked from the GFE main menu by selecting -
    -Grids->Split Grids. There is another Spilt Grids operation -that -can be executed from the MB3 Pop-up menu as well. See the section -
    -Split Grids to learn how -to split grids using the MB3 Pop-up option.
    -
    -
      -
    1. Select a new time period over a single grid with such that only a -portion -of the grid is selected.
    2. -
    3. From the main menu select Grids->Split Grids.
    4. -
    -
    -
     
    -
    You should end up with something that looks like the -figure to the right. -
    -Note that the grid was severed at the edges of the selection. There -are three separate grids now, each of which have gridded values -identical -to the original grid.
    -

    -Fragment Grids

    -
      -
    • Purpose: Divide a grid into its -smallest possible temporal -parts
    • -
    -
    The Fragment Grids operation also splits grids into -smaller -temporal parts. But Fragment differs from Split in that it divides -grids -into their smallest possible time blocks.
    -
    -
      -
    1. Find or make a long duration T (temperature) time block as in the -previous -exercise and select it using the MB1 drag operation. It should look -something -like this.
    2. -
    3. From the main menu select Grids->Fragment Grids.
    4. -
    -
    -
    You should now see that over the time period that was -selected, many smaller duration grids have replaced the long duration -grid.  -If you -
    -select just a portion of the grid, only that portion will be -fragmented. -Each of the grids has the same gridded values as the original. -The -result should look something like this: -

    Another technique can be used to fragment a single grid from the MB3 -Pop-up menu. See the section on the Grid -Manager Button 3 Pop-up options for more information on how to -Fragment -grids using the MB3 Pop-up Menu. -

    -

    Assign Pickup Value

    -
    Occasionally you might find it useful to set the -gridded -values of a group of grids to the pickup value, as if you were starting -from scratch. The Assign Pickup Value function was made for this -situation.
    -
    -
      -
    1. Select one or more grids using the MB1 drag operation.
    2. -
    3. From the main menu select Grids->Assign Pickup Value. -Note -that the menu doesn't actually say "Pickup Value". The actual -pickup -value is displayed instead of the words.
    4. -
    -
    -
    All of the gridded values of the grid that were -selected -now have the current pickup value, which is indicated in the color bar.
    -
    Note that the Assign Default Pickup operation is also -available from the MB3 pop-up menu in the Grid Manager, but as with all -MB3 pop-up menus the operation applies only to the grid under the -cursor, -not to the set of selected grids. -

    To quickly set the pickup value to a single grid, use this -technique: -

    -
      -
    1. Position the cursor over the grid block you wish to assign the -pickup -value -to.
    2. -
    3. MB3 popup over the grid block, and select Assign [x], where x is -the -pickup -value.
    4. -
    -
    -
    -

    -Assign Default Value

    -
    Occasionally you might find it useful to set the -gridded -values of a group of grids to a single default value, as if you were -starting -from scratch. The Assign Default Value function was made for this -situation.
    -
    -
      -
    1. Select one or more grids using the MB1 drag operation.
    2. -
    3. From the main menu select Grids->Assign Default Value.  -Note -that -the menu doesn't actually say "Default Value". The actual default value -is displayed instead of the words.
    4. -
    -
    -
    All of the gridded values of the grid that were -selected -now have the default value, which varies for each Weather Element. -Generally, -this value is the minimum allowed value for that Weather Element (e.g., -Temperature = -60 F).
    -
    Note that the Assign Default Value operation is also -available from the MB3 pop-up menu in the Grid Manager, but as with all -MB3 pop-up menus the operation applies only to the grid under the -cursor, not to the set of selected grids. -

    To quickly set the value of a single grid to the default value, -use this technique: -

    -
      -
    1. Position the cursor over the grid block you wish to assign the -default -value to.
    2. -
      -MB3 popup over the grid block, and select Assign [x], where x is the -default value. -
    -

    -Run Smart Tools

    -
    A set of smart tools (specified via gfeConfig) may -appear. -The default set is "Show_ISC_Area", "Show_ISC_Grid" and -"Show_ISC_Highlight". -These tools are described in the Intersite -Coordination -Training Guide. -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/GFETrainingGridManagerTool.html b/cave/com.raytheon.viz.gfe/help/GFETrainingGridManagerTool.html deleted file mode 100644 index 6be516a9f2..0000000000 --- a/cave/com.raytheon.viz.gfe/help/GFETrainingGridManagerTool.html +++ /dev/null @@ -1,131 +0,0 @@ - - GFESuite Documentation - Grid Manager Tool - - -

    Grid Manager Tool

    -Grid Manager Pop-up Menu
    -Grid Manager Buttons -
    -
    -
    The Grid Manager contains many functions to -manipulate -whole grids, but generally not the gridded values inside them. Using -the -Grid Manager you can:
    -
      -
    • Control the Spatial Editor display while -selecting a grid to edit
    • -
    • Copy model-derived grids into your forecast
    • -
    • Create new grids from scratch
    • -
    • Delete a grid
    • -
    • Copy a grid
    • -
    • Paste a grid
    • -
    • Split a grid in time
    • -
    • Fragment a grid in time
    • -
    • Assign Default Value to every gridpoint in the -grid
    • -
    • Stretch the time over which a grid is valid
    • -
    • Interpolate new grids based on the grids that -already exist
    • -
    • Run selected Smart Tools
    • -
    • Send single ISC (intersite coordination grid)
    • -
    -
    All of this functionality is accomplished by a single -tool - the Grid Manager Tool, which is always available. The table -below -lists each action and the function it performs. The table substitutes -the -abbreviation MB1 and MB2 for Mouse Button 1 and Mouse Button 2, -respectively.
    -
      -

      Grid Manager Tool Actions

      - - - - - - - - - - - - - - - - - - - - - - - -
      -
      Actions
      -
      -
      Function
      -
      -
      MB1 Click
      -
      -
      Sets the Spatial Editor time and makes -the selected -grid visible and editable in the Spatial Editor. All other grids are -made -invisible.
      -
      MB2 ClickSets the Spatial Editor time and makes the selected grid -visible and -editable in the Spatial Editor. The visibility of other grids -remains -unchanged.
      -
      MB1 Drag
      -
      -
      Selects one or more weather -elements/grids for population, -interpolation, or deletion. Also deselects all other previously -selected -weather elements
      -
      -
      MB2 Drag
      -
      -
      Stretches the selected grid's start time -to the left -or the grid's end time to the right. Allow the user to change the -valid time of a grid.
      -
      -
    -

    -Grid Manager Pop-up -Menu

    -
    In addition to the main Grid Manager edit tool -actions, -the Mouse Button 3 (MB3) pop-up menu offers many more edit operations. -When using these operations, keep in mind that they apply to a single -grid -(or place-holder for a grid) - the grid under the cursor - when you -perform -the operation. Operations include deleting, fragmenting, -splitting, -copying, and pasting a grid.  Other edit operations permit -assigning -values to a grid, creating a grid from scratch, and running selected -smart -tools on the grid. Refer to the Grid -Manager Button 3 Popups documentation for more details.
    -

    -Grid Manager Buttons

    - -
    -  -
    The buttons that control the Grid Manager are on the -left of the GFE ToolBar. These buttons -control -various display modes of the Grid Manager and Spatial Editor, as well -as -specifically controlling the layout of the GFE. Refer to the GFE -Toolbar documentation for more details.
    - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/GFETrainingGridMgr.html b/cave/com.raytheon.viz.gfe/help/GFETrainingGridMgr.html deleted file mode 100644 index a3c1160ce3..0000000000 --- a/cave/com.raytheon.viz.gfe/help/GFETrainingGridMgr.html +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - GFE Training - Grid Manager - - -
    -

    Grid Manager Training Guide

    -
    -
    January 19, 2012
    -
    -


    -
    -
    -

    -

    The Grid Manager provides both inventory information, display -control -commands, as well as whole-grid editing capabilities. The Grid Manager -Training Guide introduces you to the appearance, functionality, and -capabilities -of the Grid Manager. -

    -

    Grid Manager Appearance - -

    -Grid -Manager -Tool

    -

    -Load/Unload -Weather Elements

    - -

    Grid Manager -Operations - -

    -
    -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/GFETrainingIntro.html b/cave/com.raytheon.viz.gfe/help/GFETrainingIntro.html deleted file mode 100644 index b38c7d45f5..0000000000 --- a/cave/com.raytheon.viz.gfe/help/GFETrainingIntro.html +++ /dev/null @@ -1,72 +0,0 @@ - - - - - - GFE Training - Introduction - - -
    -

    GFE Training Guide

    -
    -
    January 10, 2012
    -

    Raytheon

    -
    -

    Introduction -
    -GFE Components -
    -Menu Bar -
    -Button Bar -
    -Time Scale -
    -Grid Manager -
    -Spatial Editor -
    -Temporal Editor -
    -AlertViz -
    -


    -

    Introduction

    -

    The Graphical Forecast Editor (GFE) is a grid-based -editing -system that provides various tools to forecasters that allow them to -edit -gridded fields of sensible weather elements. While this training guide -describes most of the functionality within the GFE, it is not -comprehensive. -Its purpose is to familiarize users with GFE concepts and tools -in -order that they might use the GFE to generate gridded forecast -products. -

    This training guide is divided into several sections. If you -are -new to the GFE , it is recommended that you follow the guide in the -proper -order, since terms and concepts learned in the beginning are used -throughout -the guide. This section is intended to get you familiar with the -major components of the GFE. More detailed descriptions of each -component -can be found in subsequent sections. -

    -
    -
    The figure below labels the major components of the -GFE. -Since the names of these various components will be used -throughout -this guide, it is a good idea to familiarize yourself with them now.
    -
    -
    -
    - - - - diff --git a/cave/com.raytheon.viz.gfe/help/GFETrainingIntroButtonBar.html b/cave/com.raytheon.viz.gfe/help/GFETrainingIntroButtonBar.html deleted file mode 100644 index 7f30190fdb..0000000000 --- a/cave/com.raytheon.viz.gfe/help/GFETrainingIntroButtonBar.html +++ /dev/null @@ -1,21 +0,0 @@ - -GFESuite Documentation - GFE Training Guide - GFE Button Bar - -

    -Button Bar

    -
    - -
    -  -
    The Button bar is located just below the menu bar. -The -figure above illustrates that the buttons are grouped by function. We -will -defer discussing each button's function here and describe each of them -in later sections that include exercises. To learn more about this -component, -go to the section that discusses the Button Bar. -
    - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/GFETrainingIntroGFEComponents.html b/cave/com.raytheon.viz.gfe/help/GFETrainingIntroGFEComponents.html deleted file mode 100644 index b0aad0d052..0000000000 --- a/cave/com.raytheon.viz.gfe/help/GFETrainingIntroGFEComponents.html +++ /dev/null @@ -1,43 +0,0 @@ - -GFESuite Documentation - GFE Training Guide - GFE Components - -

    -GFE Components

    -
    -

    We will briefly introduce the main GFE components in -the following sections.  To learn more about the Grid Manager, -Spatial -Editor, or Temporal Editor components, go to the section with the same -title.

    -
    Menu Bar - -Loads/Unloads -weather elements, saves/reverts grids, interpolates grids, populates -weather -elements from model. Many other functions are available from the Menu -Bar -as well.
    -
    ButtonBar - -Controls -GridManager time scale, animation, edit tools, and edit areas.
    -
    TimeScale - Displays -time for both Grid Manager and Temporal Editor. -
    -Grid Manager - Displays grid -inventory, -edits grid times, temporally interpolates, copies grids from other -databases, -creates grids from scratch, displays grid history.
    -
    Spatial Editor - -Displays and edits one or more grids.
    -
    Temporal Editor - -(not shown) Displays and edits time series of weather elements at a -point -or area. This area is shared with the GridManager. -
    -AlertViz - Displays status messages. -In AWIPS2 AlertViz is used to display alert messages for all AWIPS components. -There are actually two status bars. In GFE, the left one is for general messages, -and the right one is for Intersite Coordination and Smart Initialization -messages. - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/GFETrainingIntroGridManager.html b/cave/com.raytheon.viz.gfe/help/GFETrainingIntroGridManager.html deleted file mode 100644 index e1e90d08b7..0000000000 --- a/cave/com.raytheon.viz.gfe/help/GFETrainingIntroGridManager.html +++ /dev/null @@ -1,35 +0,0 @@ - -GFESuite Documentation - GFE Training Guide - GFE Grid Manager - -

    Grid Manager

    -
    -

    The Grid Manager is arguably the most complex component of the -GFE. -Its display presents an inventory of the gridded data in the forecast, -official or any other model database. With the Grid Manager you can -copy -all or a portion of another database into your forecast, temporally -interpolate -time periods to fill in undefined gaps in your forecast, remove grids -from -your forecast, and many other operations too numerous to mention -here. -The Grid Manager looks complex because it displays a large amount of -information -and offers a long list of features that help you manipulate the gridded -forecast data. While its appearance can be intimidating, once you have -performed the exercises and understand how each of the features work, -you -will understand that it is necessarily complex. Refer to the Grid -Manager Training Guide for more details. -

    Below is a snapshot of the Grid Manager component of the GFE along -with -labels that name its various parts. -

    -


    Grid -Manager in Normal Display Mode -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/GFETrainingIntroMenuBar.html b/cave/com.raytheon.viz.gfe/help/GFETrainingIntroMenuBar.html deleted file mode 100644 index c58dc1572e..0000000000 --- a/cave/com.raytheon.viz.gfe/help/GFETrainingIntroMenuBar.html +++ /dev/null @@ -1,13 +0,0 @@ - -GFESuite Documentation - GFE Training Guide - GFE Menu Bar - -

    Menu Bar

    -
    -The Main Menu Bar menu's are described in the Main -Menu Reference Guide. The various menus allow you to set viewing and -editing preferences, define configuration files and tools, load and -unload weather elements, control the map backgrounds, do grid-based edit -operations, and handle product generation. - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/GFETrainingIntroSpatialEditor.html b/cave/com.raytheon.viz.gfe/help/GFETrainingIntroSpatialEditor.html deleted file mode 100644 index b8e8d7af41..0000000000 --- a/cave/com.raytheon.viz.gfe/help/GFETrainingIntroSpatialEditor.html +++ /dev/null @@ -1,19 +0,0 @@ - -GFESuite Documentation - GFE Training Guide - GFE Spatial Editor - -

    Spatial Editor

    -
    - -

    The Spatial Editor allows you to edit the values of any grid in the -forecast database using a number of different tools. Some of the -tools are interactive while others work in more of a batch mode. The -multi-colored -area at the top is the color bar that shows the relationship between -color -and value. To learn more, go to the section entitled Spatial -Editor. -
    - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/GFETrainingIntroStatusBar.html b/cave/com.raytheon.viz.gfe/help/GFETrainingIntroStatusBar.html deleted file mode 100644 index 749ec5253e..0000000000 --- a/cave/com.raytheon.viz.gfe/help/GFETrainingIntroStatusBar.html +++ /dev/null @@ -1,15 +0,0 @@ - -GFESuite Documentation - GFE Training Guide - AlertViz - -

    AlertViz

    -
    -

    AlertViz replaces the Status Bar in AWIPS2. It is shared among all -visualization components and displayed separately from CAVE. For GFE, it -is used to report routine, -significant, and urgent messages. There are two display areas in AlertViz, -one for general GFE messages and one for ISC and Smart Initialization -status messages. GFE time display and progress bar have been moved to the -bottom of the GFE CAVE display. Refer to the AlertViz -documentation for more details. - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/GFETrainingIntroTemporalEditor.html b/cave/com.raytheon.viz.gfe/help/GFETrainingIntroTemporalEditor.html deleted file mode 100644 index d3d13277c6..0000000000 --- a/cave/com.raytheon.viz.gfe/help/GFETrainingIntroTemporalEditor.html +++ /dev/null @@ -1,19 +0,0 @@ - -GFESuite Documentation - GFE Training Guide - GFE Temporal Editor - -

    Temporal Editor

    -
    - -

    The Temporal Editor presents a time-series display over an area that -you specify and allows you to edit several grids with a single edit -operation. -When used properly, the Temporal Editor can save you much time during -the -editing process. To learn more about this powerful tool, go to -the -section entitled Temporal -Editor. -
    - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/GFETrainingIntroTimeScale.html b/cave/com.raytheon.viz.gfe/help/GFETrainingIntroTimeScale.html deleted file mode 100644 index 3bca8e4ef2..0000000000 --- a/cave/com.raytheon.viz.gfe/help/GFETrainingIntroTimeScale.html +++ /dev/null @@ -1,21 +0,0 @@ - -GFESuite Documentation - GFE Training Guide - GFE Time Scale - -

    Time Scale

    -
    - -

    The Time Scale is located immediately above the Grid Manager (or -Temporal -Editor) and shows you the time period over which the every grid is -valid. -In addtion, it contains a small green triangle that indicates the -current -time. The yellow dotted line displays the current Spatial Editor -Time and the blue hatching shows the Selected Time Period. -User-defined time periods are shown at the very top of the time scale. -Refer to the Grid Manager Training -Guide -for more details. -
    - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/GFETrainingSpatialEditor.html b/cave/com.raytheon.viz.gfe/help/GFETrainingSpatialEditor.html deleted file mode 100644 index 1de0e24b8c..0000000000 --- a/cave/com.raytheon.viz.gfe/help/GFETrainingSpatialEditor.html +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - Spatial Editor Training Guide - - -

    -

    Spatial Editor Training Guide

    -
    -
    January 13, 2012
    -
    -


    -

    -

    Spatial Editor

    -
    The Spatial Editor displays one or more grids in -plan-view format. This editor allows you to modify individual -grid -points using a number of tools, built-in to the GFE and tools that you -write yourself. -

    Edit Tools -
    -

    Color Bar -

    -

    AlertViz -

    -

    Behavior of the GFE in ISC -(Intersite -Coordination) Mode -

    -

    Spatial Editor -Visualizations -

    - - -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/GFETrainingSpatialEditorColorBar.html b/cave/com.raytheon.viz.gfe/help/GFETrainingSpatialEditorColorBar.html deleted file mode 100644 index b1759c5b5c..0000000000 --- a/cave/com.raytheon.viz.gfe/help/GFETrainingSpatialEditorColorBar.html +++ /dev/null @@ -1,31 +0,0 @@ - -GFESuite Documentation - Color Bar - -

    -Color Bar

    -
    -

    The Color Bar is location at the top of the -Spatial -Editor display. It displays the relationship between the color of -the currently displayed image and the weather element value just like -the -D2D system. In addition, it has a tool that allows you to set the -current Pickup value. This value is used for edit operations such -as Assign Value and Add New Contour. Any click or drag operation -with either MB1 or MB2 causes the Pickup value to change to the value -under -the cursor. This value is displayed on the Color Bar in large -white -numbers with a black background. Try clicking or dragging on the -Color Bar with MB1 or MB2 and watch the Pickup value change. -

    Several other Color Bar options are available via MB3 pop-up menu -over -the Color Bar. Examples of these options are setting the pickup -value, -delta value, fitting the color bar spectrum to the data, and changing -the -color table. Refer to the Popup -Menu Reference Guide for further details. -
    -

    \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/GFETrainingSpatialEditorControllingtheSpatialEditor.html b/cave/com.raytheon.viz.gfe/help/GFETrainingSpatialEditorControllingtheSpatialEditor.html deleted file mode 100644 index 00bb9f8c8b..0000000000 --- a/cave/com.raytheon.viz.gfe/help/GFETrainingSpatialEditorControllingtheSpatialEditor.html +++ /dev/null @@ -1,437 +0,0 @@ - -GFESuite Documentation - Controlling the Spatial Editor - -

    Controlling The Spatial Editor

    -

    -
    -Spatial Editor Legends -
    -Legend Pop-Up Menu -
    -Toggling the Legends -
    -Map Background Options -
    -Changing the Spatial Editor -Display Using the Legends -
    -Toggle Grid Visibility - -
    -Toggle Grid Edit State -
    -Changing the Spatial Editor -Display Using the Grid Manager -
    -Making  a Grid Visible and Editable -with the Grid Manager -
    -Zooming (Enlarging) the Spatial -Display -
    -A Shortcut for Zooming - -
    -Panning the Spatial Display -
    -Topography -

    -
    -Controlling the Spatial Editor -
    The Spatial Editor is controlled from the Spatial -Editor -legends, Grid Manager, Time Scale or the Button Bar, depending on what -part of the display you wish to change. First we cover animation, then -discuss how to make weather elements visible and editable with Spatial -editor legends or the Grid Manager. Finally we talk about Edit Areas -before -moving on to the edit tool exercises.
    -
    -

    Spatial Editor -Legends

    -
    The figure below is a snapshot of the Spatial Editor -legends located in the lowest portion of the display. Not only do -legends -control the Spatial Editor, but they also convey information about the -data current displayed in the Spatial Editor.
    -
    -
      -
    -Much like the AWIPS display, the Spatial editor legends tell you which -weather elements are loaded, which are displayed (and not displayed), -which -weather element is displayed as an image and which is currently -editable. -We discuss each state below.
    - -
    -
    -Not Displayed - Weather elements that are not currently visible -in the Spatial Editor are displayed in gray. If no grid occurs at the -Spatial -editor time, the legend date and time are replaced by "<No Grid>".
    -
    -
    -Displayed as a Graphic - Weather elements that are currently -displayed as a graphic (contours) are indicated by a legend whose color -matches that of the graphic.
    -
    -
    -Displayed as an Image - If a weather element is displayed as -an image in the spatial editor, its corresponding legend is white in -color. -Only one weather element may be displayed as an image at a time. When -you -display a particular weather element as an image, any element -previously -displayed as an image will be displayed as a graphic.
    - -
    -
    -Editable - Any time a weather element is editable, the -characters -"(edit)" appear immediately to the left of the legend. -In addition to its color, the legend text tells you -much -about the grid(s) currently displayed in the Spatial Editor. Below we -list -an example and explain each part.
    -
    -
    -(edit) T Fcst (BOU) 1H Fri 12Z 02-Jun-00
    -
    -
    -(edit) - This weather element is the editable weather element. -When edit operations are executed, the element is modified.
    - -
    T - The weather element identifier. In this -example, -it refers to Temperature.
    -
    SFC Fcst - The name of the database. In this -case -it is the forecast database. Other choice may include: NAM, MRF, AVN, -GFS, -and LAPS. For D2D grids, the name may include the level as well -(e.g., -500mb).
    -
    (BOU) - WFO over which this grid is valid. -
    -(F) - units of this weather element. In this case degrees F.
    - -
    1H - Number of hours this grid is valid. In -this -example the grid is valid for one hour.
    -
    Fri - The day of the week.
    -
    18Z 02-Jun-00 - Start time of the grid (hour -(GMT), -day of the month, month and year. -

    For persistent grids, i.e., grids that have no associated valid -time, -the word "Persistent" is shown in the spatial editor legend.  -Although -Topography is a persistent grid, it will not contain the "Persistent" -label. -
    -

    - -

    Legend Pop-up Menu

    -Much like the D2D display system, the GFE Spatial Editor Legends -provide -many option for controlling the display. To display the -pop-up -menu, move the cursor over any legend and press MB3. The options -available -on the legend pop-up menu include appearance items, control items, and -grid operations. Examples of the appearance items are changing the -color -table, graphic color, line width and style, setting the contour values, -density, and magnification. Examples of the control items are unloading -the weather element, displaying the weather element as an image or -graphic, -and setting the display attributes in image and graphic mode.  The -grid operations are nearly identical to those options available via the -MB3 popup over the Grid Manager and include items such as deleting the -grid, fragmenting it, assigning values, and copy/paste operations. -

    More information is available on the legend pop-ups in the Button -3 Popups Reference Guide . -
    -

    -
    -

    -Toggling the Legends

    - -
    By default, the legends display information about the -grids that are currently loaded. But the legends can be toggled off to -remove clutter from the display. To learn how to toggle the legends, -perform -the next exercise. Before you begin, select a time in the Grid Manager -so that a grid is visible in the Spatial Editor and make sure one of -the -map backgrounds is displayed.
    -
    -
      -
    1. Move the cursor into the Spatial Editor (away from the legends) -and -press -and hold MB3.
    2. -
    3. A pop-up menu will appear displaying a list of choices. From this -list -select Legends->Hide.
    4. -
    -The grid data legends will disappear from the display.  To display -them again select Legends->Show All Weather Elements from -the MB3 -pop-up over the Spatial Editor display.
    - -
    -
    -The map background graphics may be toggled on and off as well. -By default, map background graphic legends are not displayed. You -can display them by pressing MB3 over the Spatial Editor display and -selecting -Legends->Show -Map.  Note that either the Weather Element legends or the Map -Background legends may be displayed at any given time, but not both. -

    There are several other options available when toggling the -legends. -You can choose to just display the Fcst weather elements, or just the -active -weather element. -
    - -

    -

    Map Background -Options -

    -

    Once you toggle the map legends so that they are displayed you may -change -the map color or unload the map via a MB3 pop-up menu. To access -these options, move the cursor over one of the map legends and press -and -hold MB3. Options available include changing the graphic color, -line -width, style, and unloading the map background. More information -is available on the legend pop-ups in the Button -3 Popups Reference Guide . -
    -

    -
    - -

    -Changing the Spatial Editor -Display using the Legends

    -
    Modifying the look of the Spatial editor display -works -very much like the AWIPS. The table below describes functions -implemented -by the legends (in the normal Grid display mode).
    -
    - - - - - - - - - - - - - - - -
    -
    Action
    - -
    -
    Function
    -
    -
    MB1 click
    - -
    -
    Toggle visibility
    -
    -
    MB2 click
    - -
    -
    Toggle Edit state
    -
    -

    -Toggle Grid Visibility

    - -
    Clicking MB1 on the legend will toggle a weather -element's -visibility. If it was visible before the click, it will be made -invisible. -If the weather element was invisible it will be made visible. Note that -the Spatial Editor Time must be set such that a grid's valid period -must -intersect it. -
  • Purpose: To make a grid -visible or invisible
  • -
    -
    -
    -
      -
    1. Make sure that there is a weather element loaded and that the -Spatial -Editor -time is set so that it overlaps a grid.
    2. -
    3. Click MB1 on the weather element's legend.
    4. -
    - -
    -

    -Toggle Grid Edit State

    -
    If you wish to edit a grid, you must first make the -grid -editable. To make the grid editable, simply click MB2 over the legend. -Anytime a weather element is editable, the letters "(edit)" appear -immediately -to the left of the legend. Note that your grid may be displayed as an -image -if the "Image on Edit" mode is enabled. -
  • Purpose: To make a grid -editable
  • -
    -
    -
    -
      -
    1. As in the previous exercise, make sure that there is a weather -element -loaded and that the Spatial Editor time is set so that it overlaps a -grid.
    2. - -
    3. Make the weather element visible by clicking MB1, if it is not -already -visible.
    4. -
    5. Click MB2 on the weather element editable.
    6. -
    -
    -
    You should see the letters "(edit)" appear to the -left -of the legend. This indicates that the weather element is now ready to -edit. Note that if the displayed grid is not editable, because is -locked -by another user or that it is a read-only model grid, the "(edit)" -string -will not appear, since the GFE will not allow you edit grids in those -states.
    -

    -Changing the Spatial Editor -Display using the Grid Manager

    -
    In the Grid Manager section we discussed that fact -that -the Grid Manager tool allows you to set the time displayed in the -Spatial -Editor and make grid editable. So we briefly switch back to the Grid -Manager -to explain how it is used to control the Spatial Editor.
    -

    -Making a Grid Visible and Editable -with -the Grid Manager

    - -
      -
    • Purpose: Identify a grid to edit
    • -
    -
    -
      -
    1. Locate a grid and click MB1 over the grid block in the Grid -Manager.
    2. -
    -
    -
    Note that the grid is now visible in the Spatial -Editor -and is now in edit mode. Any Spatial Editor operation executed will be -applied to this grid. Cases where this operation will not work include -immutable weather elements such as those derived from model data and -grid -that are locked by another user of the forecast database.
    - -

    -Zooming (enlarging) the Spatial -Display

    -
    The Spatial Editor display can be zoomed or enlarged -at any time using the MB3 pop-up menu. When this menu is displayed, you -are given a choice of zoom factors that represent the width of the -display -in kilometers. Selecting one of these choices will cause the display to -zoom to that size centered wherever you pressed MB3. -
  • Purpose: To make the larger -or smaller in order to see more -or less -detail.
  • -
    -
    -
    -
      -
    1. From the Spatial editor display, press and hold down MB3. A -pop-up menu -will appear containing the "Zoom" menu item
    2. -
    3. Move the cursor to this "Zoom" menu item until another cascading -menu -of -numbers appears.
    4. - -
    5. Move the mouse cursor over one of the choices in the middle of -the -number -list and release MB3.
    6. -
    -
    -
    You should see the display zoom in and enlarge the -size -of the data and map backgrounds. Repeat the last exercise and select -the -highest value in the list to zoom out to full view.
    -
    -

    A shortcut for Zooming

    - -Another, faster way to zoom the Spatial Editor display is to press the -SHIFT key on the keyboard and click MB2 to zoom in. In AWIPS1 MB1 was used -to zoom out. In AWIPS2 for now you have to roll MB2 in to zoom out. -Zooming in always uses the clicked point as the new center of the -display. Panning has to be activated for zooming capabilities to work. -

    Panning the -Spatial Display

    -Panning the display works similarly. Rolling -MB2 in or out will pan the display in the same direction, just like. -Note that if you move the cursor outside the Spatial -Editor -display area, the pan operation stops. To continue panning, you will -need -to reposition the cursor, and roll MB2 again.
    -

    -Topography

    - -
    The GFE includes topography as a special weather -element. -Topography can be displayed with any other weather element, except that -it cannot be edited. To load topography into the GFE, perform the -exercise -below. -
  • Purpose: To load and display topography data
  • -
    -
    -
    -
      -
    1. From the main menu, select Maps ->Topography.
    2. -
    -
    -
    You should now see an image that represents the -topography -over your county warning area. The image is generated from a terrain -database -and mapped to your office's projection and domain. While you cannot -edit -topography data, it can be used to identify edit areas based on -elevation. -We will discuss more about defining edit areas based on gridded values -in the next section. - - diff --git a/cave/com.raytheon.viz.gfe/help/GFETrainingSpatialEditorEditTools.html b/cave/com.raytheon.viz.gfe/help/GFETrainingSpatialEditorEditTools.html deleted file mode 100644 index ba1c38ce73..0000000000 --- a/cave/com.raytheon.viz.gfe/help/GFETrainingSpatialEditorEditTools.html +++ /dev/null @@ -1,1564 +0,0 @@ - -GFESuite Documentation - Edit Tools - -

    Edit Tools

    -

    -Select Points Tool -
    -ContourTool -
    -Using the Contour Tool -
    -Pencil Tool -
    -Move/Copy Tool -
    -Edit Actions -
    -Sample Tool -

    - - -
    -

    -Edit Areas

    -  -
    Nearly all of the spatial editor tools use edit areas -to determine which grid points to modify. You will need to know how to -define edit areas before using the spatial editor tools.

    -
    An Edit Area defines a set of grid points. These -points -may comprise a county, forecast zone, or any random area that you -define. -They may be saved and recalled later for reuse. In fact, there are two -ways to save edit areas: as an ordinary named set or as a QuickSet.

    -
    After you define a edit area you may save it as a -named -set. The simplest example of this type of edit area is a county. In -general, -named edit areas are saved once, recalled many times, and not changed -very -often.

    -
    Another way to save an edit area is as a QuickSet. -QuickSets -should be considered as a temporary method of saving edit areas as they -are easily overwritten. QuickSets are similar to the store button on a -calculator. They hold the state of an edit area temporarily while you -perform -some operation that requires a different edit area.
    -

    -Edit Area Interface

    - -
    -
    -The figure above is a snapshot of the edit area buttons on the Button -Bar. The operations include toggling, clearing, doing queries, setting -the edit area mode, and accessing/storing edit areas. Refer to -the -GFE -Toolbar documentation for more details.
    -

    -Defining an Edit Area

    -
    There are several ways to define an edit area. You -can -recall a previously saved set, define a new edit area by hand, or -execute -a query that defines the set based on data values of any grid or grids -that you specify.

    -
    The simplest method of defining an edit area is to -define -one by hand. The Select Points tool was designed to allow you to define -edit areas interactively. When this tool is selected, dragging with MB1 -selects an area while dragging with MB2 deselects an area. The -following -exercise will get you familiar with defining references sets by hand. -

    Load -an Edit Area from the Main Menu -

    -

    Probably the easiest way to load an edit area is -from -the Main Menu. All of the edit areas that correspond to your -counties, -zones of various kinds, WFOs, and states are generated automatically by -EDEX. You can find them under the Main Menu item Edit -Areas. -

    -
      -
    • Purpose: To load a predefined edit area
    • -
    -
    -
      -
    1. Make sure that the current edit area mode is set to Replace (=).
    2. -
    3. From the main Menu Bar select Edit -Areas->Counties->[county -name of -your choice]
    4. -
    -You should see the county you chose highlight in a white stippled -pattern. -This indicates that this area has been chosen to edit. Any edit -operation that you perform will be applied to this area.
    -
    -

    -Define an Edit Area by hand

    -
      -
    • Purpose: To define a new edit area
    • -
    -
    -
      -
    1. Make sure that the current edit area mode is set to Replace (=).
    2. -
    3. Select -the Select Points tool.
    4. -
    5. Move the cursor into the Spatial Editor.
    6. -
    7. Press MB1 and drag the cursor to outline an area with the mouse. -You -should -see a white outline that defines the edge of your area.
    8. -
    9. Release MB1. You should see the area filled with a white shaded -pattern.
    10. -
    -
    -
    You now have defined an edit area by hand. At this -point, -you could use one of the edit tools to modify the data over this new -area -that you defined. We discuss how to use tools in the Edit -Tools section.

    -
    Repeat the above exercise, but this time select the union -(|) mode button beforehand. Note that in union (|) mode, each time you -define a new area the old area(s) remains and is combined with the new -area. Now select the intersection (&) button and repeat the exercise -again. Note that this time the result is the intersection of the newly -defined edit area and the current edit area. Only the areas that -overlap remain.
    -

    -Erase an Edit Area

    -
    Now and then you may want to remove a portion of an -edit -area that you've already defined. The next exercise show you how to -erase -an edit area.
    -
    -
      -
    • Purpose: Remove a portion of the edit area
    • -
    -
    -
    -
      -
    1. Move the cursor near any edit area and press MB2.
    2. -
    3. With MB2 pressed, drag another outline to define a new area that -partially -intersects with your first area.
    4. -
    5. Release the mouse and observe that the intersected area is -removed from -the edit area.
    6. -
    -
    -

    -Toggle an Edit Area

    -
    -
      -
    • Purpose: Invert the currently defined edit area
    • -
    -
    -
    Occasionally, it is useful to invert (toggle) the -currently -displayed edit area. When you toggle the current edit area, all the -grid -points that were selected are deselected and all the points that were -previously -not selected become selected.

    -
    Create an edit area by hand as you did in the -exercise -named, Define Edit Area by Hand , -using -the  -Select Points Tool
    -
      -
    1. - Using MB1 click on the Toggle Button.
    2. -
    -
    Note that all the grid points that were selected have -been deselected and vice versa.
    -

    -Clear an Edit Area

    -
    -
      -
    • Purpose: Clear the current edit area
    • -
    -
    -
    Frequently you will want to clear the current edit -area -and create a new one. The clear button was made for this purpose.
    -
    -
      -
    1. Make sure there is an edit area displayed in the Spatial Editor.
    2. -
    3. Using MB1 click on the button . -
    4. -
    -
    -
    The edit area has been cleared and no grid points are -selected.

    -
    A couple of handy utilities can be found on the MB3 -pop-up -menu over the spatial editor, one that selects a contiguous edit area -based -on the grid point value under the cursor, and another that deselects a -contiguous edit area. We discuss these in the next two sections.
    -

    -Select Homogenous Edit -Area based on Value

    -
    -
  • Purpose: To select an edit area based on value.
  • -

    -
    This function allows you to select an edit area based -on the value of the selected point and the value of the points -surrounding -it. To understand how this works, complete the next exercise.
    -
    -
      -
    1. Clear the edit area as you did in the previous exercise.
    2. -
    3. MB1 click on one of the grids in the Grid Manager to display it -in the -Spatial Editor and make it editable.
    4. -
    5. Move the mouse cursor to middle of the Spatial Editor display and -MB3 -press -and select Select Homogeneous Area.
    6. -
    -
    -
    You should see a new edit area that identifies those -grid points whose values are within the fuzz value of the point you -selected. -For example, if the fuzz value is 3, and you selected a grid point with -the value 10, all the points with value between 7 and 13 and that are -also -touching become selected.
    -
      -
    1. Move the mouse cursor to the middle of the Spatial -Editor display and -press -MB3 and select Set Fuzz Value... This will display the Fuzz -Value Dialog.
    2. -
    3. Change the Fuzz Value so that it is two to three -times larger than its -current value.
    4. -
    5. Select OK in the Fuzz Value dialog.
    6. -
    7. Repeat steps 2-4 above, and note that the edit area -is larger, since -the fuzz value is now larger.
    8. -
    -
    The fuzz value is meaningless for the Weather data -type. -When you select Select Homogeneous Area when the Weather weather -element -is editable, any points that are the same weather value and touching -are -selected.
    -

    -Remove a Contiguous Edit Area

    -
    -
  • Purpose: To remove a contiguous edit area
  • -
    -
    -
      -
    1. Using the edit area that you defined in the previous exercise, -move the -mouse cursor to any grid point in this area.
    2. -
    3. Press MB3 and select Deselect Contiguous Area from the pop-up -menu. The -area identified by your mouse cursor is deselected.
    4. -
    -
    -
    Once you define an edit area, it is often useful to -save -it so you do not need to define it again. This exercise show you how to -save an edit area in a temporary location as a QuickSet.
    -

    -Saving Edit Areas as QuickSets

    -
    Purpose: To temporarily save an edit area
    -
    -
      -
    1. Define an edit area as you did in any previous exercise.
    2. -
    3. Find the quick set store button -in the group of edit area buttons on the right side of the toolbar -click with MB1.
    4. -
    5. Move the mouse cursor over one of the numbered buttons   -   -   - -and with MB1 click any one of them.
    6. -
    -
    -
    Now your edit area is saved under that particular -slot -and can be recalled at any time. The next exercise shows you how to -recall a saved QuickSet.
    -

    -Loading a QuickSet

    -
    Purpose: To restore a previously saved QuickSet
    -
    -
      -
    1. Clear the edit area, if there is one currently displayed in the -Spatial -Editor.
    2. -
    3. Find the same button     - -under which you saved the QuickSet in the previous exercise.
    4. -
    5. Click MB1 on this button.
    6. -
    -
    -
    Note that the edit area that you saved as a QuickSet -is now displayed.
    -
    To review, clicking the button -and then a button labeled with a number saves -the currently displayed edit area under that slot. Simply clicking the -number displays that edit area. QuickSets are intended -for -temporary storage of edit areas. QuickSets slots should be considered -volatile, -since there are a limited number of them and that they are not -considered -to be "owned" by any user. To save edit areas more permanently, store -them as a "named" edit area.
    -

    -Edit Area Groups

    -
    Since the list of Edit Areas can be very long (well -over -100), the GFE provides you with a way to organize them. Any Edit -Area that you define can be saved under any combination of edit area -groups.

    -
    The GFE provides two ways to assign a particular Edit -Area under one or more Edit Area Groups. One way is to assign the -group(s) -when you initially save the EditArea. The other method is to first save -the Edit Area without assigning any group and then use the Save -Edit Area Groups Dialog to assign Edit Areas to Edit Area Groups.

    -
    To assign a group to your Edit Area as you are saving -it, follow the instructions in the section for Saving -Named Edit Areas , but this time select or type in the Edit Area -Group(s) -before you click "Save." That operation will not only save your -Edit -Area, but also assign it to the group or groups that you selected -before -you clicked "Save". Note that if you do not assign a group to a new -edit -area, it will automatically be assigned to the "invisible" group -"Misc". -The only Edit Areas that are contained in the group "Misc" are those -that -have not been assigned to any other group. Once you assign an -Edit -Area to a group, it will no longer appear under the "Misc" group name -in -the Edit Area Query Dialog.

    -
    Now let's assume that you've saved some Edit Areas -but -not yet assigned them to any groups. To simply assign Edit Areas -to groups, use the Save/Delete Edit Area Groups dialog found within the -Edit Area Query dialog under the "File" menu item. Here's an -exercise -that steps through this process. -
  • Purpose: To save assign an Edit Area to a group name
  • -
    -
    -
      -
    1. From the "Save/Delete" menu item in the Edit -Area Query dialog , select "Save -Edit Area Group... ".
    2. -
    3. When the dialog appears, select one of the Edit Area -Groups, located in -the list on the left.
    4. -
    5. Select one or more Edit Areas that you want included -in that Edit Area -Group.
    6. -
    7. Finally, select "Save".
    8. -
    -
    Now when you use the Edit Area Query Dialog, those -Edit -Areas will appear under the group to which it was assigned. -If you want to make a new group name, just type the new name in the box -labelled "Identfier" and a new group name will be created.

    -
    To remove an Edit Area from a group, bring up the Delete -Edit Area Group Dialog again. Note that when you select any -Edit -Area Group, the Edit Areas in that group automatically -highlight. -To remove one or more of the Edit Areas from the selected group, simply -toggle them off and select "Save".
    -

    -Loading Named Edit Areas

    -
    -
  • Purpose: To display a named edit area
  • -
    -
    -
    Once you have saved an edit area as a named set, you -will want to load it as the current edit area. The next exercise -explains -how to do this.
    -
    Select the Clear button -to clear the Spatial Editor of any current edit areas.
    -
      -
    1. Select the button -from the toolbar.
    2. -
    3. Once the Query -dialog -appears, select a named edit area from the column titled "Edit Areas".
    4. -
    5. Select "Submit".
    6. -
    -
    The edit area you selected in the dialog should now -be -displayed in the Spatial Editor. If an edit area is defined when you -load -a named edit area, it will be replaced, unioned, or intersected with -the -named area, depending on the edit area mode. -

    Saving Named -Edit Areas

    -
    Purpose: To save the current edit area as -named set

    -
    There are some edit areas that you will want to save -permanently as named sets rather then temporarily as QuickSets. This -exercise -will show you how to save a named edit area.
    -
    -
      -
    1. Define an edit area as you did on any of the previous exercises.
    2. -
    3. From the Query Dialog mani menu select Save/Delete -> Save -Edit -Area.
    4. -
    5. In the box labeled "Identifier", type in a unique name. (Don't -bother -with -the Group Name(s) column just yet.)
    6. -
    7. Select "Save Active Area" and your edit area will be saved in the -database.
    8. -
    -Note that the GFE will automatically generate Edit Areas based on map -data -for your local area. For example, in the Edit -Area Query Dialog, you should see each one of your counties and -zones -listed. There is no need for you to define these areas since they -already are defined for you.
    -
    -

    -Deleting Named Edit Areas

    -
    Purpose: To delete a named edit area -from the inventory

    -
    Occasionally you will want to remove a named set from -the edit area inventory. This exercise will show you how to delete a -named edit area.
    -
    -
      -
    1. Select the button located on the toolbar.
    2. -
    3. From the Edit -Area -Query Dialog , select "Save/Delete" from its menu bar.
    4. -
    5. Select one of the names listed with an MB1 click.
    6. -
    7. Select "Delete Selected Area" with MB1.
    8. -
    -
    -
    The edit area will be removed from the inventory.
    -

    -Edit Area Queries

    -
    In a previous exercise, you learned how to define -edit -areas by hand. In the next set of examples, we will demonstrate how to -define an edit area based on data values. Defining the edit area for -one -weather element based on data values of another weather element makes -it -easier to keep the weather element values consistent. For example, you -may want to select all of the areas where it is raining and then assign -100% cloud cover to those points. The following exercises will show you -how to define edit areas via queries.
    -

    -Simple Query

    -
    -
  • Purpose: Define a new edit area via simple -query
  • -
    -
    -
    -
      -
    1. Set up the Spatial Editor display so that a temperature grid is -displayed.
    2. -
    3. Carefully examine the range of values on this grid.
    4. -
    5. Select the  -Query button from the toolbar.
    6. -
    7. When the Edit -Area -Query dialog appears, select "T" from the column labeled Weather -Elements.
    8. -
    9. Next, from the operators columns, select > (greater than).
    10. -
    11. Now, select a temperature value (e.g., 70) using the number keys. -Make -sure that you have selected a value such that there are grid values -that -are greater than the value you typed in.
    12. -
    13. Finally, select the "Submit" button, which can be found at the -bottom -of -the dialog.
    14. -
    -
    -
    When you submit your query, the GFE calculates all of -the points that satisfy the expression. You should see one or more edit -areas defined on the Spatial Editor. If you don't see any edit areas, -repeat -the last 4 steps above, but this time choose a temperature value that -will -result in a valid edit area. -

    If you had wanted to, you could have simply typed in the query as: T -> 70

    -
    -

    -A more complex query

    -In this exercise we will execute a query expression that defines a -range -of temperature values. -
    -
  • Purpose: Define a new edit area via more -complex query
  • -
    -
    -
    -
      -
    1. Clear the current edit area by selecting  -from the toolbar.
    2. -
    3. With temperature still loaded, select the -query button, if the query dialog is not already visible.
    4. -
    5. Type the following into the query box: (T -> 70) & (T < 90)
    6. -
    7. Select the "Submit" button.
    8. -
    -
    -
    This time all of the grid points whose value is -between -70 and 90 should be selected. This type of query demonstrates how to -select -a range of values using queries. When using the '&' or '|' -operators, -you must enclose the surrounding entries with parenthesis.
    -

    -Multiple Parameter Queries.

    -
    Queries are not limited to single parameters. The -following -example shows how you can execute an expression that includes multiple -queries.
    -
    -
  • Purpose: To use multiple parameters in a -queryLoad the -dewpoint -(Td) parameter into the GFE if is not already loaded.
  • -
    -
    -
    -
      -
    1. Display the dewpoint grid on the Spatial editor such that both -temperature -and dewpoint are displayed at the same time.
    2. -
    3. Examine an area on the screen and generally note the temperature -and -dewpoint -over this area.
    4. -
    5. Select the Query -dialog button to display the query dialog.
    6. -
    7. Use the selectors or type in a query that resembles the -following: (T -> 80) & (Td > 50)
    8. -
    9. Select the "Submit" button.
    10. -
    -
    -
    For this query to work properly, there must be some -area -in the display where the temperature is greater than 80 and the -dewpoint -is greater than 50. If this is not the case, then repeat the exercise -again -but use appropriate values for your data set. Once the values fit the -data, -you should see an area defined that identifies those grid points that -satisfy -the expression that you defined.

    -
    By this time, you should start to understand why -defining -edit areas via queries is so powerful. This method allows you to define -and edit data based on data values, thereby linking the weather -elements -together in a consistent way. For example, a previously defined QPF -field -can be used to help you define the Probability of Precipitation (PoP) -field. -Not only are forecast weather elements more consistent, but the need to -tediously define edit areas by hand is greatly reduced. Using queries -in -this way encourages you to think meteorologically. -
    -

    Complex Queries

    -Queries are simply expressed in numpy. Thus the -techniques -you use to write smart tools and smart -initialization scripts may also be performed in the query engine, -just -as long as the result is a "mask" representing whether a grid cell is -marked -"on" or "off". Thus, numerical functions may be used as well as -numerical -expressions. -

    For example, the following query calculates the dew point depression -and then selects points where the depression is less than 4 degrees: -

    -
    (T - Td) < 4
    -

    Here is an example of a numerical query to determine which the T -from -the Fcst and T from the NAM12 are not within 4 degrees of each other; -note -the use of the numerical absolute() function: -

    -
    -

    absolute(T - -T_SFC_BOU_GRID__NAM_20030314_1200) -> 4

    -
    -

    The above query also introduces the concept of performing queries on -non-Fcst database grids. There are several more convenient -formats -than that shown above, please refer to the Edit -Area and Query Dialog for more details. -

    -

    Queries on WEATHER and DISCRETE data are also complex. The -Edit -Area and Query Dialog provides several shortcuts so you don't need to -remember -the specific syntax. The options permit exact matches or -"contains" -matches. For example, you can search for any instance (i.e., any -coverage, any intensity) of RW (rain showers) using this query: -

    -
    mask(Wx, ":RW:")
    -

    Intimate knowledge of the format of the WEATHER "ugly" string makes -this job easier, even though the dialog provides automatic filling if -desired. -

    -

    The weather query above will match any grid cell that contains any -form -of RW. If you wanted to make an exact match of only the RW, then -the query would be similar to: -

    -
    mask(Wx, "^Sct:RW:-:<NoVis>:\Z", 1)
    -
    -

    -If you want to select the inverse of an edit area, for example, the -opposite of the above statement, then you use the logical_not() -function. The following selects everything but Sct RW-:
    -
    -
    logical_not(mask(Wx, -"^Sct:RW:-:<NoVis>:\Z", 1))
    -
    -
    -
    Wind queries use the "FROM" -direction. Wind is presented as a tuple, so if you want to do a -query based on wind speed, use Wind[0]. If you want to do a query -based on wind direction, use Wind[1]. For example, the following -wind query looks for speeds greater than 25 and directions between NW -(325) and NE (45):
    -
    -
    (Wind[0] > -25) and (Wind[1] > 325) and (Wind[1] < 45)
    -
    -
    -
    -
    -
    -
    -
    -

    -Saving Edit Area Queries

    -
    Edit Area Queries can be saved just like ordinary -"polygon" -queries. Once you have submitted the query, select the save -button -to save that query. Note that it will be saved as a query so that -when you submit it again, the result may be different, depending on the -particular data values on your display.

    -
    Important note about Edit Area Queries! Many -of the product generation applications accept one or more edit areas as -input to allow you to trim the product to a domain of your -choice. -Unfortunately, these product generation applications cannot accept edit -area queries as input to generate a product. Edit Areas passed -into -these routines must be "polygon" areas that are defined by boundaries -not -queries. Specifiying a query to a these applications will likely result -in a "blank" product. This restriction will be lifted in the -future. -
    -
    -

    -Edit Tools

    -
    Spatial Edit tools (with the exception of the Contour -tool and Pencil tool) require that you first define the set of grid -points -to which you want the edit operation to apply and then apply the -operation. -Tools consist of the Select Points, Contour, Pencil, Move/Copy, and -Sample. -These tools are selected using the GFE Toolbar and then particular -mouse -actions do different editing operations. Refer to the GFE -Toolbar Reference Guide for more details on the mouse button -assignments. -Also, you can set up keyboard shortcuts for these tools. (See gfeConfig -Keyboard Shortcuts).
    -

    -Select Points Tool

    -
      -
    • Purpose: To define an Edit Area
    • -
    -
    The Select Points tools allows you to define and -modify -edit areas. Perform the following exercises to learn three different -ways -Select Points tool can edit your Edit Areas.
    -
    -
      -
    1. Select the Select Points tool from the Button -Ba -r (see figure above).
    2. -
    3. Press MB1 and drag a closed outline anywhere on the Spatial -editor -display.
    4. -
    5. Note that a white shaded area appears that indicates the extent -of your -edit area.
    6. -
    7. Now adjust the edit area by drawing another closed outline with -MB2 -that -includes part of the area you just defined.
    8. -
    9. Note that the area that was inside this second outline is removed -or -deleted. -The MB2 drag operation trims an existing edit area.
    10. -
    11. Next, press MB3 and select Deselect Contiguous Area. Note that -the area -that you defined earlier is deleted.
    12. -
    -
    -

    -ContourTool

    -
      -
    • Purpose: Modify grid values by drawing -and adjusting contours
    • -
    -
    The contour tool lets you define or adjust a gridded -field by drawing and adjusting contours. There are four different -operations -supported by the contour tool: draw a new contour, adjust an existing -contour, -delete a contour, and add a new contour. Because converting from -contours -to the actual grids can take several seconds, the contour tool allows -you -to perform as many of these operations as you like before the grid is -actually -generated. And there are two algorithms from which to choose that -convert -your contours into a gridded field. We will define the operations that -the Contour Tool offers, and then demonstrate each one in the exercises -that follow.
    -
      -
    • Draw New Contour
    • -
    -
    This operation allows you to draw a new contour with -a value that you choose from the Pickup Value dialog or from the Color -Bar located at the top of the Spatial Editor display. To perform -this -operation, you first select the value of the contour and then draw the -contour on the Spatial Editor display.
    -
      -
    • Adjust Existing Contour
    • -
    -
    This operation lets you modify the position of a -contour -that already exists. After you adjust any contour, the grid is -immediately -recalculated.
    -
      -
    • Add Contour
    • -
    -
    The Add Contour operation inserts a new contour at -whatever -location you click. Its value is same value as the gridpoint you -clicked -upon. After adding a new contour in this way, you may adjust it using -the -Adjust contour operation.
    -
      -
    • Delete Contour
    • -
    -
    The Delete Contour operation removes a contour from -the -display. Contours that are removed are not used when calculating a new -grid from contours.
    -

    -Using the Contour Tool

    -
    Unlike the other edit tools, the Contour Tool lets -you -make many changes to the display before the gridded values are actually -modified. You can draw, add and delete as many contours as you like -before -you command the grid to be recalculated. If you use the adjust -operation, -however, the grid will be recalculated automatically. Once the grid is -recalculated, you can make further modifications and recalculate -again. -Once you are done manipulating the contours, the Button-3 popup menu -gives -you the options to Calculate New Grid. Selecting this options -will -generate a new grid based on the contours that you just edited.

    -
    The Contour Tool works only on weather elements that -are of type scalar. For example, you cannot use the Contour Tool to -edit -the elements wind or weather. The following exercise will help get you -familiar with the Contour Tool.
    -
      -
    • Purpose: Draw a new contour
    • -
    -
    -
      -
    1. To begin, move the mouse cursor over to the Grid Manager and -decide -which -scalar element you would like to edit.
    2. -
    3. Press and hold MB3 over a gap (not over a grid) and select Create -From -Scratch. If you were successful, a small yellow rectangle should appear -and its corresponding legend in the Spatial Editor should show that the -grid is ready to edit.
    4. -
    5. Next, select the Contour Tool icon from the Button Bar. The icon -looks -like:
    6. -
    7. Now, you are ready to draw some contours. Pick a value from the -color -bar, -located at the top of the Spatial Editor, by clicking MB1 or MB2 -on whatever value you like.
    8. -
    9. Move the mouse cursor over the Spatial Editor. Press MB1 and drag -to -define -the position of this new contour. You should see a thin white line -trace -your path.
    10. -
    11. When you are finished drawing this contour, release MB1.
    12. -
    13. Once you release, you should see small contour labels appear -adjacent -to -the contours. This label indicates the value of the contour that you -just -drew.
    14. -
    15. Repeat steps 5 and 6, but select a new contour value from the -color -bar. -Continue defining new contours until (in your best judgement) the -contours -adequately define the grid. Try to draw the contours so that the edges -touch the sides of the data area, or close the contour on itself. -Drawing contours this way yields the best results when the grid is -recalculated.
    16. -
    17. Now generate the grid based on your contours by pressing MB3 -anywhere -in -the Spatial Editor (except over the legends) and select from the pop-up -menu Calculate New Grid.
    18. -
    19. After a few seconds a new grid should appear that correlates with -the -contours -that you drew earlier.
    20. -
    -
    -
    -
      -
    • Purpose: Adjust an existing contour
    • -
    -The next exercise shows you how to adjust the position of contours that -already exist. With the adjust operation, the grid is recalculated -automatically -after you adjust each contour. So, when adjusting contours there is no -need to select the command Calculate New Grid.
    -
    -
      -
    1. Using the grid that you just created, move the mouse cursor over -one of -the existing contours.
    2. -
    3. Press and hold MB2 and drag a new position for this contour. For -the -best -results, make sure that you release MB2 over the same contour on which -you started.
    4. -
    5. The grid will be recalculated and displayed using the new -position of -the -contour that you just modified.
    6. -
    -
    -
    -
      -
    • Purpose: Delete a Contour
    • -
    -Occasionally, you may want to remove a contour. The delete contour -operation -was made for this purpose.
    -
    -
      -
    1. Using the same grid as in the exercise above, move the mouse -cursor -over -any contour.
    2. -
    3. Click MB2 over this contour. You should see the contour disappear.
    4. -
    -
    -
    Removing a contour from the display means that the -removed -contour will not be used in the calculations when converting the -contours -to a grid. Typically you would remove a few contours before drawing new -ones of a different value and location to replace them. Note that -the remove contour function removes the closest contour from the click -point. If you are not careful to click close to the contour that -you want to remove, you may remove the wrong one.
    -
      -
    • Purpose: Add a new Contour
    • -
    -
    Sometimes you may want to adjust gridded values -between -contours without modifying the existing contours. The Contour Tool -allows -you to add a new contour to the display so that you can manipulate the -gridded values that lie between the typical contour intervals.
    -
    -
      -
    1. As with the previous Contour Tool exercises, make sure that you -have an -editable scalar grid displayed in the Spatial Editor.
    2. -
    3. Move the mouse cursor to a location that is between two contours.
    4. -
    5. MB1 click at a location that is between the two contours. You -should -see -a new contour appear with a value that has the same value as the grid -point -upon which you clicked.
    6. -
    7. Now use MB2 drag to adjust the position of this new contour. When -the -grid -is recalculated, note that the data changes are primarily limited to -the -data that lie in-between the two original contours.
    8. -
    -
    -
    When you add a new contour with MB1 click, that -contour -value will continue to be displayed after the grid is recalculated, -until -you switch to a new grid or new weather element. In other words, new -contours -added this way will persist until you edit a different grid. -
    -

    Contour Tool Notes

    -
    -
      -
    • After you have modified a contour, but before -you recalculate the grid, -the contours and the gridded data are inconsistent. If you attempt to -edit -a new grid or change to a different edit tool while in this -inconsistent -state, a dialog will appear asking if you would like to recalculate the -gridded data based on your modified contours before moving on. If you -click -"yes", the grid will be recalculated before switching to the new grid -or -new edit tool. If you select "no", all of your contour edits since the -previous recalculate operation will be lost and the GFE will switch to -the new grid or new edit tool.
    • -
    • The Contour Tool allows you to cross contours. -When drawing new -contours -(MB1 drag) over existing contours, the "old" contours are partially -removed -so as not to convey conflicting and ambiguous information to the -contour-to-grid -algorithm. To reflect this visually, the deleted portions of the old -contours -are removed from the display. Try this out. Pick a new value from the -color -bar and draw a new contour near some existing contours. Note that -portions -of the old contours are removed indicating that those portions will not -be used when calculating the new grid.
    • -
    • There are two different algorithms that convert -the contours to a -gridded -field. You can select your favorite from the main menu under the menu -item -GFE->Editing Preferences->Contour Server Selection. Each -algorithm has -its strengths and weaknesses with respect to performance and accurately -generating a grid from contours. We strongly recommend that you use -generate -grids using each algorithm and determine for yourself which works best. -Keep in mind that a set of contours represents a gridded field only -approximately. -There are many potential gridded field solutions for a given set of -contours. -Each algorithm implements a slightly different solution and therefore -will -produce different results.
    • -
    • Because contours only approximate the gridded -field, the better you -define -the field, the better the result. The more contours you define for a -particular -field, the more likely that you will be happy with the resulting grid. -Sometime the algorithms will produce gridded fields that appear to be -noisy. -The Smooth edit action will generally remove this noise in the -data. -You will get the best results when you:
    • -
        -
      • Draw contours to the edge of the grid or that -close in on -themselves. -Contours that stop before the edge tend to generate "spikes" near the -end -point.
      • -
      • Draw many contours rather than fewer as the -contour-to-grid algorithm -has -more information with which to generate the grid.
      • -
      -
    • When the Contour Tool is selected, the pop-up -menu includes several -operations -that will affect the set of contours.
    • -
        -
      • Calculate New Grid - Selecting this -option will calculate -a new -grid based on the contours that you just edited. In general, only -the area under the modified contours will be modified. Grid -values -in areas that you did not modify will not be changed. So, if you -are satisfied with the contours in a particular area and you don't -change -them, they will not be modified.
      • -
      • Undo Last Contour Edit - This will -reverse the last -contour edit -that you made.  If you added a new contour, it will be -removed.  -If you deleted a contour, it will be added back. If you adjusted -a contour, the old contour will be restored. If you deleted -all of the contours with the Delete All Contours operation, all of the -contours will be restored to their previous state.
      • -
      • Delete All Contours - Selecting this -item will remove all -of the -editable contours from the display. This effectively allows you to -throw -away all existing contours and edit the grid from scratch. Simply -clicking -button 1 in any location will add back a contour whose value -corresponds -to the grid value under the cursor. So you may choose to delete all of -the contours and then add a few back in areas that you want to preserve -the existing gridded data.
      • -
      • Contour Adjust Influence -- Selecting this -option will -cause a cascade menu to appear that lists a set of distances in -kilometers. -Selecting one of these distances will affect the distance over which -the -Contour Adjust operation modifies the grid points. The& -largest -value affects about six times the distance from the new contour -poistion -than the smallest value.  The Contour Adjust operation and -influence -works exactly like the Pencil Tool. -In -fact, if you change the Contour Adjust Influence for a particular -parameter -in the Contour Tool, that same influence will be applied if you use the -Pencil Tool later.
      • -
      -
    • Note that you can add or remove contours by -changing the contour -density -from the Spatial Editor product labels.
    • -
    -

    -Pencil Tool

    -
    The Pencil Tool can be thought of as a contour -adjustment -tool, but it does not actually adjust contours. The Pencil Tool assigns -a specific value to a set of grid points and then recalculates the grid -points nearby. The result is that the gridded data reflect the new -position -of the contour. You don't need to display a particular grid as contours -for the Pencil Tool to work. It is envisioned that the Pencil Tool will -be integrated with the Contour Tool at some point in the GFE -evolutionary -process since the Pencil Tool and the Contour Adjust operation are -essentially -identical.
    -
      -
    • Purpose: Modify grid values by -adjusting the position of -contours
    • -
    -
    The pencil tool allows you to "redraw" the position -of -a contour. An algorithm recalculates the grid to reflect this new -contour -position.
    -
    -
      -
    1. Load a scalar grid (e.g., Temperature) into the Spatial editor -and make -it editable.
    2. -
    3. Make sure that no Edit Areas are currently active.
    4. -
    5. Select the Pencil tool with MB1 (see figure above).
    6. -
    7. If you like, you can make contours visible by pressing MB3 over -the -grid -lable in the Spatial Editor and select Display Attributes. Turn on the -Contour Image Visual type check button.
    8. -
    9. Move the cursor over a contour, press and hold MB1 and draw a new -position -for the contour.
    10. -
    11. Release MB1.
    12. -
    -
    -
    As you drag the cursor with MB1 pressed, a white line -appears that defines the new position for this contour. When you -release -MB1, the grid values are modified such that the new contour will be -drawn -very near the line you identified.
    -
      -
    1. Redraw several more contours using the Pencil tool -and get familiar -with -how it works. Note that you are allowed to cross contours.
    2. -
    -

    -Pencil Tool Width

    -
    The  button-3 popup menu contains the option to -change the Pencil Tool Width. Making this value smaller modifies -a smaller area on either side of the newly modified contour. -Making -this value larger modifies a larger area on either side of the newly -drawn -contour. To become familiar with this feature, change the Pencil -Tool Width to its smallest value and modify a contour. Then -change -it to its largest value and modify another contour. Note the -relative -difference in the two operations. The individual -influence -sizes can be configured via your GFE configuration file. Note that the -Pencil Tool Width is Weather Element dependant.  Changing the -Pencil -Tool Width for one Weather Element will not affect the Pencil Tool -Width -for any other Weather Element.  The Pencil Tool Width is defined -on -a per Weather Element basis. -

    Pencil Tool with Active Edit Areas -

    -

    To better control changes to your grids, the Pencil Tool operations -are restricted to any active Edit Areas that you have defined. If -there are no Edit Areas active, then the Pencil Tool beahves as if the -entire grid is the active Edit Area.  For example, if you first -select -an edit area and then repeat the exercise above, you will see that any -changes that were made are confined to the Edit Area that you -selected. -The data values are identical to what they would be if no Edit Areas -were -active, but again changes are restricted to those grid points that lie -inside the active Edit Area. Note that if -your -Pencil Tool operation does not go near the active Edit Area, no changes -to your grids will occur. To turn off this feature, simply -clear -the Edit Area. If you have an Edit Area that you would like to save, -but -still use the Pencil Tool as if no Edit Area were active, you can save -the Edit Area with a QuickSet -button or simply clear the area and recall it again with an MB3 pop-up -command Undo Area Edit. -

    -

    Using the Pencil tool with Wind -

    -

    Note that the Pencil Tool will also work on grids of type vector, -such -as wind. The algorithm is virtually identical except that the -speed -and direction are considered as separate components and are -recalculated -independently. Try the Pencil Tool with a wind grid to get an -idea -of how it works on data of type vector. -

    -

    The Streamline Tool -

    -

    The Pencil Tool works like a streamline editor for a given set of -conditions. -To use the Pencil Tool as a streamline tool, make a Wind (or any other -vector-type weather element) active. Then from the main menu -select -GFE->Editing -Preferences->Vector Edit Mode->Direction Only or from the MB3 -pop-up -menu over the Spatial Editor select Vector Edit Mode->Direction -Only. -When the GFE is in this mode the Pencil Tool behave line a streamline -editor. -To use it, select the tool, press and hold MB1 and drag a line in -the direction you want the wind to blow.  For example, if you drag -a line from northwest to southeast, all of the wind values within the -Pencil -Tool width will now indicate a northwest wind.  Give it a -try. -Note that with a large enough Pencil Width you can draw a circle in a -counter-clockwise -direction with the tool and create a large cyclonic circulation in the -wind field. Remember that this tool -works -only on weather elements of vector type and when the Vector Edit Mode -is -set to DIrection Only. -

    -

    Using the Pencil tool with Weather and Discrete -

    -

    In the case of weather, the Pencil Tool will expand the extent of -the -weather/discrete (or No Weather/Discrete) that you select. When -using -the Pencil Tool on Weather, you must begin and end the Pencil Tool -operation -on the same contiguous area of weather/discrete or an error will -result -and no grid data will be changed.   Try the following -exercise -to learn how to edit weather with the Pencil Tool. -

    -
      -
    1. Purpose: Edit the extent of various -areas of weather using -the Pencil -Tool
    2. -
      -
    3. Load the "Wx" weather element into -the GFE -(if not already), select -a grid and make it editable.
    4. -
    5. Select the Pencil Tool.
    6. -
    7. Find a contiguous area of weather such as "Sct -RW-".
    8. -
    9. Move the cursor inside this area and press and -hold MB1.
    10. -
    11. Drag the cursor (while holding MB1) to define a -new boundary for this -weather -area.
    12. -
    13. Make sure that your MB1 drag operation ends in -the same contiguous -weather -area in which you started.
    14. -
    15. Release MB1
    16. -
    -Note that you have now defined a new boundary for the weather area in -which -you started. Note that this is not a "paint" operation. The -Pencil Tool defines a new boundary for the weather area. -It -does not assign values along the draw path like the algorithm that -operates -on scalar or vector data. You can also use the Pencil Tool to -make -any area of weather smaller. Simply start in an area that is -defined -as "No Weather" and define the new boundary. If the line you draw -crosses into any other weather area, the boundary of that area will -change. -Be sure to end your drag in the same "No Weather" areaas you started. -Give -it a try. Note the change in the weather grid.
    -

    -Move/Copy Tool

    -
      -
    • Purpose: Adjust the spatial position of -grid values
    • -
    -
    Occasionally the values of the grid points are -reasonable, -but you may not agree with the location of certain features. Once you -have -identified the feature as an edit area with the Select Points tool, you -can adjust its location with the Move/Copy tool.
    -
    -
      -
    1. Load a grid into the Spatial Editor and make that grid editable.
    2. -
    3. Find a feature that you would like to copy.
    4. -
    5. Pick the Select Points tool and define an edit area over your -feature.
    6. -
    7. Pick the Move/Copy Tool by clicking MB1 on the Move/Copy tool -icon.
    8. -
    9. Move the cursor over the selected area, press and hold MB1, drag -the -feature -to some other location, and release the mouse button.
    10. -
    -
    -
    Note that the feature you selected has been copied to -a new location. The original feature (at least the part that did not -overlap -the copied area) was left untouched. Now try the "Move" operation by -following -the steps below.
    -
      -
    1. Press MB3 anywhere in the Spatial Editor display and -select Undo Grid -Edit.
    2. -
    3. Move the cursor over the area that you selected in -Step 2.
    4. -
    5. Press and hold MB2, drag the feature to some other -location, and -release -the mouse button.
    6. -
    -
    This time the original selected area did not remain -unchanged. -When you released MB2, an interpolation algorithm filled in the -original -area with new values.
    -
    Use MB1 when you want to copy an area of data and -move -it to a new location. Use MB2 if you want to move some feature and fill -in the original area with background values. -
    -  -

    Edit Actions

    -There are many more tools available from the Edit Actions menu. -These -edit tools always operate over the currently selected edit area. To use -them, click on the Button Bar button labelled "E". The Edit -Action -dialog menu will display a list of tools that operate on the currently -editable weather element.  Selecting one of these tools will -perform -that operation over the edit area that you have selected. The -four -standard tools that work for virtually all weather elements are listed -in the table below. -
    -
    - - - - - - - - - - - - - - - - - - - - - - - -
        Tool Name Function
     Assign_Value Assigns the current pickup value 
     AdjustValue_Up Adds the delta amount to the current value
     Adjust Value_Down Subtracts the delta amount to the current value 
     Smooth Smooths out strong gradients
    -

    The Edit Actions dialog also lists the set of Smart Tools that will -edit the currently editable weather element. Smart Tools will -also -appear on the MB3 pop-up menu over the Spatial Editor. In -addition, -keyboard shortcuts can be set up for Smart Tools and Procedures (see -gfeConfig Keyboard Shortcuts ). For more information about -Edit -Actions and Smart Tools, go to the Smart -Tool Training Guide.

    -
    -

    -Sample Tool

    -
      -
    • Purpose: Provide a textual -representation of grid values
    • -
    -
    The Sample tool displays a text representation of -grid -values for all currently editable grids. These representations, called -"Samples", are useful when you are editing data and want to know the -value -of a weather element at a particular location, such as a city. The -Sample -Tool can also be used to control "Markers", which are mainly used for -Intersite -Coordination data. Markers are similar to Samples, except that -data -values are not shown.
    -
    -
      -
    1. Make sure that you have at least one grid displayed in the -Spatial -Editor.
    2. -
    3. Select the Sample tool located near the middle of the -button bar.
    4. -
    5. Move the cursor into the display. Press and hold MB1 and drag the -cursor -around. You should see a text representation of the value under the -cursor.
    6. -
    7. Release MB1.
    8. -
    9. Make a second weather element visible in the Spatial Editor by -clicking -MB1 on its label.
    10. -
    11. Press and drag MB1 again in the spatial display. You should see -both -grid -values under the cursor displayed.
    12. -
    13. Release MB1.
    14. -
    15. Click MB1 several times in the display. You have just added Fixed -Sample. -These will remain on the Spatial Editor display until you clear them. -Add -more Samples by clicking MB1 in several other locations.
    16. -
    17. Position your cursor directly under one of the "+" symbols -located -below -one of your samples. It may be difficult to find them if the data -background -is light in color.
    18. -
    19. To remove individual Samples, click MB2 directly on the "+" -symbol. -Your -sample is removed.
    20. -
    21. To remove all of the samples from the display, select from the -main -menu -bar Maps->Samples->Clear. All of the samples are removed.
    22. -
    -Note that there is an option to also display the latitude and longitude -of the sample point.  To display the latitude/longitude select -from -the main menu bar Maps->Samples->Show Lat/Lon. Turning -this mode -on will cause the samples to display the latitude and longitude always -at the bottom of the sample in the color white. Turning this mode -off will remove the lat/lon display. -

    Samples may also be defined by latitude/longitude through the Define -Samples via Lat/Lon Dialog. This is accessed from the main -menu -bar, Maps->Samples->Define Samples via Lat/Lon... -

    -

    Samples and Marker options are available from the Maps->Samples -and Maps-> ISC Markers menu. The user can choose to -enable -optional features of the sample points, which include the update time, -WFO site identifier, and "P" official database symbol for those data -points. -Markers and Samples differ in the fact that markers do not show data -values -and are intended for displayof intersite coordination data -status. -Samples display data points. The Sample Tool provides a MB3 popup menu -to add and remove markers. Markers are not cleared from the Samples->Clear -menu. Refer to the Intersite Coordination User's -Guide -for more information. -

    -

    Example -of regular samples and ISC Markers -
    -

    -
    -
    You can save a set of samples after you have -defined -them. Once you have the set of samples just the way you like, -select -from the main menu bar, Maps-Samples->Save/Delete... -This will display the Save/Delete -Sample Dialog which allows you to assign a name to your sample set. -

    Samples are represented with additional information if the GFE is in -"Show ISC Mode". When "Show -ISC Mode" is enabled, the sample points may contain update times, -site -identifiers, and the official database symbols for those areas outside -of your CWA. Refer to the Intersite Coordination -User's -Guide for more details. -
    -

    - - diff --git a/cave/com.raytheon.viz.gfe/help/GFETrainingSpatialEditorISCModeBehavior.html b/cave/com.raytheon.viz.gfe/help/GFETrainingSpatialEditorISCModeBehavior.html deleted file mode 100644 index 414e195eb7..0000000000 --- a/cave/com.raytheon.viz.gfe/help/GFETrainingSpatialEditorISCModeBehavior.html +++ /dev/null @@ -1,64 +0,0 @@ - -GFESuite Documentation - Behavior of GFE in ISC Mode - - -

    Behavior of the GFE when in ISC Mode

    -
    -

    When the  button -is pressed, the GFE is put into the ISC (intersite coordination) -mode. -The data viewed in the spatial editor will be the composite of your -forecast -data and the adjacent received site's data.  Certain edit tools, -such -as Pencil, also work different in ISC mode.  The data values are -picked -up may be either from your forecast grid or from the intersite -coordination -grid depending upon the location on the grid. -

    Try placing the GFE into ISC mode and observe how the display -changes.  -You may have observed that the entire grid is no longer pictured.  -If so, this means that data is not available from all of your -surrounding -sites.  Note also that your forecast grid is clipped to your CWA. -Use the Sample Tool and note that when you sample outside your area -that -the samples will now shown an update time and site identifier from the -ISC sites (if those features are enabled). -

    -

    Try using the Pencil Tool and Move/Copy tool to change some -data.  -Note that it uses the values from the composite grid for its operation, -but you may not see the entire data change.  Since only a portion -of your forecast grid is shown (just those parts within your CWA), -changes -you make to portions of your grid outside your CWA will not be seen -while -in ISC mode.  Toggle off ISC mode to see your entire forecast -grid. -

    -

    Markers (similar to samples) may appear, which represent one -location -per adjacent grid.  The markers may be set up to display the last -grid update time, the WFO identifier, and whether the ISC data was -published -or is the working grid.
    -

    -

    While most of the weather elements simply are masked so that you see -your Fcst database within your CWA, and the ISC data outside your CWA, -some ISC elements are calculated on-the-fly.  For example, the QFP -weather element for ISC is a virtual, as shown with the VISC label in -the spatial editor legend.  There is a QPF ISC element, and a -virtual QPF ISC element.  The virtual element is the summation of -all of the "precipitation rates" and is valid the same time period as -the Forecast grid.
    -

    -

    Refer to the Intersite Coordination Guide -for -more details. -
    -

    - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/GFETrainingSpatialEditorStatusBar.html b/cave/com.raytheon.viz.gfe/help/GFETrainingSpatialEditorStatusBar.html deleted file mode 100644 index e7ab248074..0000000000 --- a/cave/com.raytheon.viz.gfe/help/GFETrainingSpatialEditorStatusBar.html +++ /dev/null @@ -1,17 +0,0 @@ - -GFESuite Documentation - AlertViz - - -

    AlertViz

    -
    -

    The AlertViz in AWIPS2 is a separate program that is shared among -all components of the visualization environment. There -are two sections to AlertViz; the left displays general messages -and the right displays Intersite Coordination and Smart Initialization -messages in GFE. Each status bar displays the latest status message which can -be one of three types: Regular, Significant, or Urgent. For more -information on AlertViz, go to the section entitled AlertViz . -
    - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/GFETrainingSpatialEditorVisualizations.html b/cave/com.raytheon.viz.gfe/help/GFETrainingSpatialEditorVisualizations.html deleted file mode 100644 index 56c868a683..0000000000 --- a/cave/com.raytheon.viz.gfe/help/GFETrainingSpatialEditorVisualizations.html +++ /dev/null @@ -1,49 +0,0 @@ - -GFESuite Documentation - Spatial Editor Visualizations -<body> - -<h1 align=center><a name="Visualizations"></a>Spatial Editor Visualizations</h1> -<hr width="100%"> -<p>The following show examples of each of the available visualizations; -the names of the visualization are those that appear in the <a - href="SpatialEditorDialogs.html#DisplayAttributesDialog">Display -Attributes Dialog</a> as well as the name in the configurable item <a - href="gfeConfig_WE.html#WeatherElementVisualTypes">we_spatialGraphicType -and we_spatialImageType</a>: -<br><br> -<table nosave="" cols="2" width="100%"> - <tbody> - <tr nosave=""> - <td nosave=""><img nosave="" src="images/VisualSEImage.jpg" - height="389" width="431"></td> - <td nosave="">Image</td> - </tr> - <tr> - <td><img nosave="" src="images/VisualMap.jpg" height="404" - width="423"></td> - <td>Map</td> - </tr> - <tr> - <td><img nosave="" src="images/VisualSEContour.jpg" height="394" - width="465"></td> - <td>Contour</td> - </tr> - <tr> - <td><img nosave="" src="images/VisualSEWindBarb.jpg" height="369" - width="451"></td> - <td>WindBarb</td> - </tr> - <tr> - <td><img nosave="" src="images/VisualSEWindArrow.jpg" height="361" - width="413"></td> - <td>WindArrow</td> - </tr> - <tr> - <td><img nosave="" src="images/VisualSEBoundedArea.jpg" - height="400" width="431"></td> - <td>BoundedArea</td> - </tr> - </tbody> -</table> -</body> -</html> \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/GFETrainingTemporalEditor.html b/cave/com.raytheon.viz.gfe/help/GFETrainingTemporalEditor.html deleted file mode 100644 index da1418b18a..0000000000 --- a/cave/com.raytheon.viz.gfe/help/GFETrainingTemporalEditor.html +++ /dev/null @@ -1,40 +0,0 @@ -<!doctype html public "-//w3c//dtd html 4.0 transitional//en"> -<html> -<head> - <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> - <meta name="GENERATOR" content="Mozilla/4.79 [en] (X11; U; Linux 2.4.9-34smp i686) [Netscape]"> - <title>GFE Training - Temporal Editor - - - -

    -

    -Temporal Editor Training Guide

    - -
    February 14, 2012
    - -

    -Temporal Editor

    - -
    The Temporal Editor is another editor on the Graphical -Forecast Editor (GFE). It presents data as a time-series and provides viewing -and editing capabilities. Since time series presentations are typically -based on a point, and the GFE uses grids, there must be a mapping between -the grids and the time-series. The selected area on the spatial editor -is sampled and then presented as a time-series. -
    -

    Temporal Editor Appearance -

    Temporal Editor Tools - -

    Editing Data Temporally - -

    Editing -Temporal Data in Relative Mode -

    Temporal Editor Visualizations - - - - - - - diff --git a/cave/com.raytheon.viz.gfe/help/GFETrainingTemporalEditorAppearance.html b/cave/com.raytheon.viz.gfe/help/GFETrainingTemporalEditorAppearance.html deleted file mode 100644 index 802ba686bf..0000000000 --- a/cave/com.raytheon.viz.gfe/help/GFETrainingTemporalEditorAppearance.html +++ /dev/null @@ -1,136 +0,0 @@ - -GFESuite Documentation - Temporal Editor Appearance - -

    Temporal Editor Appearance

    -
    -


    Up to this point you have been using tools in the Grid Manager and -Spatial Editor to edit data spatially. There is, however, a different type -of editor in the GFE, called the Temporal Editor, that edits data temporally. -In the editor, the gridded data is presented data time-series format. This -time-series represents the average value over an area that you define (the -current edit area) as a function of time. An example of the Temporal Editor -display can be found below.

    - -
    -
    - -


    The table below briefly describes the components of the Temporal -Editor. -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    Object
    -
    -
    Purpose
    -
    -
    Time Scale
    -
    -
    Displays the time in GMT
    -
    -
    Scale
    -
    -
    Displays the data scale for that Temporal Pane
    -
    -
    Selected TimeRange
    -
    -
    Displays the currently selected TimeRange
    -
    -
    Temporal Data Selector
    -
    -
    Controls the visibility of the corresponding weather -element
    -
    -
    TimeSeries Display
    -
    -
    A plot of the time series for that weather element -over the selected area
    -
    -
    Image Toggle
    -
    -
    Toggles the display from image to graphic
    -
    -
    Temporal Pane Sizer
    -
    -
    Changes the vertical size of individual temporal -panes.
    -
    - -

    To get to the Temporal Editor, select the button in the button bar that -looks like the picture at the right. Toggle Grid Manager/Temporal Editor -

    When you select this button the Grid Manager will disappear and the -Temporal Editor will replace it. To get back to the Grid Manager, just -press the same button again. Note that the button will change in appearance -each time it is selected. If you see no data displays in the Temporal Editor, -use the Select Points tool to define an edit area on the Spatial Editor. -The edit area that you select in the Spatial Editor is sampled and -averaged to produce the time series display. -

    The weather elements displayed in the Temporal Editor depend upon the -state of weather elements in the Grid Manager, and the Temporal -Editor Weather Element Mode. -

    The different type of visualizations are shown here. -Several of the visualizations, such as the TimeBar, -show the average value as determined from sampling the grid data over the -current edit area. For WEATHER and DISCRETE type of weather -elements, the TEColorBar visualization will show -the various ratios of different weather and discrete values in the sampling -area, as shown below: -

    -

    Some of the visualizations, such as the RangeBar as shown below, will -show you data distribution information across the edit area.  The -user can control the statistics chosen to be displayed, from absolute maximum/minimum, -to moderated values, and to standard deviation values. -

    -

    The TE Statistics -Dialog, available from the GFE->Viewing Preferences->Temporal Editor -Statistics Mode menu, controls the type of statistics that are presented: -

    -

    - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/GFETrainingTemporalEditorEditingDataTemporally.html b/cave/com.raytheon.viz.gfe/help/GFETrainingTemporalEditorEditingDataTemporally.html deleted file mode 100644 index 94d0245d7c..0000000000 --- a/cave/com.raytheon.viz.gfe/help/GFETrainingTemporalEditorEditingDataTemporally.html +++ /dev/null @@ -1,296 +0,0 @@ - -GFESuite Documentation - Editing Data Temporally - -

    Editing Data Temporally

    -
    Editing Scalar Data Temporally -
    Editing Vector Data Temporally -
    Editing Weather Data Temporally -
    Editing Discrete Data Temporally -
    - -

    -Editing Scalar Data Temporally

    - -
      -
    • -Purpose: Modify a scalar grid values using the temporal editor
    • -
    - -
    Before you begin: Set up your GFE so that the spatial -and temporal editors are visible. Load T (temperature) via the Weather -Element->Weather Element Browser... dialog.
    - -
    -
      -
    1. -Make or find a temperature grid and display it as an image in the spatial -editor.
    2. - -
    3. -Clear the edit area by clicking MB1 on the Clear button.
    4. - -
    5. -Use the Select Points tool to define an edit area the size of a few counties.
    6. - -
    7. -Find the T (temperature) weather element in the temporal editor. Vertically -stretch the size of the temporal editor pane so that there's plenty of -room to see the time series display.
    8. - -
    9. -In the temporal scale, located to the left of the time series display, -click MB2 to zoom in until the minimum and maximum values are about 20 -degrees F apart.
    10. - -
    11. -Find the data point in the time series that represents the grid displayed -in the spatial editor. This point is identified by the dotted yellow line.
    12. - -
    13. -Click MB1 about 10 degrees F above the data point. Note the change in the -spatial editor display. All the points you identified in the spatial editor -have been assigned the value you selected in the temporal editor.  -This is called the "absolute" mode for temporal editing.
    14. - -
    15. -Initialize about 12 hours worth of temperature data from you favorite model. -Use the interpolation facility (Grids->Interpolate) to fill in the gaps -and get a smooth time-series curve.
    16. - -
    17. -Back in the temporal editor pane, move the cursor to somewhere near left -side of the time-series display. Move the cursor over one of the horizontal -lines that display the temporal values and press and hold MB1 and slowly -drag horizontally to define a new temperature curve. As you move the cursor -to the next data point, it should snap to your cursor position. Each time -this happens, you are modifying data in a different grid. Note that you -MUST start the edit operation over one of the displayed values. Starting -the operation in a gap will not modify any data.
    18. - -
    19. -Release MB1.
    20. - -
    21. -Step through your newly-modified grids using the Grid Manager or the Step -Forward / Step Backwards buttons -to see that you modified a series of grids with one edit operation.
    22. -
    -
    - -
    Repeat this exercise until you are comfortable using -the Adjust Scalar temporal tool. This and all the temporal tools are capable -of modifying a large quantity of data with only a few edit operations. -Used properly, these tools can save you lots of time.
    - -

    -Editing Vector Data Temporally

    - -
      -
    • -Purpose: Modify a vector grid values using the temporal editor
    • -
    - -
    Before you begin: Set up your GFE so that the spatial -and temporal editors are visible. Load Wind via the Weather Element->Weather -Element Browser... dialog. Make sure that the GFE->Editing Preferences->Temporal -Edit Mode: Relative is deselected..
    - -
    -
      -
    1. -Make or find a Wind grid and display it as an image in the spatial editor.
    2. - -
    3. -Set the Vector edit mode located main menu bar GFE->Editing Preferences->Vector -Edit Mode->Both to edit both magnitude and direction.
    4. - -
    5. -Use the Select Points tool to define an edit area the size of a few counties.
    6. - -
    7. -Find the Wind weather element in the temporal editor. Vertically stretch -the size of the temporal editor pane so that there's plenty of room to -see the time series display.
    8. - -
    9. -In the temporal scale, located to the left of the time series display, -click MB2 to zoom in until the minimum and maximum values are about 20 -knots F apart. Clicking MB1 zooms out. Dragging MB1 pans the scale.
    10. - -
    11. -Find the data point in the time series that represents the grid displayed -in the spatial editor. This point is identified by the dotted yellow line.
    12. - -
    13. -Click MB1 about 10 knots above the data point. Note the change in the spatial -editor display. All the points you identified in the spatial editor have -been assigned the value you selected in the temporal editor.
    14. - -
    15. -Release MB1.
    16. - -
    17. -Press and hold MB1 and move the cursor up or down to adjust the vector -data point again. Note how the wind barb updates as you adjust the magnitude.
    18. - -
    19. -Release MB1.
    20. -
    -
    - -
    If you're editing wind magnitude only, the vector adjust -tool works just like the scalar adjust tool. It's when you edit the direction -that things get interesting.
    - -
      -
    1. -Press and hold down the Shift key on your keyboard.
    2. - -
    3. -Move the cursor over any wind data point, press and hold MB1 and adjust. -Note that the wind direction is changing while the magnitude remains constant. -The wind direction shifts from North clockwise and back to North as you -move from the lower extreme of the temporal pane to the upper extreme of -the temporal pane.
    4. - -
    5. -Release MB1.
    6. -
    - -
    This exercise demonstrates that with the Shift button -up, the temporal adjust vector tool changes the magnitude. With the Shift -button down, the tool changes the wind direction.
    - -

    -Editing Weather Data Temporally

    - -
      -
    • -Purpose: Modify a weather grid values using the temporal editor
    • -
    - -
    Before you begin: Set up your GFE so that the spatial -and temporal editors are visible. Load Wx via the Weather Element->Weather -Element Browser... dialog. Make sure that the TE Edit Mode: Relative button -is still de-selected.
    - -
    -
      -
    1. -Make or find a Wx grid and display it as an image in the spatial editor.
    2. - -
    3. -Use the Select Points tool to define an edit area the size of a few counties.
    4. - -
    5. -Find the Wx weather element in the temporal editor. Vertically stretch -the size of the temporal editor pane so that there's plenty of room to -see the time series display.
    6. - -
    7. -In the Spatial Editor legend, select a pickup value by clicking MB2. You -may need to invoke the set -value dialog to add additional weather types.
    8. - -
    9. -Find the data point in the time series that represents the grid displayed -in the spatial editor. This point is identified by the dotted yellow line.
    10. - -
    11. -Click MB1 on this data point in the Wx pane of the temporal editor. You -should see the temporal editor paint the same color/pattern as you selected -in the spatial editor legend. The spatial editor will show you that the -area that you selected in Step 2 has been set to this new value. Even if -there were multiple weather types displayed previously, when the MB1 action -is executed, all grid points in the edit area will be set to the new value.
    12. -
    -There are several other ways to change the data in the temporal editor -for Wx. A MB3 popup menu over a data point in the time series will -bring up a menu containing several items. The items that will edit -the data are Set..., Set to Recent Value..., and Set to Common Value.... -The Set... brings up the Set -Weather Dialog. The Set to Recent Value brings up a cascade menu -of recently set pickup values for weather, and the Set to Common Value... -brings up a cascade menu of commonly set pickup values. Unlike the -color -bar on the spatial editor, these menu entries set not only the pickup -value, but also modify the data. -

    The set of common weather values are site-configurable through the gfe -configuration file's common -weather values entry. -

    - -
    The temporal Set Value tool does not support drag operations -as with the scalar and vector tools. Only MB1 clicks, or selection of a -common value, recent value, or using the Set... will modify data in the -Wx pane. -

    MB2 click on a weather value in the temporal editor display can also -be used to set the pick-up value. -
    -

    -Editing Discrete Data Temporally

    - -
      -
    • -Purpose: Modify a discrete grid values using the temporal editor
    • -
    - -
    Before you begin: Set up your GFE so that the spatial -and temporal editors are visible. Load Wx via the Weather Element->Weather -Element Browser... dialog. Make sure that the TE Edit Mode: Relative button -is still de-selected.
    - -
    -
      -
    1. -Make or find a DISCRETE grid, such as Headlines, and display it as -an image in the spatial editor.
    2. - -
    3. -Use the Select Points tool to define an edit area the size of a few counties.
    4. - -
    5. -Find the DISCRETE weather element in the temporal editor. Vertically stretch -the size of the temporal editor pane so that there's plenty of room to -see the time series display.
    6. - -
    7. -In the Spatial Editor legend, select a pickup value by clicking MB2. You -may need to invoke the set -value dialog to add additional discrete types for the weather element -you have chosen.
    8. - -
    9. -Find the data point in the time series that represents the grid displayed -in the spatial editor. This point is identified by the dotted yellow line.
    10. - -
    11. -Click MB1 on this data point in the Discrete pane of the temporal editor. -You should see the temporal editor paint the same color/pattern as you -selected in the spatial editor legend. The spatial editor will show you -that the area that you selected in Step 2 has been set to this new value.
    12. -
    -There are several other ways to change the data in the temporal editor -for discrete weather elements. A MB3 popup menu over a data point -in the time series will bring up a menu containing several items. -The items that will edit the data are Set..., Set to Recent Value..., and -Set to Common Value.... The Set... brings up the Set -Discrete Dialog. The Set to Recent Value brings up a cascade -menu of recently set pickup values for weather, and the Set to Common Value... -brings up a cascade menu of commonly set pickup values. Unlike the -color -bar on the spatial editor, these menu entries set not only the pickup -value, but also modify the data. -

    The set of common discrete values are site-configurable through the -gfe configuration file's common -discrete values entry. -
     

    - -
    The temporal Set Value tool does not support drag operations -as with the scalar and vector tools. Only MB1 clicks, or selection of a -common value, recent value, or using the Set... will modify data in the -pane containing the Discrete weather element. -

    MB2 click on a discrete value in the temporal editor display can also -be used to set the pick-up value.

    - - diff --git a/cave/com.raytheon.viz.gfe/help/GFETrainingTemporalEditorEditingTemporalDataInRelativeMode.html b/cave/com.raytheon.viz.gfe/help/GFETrainingTemporalEditorEditingTemporalDataInRelativeMode.html deleted file mode 100644 index 6e77e57260..0000000000 --- a/cave/com.raytheon.viz.gfe/help/GFETrainingTemporalEditorEditingTemporalDataInRelativeMode.html +++ /dev/null @@ -1,64 +0,0 @@ - -GFESuite Documentation - Editing Temporal Data in Relative Mode - -

    Editing Temporal Data in Relative Mode

    -
    - -
      -
    • -Purpose: Modify scalar grid values in Relative Edit mode
    • -
    - -
    The previous temporal editor exercises demonstrated how -TE Absolute mode works. Every time you make a change to the temporal value, -that value is assigned to the entire area you selected in the spatial editor. -TE Relative mode works differently in that the relative change is applied -to the selected area. For example, if you made a +5 degree change to your -temperature time-series, 5 degrees is added to every point in the selected -area. This preserves the relative gradients in the area which is sometimes -very desirable.
    - -
    Before you begin: Set up your GFE so that the spatial -and temporal editors are visible. Load T (temperature) via the Weather -Element->Weather Element Browser... dialog if T is not loaded already.
    - -
    From the main menu, check to make sure that GFE->Editing -Preferences->Temporal Editor Mode: Relative is on.
    - -
      -
    1. -Make, or find a temperature grid and display it as an image in the spatial -editor.
    2. - -
    3. -Use the Select Points tool to define an edit area the size of a few counties. -Try to select an area where there is a temperature gradient.
    4. - -
    5. -Find the T (temperature) weather element in the temporal editor. Vertically -stretch the size of the temporal editor pane so that there's plenty of -room to see the time series display.
    6. - -
    7. -In the temporal scale, located to the left of the time series display, -click MB2 to zoom in until the minimum and maximum values are about 20 -degrees F apart.
    8. - -
    9. -Find the data point in the time series that represents the grid displayed -in the spatial editor. This point is identified by the dotted yellow line.
    10. - -
    11. -Adjust this data point about 5 to 10 degrees higher. Note the change in -the spatial editor display. The 5-10 degree change you applied to the time-series -point has been applied to all of the points inside the selected area. The -gradient that was present before the temporal edit should still exist.
    12. - -
    13. -Use the MB1 drag operation in the temporal editor to modify several grids -with the same operation. Step through these edited grids to verify that -the data were modified inside the selected area.
    14. -
    - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/GFETrainingTemporalEditorTools.html b/cave/com.raytheon.viz.gfe/help/GFETrainingTemporalEditorTools.html deleted file mode 100644 index 00d3f6169a..0000000000 --- a/cave/com.raytheon.viz.gfe/help/GFETrainingTemporalEditorTools.html +++ /dev/null @@ -1,197 +0,0 @@ - -GFESuite Documentation - Temporal Editor Tools - -

    Temporal Editor Tools

    -
    Temporal Editor Scale Tools -
    - -
    Each pane of the temporal editor contains one tool that -depends on the type of the data displayed. For example, temperature is -a scalar, so the temporal Adjust Scalar tool is the only tool available -when temperature is displayed. The Adjust Vector tool edits wind data and -the temporal Set Value tool edits weather and obstructions. The table below -lists each of the tools, mouse actions, and functions. Note that you do -not select a tool icon when using the Temporal Editor as you did with the -Spatial Editor since the tool is implied by the specific data type displayed -in the data pane. -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    Data Type
    -
    -
    Action
    -
    -
    Function
    -
    -
    Scalar
    -
    -
    MB1 Click & MB1 Drag
    -
    -
    Adjust Gridpoint Values
    -
    -
    Vector
    -
    -
    MB1 Click & Drag
    -
    -
    Adjust Vector Magnitude
    -
    -
    Vector
    -
    -
    Shift MB1 Click & Drag
    -
    -
    Adjust Vector Direction
    -
    -
    Weather
    -
    -
    MB1 Click
    -
    -
    Set Wx Value to current pickup value
    -
    -
    Discrete
    -
    -
    MB1 Click
    -
    Set Wx Value to current pickup value
    - -

    Button 3 popups are available when using the Temporal Editor tools. -Refer to the Button 3 Popup -Reference Guide for more details. -

    - -

    -Temporal Editor Scale Tools

    -In addition to the tools that modify data, there's a zoom tool associated -with the vertical scale located just to the left of the time series display. -The next table shows how you can manipulate the vertical scale with the -mouse. An exercise follows that will help you familiarize yourself -with the manipulating the temporal editor scale. Note that the scale -tools only apply to Scalar and Vector data types. -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    Action
    -
    -
    Function
    -
    -
    MB1 click
    -
    -
    Zoom out
    -
    -
    MB2 click
    -
    -
    Zoom in
    -
    -
    MB1 drag
    -
    -
    Pan (slide scale up or down)
    -
    - -
      -
    • -Purpose: To manipulate the Temporal Editor Scale
    • -
    - -
    -
      -
    1. -Select an edit area in the Spatial Editor so that one of the Temporal Editor -pane contains some data.
    2. - -
    3. -Move the cursor to the cursor to the far left of the Temporal Editor pane -and MB2 click. Note that the scale zooms in.
    4. - -
    5. -Now MB1 click. Note that the scale zooms out.
    6. - -
    7. -Now MB2 click two or three times. Then MB1 press and drag up and -down. Note that the scale and the data pan vertically to match your -mouse movements.
    8. -
    - -


    The Temporal Editor scale pane offers options via the button 3 popup -menu. These options control the scaling to fit to data and full view. The -full set of Temporal Editor popups are described in the Button -3 Popup Reference Guide. -
      -

    Now that you know how to manipulate the Temporal Editor pane, it's time -to edit some data temporally. -

    For the next set of exercises, it is best to set up your GFE so that -both the spatial and temporal editors are visible simultaneously. For all -of the exercises, you'll be asked to define an edit area then edit the -data using the temporal editor. Using the temporal editor is similar to -using the grid point tools. First you define the area over which you want -to edit using edit areas, then you perform the operation. - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/GFETrainingTemporalEditorVisualizations.html b/cave/com.raytheon.viz.gfe/help/GFETrainingTemporalEditorVisualizations.html deleted file mode 100644 index 6920b76096..0000000000 --- a/cave/com.raytheon.viz.gfe/help/GFETrainingTemporalEditorVisualizations.html +++ /dev/null @@ -1,50 +0,0 @@ - -GFESuite Documentation - Temporal Editor Visualizations - -

    Temporal Editor Visualizations

    -
    -The following show examples of each of the available visualizations; the -names of the visualization are those that appear in the Display -Attributes Dialog as well as the name in the configurable item we_temporalGraphicType -and we_temporalImageType: -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    TEColorBar
    TEColorRangeBar
    RangeBar
    TimeBar
    WindArrow
    WindBarb
    -
    - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/GFE_SplashScreens.html b/cave/com.raytheon.viz.gfe/help/GFE_SplashScreens.html deleted file mode 100644 index 440399d537..0000000000 --- a/cave/com.raytheon.viz.gfe/help/GFE_SplashScreens.html +++ /dev/null @@ -1,475 +0,0 @@ - - - - - SplashScreen - - -

    GFESuite Splash Screens

    -The GFESuite Splash Screens are a result of a nation-wide photo contest -in which weather service forecasters submitted entries and voted for -their favorites. The Winners (2 from each region -- except SR -where there was a tie) appear randomly 65% of the time.
    -
    -A group of Extra photos also appear 30% of the time weighted by the -votes they received.
    -
    -There were so many excellent photos, that the developers chose another -set to appear randomly, the remaining 5% of the time.
    -
    -Below you will find background information about each photo which -further enhances their beauty.
    -
    -ENJOY!!
    -

    *****************

    -

    Winners
    -

    -
    -Entry AR1: Todd Foisy --- Anchorage
    -Location: Chugach -Mountains near Girdwood, Alaska, Dec. 06. Girdwood is a quiet ski town -45 minutes southeast of Anchorage. I live in Girdwood and commute to -Anchorage. The Chugach Mountains here, including the ski area, average -around 700" of snow annually.
    -
    -
    -
    -Entry AR2: Todd Foisy --- Anchorage
    -Location: Northern -Prince William Sound and the Chugach Mountains, Feb. 07. This is where -all the cruise boats come in the summer to see glaciers calving.
    -


    -
    -

    -Entry CR23: Mike Umscheid, NWS -Dodge City -
    -Location: Taken in June 2006 -on a storm chase in northeastern Colorado. -This high-based supercell revealed some amazing colors right at sunset, turning the whole -sky and foreground into an amazing -assortment of gold, orange, and violet hues. Near Yuma, -Colorado.
    -
    -
    -
    -Entry
    CR7: Eric A. -Helgeson -Rapid City SD
    -Location:
    Clear night with full moon over Badlands National Park, SD
    -
    -
    -
    -
    -
    Entry ER6: Rob -Radzanowski, WFO-State College -CTP
    -Location: A great double rainbow over Mount Nittany from near -WFO-State College on Sept 29, 2006.
    -
    -
    -
    -Entry ER1: Conor Lahiff,WFO -Burlington, VT
    -Location: Mount -Mansfield in the spring, the highest peak in Vermont -
    -
    -


    -
    -

    -Entry ER5: Rob -Radzanowski, WFO-State College -CTP
    -Location: Great mamatus clouds over Pittsburgh, PA in June 1998. -
    -
    -
    -
    -
    -Entry
    PR1: Andy Nash WFO -Burlington -- taken when at WFO Honolulu
    -Location: Kilauea Lava at Night:  Taken  April 2003 on -the Big Island. The spots in the picture are rain drops. What you can't -hear is the amazing sizzling sound when the drops hit the hot lava.
    -
    -
    -
    -Entry
    PR2: Andy Nash WFO -Burlington -- taken when at WFO Honolulu
    -Location: Hana Coast of Maui: Taken January 2006. -
    -
    -
    -
    -Entry SR2: Julie States -SJT San Angelo TX
    -Location: This photo of a LP Supercell was taken by myself from -the National Weather Service office in San Angelo, Texas  late -afternoon/early evening  on May 01, 2006, where I am a -forecaster.   This storm was located  over Coleman -county, Texas.  In general the severe weather season in West -Central Texas is from the end of April thru the middle of June. This -storm was one of the first in what was a very busy severe weather week -for West Central Texas.
    -
    -

    -

    -Entry
    SR6: -Ted Ryan WFO Fort Worth (FWD) -
    -Location: Lightning -from developing storm along an old outflow boundary taken June 6, 2005, -near Haskell, TX.
    -
    -

    -
    -
    -Entry WR5: Mike -Staudenmaier -- WFO Flagstaff
    -Location: Cathedral -Rock in Sedona AZ -
    -
    -
    -
    -
    -Entry WR8: Wade Earle
    - -Location: Taken from Cabbage Hill along Interstate 84 just -southeast of Pendleton, Oregon. A generally  dry thunderstorm was -making its way across portions of the Columbia Basin.
    -
    -
    -
    -
    Entry PR3: Paul Stanko, -WFO Guam
    - -Location:  Surf along the south side of Orote Point, -Guam in Nov 2006 -while receiving the fetch from Typhoon Dale.   Estimated surf -height to be between 60-80 ft as the hill to the right (as judged from -a topo map) was a little over 100ft at that point.
    -
    -
    -

    -
    -

    -

    -

    -

    -

    *****************

    -

    Extra Photos
    -

    -
    -
    -
    -Entry
    CR8: Eric A. -Helgeson -Rapid City SD
    -Location:
    Roughlock Falls in Spearfish Canyon, SD after several -inches of rain in the northern Black Hills -
    -
    -
    -
    -Entry CR10: Brett -McDonald   RIW Riverton Wyoming
    -Location:
    Teton Mountains in background with Bison
    -
    -
    -
    -Entry CR21: Joseph Nield WFO -IND -
    -Location: Two tornadoes in -Thayer County, Nebraska on May 24, 2004.
    -
    -
    -Entry CR22: Mike Umscheid, NWS -Dodge City -
    -Location: Taken in September -2006 in Grand Teton National Park, I was out photographing in the -park early in the morning in mid-September and as the fog was beginning -to lift, a brilliant fogbow made a -presence, and I just so happened to have a view of Grand Teton -as a backdrop.
    -
    -
    -
    -Entry ER3: Tom Mazza -RLX Charleston WV
    -Location: Lake Side Park
    -
    -
    -

    -Entry ER8: Anita -Silverman -Blacksburg VA
    -Location:
    Mabry Mill on the Blue Ridge Parkway in Virginia, taken -by me in January 2005. -
    -
    -
    -
    -Entry ER10: John -Rozbicki WFO BUF -
    -Location:
    Fillmore Glen State Park, Moravia, NY
    -

    -

    -


    -
    -

    -Entry SR3: Walter L. -Snell  -Senior Forecaster  -WFO San Juan, Puerto Rico -
    -Location: Puerto Rico in the Greater Antilles south of the -Tropic of Cancer.  From the Highway 957 bridge over the Canovanas -River upstream from the river gage (not visible). It was taken in June -of 2007 when the Flamboyan trees bloom with their bright orange -petals.  This is a low water and fair weather day.  When this -river floods the bridge is covered and the park to the left may be -inundated with over a foot of water.
    - -

    -
    -
    -
    Entry SR5: -Ted Ryan WFO Fort Worth -(FWD) -
    -Location: Sunset over the Coastal Plains taken in Corpus Christi -TX Dec 28, 2000. -
    -

    -

    -
    -
    -Entry SR10: Bert Gordon -SJU Puerto Rico
    -Location: Flamenco Beach on the small island of Culebra, -PR
    -
    -
    -
    -Entry SR13: Ed -Tirado  SJU Puerto Rico
    -Location: Mouth of Rio Guayanes in Yabucoa. View from mouth of -river on southeast coast -of mainland Puerto Rico.
    -
    -
    -
    -Entry WR2: Steve -Anderson --- Monterey
    -Location: Rural -road near Monterey, California (January, 2007)
    -
    -
    -Entry WR3: Suzanne -Anderson --- Monterey
    -Location: near -Death Valley, California (October, 2005)
    -
    -
    -
    -Entry WR10: Roger S. -Cloutier, Senior Forecaster at NWS -WFO Pendleton, OR.
    - -Location: Taken in front of the NWS PDT office as a -thunderstorm cell developed nearby. The photo was taken -at 6:18 PM PST, March 10, 2006.  Since it was still winter, this -CB -cloud did not produce that much lightning, however it did produce an -interesting mushroom cloud shape with a rain/snow mix precipitation -shaft under the cloud base.  This image shows NWS WFO PDT's -typical atmospheric -instability that develops in the late winter and early spring when low -pressure systems aloft with a cold pool aloft moves into the region, -however, it is unusual for a cloud to be this well defined so early in -the convective season in this climate. The building in the background -is the Army National Guard building just down the street from the WFO -office, and the airport runway is behind it. This cloud did become a -concern for local aviation including commercial aircraft landing or -taking off.
    -
    -
    -
    -Entry
    WR12: Shawn Weagle HAS Forecaster NOAA/NWS Northwest River -Forecast Center Portland, -Oregon -
    -Location:
    Bryce Canyon, Utah during a monsoon thunderstorm in July 2004.
    -
    -

    *****************

    -

    Developer's Choice
    -

    -
    -
    -
    -Entry
    CR4: Sam Beckman
    -Location: On Highway -28 south of Lander near South Pass, looking back at Red Canyon in -Central Wyoming.
    -
    -


    -

    -
    -Entry
    CR5: Brenda Brock, -NWS Des Moines
    -Location: Radar in the middle  ... taken in -January 2007
    -
    -
    -
    -
    -Entry CR14: Don -Rolfson, Marquette, MI -MQT
    -Location:
    Presque Isle Park. Marquette, MI. February 2006.
    -
    -
    -
    -Entry CR16: Mary-Beth -Schreck WFO Wichita, KS
    -Location:
    La Crosse, WI during a valley fog event in September, -2006.
    -
    -
    -Entry CR17: Mary-Beth -Schreck WFO Wichita, KS
    -Location:
    Amish country near Cashton, WI, southeast of La Crosse. -
    -

    -
    -Entry CR19: Kevin E. Smith -Meteorologist - NWS/WFO PAH (Paducah, Kentucky)
    -Location: Taken on 10/29/05 at -853 am CDT.  The picture shows river fog on the Kentucky side of -the Ohio River (facing Paducah, KY) next to the Interstate 24 River -bridge connecting southern Illinois to western KY.
    -
    -
    -
    -Entry ER7: Mark Bloomer -RLX -Charleston WV
    -Location: Caribou, ME snow storm
    -
    -

    -Entry SR1: Corey Pieper --- El Paso
    -Location: East Side of the Franklin mountains (which pass into -El Paso proper). This photo was taken on Trans Mountain Road. Photo is -taken pointing east, towards the NE side of town.
    -Date: Around an inch of snow fell across El Paso, including the -Franklin Mountains along Trans Mountain Road on January 2, 2007
    -
    -
    -
    -Entry
    SR7: -Bobby Boyd -Meteorologist -National Weather Service Nashville, TN -OHX
    -Location: Wolf Creek Dam in Kentucky.
    -
    -
    -
    -Entry SR12: Althea -Austin-Smith  SJU Puerto Rico
    -Location: Rio Grande de Anasco, Puerto Rico.  Tributary -feeding into the Rio Grande de Anasco River
    -
    -
    -
    -
    -Entry WR7: Duane -Dykema -- Monterey
    - -Location: Along highway 50 in western Utah Title: Smoke From a -Wildfire Colors the Evening Landscape Near the -Utah-Nevada Border
    -
    -
    -
    -
    -Entry WR14: Eric Kurth -NWS Sacramento CA
    - -Location: Lenticular clouds above the Sierra Nevada -Mountains at Desolation -Wildnerness in California, with a partially frozen Loon Lake in the -foreground, taken on March 31, 2007.
    -
    -

    -
    -
    -Entry
    WR17: Don Moore -Billings Montana BYZ
    -Location:
    -Billings, MT 16 December 2005 snowflake.  Atmospheric conditions -were -perfect for growing beautiful, low density, snowflakes, which grew in -good ascent,  instability, and temperatures between -12C and -18C. -  -This is actually 3 separate pictures merged into one.  Taken with -a digital camera and weak microscope.  -

    - -
    -
    -
    Entry WR19: Jerome -Saucier, HMT -WFO Great Falls Montana -
    -Location:
    Taken at 4:05 AM MDT north east of WFO Great Falls -Montana. -Noctilucent Clouds -Observed July 13/14, 2006 -

    - -

    -
    -Entry
    WR21: -Carolyn Willis, HMT/CPM Billings, Montana
    -Location:
    Near Mystic Lake, Montana
    -
    -
    -
    -The GSD gang and Flatirons
    -Location: Boulder, CO
    - - diff --git a/cave/com.raytheon.viz.gfe/help/GHGMonitor.html b/cave/com.raytheon.viz.gfe/help/GHGMonitor.html deleted file mode 100644 index 16d1e35afc..0000000000 --- a/cave/com.raytheon.viz.gfe/help/GHGMonitor.html +++ /dev/null @@ -1,1420 +0,0 @@ - - - - - GHG Monitor User's Guide - - -

    GHG Monitor User's Guide

    -
    March 8, 2012
    -
    -
    -
    -The GHG Monitor is used to monitor hazards in effect. It consists of -a spreadsheet showing various information about each hazard, a map -showing the spatial location of each hazard, a text displaying showing -the contents of some of the products, and an alert system to inform -forecasters when products are about to expire. -The user can define various display filters to just show the -information desired, and can save configurations for later use. -The GHG Monitor may be launched either from the command line directly, -or from the Products menu on the GFE.
    -
    -The GHG Monitor is based off the VTEC Active Table, -which is created by -the VTEC Decoder. The active table is used by the GFE formatters to -determine changes in state of VTEC actions and events. Currently -the GHG Monitor can only monitor products that are VTEC-enabled.
    -
    -The GHG Monitor is the basis for the GHG Administrative Editor, which -allows an administrator to view and edit the VTEC active table.
    -
    -

    -
    -
    -

    Table of Contents

    -
    -Command Line and Starting GHGMonitor
    -Components
    -How To Use
    -Main Menu
    -Spreadsheet
    -Map Display and Control
    -Text Display
    -Display Filter
    -Alert Charactistics
    -Appearance
    -Saving and Loading Configurations
    -
    -
    -

    Command Line and Starting GHGMonitor

    -GHGMonitor may be started through the GFE main menu Products -> GHG -Monitor entry, or directly from the command line. If started -through the GFE, then the GFE -startup mode will be sent through to the GHGMonitor, e.g., if the -GFE is started in PRACTICE mode, then the GHG Monitor will start in -PRACTICE mode.
    -
    -The command line for GHGMonitor is:
    -
    -ghgMonitor [-h hostname] [-p portNumber] [-u userName] [-t -activeTableName]
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Command Line OptionOptional?Meaning
    -h hostnameYESIdentifies the hostname upon which EDEX is -running. -During installation, this value is automatically set, but may be -overridden.
    -p portNumberYESIdentifies the RPC port number upon which EDEX is -running. -During installation, this value is automatically set, but may be -overridden.
    -u usernameYESSpecifies the user id to be used for the GFE session. -This affects -the availability of GHG monitor configuration data. See the base, -site, and user configuration guide for details. The -default, if not specified, is the Linux login account name.
    -
    -t activeTableName
    -
    YES
    -
    Identifies the name of the -active table to monitor. "" or "active" refers to the normal -active table. "PRACTICE" refers to the practice active table, -which is used while in GFE PRACTICE mode.
    -
    -

    -

    -
    -

    Components -

    -The GHG Monitor consists of a main menu bar, display selector, map and -text area, spreadsheet area, and status bar:
    -

    -
    -
    -

    Main Menu Bar

    -The Main Menu Bar contains common commands used to configure the GHG -Monitor. Most of the control of the GHG Monitor is -performed through the Main Menu Bar entries, with the exception of -spreadsheet and map "selections".
    -

    Display Selector

    -

    -The -Display Selector consists of two tabs which control a "Paned -Window".  The options are:
    -
    - - - - - - - - - - - - - - - -
    Tab
    -
    Meaning
    -
    Text
    -
    The Text tab selects the Text -Display.  The Text Display shows the captured text for the -selections made on the Map or Spreadsheet.
    -
    Map
    -
    The Map tab selects the Map -Display.  The Map Display shows the geographical layout for the -hazard.  Selections may also be made on the Map Display.
    -
    -
    -

    Map -and Text Area

    -The Map and Text Area can be toggled between the Map and Text using the -Display Selector.  The Map shows a geographic layout of the area -with a variety of map types available (e.g., FIPS, Marine, Fire -Weather, Public Zones).  Zones/Areas are highlighted on the Map -display to indicate the extent of a selected hazard.  The Map is -also used to select/query a zone/area for all of its associated hazards.
    -
    -The Text Area shows the captured text from a product.  Not all -products have captured text.  Captured text consists of the -overview section as well as the text within a segment.
    -
    -

    Spreadsheet Area

    -The Spreadsheet Area is the main monitor area in the GHG Monitor and -contains a sorted list of hazards.  The user has full control over -the columns that are displayed, as well as the display filter to -control the hazards to display.  Colors are used in the -Spreadsheet Area to denote alerts for upcoming product purge times, -selection of what hazard the Map display is showing, and selection of -what hazard the Map selection is showing, as well as Test products.
    -
    -

    Status Bar

    -The Status Bar consists of the status field, an indicator showing the -name of the current display filter. The status field works just like -the Status Bar in the GFE.
    -
    -

    Additional Features

    -The GHG Monitor may be resized.   In addition, the size of -the map/text display and spreadsheet can be changed using the Pane -Resizer, which is seen between the map/text and spreadsheet components -of the monitor.
    -
    -Since there may be a large amount of data in the spreadsheet and text -display, scroll bars are provided to scroll around in order to view the -entire spreadsheet. The map display may also be zoomed and -roamed to show additional detail.
    -
    -The current configuration may be "saved", and subsequent restarts of -the GHG Monitor will use the saved configuration.
    -
    -
    -

    How To Use

    -Once the GHG Monitor is started, it will read the VTEC active table and -based on its filtering setup, will display a set of -hazards. The user can determine the geographical extent of -any of these hazards simply be clicking on a cell in the -Spreadsheet. The Map will then identify the affected -zones. Selecting the Text display will show the captured -text for that hazard. The user may bring up the display filter -dialog to change the hazards that are displayed, and may use the -"Columns" pull-down menu to add or remove details about each -hazard. As the product purge time approaches, the GHG -Monitor alert system will alert the forecaster up to three times.  -The alerts consist of highlighting the rows of the spreadsheet based on -the alert level, as well as displaying a "banner" message. The -user may click on a zone in the Map display and all hazards that are -occurring in that zone will be highlighted in the spreadsheet.
    -
    -The GHG Monitor will automatically update as the hazard state changes -with the arrival of new products. During the update period, the -watch cursor will be displayed.
    -
    -All of the menus may be torn-away. The Display Filter Dialog is -non-modal and may be displayed continuously as changes are made. -The Alert Filter Dialog and other dialogs are modal and thus the user -must respond to the dialog prior to other operations.
    -
    -The initial state of the GHG Monitor is either the default -configuration, or the previously saved configuration. Users can -configure the GHG Monitor to their tastes, and then save the -configuration. Each time the GHG Monitor is started (for that -user), the saved configuration will be restored.
    -
    -
    -

    Main Menu

    -

    File

    -The File menu provides the ability to manage the configuration, as well -as exit the GHG Monitor.
    -   
    - - - - - - - - - - - - - - - - - - - -
    Save Configuration
    -
    The current configuration is -saved to EDEX. See the configuration -section for details on what is saved.
    -
    Load Configuration
    -
    The saved configuration is read -from EDEX. The changes are made immediately to the GHG -Monitor. See the configuration -section for details on what is retrieved.
    -
    Default Configuration
    -
    The default configuration -provided by Raytheon is loaded. The changes are made immediately to -the GHG Monitor. See the configuration -section for details on what is restored.
    Exit GHG Monitor
    -
    Exits the GHG Monitor.
    -
    -
    -

    Column

    -The Column menu provides the ability to show/hide columns depicting -different data fields.
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Menu Item
    -
    Description
    -
    Default -Displayed?
    -
    Action
    -
    Action code for the event, such -as "CON" for Continued.
    -
    YES
    -
    VTEC String
    -
    Displays the VTEC Strings(s) -from the product, such as -"/T.NEW.KBOU.BZ.W.0001.050107T0500Z-050107T2000Z/"
    -
    NO
    -
    ETN
    -
    Event Tracking Number, such as -"0001".
    -
    YES
    -
    Phen.Sig
    -
    Hazard, in the form of Phen.Sig, -such as WS.W for a Winter Storm Warning
    -
    YES
    -
    Hazard
    -
    Descriptive words for the -hazard, such as "Winter Storm Warning"
    -
    NO
    -
    Phen
    -
    VTEC Phenonema Code, such WS for -Winter Storm
    -
    NO
    -
    Sig
    -
    VTEC Significance Code, such a W -for Warning.
    -
    NO
    -
    Start
    -
    Event starting time.
    -
    YES
    -
    End
    -
    Event ending time.
    -
    YES
    -
    Purge
    -
    Product Segment Purge Time.
    -
    YES
    -
    Issue Time
    -
    Product Issuance Time
    -
    YES
    -
    Pil
    -
    Product category, a.k.a. pil, -such as WSW for Winter Weather Watches/Warnings
    -
    YES
    -
    Seg
    -
    Product Segment Number.  -Segments are sequentially number from 1 in the product.
    -
    NO
    -
    WFO
    -
    Originating WFO Identifier.
    -
    YES
    -
    GeoID
    -
    List of zones that are affected -by this hazard.
    -
    NO
    -

    -

    -

    -
    Default
    -
    Restores the Default set of -displayed columns.
    -
    n/a
    -
    -
    -NOTE: Some displayed "Pil"s may not match the actual product pil.  -This occurs for hazards that are issued with one PIL and -updated/cancelled using another PIL.  Examples are the Tornado -Warning (TO.W) which is issued in the TOR product and updated/cancelled -in the SVS product.  The monitor will show TOR for the updates and -cancels.  The VTECPartners VTEC_MAPPED_PILS entry defines this -relationship.
    -

    Filter

    -The Filter menu provides access to view and set the display filter.  The display filter -determines how the hazard records in the active table are consolidated -and filtered prior to their display.
    -
    - - - - - - - - - - - - - - - - - - - - - - - -
    Define Filter...
    -
    Brings up the GHG Display Filter -Dialog.  This dialog provides options for consolidating records, -and filtering out certain records based on criteria.
    -
    Default Filter
    -
    Resets the GHG Display Filter to -the default filter.
    -
    <Named Filters>
    -
    Sets the display filter to one -of the named filters.
    -
    Save Current Filter...
    -
    Brings up the GHG Save Display -Filter dialog, allowing the user to specify a name for the current -filter.  The filter will then be displayed in the list of -<Named Filters>.
    -
    Delete Named Filter...
    -
    Brings up the GHG Delete Display -Filter dialog, allowing the user to delete a previously named filter.
    -
    -
    -

    Alerts

    -The Alerts menu provides access to the Alert -characteristics.
    -
    - - - - - - - - - - - -
    Define Alerts...
    -
    Brings up the GHG Monitor Alert -Dialog, allowing the user to specify the characteristic for the three -alert types.
    -
    Default Filter
    -
    Resets the alert characteristics -to the default filter.
    -
    -
    -

    Map

    -The Map menu is used to change the map background to a particular one, -in order to select a zone for queries.  The menu is also used for -zooming the map display.
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Show FIPS
    -
    Changes the map background to -the FIPS.  The FIPS contains counties over land and marine zones -over water.
    -
    Show Public
    -
    Changes the map background to -the Public map, consisting of public forecast zones.
    -
    Show FireWx
    -
    Changes the map background to -the Fire Weather map, consisting only of fire weather zones.
    -
    Show Marine
    -
    Changes the map background to -the Marine map, consisting of the coastal marine zones and offshore -marine zones.
    -
    No Zoom
    -
    Unzooms the map to show the -entire domain.
    -
    x2
    -
    Zooms the map in to a factor of -2.  The center of the map remains the center of the map if -possible.
    -
    x4
    -
    Zooms the map in to a factor of -4.  The center of the map remains the center of the map if -possible.
    x6
    -
    Zooms the map in to a factor of -6.  The center of the map remains the center of the map if -possible.
    x8
    -
    Zooms the map in to a factor of -8.  The center of the map remains the center of the map if -possible.
    x12
    -
    Zooms the map in to a factor of -12.  The center of the map remains the center of the map if -possible.
    x16
    -
    Zooms the map in to a factor of -16.  The center of the map remains the center of the map if -possible.
    Show Labels
    -
    Toggles on/off the map -background labels.  The labels reflect the zone code.
    -
    -
    -

    Appearance

    -The general appearance of the GHG Monitor may be changed through this -menu.
    -
    - - - - - - - - - - - - - - - -
    Font...
    -
    Brings up the GHG Monitor Font -Choice Dialog, allowing the user to choose a font size in the -spreadsheet and text display from one of five options.
    -
    Colors...
    -
    Brings up the GHG Monitor Color -Choice Dialog, allowing the user to set the foreground/background color -in the spreadsheet for seven different aspects of the display.
    -
    Identify TEST Events
    -
    Toggles on/off the TEST product -behavior.   If toggled on, then the color of TEST products -will  appear differently than regular products.
    -
    -
    -

    -

    Spreadsheet

    -The GHG Monitor Spreadsheet is the heart of the monitor.  It -displays hazards derived from the VTEC active table.  The user can -choose to display various information about each hazard using the Column menu.   The user can choose to -filter out certain events through the Display -Filter Dialog.   The hazards are sorted by the column -highlighted, Purge in this example. Normally the color of the -spreadsheet appears as follows, when no alerts or user selections are -in effect:
    -
    -

    -

    -If the user clicks on a row in the spreadsheet, the map and text -displays will represent the geographical location and captured product -text for that hazard.   Here is an example of  the user -clicking on a hazard record in order to view the map and text -associated with the record; the spreadsheet record is highlighted in -blue/white:
    -
    -

    -
    -
    -Colors are also used to alert the forecaster that a product is about to -expire.  The "Alert1" color is used for the first alert.  The -default is blue text on a yellow background as shown.  The GHG -Monitor clearly shows the hazards and their related products that will -soon expire:
    -
    -

    -
    -
    -The "Alert2" color is used for the second level of alerts.  The -default is white text on a red background as shown:
    -
    -

    -

    -The final alert occurs when the product purge time has passed.  -The default color is white text on a magenta background as shown -below.  The "Expired" alert color is used on the record until -either the forecaster replaces the record with a new product, or the -event ending time passes:
    -
    -
    -
    -

    -
    -
    -
    -Since VTEC "Test" products do not represent real hazards, the VTEC -hazard records found in a Test product use the "Test" color, which -defaults to a dark gray box with white lettering as shown:
    -
    -

    -
    -
    -Multiple highlighting is possible on the spreadsheet.  In the -following example, all records are highlighted (yellow) with the -"Alert1" status.  The first record has alternating colors of -yellow and dark gray.  The dark gray indicates that the first -product is a Test product.  The second record shows three -highlighting types together: Alert1, Test, and user-selected.  In -the cases of multiple highlighting the columns are alternating colors --- the specific color in a column has no meaning, i.e., you must look -at all of the colors in a row to determine the record's complete state:
    -
    -

    -
    -
    -

    User Actions

    -The following user actions are supported on the spreadsheet:
    - - - - - - - - - - - -
    MB1 click on a column header
    -
    Sorts the data in the -spreadsheet by the data in that column.  Alternating clicks will -sort in ascending order, then decending order. The column header will -highlight to indicate that the spreadsheet is sorted by that -column.  There is no indicator, other than inspecting the data -itself, to indicate whether the spreadsheet is sorted in ascending or -decending order.
    -
    MB1 click on a cell in the -spreadsheet
    -
    Highlights the row with the -"Monitor Selection" color, and then indicates on the map the -geographical location of the hazard, and on the text display the -captured text of the issued product.  Not all hazards have -associated captured text.
    -
    -
    -Note that only one hazard record may be manually selected on the -spreadsheet.  Multiple records are not allowed due to -ambiguities.   There is an exception to this and that -involves selection of a zone on the map display.
    -
    -
    -
    -
    -
    -

    Map Display and Control

    -The Map Display is used to graphically depict the geographical extent -of a hazard. The map background type is automatically chosen -based on the set of zones that contain a hazard. The software -will automatically choose the FIPS, Public, Fire Weather, or Marine map -backgrounds. You can also manually choose a map background -from the Map menu; however, the only useful -purpose of manually chosing a map is to next select a zone to query its -hazards.
    -
    -The map is drawn using shapefile data available from EDEX. -Zones that are your responsibility are drawn with yellow outlines and -zones that belong to another WFO are drawn with black outlines.  -The background color of the zone is dark gray. If a user -selects a hazard on the Spreadsheet, the corresponding zones will be -highlighted using a blue fill color, as shown in the following image:
    -
    -

    -

    -The Map menu may be used to zoom in on the map -background and the scroll bars are used to scroll around the map. -Resizing the window larger will simply show more of the map until the -entire map is shown, then it enlarges the map. Resizing the -window smaller will show smaller and smaller sections of the map. -You can restore the "No Zoom" by using the Map -menu. The menu also provides a toggle to turn on/off the zone -labels. Examples of the zoomed map with and without labels is shown -below. Note the spreadsheet display shows the Expired alert for -the FA.A hazard, but the zones appearing in the map belong to the SN.Y -beginning at 02z 08-Jan-05:
    -
    -
    -
    -
      -
    -
    -
    The map labels are drawn in the exact -center of each zone.  This technique works well for rectangular -zones, but not good for irregularily shaped zones. Use caution when -using the zone labels for identification.   Decluttering is -applied to the zone labels, thus not all zone labels will necessarily -show up at a particular map size.
    -
    -The other purpose of the map is to query the hazards based on a -zone.  In the example below, the user clicked in the COZ045 -zone.  The software examined all of its hazard records and -highlighted those in the spreadsheet that contain the COZ045 -zone.  It then examined the records and highlighted all of the -zones in the map that are common to the selected records.  Thus in -the example below, the WS.A and SN.Y both affect COZ045.  They -also affect the other highlighted zones shown in the map too.  The -highlighted zones in the map are the logical "AND" of the events, thus -if event A covered 10 zones and event B covered 5 of the same zones and -5 other zones, clicking on one of those 5 zones would highlight all -common zones to the event A and event B hazard as well as highlight -event A and B in the spreadsheet.  Switching to the Text display -would show all of the captured text for all of the hazards that have -been identified and marked selected.
    -
    -Note the spreadsheet also contains an expired entry as shown in -magenta.  We can tell that the expired entry did not affect the -highlighted zones in the map since the magenta row is a solid row and -isn't interspersed with the cyan color.
    -
    -

    -
    -
    -

    User Actions

    -The following user actions are supported on the map display:
    - - - - - - - -
    MB1 click on a zone on the map.
    -
    Highlights all rows in the -spreadsheet that contain a hazard affecting the clicked-upon zone. The -Map display in turn will show all of the zones in common for those -selected rows in the spreadsheet using the "cyan" default color.  -The Text display will show the captured text from all of the products -identified by the selected rows in the spreadsheet.
    -
    -
    -Depending upon your Display Filter -settings, additional records may be added to the spreadsheet when -clicking on the map. The display filter also is used to -determine whether clicking on a map zone will include records that are -already expired or are old events.
    -
    -
    -
    -
    -
    -
    -

    Text Display

    -The Text Display is used in conjunction with Map and Spreadsheet -selections. If the user clicks on a spreadsheet row, or -clicks on a map zone, the appropriate hazards are highlighted in the -spreadsheet. At the same time, the text display will show the -overview text and segment text relating to those hazards. -Scroll bars on the text display permit the user to see the entire set -of text. Not all products are supported with captured text.
    -
    -Only segmented products have overview text. Overview text is -defined as the text between the MND header and the first UGC -line. Segment text is defined as the text within each segment -between the end of the UGC/Date block and the $$ segment ending -characters.
    -
    -

    -
    -
    -

    Display Filter

    -The Display Filter is a very important aspect to the GHG Monitor. -Depending upon the display filter settings, you may end up with just a -few entries, or hundreds of entries on the spreadsheet. A default -display filter is provided with the software and the user can always -select the default filter from the Filter -menu. The Display Filter Dialog is used to define the filter and -it is also accessed from the Filter -menu. The filtering technique consists of four steps:
    -
      -
    • the raw records are read from the VTEC active table.  These -records are organized by hazard and zone, thus a WS.W occupying 10 -zones would take 10 records.
    • -
    • the records are consolidated based on the filter -options. Options such as "Combine GeoIDs" will take -identical hazards (same start time, ending time, phen/sig, product pil) -that are occurring in different zones and combines them into one record.
    • -
    • the remaining records are passed through the display -filter. Depending upon the current filter settings, filters out -records that are old (i.e., old events), filters out records that -belong to another WFO, filters out records based on product pil, or -phen/sig.
      -
    • -
    • the remaining records are sorted according to the sort criteria -and then displayed in the spreadsheet.
    • -
    -
    - - - - - - - -
    This is the GHG Monitor Filter -Dialog.  The upper section consists of the listbox -options. Selecting items from the listbox will change the -filtering. If a particular column/listbox contains no -highlighted sections, it is intrepreted as if all of the sections were -highlighted. In the example, only the CON, EXA, EXB, EXT, and NEW -actions will be shown in the spreadsheet; all other records will be -filtered out. All Phen/Sig and Pils will be shown since no -entries are highlighted in those two listboxes. Buttons at -the bottom of each listbox allow quick selection and deselection of all -entries.
    -
    -The "Show Current Hazards Only" button will filter the displayed set of -entries in the listbox based on those records actually found and is a -quick way to get an overview summary of all hazards. -"Current Hazards" are considered those hazards found in the VTEC active -table AND those hazards whose ending time or purge time has not yet -passed.
    -
    -The "Show Advanced Columns" is intended for advanced users to examine -other hazard aspects, such as filtering by geographical id (e.g., -zone), segment number, and ETN number. The regular user will not -need this capability, but it is useful for diagnostics.
    -
    -The Record Consolidation section and the Filter Override section -provides additional control on what records will appear in the -Spreadsheet.
    -

    -
    -
    -The Record Consolidation section contains four options. For -normal use, these options should always be turned on which will -minimize the number of records shown in the spreadsheet. -Like events will be combined based on the state of the record -consolidation values. Records that have a different event -starting or ending time, phen/sig (hazard), originating office WFO, -event tracking number, product pil, or issuance time will NEVER be -combined. The same hazard is identified by the same starting and -ending time, the same issuance time, same product pil, originating -office, event tracking number, and hazard type (phen/sig).
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Option
    -
    Description
    -
    Default
    -
    Combine GeoIDs
    -
    This option attempts to combine -all records with the same hazard that differ only by their location -(e.g., zone).
    -
    YES
    -
    Combine Segments
    -
    This option attempts to combine -all records with the same hazard that appear in different product -segments.
    -
    YES
    -
    Combine Purge Times
    -
    This option attempts to combine -all records with the same hazard that have different purge times (due -to different segments). The purge time reflected in the -spreadsheet will be the "soonest" or "earliest" of the different purge -times.
    -
    YES
    -
    Combine Actions
    -
    This option attempts to combin -all records with the same hazard that may have different action -codes. When combining action codes, only codes within the same -group will be combined. For example, CON, EXA, EXB, EXT, NEW all -reflect active hazards and those action codes may be combined. -records with CAN, UPG, EXP reflect hazards no longer present and those -action codes may be combined. You cannot combine records with a -CON and CAN since they belong in two different action groups.
    -
    YES
    -
    -
    -

    -
    -The Filter Overrides section controls methods to show items in the -spreadsheet that normally would be filtered out:
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Option
    -
    Description
    -
    Default
    -
    Include Alerts
    -
    With this option turned off, -alerts that have been filtered out will not be shown in the -spreadsheet, although alerts will still occur. With this option -turned on, alert records that are filtered out will be automatically -added to the spreadsheet and highlighted. For example, if -this option is on and the display filter has WS.W (Winter Storm -Warning) turned off, and a WSW product is about to expire, then a WS.W -record will appear in the spreadsheet anyway.
    -
    YES
    -
    Include Map Selections
    -
    With this option turned off, -selections made on the map background will only highlight those records -already displayed in the spreadsheet that match the -geography. With the option turned off, the display filter -is bypassed when a selection is made on the map background and -additional records that reflect hazards in that zone will be added to -the spreadsheet listing. For example, if this option is on -and the display filter has WS.W turned off, there will be no hazard -records shown in the spreadsheet containing WS.W. If the user -clicks on a zone that has a WS.W, then the WS.W hazard record for that -zone will be automatically added to the spreadsheet. Note that -"Include Past Events" affects the records in the spreadsheet for the -"map selections". If set, then any records with the zone selected -will be added to the spreadsheet. If not set, then only records -that are currently in effect (i.e., ending time of the hazard has not -passed) that contain ongoing actions (NEW, CON, EXA, EXB, EXT) will be -shown.
    -
    YES
    -
    Include Past Events
    -
    With this option turned off, -hazard entries in the spreadsheet will not contain any hazard records -that are in the "past". "Past" is defined as records that have an -event ending time earlier than the present time.
    -
    NO
    -
    Include OrgPil Events
    -
    With this option turned off, -hazard entries in the spreadsheet will not contain any OrgPil hazard records.
    -
    NO
    -
    -
    - - - - - - - - - - - -
    The "Show Advanced Columns" -option on the Filter Dialog will add the GeoID, ETN, and Seg -columns. Normally a user does not filter on these columns, but it -is useful for diagnostic purposes.
    -
    -The ETN, and Seg columns always show the list of ETN and segments -that are contained within the VTEC active table and are updated as new -records arrive.
    -

    -
    If the "Show Current Hazards -Only" option is enabled, then the listboxes will change to show just -those entries that have been found in the VTEC active table. In -this case, only the CON and NEW actions were found. The GeoID -column shows just those zones containing current hazards.
    -
    -Remember that filters are set when you turn on "Show Current Hazards -Only" and future events may be filtered out.
    -

    -
    -
    -The Display Filter offers many choices on filtering which events are to -be seen on the GHG Monitor's spreadsheet. At any time, the user -can save the current state of the filter as a named filter.   -Named filters may be loaded, saved, and deleted from the Filter menu. There is an indicator on -the status bar showing the name of the current filter that is in -effect.  The indicator shows "<Default>" when the default -filter is chosen and "<Initial>" when the initial display filter -is loaded.
    -
    -Named Display Filters are saved and loaded with the overall GHG -Configuration. The GHG Configuration may be saved and loaded from -the File menu.
    -
    -Changes in the Display Filter will deselect any Map or Spreadsheet -selections that may be present.
    -
    -NOTE: Some displayed "Pil"s may not match the actual product pil. -This occurs for hazards that are issued with one PIL and updated/cancelled -using another PIL. Examples are the Tornado Warning (TO.W) which -is issued in the TOR product and updated/cancelled in the SVS -product. The monitor will show TOR for the updates and cancels. The -VTECPartners VTEC_MAPPED_PILS entry defines this relationship. -


    -

    -
    -
    -

    Alert Characteristics

    -One of the primary purposes of the GHG Monitor is to remind forecasters -that products are about to expire and updates/replacements are -necessary. The GHG Monitor offers three types of alerts: Alert1, -Alert2, and Expired alerts. The characteristics of these alerts -are set by the GHG Monitor Alert Dialog. When an alert is -"fired", an alert banner (if desired) is displayed and the affected -hazards in the Spreadsheet are highlighted, as shown:
    -
    -

    -
    -
    -
    - - - - - - - -

    -The Alert Dialog is accessed from the Alert menu.  Through the -"Enable Alert1", "Enable Alert2", and "Enabled Expired" checkbuttons, -the user can turn on or off the alerts. Each of these alert types -also has a "Show Banner" checkbutton. If enabled, then a banner -alert will be displayed when the alert is fired. If disabled, -then only the spreadsheet will be highlighted.
    -
    -The Display Filter "Include Alerts" checkbutton needs to be enabled in -order to see all alerts. Without that checkbutton enabled, it is -possible that the forecaster may have filtered out the hazards causing -the alerts.
    -
    -The scales are used to define the number of minutes prior to the -product purge time (expire time) that the alert will trigger. The -"Expired" alert type does not permit adjustment of the scale and is -always fixed at 0 minutes.
    -
    -

    -
    -
    -
    -The "Alert for My WFO Only" checkbutton limits alerts to only my -WFO. If cleared, then you will receive alerts for products -generated by other WFOs. The "Alert for TEST Products" -indicates whether alerts will be issued for products in the VTEC Test -mode.
    -
    -The three listboxes define the Actions, Phen.Sig, and Pil for the -alerts. This allows the user to only alert on certain events.
    -
    -Alert criteria is checked once each minute to determine if there are -new events that require alerting. Once an alert has been -triggered for a particular event, the entry in the spreadsheet will be -changed to that alert color. If a banner alert was requested, the -banner alert is displayed. The spreadsheet alert will -continue until either a different alert type is displayed, or until -that record is removed from the spreadsheet. Records are removed -from the spreadsheet either manually using the Display Filter, or by -new events that supercede the previous event.
    -
    -

    -
    -
    -
    -

    Appearance Options

    -There are three appearance characteristics that can be changed:  -font sizes, colors, and identifying Test products.
    -

    Font Sizes

    -
    - - - - - - - -
    Selecting Appearance -> -Font... will bring up the GHG Monitor Font -Choice Dialog. Five choices of font sizes, with the current -font size -are shown. The user selects the new font, and selects Apply Font.
    -
    - - - - - - - - - - - -
    Example of the Spreadsheet using -the smallest available font:
    -

    -
    Example of the Spreadsheet using -the largest available font:
    -

    -
    -
    -To make the font size persistent, be sure to save your configuration -under the File menu. Refer to the Saving and Loading Configuration section -for more details.
    -
    -

    Colors

    -The spreadsheet and alert colors may be configured by the user from the -Appearance->Colors menu entry. The GHG Monitor Color Choice -Dialog will be displayed allowing the user to configure seven different -color schemes. For each scheme there is a Text Color (foreground) -and a Background Color. The user chooses the Color Scheme to -modify, then uses the two color choosers to set the color, then uses -"Apply Colors" to make the change. Refer to the Color Chooser Dialog on how -to use the color wheel and hue, saturation, and brightness sliders.
    -
    -
    -
    -The various color schemes and their use are:
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Alert Level 1
    -
    This color is used in the -Spreadsheet and the Alert banner messages for the 1st level of alerts -when a product is about to expire.
    -
    Alert Level 2
    -
    This color is used in the -Spreadsheet and the Alert banner messages for the 2nd level of alerts -when a product is about to expire.
    -
    Expired Alert
    -
    This color is used in the -Spreadsheet and the Alert banner messages when the product has expired.
    -
    Map Selections
    -
    The Map Selection color is shown -in the Spreadsheet and on selected zones in the Map Display. A -Map Selection is made when the user has clicked upon a zone in the map -background.
    -
    Regular Entries
    -
    Regular Entries are those -entries in the Spreadsheet that aren't highlighted by map clicks, -spreadsheet clicks, aren't TEST products, and aren't alerted entries.
    -
    Monitor Selections
    -
    Monitor Selection color is shown -in the Spreadhseet and on releated zones in the Map Display.  A -Monitor Selection is made when the user has clicked upon a spreadsheet -cell/row.
    -
    Test Product
    -
    Test product are displayed in a -different color in the Spreadsheet to indicate to the user that this is -a TEST product and not an operational product. The special -appearance of the test products may be disabled using the "Identify -Test Products" option.
    -
    -
    -
    -To make the colors persistent, be sure to save your configuration under -the File menu. Refer to -the Saving and Loading -Configuration section for more details.
    -
    -
    -

    Identify Test Products

    -The "Identify Test Products" allow the user to highlight Test products -in the Spreadsheet. Test products are determined solely by -their VTEC mode.
    -
    -
    -

    Saving and Loading Configurations

    -The menus provide the capability to Save the current configuration, -Load the saved configuration, and Load the Default Configuration. The -configuration uses the GFESuite -BASE, SITE, User concept, but the user does not have a choice of -names for the configuration file. There is exactly 1 -configuration that can be saved for the monitor (per person).
    -
    -Upon GHG Monitor startup, the previously saved configuration, if -available, is used for the startup characteristics.    -If a mistake is made in saving a configuration, the default may always -be loaded by choosing "Default Configuration", and then saving it with -"Save Configuration".
    -
    -The following information is saved in the configuration:
    -
      -
    • Alert Characteristics, including the alert 1 and 2 times prior to -purge, action codes to alert, product pils to alert, phen/sig to -alert,  alert for my wfo only flag, enable flags for the three -alert types, banner display flags for the three alert types.
      -
    • -
    • Current Display Filter, including the consolidation flags, -selection criteria, and include flags. The consolidation flags select -combining GeoIDs, segments, purge times, and actions. The selection of -product pils, originating office identifiers, hazard (phen/sig), and -action codes. The advanced filtering of segments, etns, and -geographical zones is saved if defined. The include flags of map -selections, alerts, past events, and original pil events are included.
      -
    • -
    • Named Filter and their display filter characteristics
      -
    • -
    • Display Columns currently displayed, including their order.
      -
    • -
    • Sort Order indicating which column and in which order the sorting -is performed.
      -
    • -
    • Monitor Appearance - colors and font
    • -
    • Identify Test Events mode
      -
    • -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/GenerateCyclone.html b/cave/com.raytheon.viz.gfe/help/GenerateCyclone.html deleted file mode 100644 index c8cb6b73a8..0000000000 --- a/cave/com.raytheon.viz.gfe/help/GenerateCyclone.html +++ /dev/null @@ -1,432 +0,0 @@ - - - - - GFESuite Documentation - Generate Cyclone - - - - - - -
    -
    -

    GenerateCyclone -Tool

    -

    -
    -

    -The GenerateCyclone tool creates wind grids for tropical -depression events. When a cyclone is classified as a tropical -depression, The TCM text bulletin from the Tropical Prediction Center -(TPC) contains only the forecast center and maximum sustained winds; -no wind radii are provided. The Generate Cyclone tools allows -forecasters to add wind radii thus injecting more detail to this wind -forecast so that they can create more realistic wind grids more -easily. -
    -
    -
    -Defining Radii in a -Text File -
    -
    -The GenerateCyclone tool was derived from the TCMWind -tool. To use it, the forecaster must first define the location and -strength of the cyclone as a function of time in a text file. The -format of the file is very similar to the format of the TCM product. -A simple example is shown below... -
    -
    -FORECAST VALID 09/0900Z 25.4N -81.7W -
    -MAX SUSTAINED WINDS 140 KT WITH -GUSTS TO 170 KT. -
    -10 KT......100NE 100SE 100SW 90NW. -
    -20 KT.......90NE 90SE 90SW 90NW. -
    -30 KT.......85NE 85SE 85SW 75NW. -
    -
    -FORECAST VALID 09/1800Z 28.2N 85.8W -
    -MAX WIND 140 KT...GUSTS 170 KT. -
    -10 KT......100NE 100SE 100SW 90NW. -
    -20 KT.......90NE 90SE 90SW 90NW. -
    -30 KT.......85NE 85SE 85SW 75NW. -
    -
    -There are three main parts to the text file: the valid -time and location, max sustained winds, and the radii. -
    -
    -1. Forecast Valid -Time and Location -
    -
    -Example: -
    -
    -
    FORECAST VALID 09/0900Z -25.4N 81.7W
    -
    -
    -(valid time) (lat, -lon) -
    -
    -The forecast valid time and location must precede the -radii information. It must contain the phrase “FORECAST VALID” -followed by the time in the format dd/hhmmZ, where dd is the day of -the month, hh is the hour, mm is the minute (this should always be -00), and the Z means that the time is in GMT. The center location of -the storm follow the time and must be in the format “aa.aN bbb.bW”, -where aa.a is the latitude in degrees and tenths north and bbb.b is -the longitude in degrees and tenths west. The “N” and the “W” -are required for proper decoding of the text. -
    -
    -Since the month and year are optional, the tool will -generally create grids containing the cyclone within the current -month. When the tool finishes you may need to scroll the Grid Manager -backward or forward in time to view your grids since they could be -plotted many days before or after the current time window. -
    -
    -2. Max Sustained Winds
    -
    -
    -Example: -
    -
    -
    MAX SUSTAINED WINDS 140 KT -WITH -GUSTS TO 170 KT. -
    -
    -(max wind) (gust value is not used) -
    -
    -The Max Sustained Wind line indicates the maximum -sustained winds for the cyclone. It has the format MAX WIND xxx -KT...GUSTS yyy KT, where xxx is the maximum sustained wind and yyy is -the gusts. The maximum sustained wind value and the latitude is used -to calculate a radius of maximum wind (RMW) and is added to the list -of radii. The maximum gust is not used by the tool. -
    -
    -3. Wind Radii -
    -
    -Example: -
    -
    - 10 KT......100NE 100SE 100SW -90NW. -
    -
    -(wind value) ...(radii in each direction in nautical -miles) -
    -
    -The wind radii actually define the wind radii values for -a specified wind speed. It has the following format: NN -KT.......aNE bSE cSW dNW, where NN is the wind speed value in knots -and a, b, c, and d are the values of the radii for the northeast, -southeast, southwest, and northwest quadrants, respectively, all -expressed in nautical miles. All quadrants must be listed and all -must use the standard NE, SE, SW, NW indicators for each quadrant for -the tool to work properly. -
    -
    -Note that unlike the TCM bulletins, you can add any wind -value you want not just 34, 50, and 64 KT, and you may enter as many -wind values as you like. However, for best results, carry the same -wind values through to the end of the forecast. For example, if you -define a 25 knot radius in the first forecast period, define a 25 -knot radius for the rest of the forecast periods as well. The code -that performs the interpolation works much better when the same wind -speed values are used throughout the forecast period. -
    -
    -Preparing to run the tool -
    -
    -Before the tool can be successfully executed, the text -file containing all of the information about the cyclone must be -prepared. It's recommended that a template be stored in the text -database under some product that will never be transmitted. Forecasters -will edit this template, perhaps copying in the current -TCM, add radii to some of the forecaster periods, and save the file -under a different text database product name. This new name should -be used when running the GenerateCyclone tool. -
    -
    -Additional data from TPC -
    -
    -The Tropical Prediction Center produces additional data -that more precisely predicts the radius of maximum wind and the -outermost closed isobar. The GenerateCyclone tool can ingest this -this data which will generally improve the quality of the wind grids -that it produces. However, in order to download the data from -the TPC web site, you must configure and run a set of scripts before -running the GenerateCyclone tool. These scripts download the data -for you and place it in the AWIPS text database. Once stored in the -database, the tool will automatically read the additional data and -use it as part of the algorithm that generates the cyclone wind data. -Please see the appendix on page 6 for detailed information on how to -set up and run these scripts. -
    -
    -Once the scripts are set up, forecasters should follow these steps: -
    -
    -
      -
    • Run the script that downloads the additional data from TPC and -store the data in a file.
    • -
    • Run another script to read the file and store its contents in -the AWIPS text database under a PIL identified by the basin, cyclone -number, and year
    • -
    • Run the GenerateCyclone tool and enter the PIL for the current -cyclone. The tool will automatically read the additional data from TPC -using the AWIPS text database and use the data when generating the wind -grids.
    • -
    -
    -Running the tool -
    -
    -The GenerateCyclone tool is invoked from the GFE by -selecting from the main menu bar: Populate->GenerateCyclone. A -GUI menu displays immediately and looks like the figure below. -
    -
    -GenerateCyclone user interface
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -The menu allows the forecaster to enter the following -information:
    -
    -
    -
      -
    • Product ID – the identifier of the text product under which the -forecaster-defined bulletin was stored.
    • -
    -
    -
      -
    • Background -Model – the background that should be used for the -grid. This model/forecast dataset will be used as the background and -blended with the cyclone starting at the outer edge. A time-matching -algorithm selects the background grid whose start time matches most -closely in time with the start time of the cyclone grid. -
    • -
    -
    -
      -
    • Number of -Pie Slices – the number of radial pieces that will -be generated by the tool. More pie slices will generate a smoother wind -grid, particularly in quadrants where the radii vary greatly. The -execution time of the tool increases as pie slices increases. For -example, doubling the number of slices will approximately double the -tool's execution time.
    • -
    -
    -
      -
    • Make Grids -over Selected Time Only – Users should select “Yes” -if they want the tool to run over a shorter time period than defined in -the text bulletin. Wind grids will be generated over the grid manager -selected time range only. Leaving the option set to “No” will allow the -tool to run over the full time period defined in the bulletin. -De-selecting the grid manager time range has the same effect as -selecting “No”.
    • -
    -
    -
      -
    • Decrease -Wind over Land (%) - The tool will automatically -decrease the wind speed by this percentage where the elevation is -greater than zero (above sea level). All areas above sea level are -adjusted by the same percentage. Users may move the slider to the right -to increase this value and to the left to decrease it. Note that the -range of the slider is -20 to +50. Negative values will increase the -wind speeds for any area above sea level.
    • -
    -
    -
    -
    -APPENDIX -
    -
    -INSTRUCTIONS TO DOWNLOAD AND STORE ADDITIONAL CYCLONE -DATA -
    -
    -The following instructions list the steps required to -download additional data from TPC and store it in the AWIPS text -database. All files are included with the distribution tar file that -came with the GenerateCyclone tool. -
    -
    -Assumptions: User fxa in ds1 can ssh into ls1 as LDAD -with no password -
    -prompting. If it can't, see your ITO or AWIPS Focal -Point. Also, these -
    -scripts are needed to run the GenerateCyclone Procedure -to populate -
    -your wind grids with TPC TCM guidance for tropical -depressions where -
    -no wind radii is provided. -
    -
    -1) Edit the .csh and .pl scripts to edit your local -choice for the -
    -ldir (AWIPS Local directory where scripts reside inside -AWIPS) and -
    -rdir (LDAD Local Directory where ftp script will reside) -
    -variables. Place all the scripts in the tar package in -the AWIPS -
    -directory (ldir). -
    -
    -2) Place ftp script in the LDAD working directory -(rdir). -
    -
    -3) Add the following entries to your trigger table in -ds1 substituting your office ID: -
    -
    -MIATCMAT1 /your/awips/local/dir/tcm_2ndfile.csh -MIATCMAT1 -
    -(/your/awips/local/dir same as ldir). MIATCMAT2 -
    -/your/awips/local/dir/tcm_2ndfile.csh MIATCMAT2 -MIATCMAT3 -
    -/your/awips/local/dir/tcm_2ndfile.csh MIATCMAT3 -MIATCMAT4 -
    -/your/awips/local/dir/tcm_2ndfile.csh MIATCMAT4 -MIATCMAT5 -
    -/your/awips/local/dir/tcm_2ndfile.csh MIATCMAT5 -
    -
    -Localize ds1 triggers (mainScript.csh -trigger) as fxa. -
    -
    -4) When the TCMs are stored in the database, the script -
    -tcm_2ndfile.csh call its companion perl script. This -script decodes -
    -from the TCM the storm number and year (AL##YYYY), where -AL stands for -
    -atlantic, ## for storm number, and YYYY year). This -information is -
    -used by the perl script to remotely run as ldad the ftp -script in -
    -ldad. The ftp script downloads from TPC ftp directory -the atcf file -
    -corresponding to the TCM triggering the script. In the -case of -
    -tropical depressions where no wind radii information is -contained in -
    -the TCM, this atcf file contains the necessary -circulation information -
    -needed by the GFE GenerateCyclone Procedure to create a -depression in -
    -the wind grids. -
    -
    -5) Example: If AL##YYYY in the TCM file is AL102004, -then the -
    -corresponding atcf file is stored in the AWIPS text -database as -
    -AL102004. When you run the GenerateCyclone Procedure in -GFE, you will -
    -enter the 9 letter PIL for the TCM and AL102004 will be -pulled from -
    -the text database provided you have set up these -scripts. The -
    -procedure will call both products from the text -database, decode them, -
    -and generate the depression circulation in the grids.
    -
    -
    -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/GridManagerDialogs.html b/cave/com.raytheon.viz.gfe/help/GridManagerDialogs.html deleted file mode 100644 index 54ae5d6d69..0000000000 --- a/cave/com.raytheon.viz.gfe/help/GridManagerDialogs.html +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - Grid Manager Dialogs - - - -

    -Grid Manager Dialogs

    -The following dialog is invoked directly or indirectly Grid Manager: - - -
    -

    -Grid Information Dialog

    -The Grid Information Dialog, accessible from MB3 popup over a grid block -in the grid manager, displays information about the weather element, grid, -locks, and history. The "Data Distribution" button will bring up -an additional dialog containing information about the data in the grid. -

    The dialog is divided into different sections as shown in the following -table: -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    SectionContentsDialog Example
    Grid InfoShows the grid valid time, whether it is okay to edit this grid or -now, and the current lock state for this grid.
    Grid HistoryShows the origin of the grid (Calculated, Populated, Interpolated, -Created From Scratch, Other), the original source and valid time of the -grid (which will be different from the current weather element and valid -time if it was copied/moved or time shifted), whether or not the grid was -time shifted, the last time the grid was modified by a user and who modified -it. The "Last Stored" time indicates when this grid was stored into EDEX. -The "Last Published" time indicates when this grid was published to the -official database.
    ISC Grid HistoryWhen an ISC grid exists, shows the site identifier and the time the -grid was last updated. The history information from each of the ISC sites -that make up the ISC grid is also shown.
    Weather Element InformationDescribes the weather element. Displays the name, model, whether -or not it is modified by not saved, whether or not it is mutable, the weather -element type, units, grid size, location, and projection, the maximum and -minimum allowed values, time constraints, and the descriptive name.
    Weather Element Edit StatesDescribes particular attributes associated with editing of this weather -element. Displays the fuzz value, discrepancy value, delta value, -pick up value, whether the weather element is selected and its selection -time range, and the graphical color for this weather element.
    LocksDisplays the current set of locks for this weather element. The -locks show the time range for the period(s) locked, and who owns the lock.
    Data DistributionThis dialog shows the data distribution for the grid. For scalar -and vector it shows the minimum and maximum values. For weather, -it shows the number of gridpoints with each type of weather.
    - -
    -

    -


    -
    Back To Top
    - - - diff --git a/cave/com.raytheon.viz.gfe/help/HazardRecovery.html b/cave/com.raytheon.viz.gfe/help/HazardRecovery.html deleted file mode 100644 index e6cbbf35b0..0000000000 --- a/cave/com.raytheon.viz.gfe/help/HazardRecovery.html +++ /dev/null @@ -1,102 +0,0 @@ - - - - - HazardRecovery Procedure - - -

    HazardRecovery

    -
    -

    Procedure to re-initialize your Hazard grid based on current events

    -March 8, 20012
    -
    -

    -Methodology
    -How It Works
    -
    -

    Methodology

    -
    -
    -
    -
    -Hazard recovery should only be used in -case your entire hazard grid -is lost or mangled -by so many changes that you -cannot recover. Attempt to -restore from your official -database first, if it's -current.
    -
    -The HazardRecovery procedure -will analyze the VTEC active table to -determine what hazards are in effect for your forecast area. It will -then convert -the hazards found in this table to gridded format in your hazard grid. -When -restored all hazards will be depicted by zone or county only.
    -
    -To run the hazard recover procedure, select the Hazards menu, -the select HazardRecovery. -
    -
    -HazardRecovery Menu Image
    -

    -After selecting -HazardRecovery, a warning dialog will display.
    -
    -Hazard Recovery Warning Image
    -

    -Upon selecting Ok, your entire -Hazards grid will be deleted, and replaced with the current -hazards found in the active table.
    -

    -
    -

    How It Works

    -The Hazard Recovery tool calculates the current set of Hazards in -effect (i.e., issued).  It uses the following algorithm:
    -
      -
    • The VTEC active table is retrieved from EDEX.
    • -
    • The table is filtered and actions that are CAN, UPG, and EXP are -removed.
    • -
    • Records that represent current events are kept. Current -events are obtained from three different sources (within the VTEC -table):
    • -
        -
      • Convective Watches (TO.A, SV.A) from "my" site from "my" WCN -are considered the current issued convective watches.  We ignore -the WOU and other information from SPC. Convective watches from -"my" site but from a different product are ignored.
        -
      • -
      • Any records from "my" site are considered, both tropical and -non-tropical.
        -
      • -
      • Tropical Cyclone Watches/Warnings (HU, TY, TR) from TPC (which -only contain coastal zones) are added.
        -
      • -
      -
    -
    -The procedure then removes all Hazard grids, and then creates the -hazards based on the calculated active events and puts them into the -Hazards grid.
    -
    -Note: The HazardRecovery tool only recovers events that are compatible -with the current GFE mode.  If the GFE mode is operational, then -only -"X", "O", and "E" VTEC events will be considered.  If the GFE mode -is "TEST", then only "T" VTEC events will be considered.
    -
    -Note: HazardRecovery has been updated for the 2007 tropical season due -to changes in the TCV product. The TCV product will now -only contain coastal zones, thus the HazardRecovery procedure now looks -at tropical events issued by your site.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/Hazard_Methodology.html b/cave/com.raytheon.viz.gfe/help/Hazard_Methodology.html deleted file mode 100644 index 25819af418..0000000000 --- a/cave/com.raytheon.viz.gfe/help/Hazard_Methodology.html +++ /dev/null @@ -1,159 +0,0 @@ - - - - - Hazard Grid Methodology - - -

    Hazard Grid Methodology

    -Create a new Hazard with MakeHazard
    -How to edit/delete existing hazards
    -How to force a single hazard to break into two -or more segments (WSW/NPW)
    -
    -

    -
    -
    Creating -a New Hazard With -MakeHazard
    -
    -
    This simple scenario describes using MakeHazard to create -one hazard. It assumes you
    -are starting with no hazards in your Hazard grid.
    -
    -1. Start MakeHazard:
    -
    -Make Hazards Tool
    -
    -2. Select the Hazard you wish to create under the Hazard List.
    -
    -Make Hazards 2
    -
    -3. Select the start and end time for the hazard you are creating.
    -
    -Make Hazards 3
    -
    -4. Select the zones for this hazard. Note: If you do not select zones -at this step, the hazard type and time range will -be applied to the current active edit area in GFE.
    -
    -Make Hazard 4
    -
    -5. Press Run/Dismiss. The tool will close, and a temporary hazard grid -will be created. Notice in the example -below, the grid name in hazISW, the temporary grid for an Ice Storm -Warning.
    -
    -Make Hazards Temp Grid
    -

    -6. The final step to creating a simple hazard is to run the MergeHazards tool, which will recombine -all -temporary grids back into the actual hazard grid.
    -
    -Finished Hazard grid
    -
    -At this point, you can run the formatter launcher, and create your -hazard products.
    -
    -
    -
    How to use tools to edit combined -hazards
    -
    -The general method for -working with combined hazards is this:
    -
    -
      -
    • Run SeparateHazards to break -the hazard grid into it's components.
    • -
    • Click on the temporary hazard grid.
    • -
    • Run MakeHazard and adjust the -times or areas of the grid.
    • -
    • If you wish to remove the hazard completely, simply delete the -temporary grid.
    • -
    • Run MergeHazards to recombine -the temporary grids.
    • -
    • Save, Publish, and run Formatter launcher for the hazard.
      -
    • -
    - -The Hazards grid will be locked when you run the SeparateHazards -procedure to prevent conflicts from other users.
    -

    -How force -segments for the same hazard
    -
    -
    This method is only applicable to a -very special case of WSW/NPW/RFW product. Normally -GHG takes care of the segmentation of products.


    The -one case where this method would be used -is if you have a single hazard type, and you want to force two segments -in the final product. For -instance, if you have a Winter Storm Warning (WS.W) from 12Z to 22Z, -but you need to talk -about snow in the west and freezing rain in the east, you might want to -break this into two -segments. Here is an example using MakeHazard:

    -
    -Step 1: Run MakeHazard for the first -segment. Enter 1 in the ETN/Segment Number box. Press Run.
    -
    -Forced Segments in Make Hazard 1
    -

    -Step 2: Create the second segment. Enter 2 in the ETN/Segment Number -box. Press Run/Dismiss.
    -
    -Forced Segment 2 in MakeHazard
    -
    -
    Step -3: Run MergeHazards.
    -
    -Merge Hazards Menu
    -
    -Step 4: Save and publish your hazard grid. Although it looks like one -area, note the difference in the legend. Note that you can switch the Hazards -display to a combination of Image and Bounded Area, and then increase -the Line Width in order to see the different segments.
    -
    -Combined Segments
    -
    -Step 5: Run the product. Notice that although VTEC codes are the same -and headlines are the same, -that the product has been forced into two segments.
    -
    -
    -
    -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/INSTALLATION.html b/cave/com.raytheon.viz.gfe/help/INSTALLATION.html deleted file mode 100644 index d9d4478c51..0000000000 --- a/cave/com.raytheon.viz.gfe/help/INSTALLATION.html +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - GFESuite Installation Notes - - -
    -

    GFESuite Installation Notes

    -
    -NOTE: This file is automatically generated for "real" releases. - - diff --git a/cave/com.raytheon.viz.gfe/help/ISC.html b/cave/com.raytheon.viz.gfe/help/ISC.html deleted file mode 100644 index 9d753984cb..0000000000 --- a/cave/com.raytheon.viz.gfe/help/ISC.html +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - Intersite Coordination Training Guide - - -
    -

    Intersite Coordination -Training Guide

    -
    -
    February 14, 2012
    -
    -

    -Contents

    -Using the GFE in Show ISC Mode -
    -Identifying Intersite Discrepancies -
    -Virtual ISC Weather Elements
    -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/ISCDiscrepancies.html b/cave/com.raytheon.viz.gfe/help/ISCDiscrepancies.html deleted file mode 100644 index f8ae9c2131..0000000000 --- a/cave/com.raytheon.viz.gfe/help/ISCDiscrepancies.html +++ /dev/null @@ -1,212 +0,0 @@ - - - - GFESuite Documentation - Identifying ISC Discrepancies - - -

    Identifying Intersite -Discrepancies

    -The following procedure and tools allow the forecaster to view -discrepancies -between the local forecast and those from other sites. It is important -to note that this method is presented only as a beginning to this -complex -problem and is offered not as a solution, but, rather, as a way to -begin -the conversation between developers and forecasters about how to -utilize -our computer power to accomplish intersite coordination. The exercises -will familiarize you with the procedure and tools and show you how to -run -them. We hope that this will serve as a launching point for feedback -and -brainstorming. -

    In order to perform these exercises, you should have familiarity -with -creating and running Smart Tools and Procedures. See the Smart -Tools Training Guide. - -

    -

    -Intersite Coordination Procedure -
    -   Exercise -Discrepancy-1 --- Examining the "Swath" Edit Area -
    -   Exercise -Discrepancy-2 --- Running the ISC_Discrepancies Procedure -
    -Intersite Coordination Tools -
    -   Exercise -Discrepancy-3 --- Running the ISC Tools -
    -Modifying -Intersite Coordination Procedure and Tools -
    -

    -
    -

    Intersite Coordination -Procedure

    -

    -Exercise Discrepancy-1 -- Examining the "Swath" Edit -Area

    -
    In this exercise, we will examine the "swath" edit -area -set up by the server around the CWA. You can think of a "swath" as a -doughnut-shaped -object around the border of the CWA/Marine Zones. This is the area in -which -we will be checking for discrepancies.
    -
      -
    1. Select Main Menu-->Edit -Areas-->ISC-->ISC_Tool_Area.
    2. -
    3. Make sure the automatically generated area is satisfactory to -you. If -you -want to make minor modifications, do so, and then re-save the area -under -the same name, "ISC_Tool_Area."
    4. -
      -
    -
    -Example of the ISC_Tool_Area Swath:
    -

    -

    -  -

    Exercise Discrepancy-2 -- -Running the ISC_Discrepancies -Procedure

    -
    In this exercise, we will -run the ISC_Discrepancies procedure to see how it works.
    -
      -
    1. Select Main -Menu-->Consistency-->ISC_Discrepancies. A -dialog will appear -allowing you to choose Weather Elements and a Time Range. Initially, -simply -select Run/Dismiss.
    2. -
    3. You will see grids highlighted in red where discrepancies were -found. -Make -sure you are in ISC Mode by clicking the ISC Mode button on the button -bar. Examine the highlighted grids to see if the discrepancies are -apparent.
    4. -
    5. To turn off the highlights, select Main -Menu-->Consistency-->Clear All -Highlights.
    6. -
      -
    -
    -ISC Discrepancy Dialog
    -
    -
    -

    After running the ISC Discrepancies Procedure, grids -that exceed -the -NDFD discrepancy threshold are highlighted in red or orange in the Grid -Manager: -

    -
    -
    -
    -  -
    -  -

    Intersite Coordination Tools

    -There are four tools to help identify discrepancies: -
      -
    1. Show_ISC_Highlights -- highlights grids that are discrepant. This -is -the -tool called by the ISC_Discrepancies Procedure.
    2. -
    3. Show_ISC_Grid -- creates a discrepancy grid to be viewed from the -Grid -Manager.
    4. -
    5. Show_ISC_Area -- creates an edit area identifying where -discrepancies -were -found.
    6. -
    7. Show_ISC_Info -- creates a dialog containing information about -each segment (e.g., border) and how "discrepant" each border is.
      -
    8. -
    -Note: These tools are baselined versions of Tim -Barker's (BOI SOO) set -of ISC tools
    -
    -These tools can be run as any other smart tool. In addition, they are -automatically added to the Grid Manager popup menu and thus are easily -accessible.
    -

    Exercise Discrepancy-3 -- -Running the ISC Tools.

    -
      -
    1. From a grid in the Grid Manager, select -B3-->Show_ISC_Highlights. If -discrepancies -are found, the grid will be highlighted in red. When you have found a -grid -with discrepancies, run the B3-->Show_ISC_Area tool. This will -display -an edit area in which discrepancies were found.
    2. -
    3. Run the B3-->Show_ISC_Grid tool. This will display a grid of -the -discrepancy -values. The new weather element that was created is a temporary -element. -It will appear in the Spatial Editor legend as well as the Weather -Element -Browser. However, it is not saved in the server, so if you unload it or -shut-down the GFE, it will be gone. Try unloading the temporary element -from the legend.
    4. -
    5. You can clear the highlight on the grid by selecting -B3-->Clear -Highlight.
    6. -
    7. Run the B3-->Show_ISC_Info tool. This will display a dialog -containing statistics about each border.
      -
    8. -
    -

    -This is the ISC grid that we will examine using the ISC tools.  -Note that the BOU CWA temperatures are higher than the adjacent CYS and -GLD temperatures: -
    -
    -

    -

    This is the discrepancy area created by the Show_ISC_Area -tool. -It highlights those locations in the isc swath where discrepancies were -found: -

    -

    -

    This is the resulting discrepancy grid after running the -Show_ISC_Grid -tool: -

    -

    -
    -

    Modifying -Intersite Coordination Procedure and Tools

    -The Intersite Coordination Procedure and Tools are based on the -ISC_Utility -and the ISC_Utility_Local files which can be found in the Edit Action -Dialog -Utilities window. You can override the default settings in the -ISC_Utility_Local -file. Do not change the ISC_Utility file itself as this may be -updated -in future releases. For more information on Utilities, see the Smart -Tool Training Guide Utilities Section. -The ISC_Utility_Local file allows you to override various items within -the ISC_Utility file. See the documentation in these files for more -information.
    -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/ISCUsingISCMode.html b/cave/com.raytheon.viz.gfe/help/ISCUsingISCMode.html deleted file mode 100644 index eb1d3dabca..0000000000 --- a/cave/com.raytheon.viz.gfe/help/ISCUsingISCMode.html +++ /dev/null @@ -1,149 +0,0 @@ - - - - GFESuite Documentation - Using ISC Mode - - - -

    Using the GFE in Show ISC Mode

    -The GFE is one of two modes: Normal, Show ISC. When the GFE is -toggled -into "Show ISC Mode" using the -button on the toolbar, the data presented in the spatial editor is the -composite grid, rather than the forecast or primary grids.  A -composite -grid is made up of the forecast grid over the WFO area, and all of the -surrounding intersite coordination grids received from adjacent WFOs -for -the remainder of the area., if your office type is WFO.  For RFCs, -a composite grid is made up of the forecast grid over the RFC area, and -all of the surrounding intersite coordination grids received from -adjacent RFCs for the remainder of the area.   Any area that does -not have ISC data or forecast data available will be blank. -

    When in Show ISC mode, the following behavior is changed from the -default: -
    -

    -
      -
    • Composite Grid is shown in the spatial editor consisting of the -forecast -data over the combined CWA/marine zones (for wfos) and intersite -coordination data -over the remainder of the grid domain. For RFCs, the forecast -data is the RFCs area of responsibility.
      -
    • -
    • Editing changes made to the Forecast grid may not be visible, if -those -changes are made to the Forecast grid outside of the CWA/marine zones -(for WFOs) and RFC area of responsibility (for RFCs) -(since -the intersite coordination data will be shown instead).
    • -
    • Blank areas indicate no data has been received.
    • -
    • The Pencil tool will pick up the data from either the forecast -data or -the intersite coordination data depending upon the location of the -start -drag operation.
    • -
    • The Move/Copy tool will move/copy the composite grid and place it -into -the forecast grid. The region copied/moved will be clipped to -those -valid data points before the operation begins. The valid points -are -defined as your forecast grid and the valid intersite coordination data.
    • -
    • The Smooth tool will smooth between the ISC and the Fcst segments -of the composite grid.
    • -
    • The Color Bar Fit To Data operations will use the composite grid -for its calculations.
    • -
    • The Sample Tool and sample points will show the data value, the -site identifier, -the last update time, and whether or not the data came from an -Official/Published -database for the ISC portions of the grid. The site -identifier, -update time, and official db symbol may be turned off through the GFE -Maps->Sample -menu. Markers (similar to samples except there are no data values -displayed) may be placed at appropriate locations to indicate the site -identifier, update time, and official db symbol. These can be -controlled -through the GFE Maps->Markers menu.
    • -
    -The following items in the GFE are not affected by the toggling of -"Show -ISC Mode": -
      -
    • The temporal editor samples and edit operations always apply to -the -Forecast -data, and does not use the ISC portions of the grid.
    • -
    • Queries apply to the Forecast data, and do not use the ISC -portions of -the grid unless explicitly specified in the query.
    • -
    • Most smart tools apply to the Forecast data, and do not use the -ISC -portions -of the grid in their calculations unless explicitly specified in the -tool -to use the ISC data set.
    • -
    • The Contour Tool applies only to the Forecast data grid and does -not -use -the ISC portions of the grid.
    • -
    -
    -The ISC Markers that are present are based on whether ISC data is -displayed from WFOs or RFCs. Each office type has its own set of -ISC markers.
    -
    -

    Example of how GFE appearance changes when placed into ISC mode

    -

    Normal Display Mode

    - -
    -
    -
    -

    ISC Display Mode

    - -
    -
    -
    -

    Samples in Normal Mode compared to ISC Mode

    - -
    -In the normal mode, sample points are displayed. In ISC mode, -for those data points that are really ISC data points, the site -identifier -(optional), the update time (optional), and the official/published -database -symbol (optional) are also presented. The information shown with -a sample is controlled through the Show -... on Data Samples options. -

    If the ISC data represents data from the official database, then a -"P" -symbol will be appended to the sample string. If the ISC data -represents -data from any other database, e.g., Fcst database, then no symbol will -be appended. The purpose of the "P" symbol is to indicate that is -the official released forecast from that site. -

    -

    There are two types of samples -- one with data values shown, and -the -other without data values shown. Normal samples, a.k.a. sample -sets, -always have data values shown. Markers are similar to samples, -except -that data values are not shown. Markers are persistent, i.e., -clearing -sample points will not clear marker points. Loading of sample -sets -does not affect the set of markers placed on the screen.  Markers -may be added or removed through the Sample Tool MB3 popup menu. The -information -shown with a marker is controlled through the Show -... on Marker options. -

    - - diff --git a/cave/com.raytheon.viz.gfe/help/ISCVirtual.html b/cave/com.raytheon.viz.gfe/help/ISCVirtual.html deleted file mode 100644 index 3ce316958b..0000000000 --- a/cave/com.raytheon.viz.gfe/help/ISCVirtual.html +++ /dev/null @@ -1,108 +0,0 @@ - -GFESuite Documentation - Virtual ISC Weather Elements - - - -

    Virtual ISC Weather Elements

    -The Show ISC capability simply compares one weather element against -another. For certain elements, a virtual weather element is -calculated and that is what is displayed against the Fcst -database. For example, QPF is a rate-dependent weather -element. It doesn't make sense to display your 12-hr QPF -Fcst grid against a 1-hr QPF ISC grid, since the time periods are not -equal. Using the virtual weather element capability in the GFE, a -new weather element is calculated that will display your 12-hr QPF Fcst -grid against a virtual 12-hr QPF ISC grid.  The Virtual 12-hr QPF -ISC grid was calculated from the multiple ISC grids in the -database. For ISC, there are virtually calculated weather -elements for QPF, SnowAmt, MaxT, MinT, and PoP as shown in the -following table:
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Weather -Element
    -
    Algorithm
    -
    QPF
    -
    The virtual ISC grid is always -the same duration as the Fcst QPF grid. The Virtual ISC -grid is the rate-summation of the ISC QPF grid.
    -
    SnowAmt
    -
    The virtual ISC grid is always -the same duration as the Fcst SnowAmt grid. The Virtual ISC grid -is the rate-summation of the ISC SnowAmt grid.
    -
    MaxT
    -
    The virtual ISC grid is always -the same duration as the Fcst MaxT grid. It contains the maximum MaxT -value gridpoint by gridpoint from the ISC MaxT grids valid over the -same period. Normally there is only 1 MaxT grid, except in cases -where the office is in a different time zone or adjacent offices have -configured their MaxT time constraints differently.
    -
    MinT
    -
    The virtual ISC grid is always -the same duration as the Fcst MinT grid. It contains the minimum MinT -value gridpoint by gridpoint from the ISC MinT grids valid over the -same period. Normally there is only 1 MinT grid, except in cases where -the office is -in a different time zone or adjacent offices have configured their MinT -time constraints differently.
    PoP
    -
    The virtual ISC grid is always -the same duration as the Fcst PoP grid. It contains the maximum PoP -value gridpoint by gridpoint from the ISC PoP grids valid over the same -period.
    -
    -
    -The following illustration shows the purpose of the Virtual ISC weather -elements. In the case on the left when the virtual weather -element is not used, the forecaster will be comparing QPF from Fcst and -ISC for different time periods. In the case on the right, -the virtual ISC grid is calculated from the rates of all overlapping -ISC QPF grids. The duration of the Virtual ISC grid is programmed -to exact match the duration of the Fcst grid.
    -
    -
    -The illustration below assumes a constant rain rate of 0.10"/hour over -the entire ISC and Fcst grid. The Fcst grid duration is 7 -hours, thus that grid will show 0.70" of precipitation. The -three ISC grids are 2 hours, 3 hours, and 4 hours in duration, and at a -constant rain rate of 0.10"/hour contain 0.20", 0.30", and 0.40" -respectively.
    -
    -The virtual QPF grid is programmed to match the duration of the Fcst -grid, and thus it is 7 hours in length. The precipitation rate -for each overlapping ISC QPF grid is calculated and that portion of the -time period that overlaps is summed into the virtual ISC grid.
    -
    -When the user enables "Show ISC Mode", they will be comparing the -precipitation for the same duration as the Fcst grid. In this -specific example, the Virtual ISC Grid will show 0.70" of precipitation -due to the constant rain rate of 0.10".
    -
    -
    \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/IntersiteCoordination.html b/cave/com.raytheon.viz.gfe/help/IntersiteCoordination.html deleted file mode 100644 index f94a220143..0000000000 --- a/cave/com.raytheon.viz.gfe/help/IntersiteCoordination.html +++ /dev/null @@ -1,363 +0,0 @@ - - - - - - Intersite Coordination of Grids - - -

    -Intersite and Intrasite Coordination of Grids

    -February 14, 2012
    -

    This documentation covers the theory of operation, configuration, -and -how-to-use the intersite/intrasite coordination of grids feature -in GFESuite. The purpose of this software is to provide access to -forecast data from adjacent sites for purposes of determining whether -forecast inconsistencies exist. -
    -

    -

    Table of Contents

    - -

    -
    -

    Configuring Your System for -Intersite/Intrasite -Coordination of Grids

    -Beginning with OB8.3, the configuration of Intersite/Intrasite -coordination is done automatically through a central server. The -receiving site determines what data is desired and registers with a -central server for what is needed. As each EDEX server -prepares to send ISC data, it checks with the central server to find -out the destinations.
    -
    -All of your configuration needed to set up ISC is done through the -serverConfig/localConfig route. Refer to Intersite Coordination Configuration Items -for details.
    -
    -

    -
    -

    Configuring the AWIPS system

    -The AWIPS WAN configuration is more complicated than the GFE -configuration. -Several -scripts are installed and several directories are created, the AWIPS -message -handler receive table is modified if -necessary. -

    Once AWIPS is installed, your site will be able to -transmit -grids to your configured adjacent sites.
    -
    -

    -


    -
    Sending Intersite -Coordination -Grids

    -Intersite coordination grids are sent in the following cases: -
      -
    • The ISC_ROUTING_TABLE_ADDRESS points to a valid central server, -which is operational.
    • -
    • The REQUEST_ISC is enabled to allow you to obtain ISC data.
    • -
    • The SEND_ISC_ON_SAVE is enabled to allow you to transmit data -each time you save data.
      -
    • -
    -

    -
    -

    Accessing -the Intersite Coordination Data

    -The intersite coordination data is placed in a singleton database with -the name of xxx_GRID__ISC_00000000_0000, where xxx is your site -identifier. -The database will appear in the WE -Volume Browser and hence weather elements can be loaded and -displayed. -The user may also write smart tools to provide consistency checkers if -desired. Refer to the Intersite Coordination -Training -Guide for more details on how the GFE operates with ISC data.
    -
    -Data you receive from office types (e.g., wfo, rfc) different from your -own are renamed with the receiving office type appended to the -name. For example, if QPF data is sent from a RFC to a WFO, -then the data appears in the WFO's ISC database as QPFrfc.
    -
    -
    -

    Office Types and their Effect on ISC Data

    -The serverConfig -file defines each site's domain and office type. The -commonly used office types in the NWS are "wfo" and "rfc". -Requesting and receiving data from an office type that differs from -your own office type will cause the weather element to be renamed upon -storage into your ISC database.
    -
    -The following picture illustrates the sending of ISC from a WFO to a -WFO and RFC. In the originating site's Fcst database is an -element called QPF. Sites that want this data via ISC will -register with the IRT and specify the weather element. For WFOs -who want this data, they will request the QPF weather element, since -the sender and receiver site office types are the same. For -RFCs who want this data, they will request the QPFwfo weather element, -since the server and receiver site office type are different. The -weather elements are renamed as they arrive into a site with a -different office type than the sender. The office type is -appended to the weather element name, but prior to the level -indicator. For example, QPF_SFC (SFC-surface) becomes QPFwfo_SFC -when received at an RFC. The list of weather elements to -request from other sites is defined in the ISC_REQUESTED_PARMS variable in -serverConfig/localConfig. For a WFO to receive QPF from -another WFO, QPF needs to be part of this variable. For a -RFC to receive QPF from a WFO, QPFwfo needs to be part of the variable.
    -
    -The default list of weather elements to be requested will include all -weather elements defined in the ISC database. If is also -necessary to add the weather element to the ISC database if not already -defined by the EXTRA_ISC_PARMS -entry in serverConfig. Adding the element to the ISC database is -through the extraISCparms entry in -localConfig.
    -
    -
    -The following illustration shows the RFC sending QPF vis ISC to both -WFOs and RFCs. Again, the weather element is renamed when -it is received at a site of a different office type than the sender, in -this case the WFO. QPF is renamed to QPFrfc for the wfos and -remains QPF for RFCs.
    -
    -
    -
    -

    -
    -

    Log -files for Intersite Coordination

    -The Intersite Coordination facility runs on two different machines -(linux -and the AWIPS data servers), and uses several different -processes. -This can make it difficult to determine whether the software is working -properly. This section outlines the location and contents of the -log files pertaining to the intersite coordination. -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Log FileMachineUseFile Name or Directory Name
    irtServerdx3/dx4Logs for connectivity with the irt server - check this log if ISC grids are - not being received to ensure the system can connect and configured correctly based - on the argument list.release/logs/SITE/DATEDIR/irtServer*, -where release is the installation directory, typically -/awips2/GFESuite -for AWIPS.
    iscExtractdx3/dx4Main routine run on linux when sending isc grids. Lists time -sent, -number of bytes sent, wall clock time, cpu time, sites data sent to, -time -range of data, and weather elements.release/logs/SITE/DATEDIR/iscExtract*, -where release is the installation directory, typically -/awips2/GFESuite -for AWIPS.
    iscDataRecmhs hostIntersite coordination receive data script. Logs filename of -file received -(which contains the site identifier that sent the data), the size in -bytes, -and to which EDEX or ifpServer (host/port) the data was sent to for further -processingrelease/logs/SITE/DATEDIR/iscDataRec*
    ifpnetCDFdx3/dx4Program that extracts data from EDEX and writes it -to a compressed -netCDF file. Raw file and compressed file sizes are listed. -Number -of grids processed per weather element is output.release/logs/SITE/DATEDIR/ifpnetCDF*, -where release is the installation directory, typically -/awips2/GFESuite -for AWIPS.
    iscMosaicdx3/dx4Program that extracts data from a compressed netCDF file -(written originally -from iscnetCdf) and uses mosaic techniques to merge the data into EDEX.release/data/logfiles/SITE/DATEDIR/iscMosaic*, -where release is the installation directory, typically -/awips2/GFESuite -for AWIPS.
    -
    -

    -
    -

    -EDEX Storage of ISC Grids

    -EDEX configuration is set to contain a logical database, -called -ISC. The ISC database is a persistent database, like Fcst and -Official, -and will contain the same set of weather elements. The grids -contained -within the ISC database will be a composite of all of the adjoining -site's -intersite-coordination grids. Individual grids from each site -will -not be retained. -

    The grids that "this site" has sent out to other sites will also be -used in the ISC database to represent the CWA data. -

    -

    Since the ISC is simply another GFESuite database, all of the tools -and capabilities within the GFE can be used with this database.
    -

    -

    Weather elements have a designated "office type". Thus, when -grids are received from a site with a different office type (e.g., WFO -receiving grids from an RFC), the weather element is renamed and stored -into the ISC database with the "office type" designator. -This allows weather elements to be properly mosaicked without -overwriting data from other office types.
    -

    -

    -
    -

    Mosaic -Technique

    -The mosaic technique (iscMosaic) merges in a supplied grid (or grids) -into -the database. The mosaic technique is done both spatially and -temporally. -
    -

    Temporal Mosaic Technique

    -The temporal mosaic technique always uses two sources of data: the -incoming -grid from a site, and the existing grids within the ISC database. -Since incoming grids are processed one site at a site, this technique -will -work. The valid time ranges for existing grids within the ISC database -and the time ranges for received grids are compared and the "least -common -denominator" technique is used to determine all of the possible -permutations -of the time ranges. Basically if a grid comes in from an -adjoining -site that has a large time range, it will be inserted into several -existing -grids. If a grid comes in from a site with a small time range, -then -existing grids in the ISC database may be split.
    -
    -This concept is for non-virtual ISC weather elements. Certain -virtual ISC weather elements may use a different mosaic algorithm.
    -

    -
    -

    -

    Spatial Mosaic Technique

    -The spatial mosaic technique is used to combine pieces of grids -spatially -in order to produce a composite grid that contains a patchwork of grid -points from several sites. In EDEX, a series of edit -areas -are defined for each WFO. These are calculated automatically from -map shapefiles. The edit areas define the set of grid points that -are within each WFO's CWA and marine zones. The incoming -intersite -coordination data contains a sparsely populated grid, which indicators -on which grid points are valid. Since the incoming data grid may -not be on the same map projection, or have the same grid domain or -resolution, -the incoming data is mapped to the projection and domain within the ISC -database. -

    After the mosaic is completed, any grid points that remain undefined -in the ISC database will be set to the weather element's minimum -possible -value. This may lead to some confusion since the minimum possible -values are possible values. Note that the GFE and EDEX do -not -currently have the capability of sparsely populated grids. -

    -


    -

    -
    -

    Controlling ISC Processing -through -Configurations

    -The GFESuite offers several configurable items to allow you to -controlling -the processing overhead. All of these options are available -through the Intersite Coordination -Configuration Items section in serverConfig.py. Sites -should create localConfig.py to override the defaults.
    -
    -NOTE:  All sites MUST -override the entries in serverConfig in order for them to enable ISC -processing and to send ISC. The default in the baseline is to -have ISC disabled.
    -
    -
    - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/LimitValues.html b/cave/com.raytheon.viz.gfe/help/LimitValues.html deleted file mode 100644 index a0d84536f8..0000000000 --- a/cave/com.raytheon.viz.gfe/help/LimitValues.html +++ /dev/null @@ -1,81 +0,0 @@ - - - - - LimitValues - - - - - - -LimitValues -
    -
    -Introduction -
    -
    -Sometimes it is desirable to “clip” -grid values to particular limits. For example, you might not want temperatures to cross some -important threshold such as 32 or 100. There are a variety of tools you might use that would -allow you to raise/lower values over a region such that the values do not cross these thresholds. -However, depending on the color curve, it may be difficult to see if any pixels reach these -values, and using other tools might inadvertently change other pixels that you want to remain -constant. -

    -The Limit_Values tool clips grid values at limits that you specify. It is purely an “editing” -tool, with no meteorological “theory” behind it - it is simply a quick way to accomplish a -common editing task. It is similar to the “NoHigherThan” and “NoLowerThan” tools by Thomas -Mazza, but it combines the two tools in one, and when you start the tool, the slider shows -the current value - which makes modifications easier.
    -
    -
    -
    -How -the Procedure Works -
    -
    -Lets say we start with a complex temperature pattern like this:

    -LimitValues
    -
    -
    -Lets say that for some reason, we do -not believe any of the locations near the center of the screen will be in the 90s. There are -quite a few non-contiguous pixels above 90, so it will be difficult to remove them without also -editing other nearby points. For some reason, lets say that we just want to set the temperature -to 89 in those areas. We could create a complex query of edit areas, areas where temperatures -are above 89, etc. and then use the Assign_Value tool to assign 89 to those points. That -approach is complex and takes many steps. -

    -With the Limit_Values tool, we simply draw a general edit area that covers the points in -question:
    -LimitValues
    -
    -
    -Then we call the Limit_Values tool -and a dialog box comes up with the current max/min values in the current edit area:
    -LimitValues
    -
    -
    -Now we can see that some pixel in -the edit area was 96 (which is difficult to tell with the color curve we are using)! Now we -simply set the maximum value to 89:
    -LimitValues"

    -And when we click on OK, all the pixels above 89 in the edit area are set to 89:
    -LimitValues

    -You can limit the minimum value on the grid in a similar way. You can certainly run the tool -without defining an edit area, in which case it acts upon the entire grid. -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/MainMenuDialogs.html b/cave/com.raytheon.viz.gfe/help/MainMenuDialogs.html deleted file mode 100644 index 03580910a0..0000000000 --- a/cave/com.raytheon.viz.gfe/help/MainMenuDialogs.html +++ /dev/null @@ -1,1133 +0,0 @@ - - - - - - GFESuite Documentation - MainMenuDialogs - - -

    -Main Menu Dialogs

    -January 30, 2012
    -


    -The following dialogs are invoked directly or indirectly from the Main -Menu: -

    - -


    -

    -
    -

    Start Up Dialog

    -The Start Up Dialog appears when the GFE is initializing. -If the system cannot connect to the server, a -message will describe the problem. -

    -

    -
    -

    Break Lock Dialog

    -
    For each grid block selected in the GridManager, the -Break Lock dialog lists the: -
      -
    • Owner of the lock
    • -
    • Weather Element name
    • -
    • Lock timerange
    • -
      -
    -The dialog is separated into two sections, the "Locks Owned By Active -Clients", -and the "Orphaned Locks". Locks that are owned by active clients, -if broken, will likely result in loss of data. If it is a GFE -that -owns those locks, then the forecaster will lose all of his/her unsaved -data.  Orphaned Locks, on the other hand, are owned by processes -that -are no longer connected to EDEX. Orphaned locks can -generally -be broken without any consequences. -

    Select the locks you wish to break and click Breaklock(s) or click -Cancel -at any time to cancel the operation and close the dialog. Note -that -breaking a lock is irreversible. The "Select All Orphans" button -highlights -all of the orphaned entries and the "Clear All" button de-selects the -entries. -For verification purposes, the "Select All Orphans" button does not -highlight -locks owned by active clients; these must be individually selected. -

    -
    -
    -
    -
    -
    -

    Define Config and IFP -Image -Dialog

    -
    -The Define Config Dialog lists all existing configuration files. -
    -Selecting a foler and doing right-click-->New allows you to modify configuration files that -affect -the behavior of the GFE and IFPImage. A dialog will appear for you to -enter -the name of the configuration file. After clicking Ok, the Python -editor -will appear for you add or modify the configuration attrubites. -

    define config dialog
    -

    -

    -

    Auto Save Interval Dialog

    -The Auto Save Interval Dialog allows the user to enable or disable the -automatic save feature of the GFE. If disabled, no weather -elements -will be automatically saved. If enabled, the user may choose an -interval -from one minute to sixty minutes. At this regular interval, the -GFE -checks for modified weather elements. If there are any, then one -weather element at a time is saved with a short interval between -them. -During the auto save process, you will notice that the cursor shape -will -change to the "wait" cursor, and the "green" lock indications on the -Grid -Manager will disappear indicating that those grids have been saved to -the -database. -


    -

    -
    -

    Interpolation Algorithm -Dialog

    -The interpolation algorithm dialog allows the user to select one of -four -interpolation algorithms to use for scalar interpolation. The -interpolation -for vector and weather weather elements are not selectable. -

    The user has a choice of the following algorithms: -
    - - - - - - - - - - - - - - - - - - - - - - - -
    AlgorithmDescription
    Cubic / AdvectionCubic spline is applied to the data points temporally. -Software -looks for areas that can be advected. The advection component of -the algorithm works best for weather elements that contain areas of -zero -value.
    Cubic / NoAdvectionCubic spline is applied to the data points temporally. -Software -gradually adjusts points from starting value to ending value without -advection -considerations.
    Linear/ AdvectionLinear calculations are applied to adjacent base grids -temporally. -Software looks for areas that can be advected. The advection -component -of the algorithm works best for weather elements that contain areas of -zero value.
    Linear/ No AdvectionLinear calculations are applied to adjacent base grids -temporally. -Software gradually adjusts points from starting value to ending value -without -advection considerations.
    -

    -


    -

    -
    -

    Temporal Editor Statistics Dialog

    -The temporal editor statistics dialog controls the type of data that is -displayed in the Temporal Editor when one of the Range (RangeBar, -TEColorRangeBar) -visualizations are enabled. An example of the RangeBar -visualization -is shown below. This particular visualization is showing the -moderated -15% minimum, 15% maximum values from an edit area. The max, -average, -and minimum values are shown. -

    Example of temporal editor range -bar visualization. -
    -

    -

    The dialog controls the data presented in the temporal editor range -visualizations. Absolute will display the absolute minimum and -maximum -values in the editor. Moderated will chop out the outlyers based -on the given percentages for the minimum and maximum. The -Standard -Deviation choice includes those points within a certain number of -standard -deviations from the average. -

    -


    -
    -

    -

    -
    -

    Time Scale Displayed -Periods -Dialog

    -The time scale displayed periods dialog is used to specify which of the -named selection time ranges are to appear on the Time Scale. The -definitions of the selection time ranges, and new named selection time -ranges, may be defined through the Save Selection Time Range Dialog. -

    -
    -

    Edit Area Appearance Dialog

    -The edit area appearance dialog is used to control the color and border -line width for the edit area on the spatial editor. The default -color -and line width may be set in the gfe configuration file entries: ReferenceSet_color -and ReferenceSet_width. -

    The user can choose the new color from the color selector as well as -the line width. -

    -

    -

    -
    -

    Exit GFE Dialog

    -If there are unsaved Weather Elements that have been modified, a dialog -will appear allowing you to save the modified data. -

    The dialog displays the names of all modified Weather -Elements. -Choose Yes to save all elements and exit the GFE. Choose No if you do -not -want to save the elements before exiting the GFE. -

    -

    At any time you can click Cancel to cancel the operation and close -the -dialog without exiting the GFE. -

    -


    -

    -

    If you happen to have any temporary hazard grids active in your GFE -and attempt to exit, you may see a dialog that looks like this:
    -

    -

    ExitGFEDialog
    -

    -

    If you see this dialog, it means that you must save or manually -unload the temporary hazards weather elements before you can save the -"Hazards" weather element. If you select "No", the GFE will exit -without saving any of your modified grids. If you select "Cancel" -the operation will be canceled and leave the grid state unchanged.
    -
    -

    -
    -

    Weather Element -Volume Browser Dialog

    -Opens a dialog that allows you to load and unload Weather Elements in -the -GFE. You must choose from the following options in order specify which -Weather Elements you wish to load/unload: -
      -
    • Type      -Grid database types (IFP, -D2D). For -a list of D2D weather elements and descriptions, click -here.
    • -
    • Source  -Grid database sources and times and the -official -forecast (LAPS, RUC, Fcst, etc.)
    • -
    • Field     -Weather Elements to load
    • -
    • Plane    -The vertical plane of gridded -data. -"SFC" -stands for surface and is the plane of the forecast and official -databases.
    • -
    -
    -
      -
    -In each option field listed above, single click on the items you wish -to include/exclude. Scroll bars to the right of each field allow -you to page through all available selections. Alternately, you can -click -on the option heading itself to list all available selections. -

    There are built-in dependencies between the above options moving -from -left to right. This means that only Sources for the selected Type will -appear. Similarly, only the Fields for the selected Sources and Planes -for the selected Fields appear. This will aid you in selecting -available -grids from the many possible combinations. -

    -

    The File menu allows you to save the selections you have made to a -group, -delete previously saved groups, or to load a previously created group. -

    -

    The Edit menu allows you to select/deselect all available options or -to start over by undoing the selections you have made thus far. -

    -

    The Site can be selected from the menu bar. -

    -

    After making your selections, click Load and Dismiss to load your -selections -and close the dialog, or click Cancel at any time to end the operation -and close the dialog. -

    -WE Browser Dialog -
      -

      Working With Groups

      -While the Weather Element Volume Browser Dialog allows you to load and -unload individual weather elements, occasionally it's convenient to -load -groups of parameters that are related. A Group is a named group of -weather -elements that you can define. -
        -
      1. From the main menu bar, press and hold MB1 over the Weather -Element -menu -item.
      2. -
      3. Slide the mouse mouse pointer over the Weather Element Groups -menu item.
      4. -
      5. Select one of the pre-defined groups from the Groups cascade -menu.
      6. -
      -Note that when you selected the group, a new set of weather elements -was -loaded into the GFE. Also note that the set of weather elements that -was -loaded is now unloaded. -

      Saving a group of weather elements is done via the Weather Element -Volume -Browser. To make your own group, follow the steps below.

      -
        -
      1. From the main menu bar, select WeatherElement->Weather -Element -Volume Browser.
      2. -
      3. Select any group of weather elements.
      4. -
      5. From the Weather Element Volume Browser menu bar, select -File->Save -Weather -Element Group.
      6. -
      7. The Save Weather Element Group -Dialog -appears. Enter the group name and select Save.
      8. -
      -Now your new group has been saved and is ready to be used.
      -

      You can delete saved groups by choosing File-->Delete Weather -Element -Group which brings up the Delete -Weather -Element Group Dialog.

      -
    -
    -
    -
    -

    Save Weather -Element Group Dialog

    -To save the group of weather elements selected in the Weather Element -Volume -Browser, type a name in the identifier box and click "Save." You can -re-save -an existing group by clicking on its name. -


    -

    -
    -

    Delete Weather -Element Group Dialog

    -To delete an existing weather element group, click on its name which -will -appear in the identifier box. Then click "Delete." -

    -

    -
    -

    Manage Hidden Weather -Elements Dialog

    -The Manage Hidden Weather Elements Dialog is used to unload and/or make -visible hidden weather elements. Hidden weather elements are -those weather elements which have been created during smart tool -execution or during "Show ISC Mode". The GFE creates -temporary weather elements for purposes of holding calculations. -Some of these may not get unloaded automatically and since these -weather elements are "hidden", i.e., don't appear in the spatial editor -or grid manager, the user is not aware of their existance.
    -
    -One example of a hidden weather element is when "Show ISC Mode" is -enabled. The GFE will continue to display just the Fcst -weather elements and not any ISC elements in the grid manager and -spatial editor. The GFE software loads the ISC and any -needed virtual ISC elements in order to display the composite grids in -the editors. When "Show ISC Mode" is turned off, these hidden -elements remain.
    -
    -The dialog provides a convenient way to view these "hidden" elements or -to "unload" them.
    -
    -
    -
    -
    -

    -

    Define -Procedures Dialog

    -Procedures are a sequences of commands allowing you to populate the -Forecast -database from the Model databases that have been created via -initialization -and to call Smart Tools. (See GFE -Smart -Tools Training Guide) -

    The Define Procedures Dialog opens the Localization perspective with the Procedures -folder selected in the left column. -

    -

    -Choosing MB3-->New allows you to add a new procedure. A dialog will -appear for you to enter the name of your new procedure. After clicking -Ok, the Python editor will appear for you enter your procedure -commands. -A template is provided in the Python window with documentation in the Smart -Script Class Library and Procedures -section of the Smart Tools Training Guide. -

    -

    NOTE: Procedures can be run in background mode from the command -line. -For instructions, see the runProcedure -documentation. -

    -

    Define Procedures Dialog
    -

    -
    -

    Copy -Selected Grids From Dialog

    -The Copy Selected Grids From dialog allows you to Copy data from a -model -to one or more selected Forecast Weather Elements within the -Selected -Time Range of the Grid Manager. -

    The dialog displays the names of all available models and you choose -the model you wish to copy from by clicking directly on the model -identifier. -If necessary, you can use the scroll bar at right to page through all -the available models. -

    -

    After making your selection(s) click OK or click Cancel at any -time to cancel the operation and close the dialog. -

    -

    -

    -
    -

    Copy All -Grids From Dialog

    -The Copy All Grids From dialog allows you to Copy all data from a model -to one or more Forecast Weather Elements. -

    The dialog displays the names of all available models and you choose -the model you wish to copy from by clicking directly on the model -identifier. -If necessary, you can use the scroll bar at right to page through all -the available models. -

    -

    After making your selection(s) click OK or click Cancel at any time -to cancel the operation and close the dialog. -

    -


    -

    -
    -

    Send Intersite Grids Dialog

    -The Send Intersite Grids dialog controls the sending of grids to -adjacent -sites. Sending of grids is either an automatic process when grids -are saved (if SEND_ISC_ON_SAVE is set in localConfig), or a manual -process accomplished through this dialog. It is not recommended -to use both methods. If SEND_ISC_ON_SAVE in serverConfig/localConfig is -0, or disabled, then this dialog must be used to transmit grids. The -Send Intersite Grids Dialog has two fields in manual mode, and just one -choice for automatic mode. Do not confuse this -automatic mode with the SEND_ISC_ON_SAVE. -

    In manual mode, the user chooses the set of weather elements to -send, which default to -the currently loaded elements in the Fcst database, the time ranges to -send, whether it be "All Grids", grids over the "Selected Time", or -grids over a specific user-defined time range.

    -

    There are several convenient buttons used to select the set of -Weather Elements. By default, the loaded weather elements are selected. -The "Set All" sets all weather elements to on, the "Clear All" sets all -weather elements (and sites) to off, and the Groups button brings up a -menu allowing the forecaster to choose a predefined Weather -Element Group. The "Set Selected" option sets the weather -elements and time range to that currently selected in the GFE Grid -Manager.
    -
    -

    -


    -

    -


    -

    -

    In automatic mode, EDEX keeps track of what ISC grids have been -sent since the grids were last modified. When Send ISC is chosen with -automatic mode, EDEX sends all grids that were previously modified -but haven't yet been sent via ISC. -

    -
    -

    Request ISC Dialog

    -The Request ISC Dialog is used normally only when starting up service -backup. The purpose of the dialog is to directly request other sites -send -you their entire set of grids for purposes of populating your ISC -database. The normal routing of ISC will slowly fill in your ISC -database, -but frequently the forecaster needs a quicker initialization. -

    The dialog contains three columns. The first column is the Domain. -The user -selects which domains that he/she wishes to bring into the ISC database -for -this one-time request. As the user selects and deselects domains, the -entries -in the second column, Grid Source, will change. The Grid Source -contains -information about the "known" EDEX servers that are running the desired -domain. -The "best" guess selection for each domain is automatically chosen, but -may -not be the correct choice. For example, if you were down and someone -else -was backing you up, and then you bring up your system and want your own -grids -into the ISC database, the default choice would go to the primary site -for -those grids which is yourself. That won't work -- instead the -forecaster must -choose the site and server that was used to backup your site.

    -

    The information in the second column details the Domain, then the -server. The format of the information for the server is the -host/port@site where site is the configured mhs id. Don't -get confused if the domain is your own, but the site is someone else. -This -indicates that there is another server on the network that is running -your -domain. You will frequently see multiple choices whenever a site is -preparing -for service backup, or recovering from service backup. Simply select -one of the choices for each Domain to determine which server to which -to make -the ISC request.

    -

    The third column is the Weather Element list. It contains all of the -weather elements you normally receive via ISC. This list defaults to -all elements. -

    -

    Pressing the "Make Request" button will send a request to the chosen -EDEX servers, which will process the requests and send you back the -specific -ISC data in the normal fashion. -

    -


    -

    -

    If you are requesting ISC data from a site with a different office -type than your own (such as an RFC requesting data from a WFO), then -the weather element you request will have the remote office type as -part of its name. For example if you are at a WFO and -want to request QPF. Requesting QPF will work from any WFO, -but you must request QPFrfc to request the data from an -RFC. In a similar fashion, if you are at an RFC and want -QPF from another RFC, simply request QPF. But if you want QPF -from an WFO, you must choose QPFwfo.
    -

    -
    -

    Interpolate Dialog

    -The interpolation dialog controls the interpolation for the selected -time -ranges and weather elements. The user can choose interpolate by -gaps, -in which all gaps are interpolated, or based on edited data, in which -only -those grids that been edited will be preserved and all other grids and -gaps will be interpolated. -

    The user may choose an interpolation interval in hours. -The scale varies from the minimum size of the time constraints for the -selected weather elements up to 24 hours. If the user chooses 1, -then a grid will be created each hour (or the minimum allowable time -for -the weather element). If the user chooses 3, then interpolated -grids -will be created every 3 hours. -

    -

    The user may choose the duration of the grids in hours. The -scale -varies from the minimum size of the time constraints for the selected -weather -elements up to 24 hours. If the user chooses 1, then each -interpolated -grid will be 1 hour in length (or the minimum allowable time for the -weather -element). If the user chooses 3, then each interpolated grid will -be 3 hours in length if possible. -

    -

    Note that the "Interpolation Interval In Hours" and the "Duration of -Grids in Hours" may not always appear on the dialog, depending upon the -time constraint characteristics of the weather elements you have -selected. -The "Duration of Grids in Hours" will not appear when selecting a -weather -element in which gaps are permitted, or when weather elements are -selected -with differing allowable durations.  The "Interpolation Interval -in -Hours" will not appear when multiple weather elements are selected and -their repeat interval time constraint are not equal to each other. -

    -

    The default values of the interpolation interval and duration may be -set in the gfe configuration file. See the Interpolation -Dialog Defaults section. -

    -

    -

    -
    -

    Create From Scratch Dialog

    -The create from scratch dialog creates new grids for the selected time -ranges and weather elements. The user can choose to fill the -newly -created grids using either the default weather value for the weather -element, -or the currently assigned pick-up value. -

    The user may choose an creation interval in hours. The -scale -varies from the minimum size of the time constraints for the selected -weather -elements up to 24 hours. If the user chooses 1, then a grid will -be created each hour (or the minimum allowable time for the weather -element). -If the user chooses 3, then grids will be created every 3 hours. -

    -

    The user may choose the duration of the grids in hours. The -scale -varies from the minimum size of the time constraints for the selected -weather -elements up to 24 hours. If the user chooses 1, then each created -grid will be 1 hour in length (or the minimum allowable time for the -weather -element). If the user chooses 3, then each created grid will be 3 -hours in length if possible. -

    -

    Note that the "Creation Interval In Hours" and the "Duration of -Grids -in Hours" may not always appear on the dialog, depending upon the time -constraint characteristics of the weather elements you have -selected. -The "Duration of Grids in Hours" will not appear when selecting a -weather -element in which gaps are permitted, or when weather elements are -selected -with differing allowable durations. The "Creation Interval in -Hours" -will not appear when multiple weather elements are selected and their -repeat -interval time constraint are not equal to each other.
    -

    -

    Any existing grids within the selected time range will be removed -during this operation.
    -

    -

    The default values of the create from scratch interval and duration -may be set in the gfe configuration file. See the Create -From Scratch Dialog Defaults section. -

    -


    -

    -
    -

    Time Shift Dialog

    -The Time Shift dialog allows you to move or copy all selected grid -blocks -forward or backward in time. The dialog offers you the options of copy -or move, and the amount of -time you wish to shift (in Hours). Depending upon the selected weather -elements, the slider may only allow you to select certain time shift -values due to the defined time constraints of the elements. -

    After making your selections click OK. At any time you can -click -Cancel to cancel the operation and close the dialog. -

    -

    -
    -
    -
    -

    Save Selection -Time Range Dialog

    -
    The Save Selection Time Range dialog allows you -to -name, define and save your own Selection Time Ranges.
    -
    The dialog allows you to define a time range by -specifying:
    -
      -
    • The start/stop times and
    • -
    • A name (Today, Tonight, Tomorrow, and so forth).
    • -
    -
    The start and stop hours are relative to either -0000LT -(midnight) or 0000Z, depending upon the radio button setting for the -time -mode. The following table illustrates the calculation of the time -range based on various input factors: -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Current System TimeStart HourEnd HourModeCalculated Defined Time Range
    Tuesday 900am, 1500z 6/1406LTTuesday midnight to Tuesday 6am local time
    Tuesday 900am, 1500z 6/1406Zulu6/14 0000z to 6/14 0600z
    Tuesday 900am, 1500z 6/141849LTTuesday 6pm to Thursday 1am local time
    Tuesday 900am, 1500z 6/141849Zulu6/14 1800z to 6/16 0100z
    -

    Click "Save" to define the new time range.

    -
    -
    -At any time, you can click Cancel to cancel the operation and close the -dialog. -

    -
    -
    -
    -

    Delete -Selection Time Range Dialog

    -
    The Delete Selection Time Range dialog allows you -delete Selection Time Ranges. To Delete an existing Time Range -Definition, -click on its name which will appear in the Identifier box. Then click -"Delete." -At any time, you can click Cancel to cancel the operation and close the -dialog.
    -

    -
    -
    -
    -

    Save Forecast -Dialog

    -The Save Forecast dialog allows you to save the data of modified -Forecast -Weather Elements. -

    The dialog displays the names of all modified Weather -Elements. -Choose the Weather Elements you wish to save and click Save Forecast. -

    -

    The "Send ISC on Save" option can be enabled to also send out -your -ISC grids for the modified weather elements. See the Intersite -Coordination User's Guide for more details on Intersite -Coordination -of Grids. -

    -

    At any time you can click Cancel to cancel the operation and close -the -dialog. -

    -


    -

    -

    If you are working with Hazards grids, you may encounter a dialog -that looks like this:
    -

    -

    Picture of Save Dialog
    -

    -

    When you see a Save Dialog that looks like this, it means that you -have temporary hazard grids active in the GFE. These temporary -grids must be merged manually before they can be saved. If you -select "Save Weather Element(s) at this point, all of your modified -weather elements will be saved, except "Hazards". To save -"Hazards", you must first select "Hazards->MergeHazards" from the -GFE main menu bar. Selecting "Cancel" will not save any weather -elements and leave the state of the grids just as they were before you -attempted to save.
    -

    -
    -

    Revert Forecast -Dialog

    -The Revert Forecast dialog allows you to revert the data of modified -Weather Elements. The dialog displays the names of all modified Weather -Elements and you choose the Weather Elements you wish to revert to the -last saved data. If you Revert the "Hazards" weather element, any -temporary hazards weatehr elements will be automatically unloaded in -the Grid Manager. To get the temporary elements back, select from -the GFE main menu: Hazards->SeparateHazards.
    -

    At any time you can click Cancel to cancel the operation and close -the dialog. -

    -


    -

    -

    -
    -

    Publish To -Official Dialog

    -The Publish To Official dialog allows you to publish the data of -Weather -Elements. The dialog displays the names of all Weather -Elements -for the mutable database (e.g., Fcst), and you choose the Weather -Elements -you wish to publish. -
    -The Time Period entry allows you to select all grids to be published, -the selected time range, or just certain defined time periods. -The time periods shown are those defined by the GFE->Define -Time Ranges menu entry that also appear in the Publish -Times Definition part of the gfe -configuration -file. If a defined time period is chosen (e.g., not All Grids), -then -any grids that overlap the defined time range will be published. -

    -

    There are several convenient buttons used to select the set of -Weather -Elements. By default, the loaded weather elements are -selected. -The "Set All" sets all weather elements to on, the "Clear All" sets all -weather elements (and sites) to off, and the Groups button brings up a -menu allowing the forecaster to choose a predefined Weather -Element Group. The "Set Selected" button will select those Weather -Elements that are selected in the Grid Manager. -

    -

    After making your selections click Publish or click Cancel at any -time -to cancel the operation and close the dialog. -

    -


    -

    -
    -
    -

    Formatter Launcher -Dialog

    -The Formatter Launcher Dialog is opened from the Products menu. -The dialog allows you to generate products using the local formatter -infrastructure, define zone combinations, edit the final output -product, and view the output log from the formatter. It is highly -recommended that you Publish To Official prior to generating products -since usually products are generated from the Official Database.
    -

    Each product you can generate is listed in the dialog. To learn -how to add your own product selections or change the entries currently -in the dialog, refer to the Text -Formatter User's Guide.
    -

    -

    By default, product generation will use the Official database for -the data source. -The data source for product generation can be changed to use the Fcst -or the ISC database using the "Data Source" menu. The default -may also be specified in the Definition section of each product -formatter using the Definition['database'] -entry.
    -

    -

    By default, product generation will run on the EDEX platform, -rather than on the local platform. The forecaster may -change this from the "Processor" menu.
    -

    -
    -
    After selecting the product(s) you wish to generate, -go to the appropriate tab and click the "Run" button.
    -
    -When the "Run" button is pressed, the product will -be queued for execution. A dialog will usually be displayed -allowing for entry of specific information, such as the issuance -time. After the entry dialog is closed, the actual -formatter will be queued for execution either on the EDEX platform -or local platform. Upon completion, the generated product will be -displayed in the dialog. The user can then edit it, save it to a -file, store it into AWIPS, or transmit it via AWIPS.
    -
    -For more details, refer to the -Formatter Launcher How-To Guide.
    -
    -

    Formatterlauncher
    -

    -
    -
    -
    -
    -
    -

    Scripts Dialog

    -The Scripts dialog is opened from the Products menu. The dialog -allows you to generate products and perform other tasks. Each item -shown is defined by using an entry in the gfe configuration file. is -listed in the dialog. To learn -how to add your own product selections or change the entries currently -in the dialog, refer to the Product -Generation -Scripts information for the gfe -configuration -file.
    -
    -
    -
    After selecting the script(s) you wish to generate, -select Run/Dismiss, or just Run. -At any time you can select Cancel to cancel the operation and close the -dialog.
    -
    -The scripts can be run either locally or on the server machine. -Some scripts may run quicker on the server machine since the grids will -not be required to flow between the local machine and server -machine. However, keep in mind that the directory structure -is different on the local and server machines, and thus it may be -difficult to "code" up directory names that will work in both cases.
    -


    -

    -

    -

    Process Monitor Dialog

    -The Process Monitor Dialog displays the queue of pending and finished -background processes on both the local machine as well as the EDEX -machine. As background processes are requested to be -run from the Product Generation Scripts and Formatter Launcher Dialogs, -the GFE will queue them for execution.  This dialog can be used to -display and manipulate the queue.
    -
    -ProcessMonitorDialog
    -
    -The "Local Scripts" section shows the pending, running, and finished -processes that were queued locally. Only the processes that were -started by the current GFE will be shown. The "Server -Scripts" section shows the pending, running, and finished processes -that were queued remotely. Processes queued by you, as well as -other GFEs, will be shown in this area of the dialog.
    -
    -start button The "start" button flashes -when -the process is running. If the process is still pending, -then the button does not flash. Clicking with MB1 will force the -process to begin, even if it will exceed the maximum configured number -of background processes.
    -
    -kill button -The "kill" button is used to abort or kill a running process, or delete -the process from the pending queue if it isn't running yet.
    -
    -terminal button The -"terminal" button, when pressed, will open up a window that contains -the standard output and standard error information from the process. -The terminal only holds a configurable number of lines so processes -that produce a lot of output may not have all of their output contained -in the dialog. The window may be opened up at any time, while it is -pending, running, or finished. Some log messages may not be written to -the terminal window unless the .logPref file is correctly -configured. The terminal button is only available for -server processes after the process has finished.
    -
    -console
    -
    -Characteristics of the local processing and dialog can be set through -the GFE configuration file process -monitor -entries. Characteristics of the remote processing -(e.g., number of simultaneous processes) can be set through the server's local configuration -file.
    -
    -
    -
    -
      -
    -

    -Define Text Products Dialog

    -Text Products summarize the digital grid data in tables or simple -phrases. -For detailed examples and guidelines for creating your own text -products, -please refer to the GFE Text Product Training Guide. -

    The Define Text Product Dialog is opened by selecting GFE-->Define Text Products. -This opens the Localization perspective with TextProducts folder selected. Within -the Text product folder are all existing text products. -

    -Choosing MB3-->New on the selected TextProducts folder -allows you to add a new product to the list. A -dialog will appear for you to enter the name of your new product and the -product type. After clicking Ok, the Python editor will appear for you -enter your product definition. A template is provided in the Python -window with documentation explaining the definition. -

    -

    Define Text Product Dialog
    -

    -
    -
    -
    -

    Load Sample Set -Dialog

    -The Load Sample Set Dialog allows you load existing Sample Sets into the -GFE Spatial Editor display. -To load a Sample Set, click on its name which will highlight it. You -may choose more than one Sample Set. -To add the chosen Sample Set(s) to those already being displayed, click -"Add." -To remove the chosen Sample Set(s) from those being displayed, click -"Remove." -To display only the chosen Sample Set(s) and remove all others from -the display, click "Replace." -

    At any time, you can click Cancel to cancel the operation and close -the dialog. -

    -


    -

    -
    -

    Save Sample Set -Dialog

    -The Save Sample Set dialog allows you to name and save Sample Sets. -

    A sample point can be added to the Spatial Editor when the Sample -Tool is active by clicking on a location in the display. -To save the set of sample points displayed in the Spatial Editor as -a named Sample Set, type a name in the Identifier box and click "Save." -You may Cancel the dialog at any time. -

    -


    -

    -
    -

    Delete Sample -Set Dialog

    -The Delete Sample Set dialog allows you delete Sample Sets. -

    To delete a saved Sample Set, click on its name which will appear in -the Identifier box and click "Delete." You may Cancel the dialog at any -time. -

    -

    -

    -
    -

    Define -Samples via -Latitude/Longitude Dialog

    -The samples may be defined by latitude and longitude. A sample -point -may be added based on the location in latitude/longitude through this -dialog, -which is accessed from the main -menu Samples entry. The user enters the latitude and the -longitude -as a decimal number and that point is added to the display. Note -that in the Western Hemisphere, the longitudes are negative. -


    -

    -
    -

    About Dialog

    -

    The About Dialog provides general information about CAVE.

    -

    -
    -

    -
    -
    -
    -
    -
    Back To TOC
    -
    -
    -
    -
    -
    -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/MakeD2DFile.html b/cave/com.raytheon.viz.gfe/help/MakeD2DFile.html deleted file mode 100644 index 681ec77c58..0000000000 --- a/cave/com.raytheon.viz.gfe/help/MakeD2DFile.html +++ /dev/null @@ -1,205 +0,0 @@ - - - - - - ifpServerText User's Guide - - -

    MakeD2DFile User's Guide
    -

    -
    August 23, 2005
    -
    -
    -Table of Contents -

    Overview

    -

    Running -makeD2DFile From the GFE
    -

    -Running -makeD2Dfile From the Command Line
    -
    -
    -
    -

    -Overview

    -
    The makeD2DFile utility allows a local forecast -office to create a netCDF file containing IFP forecast grids that can -be read by an AWIPS (D2D) display system.  The program reads the -gridded forecast data from the Official database, formats the data into -a format compatible with the AWIPS display system, and writes the file -to a directory known to the D2D system.
    -
    -The makeD2DFile program is limited in several ways.  Currently the -program will store only a subset of the GFE weather elements.  The -set of weather elements that can be stored is limited to T -(temperature), Td (dew point), RH (relative humidity), MinT (minimum -temperature), MaxT (maximum temperature), QPF (quantitative -precipitation forecast), and PoP (probability of precipitation).  -Note that at this point the program will not store vector data such as -wind or discrete data such as Wx.
    -
    -While the time period over which the grids are stored can be controlled -with the "s" and "e" switches, the programs is hard-coded to store -grids every hour between the to indicated times.  There is -currently no provision to store grids at different time intervals (for -example, hourly grids to 24 hours, then 3 hourly out to 48).
    -
    -All grids are converted to MKS units before they are stored in order to -match the convention of other D2D gridded files.
    -
    -
    -
    -
    -

    -

    -

    Running makeD2DFile From the GFE

    -To run the makeD2DFile program from the GFE, perform the following -steps...
    -
    -
      -
    1.    From the GFE's Main Menu bar, Select Products->Scripts...
    2. -
    3.    When the -Scrips dialog appears, select MakeD2DFile -and click Run and Dismiss.
    4. -
    -
    -The makeD2DFile program reads data from the ifpServer, formats the data -so that it is compatible with D2D, and writes the file to a special D2D -directory reserved for GFE.  When the program finishes you can -view the data in D2D via the Volume Browser.  To view these grids -you must first select the State(s) or WFO scale on the D2D scale -selector.  Then in the D2D Volume Browser, select GFE for the -model, select the weather elements you wish to view, and Surface as the -level (if it's not selected for you already).  When you select -"Load" the elements will be loaded in D2D just like any other -model.  Other data may be overlaid on top of the GFE grids whose -time matches that of the grid.
    -
    -
    -
    -
    -

    -

    -

    Running the makeD2DFile -Program From the Command Line

    -
    -The makeD2DFile can be run from the command line as well.  If you -choose to run the program this way, keep in mind that the data will not -display in D2D if you specify a different output directory than the -default )see sample below for default directory.  It is for this -reason that we do not recommend that you use this option.
    -
    -
    A sample command line to make a displayable D2D -file is: -
    -
    -makeD2DFile -h GFEHost -r 98000000 -o -/data/fxa/Grid/SBN/netCDF/local/GFE/20050708_1200
    -
    -Each option is listed below along with a description.
    -
    -
    -
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Option SyntaxOptional or MandatoryDescription
    -h hostnameOptional
    -
    Specifies the host, upon which the ifpServer is running. -Defaults to "localhost"
    -
    -r portOptional
    -
    Specifies the port, upon which the ifpServer is -running.  Defaults to the configured port number, usually 98000000
    -
    -o output directory and filenameOptionalIndicates the directory and filename of the D2D file. Note: -if this is changed from the default (see sample above) th
    -
    -d database id
    -
    Optional
    -
    Indicates the name of the -database from which the data will be retreived and formatted. Defaults -to Fcst database
    -
    -p parmName
    -
    Optional
    -
    Indicates the name(s) of the -paramters to be stored.  No -p option will store all elligible -weather elements
    -
    -s startTime (yyyymmdd_hhmm)
    -
    Optional
    -
    Indicates the beginning time for -the data to be stored.  No -s option will store starting with the -current time.
    -
    -e endTime (yyyymmdd_hhmm)
    -
    Optional
    -
    Indicates the ending time for -the data to be stored.  No -e option -will store ending at 24 hours past the current time.
    -
    -m mask
    -
    Optional
    -
    Indicates the mask or edit area -over which the data will be stored.  If no mask is specified, the -entire grid will be stored, otherwise the data will be clipped to the -mask area.  The mask is the name of a GFE edit area.
    -
    -g [no argument]
    -
    Optional
    -
    If present the program will also -store the local GFE topography data set.
    -
    -
    -
    -
    -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/MakeHazard.html b/cave/com.raytheon.viz.gfe/help/MakeHazard.html deleted file mode 100644 index 861aa11f08..0000000000 --- a/cave/com.raytheon.viz.gfe/help/MakeHazard.html +++ /dev/null @@ -1,162 +0,0 @@ - - - - - MakeHazard Procedure - - -

    MakeHazard

    -
    -

    A Procedure for Creating Hazards

    -
    Methodology
    -How It Works
    -
    -

    Methodology

    -
    -
    -
    -
    -The MakeHazard procedure is the primary interface for creating and -editing hazards in GFE, excluding convective and tropical -hazards, which have their own procedures (PlotSPCWatches -and PlotTCPEvents). For more on how -to use the MakeHazard tool -and general hazard methodology, check Hazard -Methodlogy.
    -
    -Starting MakeHazard
    -Description of Interface
    -Shortcuts
    -Configuration
    -
    -Starting MakeHazard

    -
    -MakeHazard is started by selecting MakeHazard under -the Hazards -menu.
    -
    -Make Hazards Menu
    -
    -Description of MakeHazard -Interface
    -
    -
    After selecting this, the tool interface will display
    -
    -Make Hazards Tool (Blank)
    -
    -Here is the function of each component:
    -
    -Map Area
    -Map - This -displays the area of a potential hazard visually.
    -
    -Zoom In Button -- Zooms closer in on map.
    -Zoom Out Button -- Zoom further out on map.
    -Zoom 1:1 - -Returns map to default zoom level.
    -
    -Clear
    All -- -Clears all selected counties from map.
    -
    Select -All - -Selects all selected counties on map.
    -

    -Map Labels -- When checked, labels the zones (WIZ001 format) or counties (WIC001 -format).
    -
    -Select Hazard -Area
    -Hazard List -- Allows the selection of one hazard from list.
    -Hazard Category -Toggles - Allows selection of general categories of Hazards, and -changes Hazard List as needed.
    -ETN/Segment Number -- Allows entry of an ETN (Only TO.A or SV.A, not normally needed), or a -segment identifier.
    -
    -Time Area
    -Start Hazard Time -- Sets the starting time of the hazard in the grid.
    -End Hazard Time -- Sets the ending time of the hazard in the grid.
    -
    -Invocation -Buttons
    -Run - Runs -the tool for selected settings
    -Run/Dismiss -- Runs the tool, then closes.
    -Cancel - -Closes the tool without running.
    -
    -
    Shortcuts
    -

    -The following tips may help:
    -
      -
    • The Hazard Grids are automatically separated when the procedure -is started.
    • -
    • It can be tedious to always have to select the time area, zones, -category, and hazard.   If you already have a temporary -hazard element selected (simply by clicking on the weather element or a -grid in that weather element, then the time selectors, the hazard, and -the category and zones will automatically be set when the interface is -displayed.
      -
    • -
    -
    -
    Configuration -of MakeHazard
    -
    -
    You can easily -configure the hazards which display in the hazard lists, and the -categories available, by creating an override at SITE level to the -procedure. In the configuration -section, located in method setUI, you can set the map types, hazard -lists, categories, default categories, and more. -See the example below.
    -
    -MakeHazard Configuration screen
    -
    -
    -The most important sections for configuration are the mapNames and the -hazardDict. Each hazard that you want to appear in the -menus must be associated with a category.   Each category -must be associated with a map background (or map -backgrounds). For example, the HU.W (Hurricane Warning) is -part of the "Tropical Cyclone" group in the hazardDict.   The -"Tropical Cyclone" category uses the Zones_<site>, -Marine_Zones_<site>, and Offshore_Marine_Zones_<site> map -backgrounds.
    -
    -If the lists are not synchronized properly, then the procedure will not -work. Categories may be added and removed, and individual -hazards may be added and removed (including locally defined -hazards). The list of map backgrounds contain <site>, -which is replaced with your real site identifier when the procedure -runs. The list of map backgrounds assumes that you are using the -standard set of map shapefiles and map names as defined in Maps.py.
    -
    -
    -
    -

    How It Works

    -The MakeHazard first separates out the Hazards grid into separate haz* -temporary weather elements. The user chooses the type of -event, the time, and the area (either on the grid as a selected area or -by using the map), and presses Run or Run/Dismiss. The -temporary weather element is created (if not already there) and the -grid is created/edited as appropriate.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/MapFiles.html b/cave/com.raytheon.viz.gfe/help/MapFiles.html deleted file mode 100644 index 32e1139ddd..0000000000 --- a/cave/com.raytheon.viz.gfe/help/MapFiles.html +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - Map Background Configuration - - - -

    -Map Files - Map Background Shapefile Handling

    - -
    September 25, 2012
    - -

    - -

    -

    -Organization

    -Overview -
    Updating Map Shapefiles -
    -
    -

    -Overview

    -

    -AWIPS2 handles map backgrounds differently than AWIPS1 did. The Maps.py file -is no longer used for creating map backgrounds. Instead, a PostGIS maps database is used -in conjunction with xml configuration. Consequently, there is a change to how local -maps are added to the system. These maps are available across all perspective in CAVE and are -not specific to GFE. -

    -

    -Maps.py and localMaps.py are now only used to generate edit areas from maps database tables. -

    -
    -

    Updating Map Shapefiles

    -

      -
    1. Any site level .shp, .shx and .dbf map files should be placed into the - /awips2/edex/data/utility/edex_static/site/LLL/shapefiles/table_name directory - where table_name is unique.
    2. -
    3. To import one shapefile at a time, execute the - /awips2/database/sqlScripts/share/sql/maps/importShapeFile.sh script with the following - arguments: shapefile, scheme (mapdata), table (shapefile name), geometry simplification - levels (not used for Point data), user, port, and awips root directory. For detailed - instructions on how to do this, see the - Importing - Map Shapefiles into AWIPS2 using importShapeFile web page.
    4. -
    5. Next, you will need to add bundle files procedures. To do this, access the Localization - perspective in CAVE and browsing to the Bundles->Maps folder. MB3 on the Maps folder and - create a new xml file which corresponds to the shapefile folder. Copy and modify the contents - from an existing file. -
        -
      • Line and Polygon shapefiles - in the resourceData element, change the value of the - table element to the name of the database table (shapefile folder name), and the mapName - to the label to show in the Map menu in CAVE. If labels are required in the new map, then edit - the labelField in the Capability element. Otherwise, delete the capability element with type - labelableCapability. The value for the labelField relates to a column in the database table - with the same name. For example, the value CWA for the labelField refers to the values in the - cwa column of the CWA table in the mapdata scheme.
      • -
      • Point shapefiles - in the resourceData element, change the type attribute to - dbPointMapResourceData, change the value of the table element to the name of the new database - table name (shapefile filder name), and the mapName to the label to show in the Map menu in CAVE. If labels - are required in the new map, then edit the labelField in the Capability element. Otherwise, - delete the capability element with type labelableCapability. The value for the labelField - relates to a column in the database table with the same name. For example, the value CWA for - the labelField refers to the values in the cwa column of the CWA table in the mapdata scheme.
      • -
      - For more information on configuring the resource data options, the - MapResourceDataConfigOptions - page provides more details on configuring the capabilities and resources for a map. -
    6. Save to SITE level and restart CAVE.
    7. -
    -

    -

    See the server -configuration overview for information on how to make changes that -are supported to the map backgrounds. -


    -
    - - - diff --git a/cave/com.raytheon.viz.gfe/help/MergeHazards.html b/cave/com.raytheon.viz.gfe/help/MergeHazards.html deleted file mode 100644 index f9fa7fa58f..0000000000 --- a/cave/com.raytheon.viz.gfe/help/MergeHazards.html +++ /dev/null @@ -1,163 +0,0 @@ - - - - - MergeHazards Procedure - - -

    MergeHazards

    -
    -

    A Procedure for Merging Separated Hazard Grids Together

    - -
    -
    -The MergeHazards procedure is used to recombine temporary hazard -grids (created by SeparateHazards) -back -into the actual Hazards grid. In the example below, the Hazard grid has -been broken into two temporary -hazards:
    -
    -Temp Hazards
    -

    -To recombine these, select the menu Hazards, then MergeHazards.
    -
    -MergeHazards menu
    -
    -This tool simply combines temporary hazards into -the Hazards grid of the forecast database and exits. To -completely remove an existing hazard, delete its grid while it is separated into a -temporary grid, the run MergeHazards.
    -
    -
    -

    Checking for -Invalid Combinations

    -There are certain hazard combinations that are considered -invalid. For example, BZ.W (BLIZZARD WARNING) and WS.W (WINTER -STORM WARNING) should never be combined at the same grid point since -they are both forecasts for the same type of hazard but of different -severity.
    -
    -The MergeHazards tool includes the capability of checking for these -invalid combinations and notifying you when they occur. If an -invalid combination is detected by the tool, a dialog appears informing -you of the time period and hazard grids that are imporperly -combined. The dialog looks like this:
    -
    -MergeHazards Dialog
    -
    -Note that the dialog informs you of the start time and the end time of -the overlap and the temporary weather elements that are in violation.
    -
    -At this point you have two choices:
    -
    -
      -
    • Cancel the Merge
    • -
    -If you select Cancel -Merge, all of the grids will be left as they were before you -executed the MergeHazards tool. You then have a chance to adjust -the temporary hazards grids in space and/or time to remove the invalid -combination. If you successfully remove the invalid combination -and run the MergeHazards tool again, the grids will be properly merged -into the Hazards weather element.
    -
    -
      -
    • Continue with the Merge
    • -
    -If you select Continue Merge , -the tool will merge the grids anyway, despite the invalid -combination. The tool is designed this way to avoid any -frustration you may encounter if you truly believe that these hazards -should be combined.
    -
    -Note that you may define your hazard grids such that you have more than -one invalid combination. The MergeHazards tool displays the -warning dialog as soon as it detects the first invalid combination. If you -fix the first combination and attempt to merge again, the tool will -detect the next invalid combination. You may then cancel, adjust -your grids, and attempt to merge again. This interative process -will continue until no invalid combinations exist in your temporary -hazard grids.
    -

    Configuring Invalid -Combinations

    -The MergeHazards tool includes a rather large Python dictionary that -defines the invalid combinations for every VTEC code. Here is a -small snipet of this dictionary...
    -
    -HazardsConflictDict -= {
    -   -"AF.Y" : [],
    -   -"AS.Y" : [],
    -   -"BS.Y" : ["BZ.A", "LE.A", "WS.A", "BZ.W", "HS.W",
    -             -"IS.W", "IP.W", "WS.W", "LE.W", "SN.Y",
    -             -"WW.Y", "LE.Y", "LB.Y", "ZR.Y"],  ...
    -

    -This small snipet of the dictionary defines the VTEC codes "AF.Y" and -"AS.Y" as having no invalid combinations. In other words, these -hazards may be combined with any other hazard. The "BS.Y" hazard, -on the other hand, may not be combined with 14 other winter -hazards. If you wish, your local office may choose to edit the -MergeHazards tool and modify this dictionary. However, we -strongly recommend that you restrict any editing to just this -dictionary. Any other modifications may result in the -MergeHazards tool malfunctioning.
    -
    -
    - -
    -

    How It Works

    -The MergeHazards procedure follows these steps:
    -
      -
    • It first looks for any temporary weather elements that begin with -the letters "haz*" -which were created by the Separate Hazards or Make Hazard -procedures.
      -
    • -
    • It ensures that there are no conflicting locks on the Hazards -weather element.
    • -
    • It checks to make sure there are no invalid hazard combinations.
      -
    • -
    • It removes all existing Hazard grids.
    • -
    • It creates the merged set of Hazard grids.
    • -
    • It deletes the set of temporary hazard grids.
      -
    • -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/MetLib.html b/cave/com.raytheon.viz.gfe/help/MetLib.html deleted file mode 100644 index 1f9cfd17d9..0000000000 --- a/cave/com.raytheon.viz.gfe/help/MetLib.html +++ /dev/null @@ -1,424 +0,0 @@ - - - - - MetLib User Guide - - - -

    MetLib User Guide

    -January 10, 2012
    -
    -

    Contents

    -Introduction
    -Library Methods
    -Utility Methods
    -Examples
    -
    -

    Introduction

    - -
    -MetLib, short for Metorological Library, is a collection of Numpy -methods that perform meteorological operations on gridded data. -With these tools, forecasters can create derived weather elements such -as vorticity, termperature advection, or moisture convergence from -within the SmartTool framework.  These methods should help -forecasters more easily inject science into the process of weather -forecasting with the Graphical Forecast Editor.
    -
    -The library currently contains the basic building blocks from which -very complex yet meteorological techniques can be developed. As -the library is used in the field and new additions are requested, the -library will continue to grow.
    -
    -Currently the -MetLib is a prototype and is experimental.  Use at your own risk.
    -
    -

    Library Methods

    -This section describes the list of MetLib methods.
    -
    -

    centeredDifference(grid, axis)
    -

    -

    The -centeredDifference method calculates a partial derivative along the -specified axis.  It uses a centered differencing technique to -calculate the difference in value at each grid point from its -neighboring grid point.  This method is not meant to be used in a -SmartTool, but is documented here for completeness.  See below for -methods that use the centeredDifference method  to calculate -derivatives.

    -

    forwardDifference(grid, axis)
    -

    -

    The -forwardDifference method calculates forward difference derivative.

    -

    backwardDifference(grid, axis)
    -

    -

    The -backwardDifference method calculates backward difference derivative.

    -d_dx(grid)
    -
    -
    The d_dx method calculates a partial derivative along the x axis. - For most grid projections this is also the west-east direction. - The returned grid represents the gradient of the specified grid -along the x-axis only.  These values are not scaled to your -particular GFE domain or grid size.  To calculate a true gradient -you will need to divide by a spacingGrid so that your grid spacing is -taken into account.
    -
    -d_dy(grid)
    -
    -
    The d_dy method calculates a partial derivative along the y axis. - For most grid projections this is also the north-south direction. - The returned grid represents the gradient of the specified grid -along the y-axis only.  These values are not scaled to your -particular GFE domain or grid size.  To calculate a true gradient -you will need to divide by a spacingGrid so that your particular grid -spacing is taken into account.
    -
    -
    d_dz(grid)
    -
    -
    The d_dz method calculates a partial derivative along the z axis. - For most grid projections this is also the up-down direction. - The returned grid represents the gradient of the specified grid -along the z-axis only.   Note that for this method to work -properly you must specify a grid of at least 3-dimensions.  If you -specify a grid of smaller dimensions, an error will occur.  Also -note that to calculate a true vertical gradient, you must also divide -the result from this method by the appropriate scaling factor. - For example, if your gridded data has a vertical resolution of 25 -millibars, then you should divide the result by 25 mb.
    -
    -
    d_dt(grid)
    -
    -
    The d_dt method calculates a partial derivative along the time -axis. For this method to work properly, you must specify a -4-dimensional grid.   If a grid of fewer than 4 dimensions is -specified, an error will be reported.  Note that for GFE grids the -time dimension is outer loop dimension. In all cases, you will need to -construct your own 4-dimensional grid before calling this method. -Standard GFE methods only return 3-dimensional grids at best.
    -
    -
    gradient(scalarGrid)
    -
    -
    The gradient method uses the d_dx and d_dy methods to calculate -the horizontal vector gradient of a scalar grid. The result is returned -as two grids,  the dx-component and the dy-component.  To -display the gradient on the GFE, you must first convert the x and y -components to a magnitude and direction (just like wind) and specify a -grid of type VECTOR.   This method is often referred to as the DEL operator in many books and -journals.  The entire implementation appears below:
    -
    -return -(d_dx(grid), d_dy(grid))
    -
    -
    divergence(windGrid)
    -
    -
    The divergence method calculates the horizontal -divergence of the specified wind field.  Note that the wind field -must be specified in u and v components - NOT magnitude and direction. - Use the SmartScript method MagDirToUV to convert magnitude and -direction to u and v components. The implementation appears below:
    -
    -
        u, v = Wind
    -     -return d_dx(u) + d_dx(v)
    -
    -
    vorticity(windGrid)
    -
    -
    The vorticity method calculates the vorticity of the -specified wind field.  Note that the wind field must be specified -in u and v components - NOT magnitude and direction.  Use the -SmartScript method MagDirToUV to convert magnitude and direction to u -and v components. The implementation appears below:
    -
    -
        u, v = Wind
    -    -return d_dx(v) - d_dy(u)
    -
    -
    advection(windGrid, scalarGrid)
    -
    -
    The advection method calculates the advection of the specified -scalar grid by the specified wind grid.  Notee that the wind grid -must be specified as u and v components NOT as magnitude and direction. - Use the SmartScript method MagDirToUV to convert -magnitude and direction to u and v components. The implementation -appears below:
    -
    -
        return --dot(windGrid, gradient(scalarGrid))
    -
    -
    dot(vectorGrid1, vectorGrid2)
    -

    -The dot method calculates the dot product from the specified vector -grids.  Again note that both vector grids must be specified as u -and v components NOT magnitude and direction.  The implementation -for dot appears below:
    -
    -    return -vectorGrid1[0] * vectorGrid2[0] + vectorGrid1[1] * vectorGrid2[1]
    -

    Utility Methods
    -

    -The following methods provide grids that are often useful when making -meteorological calculations.
    -
    -getLatLonGrids(gridLoc)
    -
    -
    The method getLatLonGrids returns a tuple of two -grids, the first is the latitude at every grid point while the second -is the longitude at every grid point.
    -
    -
    Note that this method requires the -gridLocationof the GFE.  You can get  this grid by including -the following code:
    -
    -gridLoc = -self.getGridLoc()

    -
    -from within any SmartTool.
    -
    -
    makeSpacingGrid(gridLoc)
    -
    -
    The makeSpacingGrid method calculate the grid size at every grid -point.  For most typical GFE domains the value at every grid point -is so close that using a constant value would likely work well. - But for other projections, the distance between your grid points -may vary enough that using this grid produces superior results.  A -note of caution: for conformal projections (like Grid211) the -difference between the x-gridSize and the y-gridSize are virtuall -identical.  However for non-conformal projections, such as -Mercator, you will want to use a different makeGridSpacing method that -returns two grids, one for the x-gridSize and one for the y-gridSize. - This method will be included in a future version of MetLib.
    -
    -Note that this method requires the gridLocationof the GFE.  You -can get  this grid by including the following code:
    -
    -gridLoc = -self.getGridLoc()
    -
    -from within any SmartTool

    -
    -
    makeCoriolisGrid(latGrid)
    -
    -Occasionally, you may need the Coriolis accleration in your -calculations.  MakeCoriolisGrid returns a grid of Coriolis -acceleration at each gid point.  It uses the latitude grid from -getLatLonGrids.
    -
    -Note that this methods requires a grid of latitude at each grid point. - You can get this grid by including the following code:
    -
    -latGrid, -lonGrid = getLatLonGrids(self.getGridLoc())
    -
    -
    from within any SmartTool.
    -
    -

    Examples

    -To use any of the MetLib methods, you will need to import the MetLib -module, just like SmartScript.  However, because it is a module -and not part of the Tool class, you will not have to prepend "self." in -front of every MetLib method.  To import the MetLib module insert -this line into your SmartTool:
    -
    -from MetLib -import *
    -
    -That import statement will grant you access to all of the methods -documented above, without having to prepend "self." or "MetLib." in -front of every MetLib method call.
    -
    -Note that in some of the tools that follow, there are examples that -show you how to access the geographical information so that you can -properly scale your calculations to the appropriate units.  These -examples use the GridTimeRange variable for simplicity in creating a -new grid on the GFE that you can see.  In cases where D2D data is -accessed, you will need to select a timeRange that contains the -specified D2D model grid in order for the tool to work.  If you -load the D2D grid that will be used in the tool, you will be able to -precisely see when the grids are currently available and select the -appropriate timeRange on the GFE.
    -
    -Below we list a few working SmartTools that use some of the MetLib -methods.
    -
    -
    # -----------------------------------------------------------------------------
    -ToolType = "numeric"
    -WeatherElementEdited = "variableElement"
    -from Numeric import *
    -
    -# Set up Class
    -import SmartScript
    -from MetLib import *   # -Here's where MetLib is imported
    -
    -class Tool (SmartScript.SmartScript):
    -    def __init__(self, dbss):
    -        -SmartScript.SmartScript.__init__(self, dbss)
    -
    -    def execute(self, variableElement, GridTimeRange, T):
    -        "Test SmartTool illustrating -MetLib methods"
    -
    -        grad = gradient(T)  # calculate the temperature gridient
    -
    -
            # display the gradient as a weather -element created "on the fly"
    -        self.createGrid("Fcst", -"TempGradient", "VECTOR", grad, GridTimeRange,
    -                        -minAllowedValue=-10.0, maxAllowedValue=10.0)
    -
    -        return variableElement
    -# -----------------------------------------------------------------------------
    -
    -# -----------------------------------------------------------------------------
    -ToolType = "numeric"
    -WeatherElementEdited = "variableElement"
    -from Numeric import *
    -
    -# Set up Class
    -import SmartScript
    -from MetLib import *
    -## For available commands, see SmartScript
    -
    -class Tool (SmartScript.SmartScript):
    -    def __init__(self, dbss):
    -        -SmartScript.SmartScript.__init__(self, dbss)
    -
    -    def execute(self, variableElement, GridTimeRange):
    -        "Test tool for MetLib -methods"
    -
    -        # get the model's 500 mb  wind -grids
    -        modelName = self.getSiteID() -+ "_D2D_GFS40"
    -        modelLevel = "MB500"
    -        modelWind = -self.getGrids(modelName, "wind", modelLevel, GridTimeRange)
    -
    -        # get some geo info
    -        gridLoc = self.getGridLoc()
    -        latGrid, lonGrid = -getLatLonGrids(gridLoc)
    -        spacingGrid = -makeSpacingGrid(gridLoc)
    -        coriolisGrid = -makeCoriolisGrid(latGrid)
    -
    -        # make the calculations and unit -conversions and scaling
    -        u, v = -self.MagDirToUV(modelWind[0], modelWind[1])
    -        vort = (vorticity((u, v)) + -coriolisGrid)/ spacingGrid
    -        vort = vort * 100000  # -scaling factor so display works better
    -        self.createGrid("Fcst", -"500MBVorticity", "SCALAR", vort, GridTimeRange,
    -                        -descriptiveName=None, timeConstraints=None,
    -                        -precision=1, minAllowedValue=-200,
    -                        -maxAllowedValue=200)
    -
    -
    -        return variableElement
    -
    -# -----------------------------------------------------------------------------
    -
    -# -----------------------------------------------------------------------------
    -ToolType = "numeric"
    -WeatherElementEdited = "variableElement"
    -from Numeric import *
    -
    -# Set up Class
    -import SmartScript
    -from MetLib import *
    -## For available commands, see SmartScript
    -
    -class Tool (SmartScript.SmartScript):
    -    def __init__(self, dbss):
    -        -SmartScript.SmartScript.__init__(self, dbss)
    -
    -    def execute(self, variableElement, GridTimeRange):
    -        "Test tool for MetLib -methods"
    -
    -        # get the model's 500 mb temp and wind -grids
    -        modelName = self.getSiteID() -+ "_D2D_GFS40"
    -        modelLevel = "MB500"
    -        modelWind = -self.getGrids(modelName, "wind", modelLevel, GridTimeRange)
    -        modelT = -self.getGrids(modelName, "t", modelLevel, GridTimeRange)
    -
    -        # get some geo info
    -        gridLoc = self.getGridLoc()
    -        latGrid, lonGrid = -getLatLonGrids(gridLoc)
    -        spacingGrid = -makeSpacingGrid(gridLoc)
    -        coriolisGrid = -makeCoriolisGrid(latGrid)
    -
    -        # make the calculations and unit -conversions
    -        u, v = -self.MagDirToUV(modelWind[0], modelWind[1])
    -        tAdvection = advection((u, -v), modelT) / spacingGrid
    -        tAdvection = tAdvection * -3600 * 12  # convert to deg/12 hours
    -        tAdvection = -clip(tAdvection, -200.0, 200.0)
    -        self.createGrid("Fcst", -"Tadvection", "SCALAR", tAdvection, GridTimeRange,
    -                        -descriptiveName=None, timeConstraints=None,
    -                        -precision=1, minAllowedValue=-200,
    -                        -maxAllowedValue=200)
    -
    -
    -        return variableElement
    -
    -# -----------------------------------------------------------------------------
    -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/ModelBlend.html b/cave/com.raytheon.viz.gfe/help/ModelBlend.html deleted file mode 100644 index 4e0e745d19..0000000000 --- a/cave/com.raytheon.viz.gfe/help/ModelBlend.html +++ /dev/null @@ -1,253 +0,0 @@ - - - - - ModelBlend - - - - - - -ModelBlend -
    -
    -Introduction -
    -
    -Sometimes it is desirable -to average grids from different models, different runs, etc. This tool allows you to -make a weighted average of many grids, including the forecast, official, and model -grids. Complex weighted averages can be constructed in a single step, and model -extrapolations can also be constructed. The tool has the ability to blend -inside an edit area rather than over the entire grid, and to apply ‘edge effects’ to -the blending in those areas – so that they blend in smoothly with unmodified points -outside the edit area. The tool can be used on any scalar or vector grid. -When used on a vector grid, the vector is changed into components before performing -the weighted average, then transformed back to the normal vector grid. -
    -
    -
    -How -the Procedure Works -
    -
    -Lets say we start with a -Fcst minimum temperature forecast grid that looks like this:
    -ModelBlend User Interface
    -
    -
    -
    -Now suppose that the latest -ADJMEX model forecast grid for the same period (a 6-day forecast) looks like this:
    -ModelBlend User Interface
    -
    -
    -
    -The difference between -these two grids is very complex:
    -ModelBlend User Interface
    -
    -
    -
    -Now, suppose we somewhat -believe this ADJMEX model forecast. However, since it is a day-6 forecast, we want -to slowly nudge our forecast grid toward the ADJMEX solution, rather than adopt -the ADJMEX grid completely. The Model_Blend tool allows us to make a weighted -average of our current Forecast Grid and this ADJMEX forecast grid. -
    -
    -
    -Running -the Procedure -
    -
    -When the Model_ Blend tool -is started, a dialog appears where you can specify weights for various forecast, -official and model grids:
    -ModelBlend User Interface
    -
    -
    -
    -Note that the default it to -weight the forecast grid with a value of one, and all other grids with a value of zero. -Thus, if nothing on this dialog were changed, and the tool run (by clicking on the Run -or Run/Dismiss buttons), then the forecast grid would be returned unchanged.

    -In this case, suppose we want to evenly weight the current forecast grid and the latest -ADJMEX forecast grids that were shown above. We could change the slider weights to -indicate this:
    -ModelBlend User Interface
    -
    -
    -Weighting the grids evenly -means that a simple average is being performed. The average grid comes out:
    -ModelBlend User Interface
    -
    -
    -If you carefully look at the -sample points, you will see that the grid is an average of the Forecast and ADJMEX grid. -

    -Note that in this case we set the weights to one for both the Forecast and the ADJMEX -grid. We could have easily weighted them both ten, and the result would be the same. -The magnitude of the weights is irrelevant in this case, the fact that the weights are -equal means that a simple average is performed. -

    -Suppose, instead, that we wanted to weight our average more strongly toward the new -model solution. We could set the weights such that the ADJMEX model is weighted with -a value of three, and the current forecast with a value of one.
    -ModelBlend User Interface
    -
    -
    -Since there are four total -units, and the ADJMEX receives three and the current forecast one, the ADJMEX will make -up 75% of the new grid (3/4) and the current forecast will make up 25% (1/4) of the new -grid. The new weighted average looks like:
    -ModelBlend User Interface
    -
    -
    -Suppose, instead, that we -want to evenly weight the current ADJMEX 6-day forecast, with the 7-day forecast from -the previous ADJMEX run. This evenly accomplished by setting the weights equally in -the Model_Blend dialog:
    -ModelBlend User Interface
    -
    -
    -Note that we set the weight -for the current forecast to zero - indicating that we want only the average of the two -ADJMEX runs. The two ADJMEX forecast grids look like this:
    -ModelBlend User Interface
    -
    -
    -The resulting simple average -of these two grids becomes:
    -ModelBlend User Interface
    -
    -
    -The weight sliders can be -configured to allow negative values. Negative weights allow you to perform model -extrapolations. Consider, for example, only the sample value at Burns, Oregon -(the westernmost sample point on the images). The current ADJMEX run forecasts -44 degrees for this point, while the previous run forecast 41 for this point. -The ADJMEX forecasts are getting warmer. One could argue that the best forecast -might be even warmer than the 44 degrees forecast by the latest ADJMEX run. -A simple extrapolation can be performed by making the weight for the earlier run -negative, and half as large as the current run. For example, we can set the weight -for the latest run to two, and the weight for the earlier run to negative one:
    -ModelBlend User Interface
    -
    -
    -Consider, again, only -the point for Burns, Oregon. The new value will be (2*44) + (-1*41) = 47. -The trend of warming 3 degrees is continued for 3 more degrees of warming. -This is performed individually at every gridpoint. Some gridpoints cooled between -the first run and the second run, and likewise at those locations, the cooling is -extrapolated to the final grid. The resulting grid looks like this:
    -ModelBlend User Interface
    -
    -
    -Note that the sample value -at Burns, Oregon turned out to be 47, just as we calculated above. -

    -A simple extrapolation, as described above may be too extreme. Again, considering -only the forecast for Burns: the 7-day forecast was 41 and the 6-day forecast was 44. -If you believe that such a trend will continue, then the 5-day forecast will be 47, -the 4-day forecast will be 50, the 3-day forecast will be 53, the 2-day forecast -will be 56, the 1-day forecast will be 59, and the final temperature will be 72. -Such a procedure is clearly nonsense. The 6-day forecast of 44 is warmer than the -earlier run, but it is the best forecast that the model can provide at that time. -While extrapolating the trend somewhat might be reasonable, extending it indefinitely -is foolish. -

    -Suppose that we want to use some of the trend, but weight the combination strongly -toward the value in the latest forecast. Again, you can use negative weights on an -earlier forecast, but much larger positive weights on the latest forecast. -For example, if we weight the new forecast with a value of eight, and the old -forecast with a value of negative one:
    -ModelBlend User Interface
    -
    -
    -The resulting grid looks like:
    -ModelBlend User Interface
    -
    -
    -Note that the extrapolation -makes a forecast of 44 at Burns. The continuation of the trend is so small that it -is indistinguishable from the latest ADJMEX forecast. -

    -More than two grids can be combined using the Model_Blend tool. You can set equal -weights for all grids, and get a simple average of all model forecasts. Very complex -weighting schemes that weight one model more heavily than others can also be -accomplished. -

    -New in version 2.0 of the tool, is the ability to apply the blend over the current -edit area, rather than the entire grid. For example, here we display an edit area -over both the current Fcst grid and the ADJMEX grid.

    -Current Fcst Grid:
    -ModelBlend User Interface

    -ADJMEX Grid:
    -ModelBlend User Interface
    -
    -
    -If we specify the -weights in Model_Blend dialog to be zero for the Fcst grid and one for the ADJMEX -grid (essentially copying the ADJMEX grid into the Fcst grid – but only inside the -edit area):
    -ModelBlend User Interface
    -
    -
    -Then the resulting grid becomes:
    -ModelBlend User Interface
    -
    -
    -Note that because we -specified “Flat” (the default) that some intense temperature “gradients” were -introduced. This is because the model data copied inside the edit area does not -match with the original Fcst grid outside the edit area. There are two ways to -mitigate this problem. -

    -First, you can specify an “edge” behavior inside the edit area where “blending” will -taper back to zero, (and you can specify the edge width – in pixels) such as:
    -ModelBlend User Interface
    -
    -
    -Where the default edge -width of 5 pixels is chosen. The resulting grid comes out:
    -ModelBlend User Interface
    -
    -
    -Note that there are no -extreme “gradients” and that within 5 pixels of the edge of the edit area, the r -esulting grid is a blend of the ADJMEX grid and the Fcst grid. -

    -If, instead, you would like only the center of the edit area to get the full Model -Blend that you specify – and taper back smoothly to the original grid at the outer -edge of the edit area, then you could specify “Taper” in the dialog:
    -ModelBlend User Interface
    -
    -
    -Here the resulting grid comes out:
    -ModelBlend User Interface
    -
    -
    -One important restriction on -your weights is enforced: the weights cannot add up to zero. You cannot weight one -model with positive one and another with negative one, because the total weight would -be zero. This can also occur if model data cannot be read from the database - in -which case the weight for that model run is removed from the overall weights. -Care should be take to use the tool with model grids that exist - and with -combinations of weights that do not add to zero. -

    -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/NDFD_QPF_Checks.html b/cave/com.raytheon.viz.gfe/help/NDFD_QPF_Checks.html deleted file mode 100644 index 1f4b9ee779..0000000000 --- a/cave/com.raytheon.viz.gfe/help/NDFD_QPF_Checks.html +++ /dev/null @@ -1,250 +0,0 @@ - - - - - NDFD_QPF_Checks - - - - - - -NDFD_QPF_Checks -
    -
    -What the Procedure Does -
    -
    -The NDFD_QPF_Checks procedure performs two, -simple consistency checks on the SnowAmt6hr grid: -
      -
    1. 1.Where SnowAmt6hr >= 0.5 inches, checks to ensure QPF6hr >= 0.01 inches.
    2. -
    3. 1.Where SnowAmt6hr >= 0.1 inches, checks to ensure at least one of the overlapping Wx grids - contains S, SW, and/or IP. The frozen precipitation type can be mixed with any liquid and/or - freezing precipitation type. The procedure does not consider probability, coverage, intensity, and/or - visibility of the frozen precipitation in the Wx grid.
    4. -
    -The procedure also performs two, simple consistency checks on the QPF6hr grid: -
      -
    1. 1.Where QPF6hr > 0.0, checks to ensure at least one of the overlapping PoP grids is greater than - zero. The PoP grids here are the “floating” PoP grids.
    2. -
    3. 1.Where QPF6hr > 0.0, checks to ensure that at least one of the overlapping Wx grids has at least - one of the precipitating Wx types, which includes L and ZL. The check is made against the Wx type only. - The procedure does not consider probability, coverage, intensity, and/or visibility of the precipitating - Wx type.
    4. -
    -Finally, the procedure performs a simple check on the PoP12hr grid: Where PoP12hr >= 50%, checks to ensure -at least one of the overlapping QPF6hr grids >= 0.01 inches.
    -
    -
    - - Usage Considerations -
    -
    - -
      -
    1. It is assumed and recommended that the user derives the QPF6hr, SnowAmt6hr, and PoP12hr grids - using other GFE procedures and/or smart tools. The National Smart Tool/Smart Initialization Team (STSIT) - strongly recommends the Collaborate_PoP_SnowAmt_QPF procedure for this task. If NDFD_QPF_Checks finds - inconsistencies, then you will need to: -
        -
      1. Fix the QPF, SnowAmt, PoP, and/or Wx grids;
      2. -
      3. Regenerate the QPF6hr, SnowAmt6hr, and PoP12hr grids;
      4. -
      5. Re-run the NDFD_QPF_Checks procedure.
      6. -
      - Finally, the “Send Grids to NDFD” script does not send the QPF6hr, SnowAmt6hr, or PoP12hr grids to NDFD. - It still sends the QPF, SnowAmt, PoP, and Wx grids. Thus, it is imperative that whatever means you use to - derive QPF6hr, SnowAmt6hr, and PoP12hr grids emulates what the NDFD server does to create its grids from - the grids sent from the GFE. The Collaborate_PoP_SnowAmt_QPF meets this need.
    2. -
    3. For all checks, if the initial threshold is not triggered, then the grids are considered consistent by - definition. In other words: -
        -
      1. If SnowAmt6hr < 0.5 inches, then SnowAmt6hr and QPF6hr are always consistent.
      2. -
      3. If SnowAmt6hr < 0.1 inches, then SnowAmt6hr and Wx are always consistent.
      4. -
      5. If QPF6hr < 0.01 inches, then QPF6hr and PoP are always consistent.
      6. -
      7. If QPF6hr < 0.01 inches, then QPF6hr and Wx are always consistent.
      8. -
      9. If PoP12hr < 50%, then PoP12hr and QPF6hr are always consistent.
      10. -
      - Later in the documentation, a reference to “control” parameters/grids will be made. For each check listed - above, the first parameter listed is what will be called the “control” parameter/grid.
    4. -
    5. For the checks that involve SnowAmt6hr, QPF6hr, and PoP12hr, the start time and duration of those - grids are verified. If any of these grids have been stretched, the procedure will not perform the - associated check and will generate an urgent GFE message. For the SnowAmt6hr and QPF6hr grids, they must - start at 00, 06, 12, or 18 UTC and be exactly 6 hours in duration. For the PoP12hr grids, they must start - at 00 or 12 UTC and be exactly 12 hours in duration.
    6. -
    7. With no time range selected in the grid manager, the procedure will use 0 to 240 hours, with respect - to UTC, as the time range. If all of the checked grids exist out to 240 hours, they will all be checked. - In many WFOs, some of the checked grids do not go out to 240 hours. In those cases, the checks will only - be done for the time range of the “control” parameter. For example, if your SnowAmt6hr grid spans the 0 - to 72 hour time range, then the two SnowAmt6hr checks will stop at 72 hours. This same idea holds for - swept out time ranges, i.e., if you sweep out a time range beyond the end of one of the “control” - parameters, the check will stop with the last “control” parameter grid.
    8. -
    9. The procedure makes some attempts to identify missing grids. (It should be noted that these attempts - are not very robust. There are probably just as many cases of missing grids being identified as there are - cases of missing grids not being identified.) There is an underlying assumption in those attempts that the - “control” parameter will not extend later in time than the parameter it is being checked against. This - assumption breaks down for the PoP12hr/QPF6hr check because NDFD requires the PoP12hr grid at later time - steps than the QPF6hr grid. To avoid generating a lot of erroneous missing QPF6hr grid warning messages, - the procedure will compare the end times of the two grid sets. If the PoP12hr grid does extend farther in - time than the QPF6hr grid, then the time range used in the PoP12hr/QPF6hr check will be dynamically - adjusted back to the end of the last QPF6hr grid which has an end time of either 00 or 12 UTC.
    10. -
    11. When the procedure is installed, it can be configured to use an edit area which covers just your CWA. - If this is done, then the procedure will only return inconsistencies over that edit area. If this is not - done, or the procedure has a problem with the CWA edit area, then the procedure will run over the entire - domain. In the latter case, this means you can get flagged for inconsistent points in your GFE domain that - are totally outside your CWA. In no case will the procedure run over any edit areas drawn in the GFE - Spatial Editor window. It always runs over the whole GFE domain.
    12. -
    13. 1.For each check, the procedure loops over the available “control” grids. For each “control” grid, - the overlapping “non control” grids are checked for consistency. For the checks involving PoP and Wx, - it's possible for the “control” grid and the PoP/Wx grid to not be aligned. By this, it is meant a PoP/Wx - grid could have a start time earlier than the start time of the “control” grid or a PoP/Wx grid could - have an end time later than the end time of the “control” grid. While the procedure doesn't care if - this is the case, the results, if there are inconsistencies, could be difficult to interpret since the - PoP/Wx grid is not only being compared to the current “control” grid but also to the previous or next - “control” grid. For example, let's say you're running the QPF6hr/Wx check. The QPF6hr grid being check - runs from 06 to 12 UTC. However, overlapping this QPF6hr grid are two Wx grids. One runs from 06 to - 09 UTC and the other runs from 09 to 15 UTC. The first grid presents no problems since it's aligned - with the QPF6hr grid. However, the second grid extends beyond the end of the QPF6hr grid (15 UTC - vs 12 UTC). If an inconsistency arises and the solution is to change the Wx grid, the change will - have to be made such that two QPF6hr grids are consistent with it, the one running from 06 to 12 UTC - and the on running from 12 to 18 UTC.
    14. -
    15. For the SnowAmt6hr/Wx check, the QPF6hr/Wx check, and the PoP12hr/QPF6hr check, any temporary - inconsistent grid will span the time range of the “controlling” grid. The temporary inconsistent grid - will show the points where ALL of the “non controlling” grids were inconsistent. See figures 8 through - 11.
    16. -
    -When the procedure is run, the forecaster is presented with several choices. The first is whether to run -checks or to “Cleanup”. By default, the procedure will run checks. The “Cleanup” option will undo any -highlighting and remove any temporary grids. With the “Cleanup” option selected, all other options on the -GUI are ignored. If you leave “Check” selected, then you can choose which of the checks you wish to run by -toggling on and off the appropriate button. By default, all checks will be run:
    -NDFD_QPF_Checks

    -The procedure will create temporary grids which show where the inconsistencies occur. The values in all the -temporary grids are either zero (consistent) or one (inconsistent). The temporary grid names are a -concatenation of the two grid names used in the check with the “control” grid name first. The procedure -can also be configured to highlight both the temporary grids and the bad “source” grids. In the default -configuration, highlighting is turned on with the bad “source” grids colored red and the temporary grids -colored orange. (See Figures 3 through 7.) The procedure does not modify any grids. It's left up to the -forecaster to determine how, if at all, to handle the inconsistencies. The issue of a check only versus a -check/force procedure was discussed by the STSIT and the consensus recommendation was a check only -procedure. The STSIT feels strongly that there are no meteorologically sound ways to force consistency -of these grids, but we are always willing to listen to and consider other points of view. Any -inconsistencies will pop up a “significant” GFE message:
    -NDFD_QPF_Checks

    -This is an example of how the GFE will look after the procedure is run and there are inconsistencies. -In the grid manager, you can see one temporary grid, SnowAmt6hrQPF6hr, has been created and is -highlighted in the color orange. The corresponding SnowAmt6hr and QPF6hr grids have been highlighted -in the color red. In the above figure, there is a also second “significant” message. Note the -“Acknowledge All (1 Pending...)”. That message tells the user the procedure ran over a swept-out time -range. Since the procedure has no way of knowing whether the user meant to sweep out a time range, It was -decided to put in a “significant” pop-up to “remind” the user. Finally, while not shown, there are conditions -that can generate an “Urgent Message” pop-up, the ones that are colored red. Some conditions that cause -urgent messages are: missing grids, locked grids, and bad time constraints.
    -NDFD_QPF_Checks

    -The SnowAmt6hr/QPF6hr check enforces the following rule:
    -If SnowAmt6hr >= 0.5 in, then QPF6hr >= 0.01 in.
    -In the above figure, there are four sample points, each in a unique zone. Starting in the “upper-left” -zone and moving clockwise, the sample points have the following values:

    -SnowAmt6hr = 0.5 in, QPF6hr = 0.01 in, SnowAmt6hrQPF6hr = 0: This is a good result.
    -SnowAmt6hr = 0.5 in, QPF6hr = 0.00 in, SnowAmt6hrQPF6hr = 1: This is a bad result.
    -SnowAmt6hr = 0.0 in, QPF6hr = 0.00 in, SnowAmt6hrQPF6hr = 0: This is a good result.
    -SnowAmt6hr = 0.0 in, QPF6hr = 0.01 in, SnowAmt6hrQPF6hr = 0: This is a good result.

    -NDFD_QPF_Checks

    -The SnowAmt6hr/Wx check enforces the following rule:

    -If SnowAmt6hr >= 0.1 in, then one of the overlapping Wx grids must contain S, SW, or IP. Only the Wx -type is important to this check. The Probability/Coverage, Intensity, and Visibility are all ignored. -Also, the frozen types can be mixed with the liquid and/or freezing types. -In the above figure, there are four sample points, each in a unique zone. Starting in the “upper-left” -zone and moving clockwise, the sample points have the following values:

    -SnowAmt6hr = 0.5 in, Wx = Chc S-, SnowAmt6hrWx = 0: This is a good result.
    -SnowAmt6hr = 0.5 in, Wx = NoWx, SnowAmt6hrWx = 1: This is a bad result.
    -SnowAmt6hr = 0.0 in, Wx = NoWx, SnowAmt6hrWx = 0: This is a good result.
    -SnowAmt6hr = 0.0 in, Wx = Chc S-, SnowAmt6hrWx = 0: This is a good result.

    -NDFD_QPF_Checks

    -The QPF6hr/PoP check enforces the following rule:

    -If QPF6hr > 0.0 in, then at least one of the overlapping PoP grids > 0%. -In the above figure, there are four sample points, each in a unique zone. Starting with the “upper-left” -zone and moving clockwise, the sample points have the following values:

    -QPF6hr = 0.01 in, PoP = 1%, QPF6hrPoP = 0: This is a good result.
    -QPF6hr = 0.01 in, PoP = 0%, QPF6hrPoP = 1: This is a bad result.
    -QPF6hr = 0.00 in, PoP = 0%, QPF6hrPoP = 0: This is a good result.
    -QPF6hr = 0.00 in, PoP = 1%, QPF6hrPoP = 0: This is a good result.

    -NDFD_QPF_Checks

    -The QPF6hr/Wx check enforces the following rule:

    -If QPF6hr > 0.00 in, then at least one of the overlapping Wx grids must contain a precipitating Wx type. -These are: R, RW, L, S, SW, IP, ZR, and ZL Only the weather type is considered in the check. The -Probability/Coverage, Intensity, and Visibility are all ignored. In the above figure, there are four -sample points, each in a unique zone. Starting with the “upper-left” zone, the sample points have the -following values:

    -QPF6hr = 0.01 in, Wx = Chc S-, QPF6hrWx = 0: This is a good result.
    -QPF6hr = 0.01 in, Wx = NoWx, QPF6hrWx = 1: This is a bad result.
    -QPF6hr = 0.00 in, Wx = NoWx, QPF6hrWx = 0: This is a good result.
    -QPF6hr = 0.00 in, Wx = Chc S-, QPF6hrWx = 0: This is a good result.

    -NDFD_QPF_Checks

    -The Pop12hr/QPF6hr check enforces the following rule:

    -If Pop12hr >= 50%, then at least one of the overlapping QPF6hr grids must be > 0.00 in.

    -This is the first figure where the “controlling” grid is shown with more than one overlapping -“non controlling” grid. The second QPF6hr grid, which is not shown, has 0.00 in assigned to -the entire grid, which means it cannot be consistent with the PoP12hr grid where it is >= 50%. -In the above figure, there are four sample points, each in a unique zone. Starting with the -“upper-left” zone and moving clockwise, the sample points have the following values:

    -PoP12hr = 50%, QPF6hr = 0.01 in, PoP12hrQPF6hr = 0: This is a good result.
    -PoP12hr = 50%, QPF6hr = 0.00 in, PoP12hrQPF6hr = 1: This is a bad result.
    -PoP12hr = 49%, QPF6hr = 0.00 in, PoP12hrQPF6hr = 0: This is a good result.
    -PoP12hr = 49%, QPF6hr = 0.01 in, PoP12hrQPF6hr = 0: This is a good result.

    -NDFD_QPF_Checks

    -The edit areas were constructed from the following query:

    -wxContains(Wx,[],['', 'BD', 'BN', 'BS', 'F', 'FR', 'H', 'IC', 'IF', 'K', 'T', 'VA', -'WP', 'ZF', 'ZY',[],[],[]) & (QPF6hr > 0) & ISC_Send_Area (This all fits one the query -line in the GFE.) Explanation of this figure follows the screen print below.
    -NDFD_QPF_Checks

    -The edit areas were constructed from the following query:

    -wxContains(Wx,[],['', 'BD', 'BN', 'BS', 'F', 'FR', 'H', 'IC', 'IF', 'K', 'T', 'VA', -'WP', 'ZF', 'ZY',[],[],[]) & (QPF6hr > 0) & ISC_Send_Area (This all fits one the query -line in the GFE.) The query simulates the inconsistency for this check: Where QPF6hr > 0, -the Wx grid has no precipitable type. -

    -The two previous screen shots show a case where two “non controlling” grids (Wx) are -individually inconsistent with the “controlling” grid (QPF6hr), but together are consistent. -In other words, everywhere the “first” Wx grid is inconsistent, the “second” Wx grid is consistent. -Similarly, everywhere the “second” Wx grid is inconsistent, the “first” Wx grid is consistent. -Since, together, the two Wx grids are consistent with the QPF6hr grid, there is no QPF6hrWx -temporary grid in either of the last two screen shots.
    -NDFD_QPF_Checks

    -The edit areas shown are from the following query:

    -(PoP12hr >= 50) & (QPF6hr < (0.01-0.0001)) & ISC_Send_Area

    -Explanation of this figure follows the screen print below.
    -NDFD_QPF_Checks

    -The edit areas shown are from the following query: -(PoP12hr >= 50) & (QPF6hr < (0.01-0.0001)) & ISC_Send_Area -This simulates the inconsistent condition of the check: Where PoP12hr >= 50, QPF6hr = 0. -

    -This example shows a case where one of the QPF6hr grids (06-12 UTC grid) is more inconsistent -with the PoP12hr grid than the other QPF6hr grid (00-06 UTC). The temporary PoP12hrQPF6hr -inconsistent grid has the value 1 (bad) only where both QPF6hr grids are inconsistent with the -corresponding PoP12hr grid.

    -Tips
    -If you have inconsistencies, here's an example of how you can quickly generate edit areas -for the inconsistent areas: -
      -
    • Left-click on the “?” to open the query dialog.
    • -
    • Under “Weather Elements”, there should be at least one temporary grid element listed. - Left-click on one of them, then left-click on the “==”, and finally left-click on the - number “1”. Then, left-click on “Submit”.
    • -
    • Move/hide/cancel the query dialog. Now, you can make an temporary grid editable, - assign a value or run a tool and these actions will apply to the inconsistent areas only.
    • -
    -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/PlotSPCWatches.html b/cave/com.raytheon.viz.gfe/help/PlotSPCWatches.html deleted file mode 100644 index 7079f1d0fe..0000000000 --- a/cave/com.raytheon.viz.gfe/help/PlotSPCWatches.html +++ /dev/null @@ -1,95 +0,0 @@ - - - - - PlotSPCWatches - - -
    -

    PlotSPCWatches

    -

    Procedure for adding SPC Watches into your Hazards Grid

    -March 9, 2012
    -
    - -
    -
    -

    Methodology

    -The PlotSPCWatches procedure is used to automatically take the -official watch outline (WOU) product, decode the counties, watch times, -and watch numbers, and plot this into the Hazards grid. Note: to run -this -procedure, the Hazards grid cannot be separated into temporary grids as -done by SeparateHazards. If it is -separated, use the MergeHazards -tool to recombine the temporary grids.
    -
    -When a WOU arrives from SPC, it is decoded internally, and a -notification appears on all GFEs.
    -
    -WOU Notification
    -
    -Next, the forecast will select PlotSPCWatches -from the Hazards -menu.
    -
    -PlotSPC Menu
    -
    -The tool then plots all active watches into the Hazards grid.
    -
    -Plotted Watches
    -
    -If the latest WOU cancels an existing watch, you will see the watch -removed. If the latest WOU replaces a portion of an existing watch, the -watch will be -overwritten in the grid.
    -
    -
    If for some reason a cancellation VTEC code does not arrive for -an -existing watch, you may need to run SeparateHazards, -delete the canceled watch grid, then run MergeHazards -. To create your WCN, save your Hazard grid in GFE, publish it to -official, -the run the Hazard_WCN formatter in Formatter -Launcher.
    -
    -
    -
    -

    How -It Works

    -The PlotSPCWatches procedure analyzes the VTEC -active table and filters records.
    -
      -
    • Records currently valid (not ones from the past) from the WOU and -WCN products are separated into those originating from SPC (with action -codes of NEW CON EXT EXA and EXB), and those from non-SPC (all actions -including EXP and CAN).
      -
    • -
    • Records are then compared. Records are eliminated from the -SPC list that are also in the non-SPC list. Comparisons are based -on the Event Tracking Number, Geographical Zone, Phen and -Sig. After this step, the SPC list should only have records -that contain the NEW watch.
    • -
    • Records containing EXP and CAN codes are now eliminated from the -non-SPC list.
    • -
    • The two data sets are combined and then overlapping watches are -eliminated.
      -
    • -
    • All existing watches are eliminated from the Hazards grid and -then the calculated watches are added to the Hazards grid.
    • -
    -Note: The PlotSPCWatches tool only plots events that are compatible -with the current GFE mode. If the GFE mode is operational, then -only "X", "O", and "E" WOU/WCN events will be considered. If the -GFE mode is "TEST", then only "T" WOU/WCN events will be considered.
    -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/PlotTPCEvents.html b/cave/com.raytheon.viz.gfe/help/PlotTPCEvents.html deleted file mode 100644 index 689a964b5e..0000000000 --- a/cave/com.raytheon.viz.gfe/help/PlotTPCEvents.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - PlotTPCEvents - - -

    PlotTPCEvents

    -
    -

    Procedure to put the current tropical hazards into the Hazards grid

    -March 9, 2012
    -
    -
    Methodology
    -How It Works
    -
    -NOTE: Due to policy changes (effective 2007 tropical season) in the TCV -in that the TCV only covers -coastal zones, the PlotTPCEvents now only clears and sets values in the -Hazard grids for coastal zones. Values created by the -forecaster in the marine zones will not be modified by the -PlotTPCEvents procedure.  No Event Tracking Numbers are set in the -Hazards grid since ETNs for tropical events now follow WFO numbering.
    -
    -

    Methodology

    -
    -
    -
    -The PlotTPCEvents procedure is used to automatically decode the -Tropical Prediction Center TCV product, and plot the resulting data in -the GFE Hazard Grid. -To run this procedure, the Hazards grid cannot be separated into -temporary grids as done by SeparateHazards. -If it is separated, -use the MergeHazards -tool to recombine the temporary grids.
    -
    -When a TCV arrives from TPC, it is decoded internally, and a -notification appears on all GFEs. -

    -TPC Notification
    -
    -Next, the forecast will select PlotTPCEvents -from the Hazards -menu.
    -
    -TPC Menu
    -
    -The procedure then plots all active tropical watches/warnings into the -Hazards grid.
    -
    -TPC Output Grid
    -
    -If the latest TCV cancels an existing event, you will see the event -removed. If the latest TCV replaces a portion of an existing event, the -watch/warning will be overwritten in the grid.
    -
    -If for some reason a cancellation VTEC code does not arrive for an -existing tropical event, you may need to run SeparateHazards, -delete the canceled hazard then run MergeHazards. -
    -
    -The TCV product and the PlotTCVEvents procedure only contain coastal -zone events. The forecaster is responsible for adding the -appropriate marine tropical events and inland tropical events to the -Hazards grid. PlotTCVEvents will only remove coastal zone events -and not inland or marine events.
    -
    -
    -
    -

    How It Works

    -This procedure is based on the TCV product events that have been -captured into the VTEC Decoder. The -procedure performs the following steps:
    -
      -
    • Reads the vtec active table.
    • -
    • Filters out all non-tropical hazards.
      -
    • -
    • Filters out records from non KNHC (TPC).
    • -
    • Creates a list of zones for each tropical phenomena and -significance for both active events (VTEC action is NEW, CON, EXA) and -cancelled events (VTEC action is EXP, CAN).
      -
    • -
    -Once the correct set of events have been determined,  any existing -tropical hazards in the Hazards grid that are found in the cancelled -event list are removed. Then the -calculated events are added to the Hazards grid.
    -
    -Note: The PlotTPCEvents tool only plots events that are compatible -with the current GFE mode. If the GFE mode is operational, then -only -"X", "O", and "E" TCV events will be considered.  If the GFE mode -is "TEST", then only "T" TCV events will be considered.
    -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/Populate_SkyProcedure.html b/cave/com.raytheon.viz.gfe/help/Populate_SkyProcedure.html deleted file mode 100644 index defd4458ce..0000000000 --- a/cave/com.raytheon.viz.gfe/help/Populate_SkyProcedure.html +++ /dev/null @@ -1,235 +0,0 @@ - - - - - Populate_SkyProcedure - - - - - - -Populate_SkyProcedure -
    -
    -Overview -
    -
    - The Populate_SkyTool (and -Populate_SkyProcedure) populate the GFE Sky_Cover grids based on an algorithm that finds -the maximum model-layer relative humidity (RH), and then applies an exponential relationship -to convert RH to sky cover at each grid point. The Populate_SkyTool contains other functions, -including the ability to turn on/off near surface and high clouds, the option to apply RH -with respect to ice at temperatures below -25C, and “limit value” functionality. -This document explains how the Populate_SkyTool works, and tips for using it. -

    -This section explains the underlying premise of the Populate_SkyTool, and how it uses model RH to -determine sky cover. -
      -
    1. Clouds are determined by first finding the maximum model layer RH (at each grid point) - at the forecast time, corresponding to the availability of model data. The methodology eliminates - the need to manually “pick” a level or layer where the clouds are expected.
    2. -
    3. The maximum model layer RH is converted to sky cover through an exponential function, which - can be customized on-the-fly by the forecaster. The exponential relationship has been established - observationally in previous published works (e.g., Walcek, 1994, his Figure 7b), but the exact - shape of this function is not well known and likely depends on stability, shear, temperature, - and other variables. Where model RH is concerned, varying model resolution and different physical - parameterizations impact the distribution of RH. Thus, the exponential function can be customized - by the forecaster to adjust the resultant sky cover.
    4. -
    5. Other functionality, including a “limit values” feature, the ability to turn on/off clouds - below 925mb and in the 500-300 mb layer, and the ability to use a modified RH with respect to - ice at temperatures colder than -25C, augment the basic functionality of the tool outlined in - points 1 and 2.
    6. -

    -Maximum model layer RH Algorithm
    -Since GFE OB7.1, both the GFS40 and NAM12 include near-surface layers (30mb deep), with respect to -ground level. The Populate_SkyTool makes use of the mean RH in the lowest 4 of these near-surface AGL -layers. From 925mb to 500mb, the Populate_SkyTool has available RH data in 25mb increments. From 500mb -through 300mb, the vertical resolution available is 50mb. The RH data points are shown schematically -in Figure 1. -

    -When the user opts to exclude clouds below 925mb, the 4 near-surface layers are excluded from consideration. -When the user opts to exclude clouds between 500-300mb, RH from these data points are excluded from -consideration. Otherwise, the Populate_SkyTool uses all available RH information to determine the highest -model-layer RH value in the vertical. Each of the 4 near-surface 30mb layers is considered independently. -If the user selects a layer depth of 50mb, then 50mb centered averages are computed between 925-525mb as -follows:
    -Populate_SkyProcedure

    -where the subscript p refers to the adjacent vertical grid points. As an example, if the forecaster selects -a 50mb layer depth, then the mean RH centered about 850mb is given by,
    -Populate_SkyProcedure

    -This RH value is considered with all the other layer RH values to determine which layer has the greatest RH. -Since data is used every 25 mb, the successive 50mb RH layers overlap in the vertical. Since data is available -in 50mb increments from 500-300mb, a two-level average is taken as follows:
    -Populate_SkyProcedure

    -When 25mb layers are selected by the user, the averaging scheme involves two successive model layers:
    -Populate_SkyProcedure

    -Once the layer RH values are computed, the algorithm determines the maximum model-layer RH, and considers -this RH in determining the cloud amount (as shown in the next section).
    -Populate_SkyProcedure
    -Figure 1. Vertical grid layers and grid points utilized by the Populate_SkyTool maximum model-layer -RH algorithm.

    -Application of Exponential Response Function
    -It is assumed by the Populate_SkyTool that an exponential relationship exists between model layer RH and -cloud amount, and model layer RH is the only variable used by the tool. The exponential function allows the -tool to depict a large range of sky cover values and sharp spatial gradients in sky amount. The forecaster -has control over the shape of the exponential function used in the Populate_SkyTool, as explained below. -

    -The basic exponential function used takes the form of:
    -Populate_SkyProcedure
    -where a and b are multiplying factors modifying the shape of the function. -

    -In the specific case of the Populate_SkyTool, a basic exponential function was assumed, with variables to allow -for modification of the function’s shape. While we are confident the function is inherently exponential -in nature, there is not a unique correct shape for this model RH-Sky relationship; it depends on model -parameterizations and other physical factors. So, the goal here is to allow flexibility for adjustments, -if necessary, based on a forecaster’s operational experience with the behavior of the numerical models in -various situations. The function is:
    - Populate_SkyProcedure
    - Where dash-RH is the maximum model layer RH value (in percent), RHCLR (in percent) is the user - customized RH threshold for clear skies (resultant Sky Cover 5% or less), and b is a calibration - factor that modulates the slope of the exponential function. The default values are b=1.0 and - RHCLR = 60%. Setting these variables within the Populate_SkyTool is explained further in Section 4.

    - EXAMPLE 1. -

    -Based on the tool’s default values (b=1.0, RHCLR=60%), when the max model layer RH = 100%, we get:
    -Populate_SkyProcedure
    -A maximum model layer RH of 100% yields 100% sky_cover at that grid point in GFE. -

    -EXAMPLE 2. -

    -Again, using the tool’s default values (b=1.0, RHCLR=60%), when the max model layer RH = 60%, we get:
    -Populate_SkyProcedure
    -So, for any value of RH equal to or less than RHCLR, our sky cover value is 5% or less (generally taken -as “clear skies”). -

    -We can better see the modulating effects of RHCLR and b (calibration), by graphing the function:
    -Populate_SkyProcedure
    -Figure 2. The exponential function employed by the Populate_SkyTool relating maximum model layer RH (%) -to sky cover (%) for the default values (b=1.0, RHCLR = 60%; shown as thick solid line), and values of -b=1.0 and RHCLR = 44% (short dashed gray line), b=1.0 and RHCLR = 74% (short dashed green line), b=1.5 -and RHCLR = 44% (long dashed gray line), and b=1.5 and RHCLR = 74% (long dashed green line). In the GUI, -b is referred to as the calibration value and RHCLR is the 5% sky cover threshold. -

    -Increasing the calibration value (b) increases the slope of the curve (long dashed lines in Figure 2) as -compared to the default curve (thick solid line), with 100% sky cover occurring at a value less than 100% -model layer RH (e.g., 81.3% for b=1.5 and RHCLR = 44%). At the same time, the 5% sky cover threshold is -adjusted in this case to 44%. Meanwhile, leaving b constant (at 1.0) and modulating the RHCLR threshold -(from 44% to 74% in Figure 2) primarily modifies the shape of the function at mid-range RH values -(i.e., 50-90%), while maintaining 100% sky cover for 100% maximum model layer RH. -

    -The extreme values of b and RHCLR allowed by the tool are arbitrary, except for the low value of b=1.0 -which corresponds to 100% sky cover for 100% RH. The range and default values for b and RHCLR allowed by -the tool were determined subjectively (by trial and error) and generally capture the range of desired sky -values in most situations. If the forecaster desires more clouds at high RH values, the calibration value -should be set higher. On the other hand, if the forecaster desires cloud amount to taper off more slowly -as RH decreases, the value of RHCLR can be set lower. Since the numerical models handle moisture differently, -and initializations are not perfect, there is no one “correct” response function. Again, the goal is simply -to allow the forecaster some flexibility in modifying the exponential response for a given situation or for -model biases common to their forecast area. -

    -Running the Populate_SkyTool in GFE
    -To run the Populate_SkyTool, make Sky the editable grid element in the GFE temporal editor, and -select MB3->Populate_SkyTool from the Main Menu. When you select the -Populate_SkyTool, you will see a graphical user interface (GUI) appear, as shown below.

    -Populate_SkyProcedure

    -The following is an explanation of each option within the Populate_SkyTool GUI:
    -
      -
    • Model: Select the model you wish to use, either GFS40 or NAM12. The NAM12 can be used on - grids out 84 hours from the current model run time, and is available in 3-hrly increments. The GFS40 - is available in 6-hrly increments out through 180 hours.
    • -
    • Model Run: Select the model run you wish to use, either the current run, or the previous - (6 hour earlier) run. Note: as new model data is coming into GFE, you may need to select the previous - version for the tool to run.
    • -
    • Layer Depth: This controls the depth of layer RH used in computing the model’s maximum layer - RH. The choices are 25mb or 50mb layers, as outlined in the previous section, and pertain to model levels - between 925mb and 500mb.
    • -
    • Use RH with respect to ice at temperatures at or below -25C: This switch toggles on/off a - modified RH with respect to ice, useful in capturing clouds composed primarily of ice crystals (e.g., - cirrus clouds). These clouds may or may not be opaque in character, and the option to fully represent - these clouds in the Populate_SkyTool is included as an user option.
    • -
    • Include High Clouds (500-300mb): This toggles on/off model RH between 500-300mb from - consideration in determining the layer with the highest model-layer RH and corresponding cloud - cover.
    • -
    • Include Clouds Below 925mb: This toggles on/off the four near-surface (30mb AGL) layers - from consideration in determining the layer with the highest model-layer RH and corresponding cloud - cover.
    • -
    • 5% Sky Cover Threshold at RH percentage: This slider bar sets the threshold for clear - skies (taken as 5% sky cover). If the maximum model-layer RH value is equal to or less than this - percentage, the sky cover will be equal to or less than 5%.
    • -
    • Calibration: This slider bar controls the slope of the exponential function (parameter - b in equation (5)), and at what RH value saturation occurs. Increasing the calibration value results - in more clouds for a given RH percentage.
    • -
    • Limit Values: After the algorithm runs, the limit values slider bars can be used to set - bounds on the minimum and maximum sky cover amount returned by the tool at any grid point in the domain. - It works in a manner analogous to the baseline “Limit Values” Smart Tool in GFE.
    • -

    -Once you select your options, choose Run or Run/Dismiss at the bottom of the GUI and the -Smart Tool will populate the sky grid for the selected hour. -

    -Running the Populate_SkyProcedure in GFE
    -The Populate_SkyProcedure is available from the Populate menu of GFE and allows the Populate_SkyTool -to be run over a user selected time range in GFE, with interpolation performed on hourly grids between -the available model data times. The GUI is largely the same, but two important notes are included near -the top of the GUI. As noted, to run the procedure, press and hold the left mouse button and scroll -across the range of sky grids desired in the Grid Manager. The start and end times selected by the user -must correspond to a 3-hrly or 6-hrly temporal grid block that contains model data in order for the -procedure to run properly. These times are model dependent: -
      -
    • For the NAM12, the available grid times are 00, 03, 06, 09, 12, 15, 18, 21 UTC, out 84h from the - model run time.
    • -
    • For the GFS40, the available grid times are 00, 06, 12, 18 UTC, out 180h from the model run time - (through the end of day 7).
    • -
    -Once you select your options and highlight your time range, choose Run or Run/Dismiss at -the bottom of the GUI. The procedure will create scratch grids at the available model times, and then -run the Populate_SkyTool at each of those times to populate the grids with sky cover amount. When this -step is complete, the procedure interpolates between the 3-hrly or 6-hrly grid times to create hourly sky -grids.

    -Populate_SkyProcedure

    -Assumptions and Limitations
    -
      -
    • It is assumed that an exponential relationship exists between model-layer RH and cloud amount. - This is supported by observational work (e.g., Walcek 1994), but it is also known that temperature, - stability, and vertical shear relate to sky cover, factors not considered by the tool (except for - accounting for RH over ice at temperatures less than -25C). This tool provides an “on-the-fly” manual - adjustment approach to estimate and account for uncertainties in the model-layer RH-cloud relationship. - There is not a unique correct relationship between model-layer RH and sky cover.
    • -
    • The model-layer RH – sky cover relationship is dependent upon model resolution and physical - parameterizations.
    • -
    • The tool is dependent on model forecasts. If moisture is not handled adequately in a particular - model solution, the sky output from the tool is not likely to be accurate. The limit values and other - options are provided to subjectively adjust the output as needed.
    • -
    • The Populate_SkyTool was formulated for relatively low elevations of the eastern CONUS. Pressure - thresholds (such as 925mb) won’t translate well to the high plains or intermountain west, and would - require some modification of the source code in these parts of the CONUS.
    • -

    -Other Tips
    -
      -
    • BUFKIT is a useful software tool to understand and anticipate the sky cover values generated by the - Populate_SkyTool based on model forecast soundings. Viewing point model soundings can give the - forecaster a better idea of when they may want to toggle on/off high and low clouds, and whether - population with the NAM12 or GFS40 is more desirable in a given situation.
    • -
    • In some forecast areas, the NAM12 tends to reach 100% RH more easily than the GFS40, but the NAM12 - also tends to show low-level RH values that are too high beneath frontal and subsidence inversions - (often near saturation). In these situations, turning clouds below 925mb off can give a more accurate - result. Also, if high near-surface RH resulting from anticipated ground fog is appearing as cloud cover, - turning off clouds below 925mb will help mitigate this problem.
    • -
    • To maximize high cloud amount in the Populate_SkyTool, include both 500-300mb clouds and turn on the - RH over ice calculation.
    • -
    • For thin cloud layers, set the cloud layer depth to 25mb. The tool takes slightly longer to run, but - it will better depict narrow zones of relatively high RH and associated clouds (provided it is captured - accurately in the model).
    • -
    -
    - diff --git a/cave/com.raytheon.viz.gfe/help/Python.html b/cave/com.raytheon.viz.gfe/help/Python.html deleted file mode 100644 index d77b7013f3..0000000000 --- a/cave/com.raytheon.viz.gfe/help/Python.html +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - Python Tutorial and Programming Guidelines - - - -
    -

    -GFESuite Python Tutorial and Programming Guidelines

    - -

    -Contents

    - - - - - - - - - -

    -Introduction

    - -
    GFESuite extensions such as Smart Tools and Smart Initialization -are written in an interpreted scripting language called Python. It is a -very powerful, object-oriented language and all the features of Python -are available to you. We also use a Python library, called Numpy (Numerical -Python in AWIPS1), which allows for efficient operations on grids of data. -The GFESuite software provides some additional methods to help you operate -on Numerical data. This tutorial will introduce you to the features of -Python and Numpy that are relevant to the GFESuite. If you are -interested in Python's full capabilities, visit -their web site. Specifically, documentation on Numpy -can be found in the Numpy Tutorial page. - - - - - - - - - - - diff --git a/cave/com.raytheon.viz.gfe/help/PythonConcepts.html b/cave/com.raytheon.viz.gfe/help/PythonConcepts.html deleted file mode 100644 index edef50a5b0..0000000000 --- a/cave/com.raytheon.viz.gfe/help/PythonConcepts.html +++ /dev/null @@ -1,312 +0,0 @@ - -GFESuite Documentation - Python Concepts - -

    -Python Concepts

    -
    - - -
        Methods
    - - -
            Lists
    -
            Tuples
    -
            Dictionaries -
        Classes
    -        Inheritance
    -
    - -
    Here is a simple piece of Python code to illustrate the -basic features:
    - -
    def myMethod(value1, value2):
    - -
        # This is a -comment
    - -
      -
        if value1 == 0:
    - -
            -print "No value"
    - -
        elif value1 -> 10:
    - -
            -print "Value is greater than 10 "
    - -
        else:
    - -
            -print "Value is ", value1
    -
    -

    Indentation and Comments

    -
    Python recognizes code blocks by indentation. Because -there are no brackets, you must make sure that statements within a code -block all begin in the same column. Fortunately, the Python editor helps -enforce this when you use the Tab key. Comments are denoted by the number -sign: #
    -
    -

    -Methods

    -
    Python methods or functions are defined with the "def" -keyword followed by method name, arguments, and a colon.
    -

    -"if" statements

    - -
    The format of an "if" statement with "elif" and "else" -is shown above. Note that there are no parentheses around the expression -which is instead followed by a colon.
    - -

    -Data Structures

    - -
    Variables need not be declared or typed. They are defined -as they are used. There are very powerful built-in data types.
    - -
    -
  • -Lists
  • -
    - -
    A List is written as a list of comma-separated values -(items) between square brackets. List items need not all have the same -type. Lists are accessed via their index. -

    Example: -
     

    - -
        myList = ['spam', -'eggs', 100, 1234]
    - -
        myFavoriteFood -= myList[0]
    - -
      -
    • -Tuples
    • -
    - -
    A tuple consists of a number of values separated by commas, -for instance:
    - -
        t = (12345, -54321, 'hello!')
    - -
        myNumber = t[0]
    - -
    They are indexed and referred to just as lists, but cannot -be changed i.e. they are immutable.
    - -
      -
    • -Dictionaries
    • -
    - -
    Another useful data type built into Python is the dictionary. -Dictionaries are sometimes found in other languages as ``associative memories'' -or ``associative arrays''. Unlike sequences, which are indexed by a range -of numbers, dictionaries are indexed by keys, which can be any immutable -type such as strings and numbers. Tuples can be used as keys if they contain -only strings, numbers, or tuples. You cannot use lists as keys, since lists -can be modified.
    - -
      -
    It is best to think of a dictionary as an unordered set of "key:value" -pairs, with the requirement that the keys are unique (within one dictionary). -A pair of braces creates an empty dictionary: {}. Placing a comma-separated -list of "key:value" pairs within the braces adds initial "key:value" pairs -to the dictionary; this is also the way dictionaries are written on output. -The main operations on a dictionary are storing a value with some key and -extracting the value given the key. Here is an example using a dictionary:
    - -
     
    - -
        tel = {'jack': -4098, 'sape': 4139}
    - -
        tel['guido'] -= 4127
    - -
        jacksNumber -= tel[`jack']
    - -
        print tel
    - -
        print jacksNumber
    - -
    Result:
    - -
        {'guido': 4127, -'jack': 4098, 'sape':4139}
    - -
        4098 -
      -

    -Classes

    -A "class" is a collection of methods and statementes that are related and -perform a coherent set of tasks.  For example, if we have a set of -methods that perform useful operations on strings, we might want to create -a class structure to group them together.  A simple class can be declared -as follows: -

         class MyClass:                                -# class declaration -
              -def myMethod(self, str):        # method -defined within the class -
                    -print str                                -# a simple print statement -

    Notice the indentation.  Every method or variable within the class -must be indented consistently to indicate its inclusion in the class.  -Note the special "self" argument.  This is a way for us to keep track -of what class a method or variable belongs to.  You don't need to -worry much about it except to: -

    -
  • -Make sure to list "self" as the first argument of method definitions within -the class and
  • - -
  • -Make sure that when calling another method within the class, use "self.methodName" -omitting  "self" as the first argument:
  • -
    -     class MyClass: -
              -def myMethod(self, str): -
                    -print str -
              -def anotherMethod(self): -
                   -self.myMethod("guido rocks") -
      -
    • -Make sure that if you want to use a variable in multiple -methods of a class, you refer to it with the "self" qualifier:
    • -
    -     class MyClass: -

              -def myMethod(self, str): -
                    -print str -
                   -self.myStr = str -

              -def anotherMethod(self): -
                    -self.myMethod("guido rocks") -

             -def aThirdMethod(self): -
                   -print "Last string printed", self.myStr -

    When you want to use the methods inside a class, you "instantiate" the -class or create an instance of the class.  Then you can call the methods -of the class as shown below: -

          classInstance = -MyClass() -
          classInstance.myMethod("spam -and eggs") -

    This would result in output of: -

            spam -and eggs -

    Finally, you may want to include a "constructor" -which is a special method to be run any time the class is instantiated.  -This is handy if you want to initialize variables. -

        class MyClass: -
             -def __init__(self): -
                  -self.myStr = "" -

    -
  • -Inheritance
  • -
    -Often we find that a new class would benefit from having the functionality -of an existing class.  Instead of altering the existing class, we -can "inherit" its functionality and then add to it or alter it in our new -class. For example,  suppose we have a WeatherElement class that stores -and performs general operations on  a weather element such as temperature,  -sky cover, or wind.    We might find operations for creating -a new grid, storing a grid or deleting a grid from the inventory.  -However, when we need to calculate the values for the grid, our functions -might be different depending on whether the weather element is a Scalar -or a Vector.  In this case, we might want to create two new classes, -one for operating on Scalar weather elements and one for operating on Vector -weather elements.  However, we would like both classes to have access -to the general methods in the original WeatherElement class. -

    When there is an inheritance relationship, we call the existing class -the "base" class and the new class the "derived" class.  This relationship -is specified as follows: -

         class DerivedClass (BaseClass): -
               -def __init__(self): -
                    -BaseClass.__init__(self) -

    Notice that we included a constructor and instantiated the BaseClass -to ensure that any base class initializations will take place.   -Here's how our example classes might be declared: -

        class WeatherElement: -
               -def __init__(self): -
                   -pass -
               -def storeGrid(self): -
                     -... -
               -def deleteGrid(self): -
                    -... -
               -def createGrid(self): -
                   -... -

         class ScalarElement (WeatherElement): -
               -def __init__(self): -
                    -WeatherElement.__init__(self) -
               -def calculateScalarValues(self): -
                     -... -

         class VectorElement (WeatherElement): -
               -def __init__(self): -
                    -WeatherElement.__init__(self) -
               -def calculateVectorValues(self): -
                     -... -
               -def createGrid(self): -
                    -# Special case of creating a vector grid -
      -

    Now the DerivedClass can call any methods in the BaseClass using the -"self" argument.   So, for example, the "storeGrid" method is -available to both the ScalarElement and VectorElement classes.  If -we want to alter the functionality of a BaseClass method, we can simply -include a copy of it in the DerivedClass definition and make any desired -changes to it there.  Notice that we have included a copy of the "createGrid" -method within the VectorElement class for which there will be some special -set-up when creating the vector grid. When a method is called, the system -first searches in the DerivedClass for it.  If it is not there, it -searches in the BaseClass.  Of course, the BaseClass may have inherited -from another class and, if so,  the search will proceed recursively. -

    Sometimes it is useful to draw classes and their inheritance relationships.  -We do so as shown below: -

    -
    -

    The classes are represented by the rectangles and the special "inheritance -symbol" indicates that the Derived Class inherits the methods and variables -from the Base Class.  Think of the symbol not as an arrow indicating -flow, but as an "umbrella" indicating inclusion of capabilities. -
    - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/PythonGuidelines.html b/cave/com.raytheon.viz.gfe/help/PythonGuidelines.html deleted file mode 100644 index b6582cbdf7..0000000000 --- a/cave/com.raytheon.viz.gfe/help/PythonGuidelines.html +++ /dev/null @@ -1,105 +0,0 @@ - -GFESuite Documentation - Python Programming Guidelines - -

    -Programming Guidelines

    - - - -
    - -

    -Style Suggestions

    - -
      -
    • -Comment your code -- it really makes a difference, not only to others trying -to understand your code, but to you when you're trying to debug it.
    • - -
    • -Name your variables meaningfully. A variable named  "threshold" -versus "x" makes code much easier to read.
    • - -
    • -Simple or Compound Statements
    • - -
      There are many ways to write software.  You can separate each -step in a calculation on a separate line and assign it to variables, or -you can combine everything on one line.  It all amounts to readability. -

      Take this example of a compound statement, which computes a convective -/ total precipitation ratio, then creates a boolean grid which is based -on total precipitation from 0 to 0.02", and then creates a grid with ProbPrecip -values if there is precipitation (precipMask) and the ratio (precipRatio) -is less than 10%: -

              precipRatio = cp_SFC -/ (tp_SFC + 0.0001) -
              precipMask = logical_and(greater(tp_SFC, -0.0), less(tp_SFC, 0.02*25.4)) -
              grid = where(logical_and(precipMask, -less(precipRatio, 0.1)), ProbPrecip, 0.0) -

      This same code fragment may be written in the following way. The precipRatio -is the calculated cp/tp ratio; precipPositive is a boolean grid where tp -> 0; precipLess2 is a boolean grid where tp < 0.02" (which includes -zero); precipBetweenZeroAnd2 is a boolean grid where tp > 0 and tp < -0.02"; precipRatioLess10 is a boolean grid where the precipRatio is less -than 10%, precipRatioAndLowPrecip is a boolean grid where tp > 0 and less -than 0.02", and where the cp/tp ratio is less than 0.1: -

              precipRatio = cp_SFC -/ (tp_SFC + 0.0001) -
              precipPositive = greater(tp_SFC, -0.0) -
              precipLess2 = less(tp_SFC, -0.02*25.4) -
              precipBetweenZeroAnd2 -= logical_and(precipPositive, precipLess2) -
              precipRatioLess10 = -less(precipRatio, 0.1) -
              precipRatioAndLowPrecip -= logical_and(precipRatioLess10, precipBetweenZeroAnd2) -
              grid = where(precipRatioAndLowPrecip, -ProbPrecip, 0.0) -

      The second fragment, though longer, is composed of simpler statements -and is easier to follow and read.  Note also, that we have named the -variables to reflect the concepts and improve readability.

    - -

    -Trouble-shooting Ideas

    - -
      -
    • - Error Messages:   Make sure you are running the GFE from -a terminal window so that you will see any Python error messages that occur -when you run your  Smart  Tool or Procedure. These messages will -give line numbers and descriptions that help you trace the origin of the -problem.
    • - -
    • - Print Statements:  Using the Python "print" statement within -your Smart Tool or Procedure is one of the quickest ways to determine where -a problem is occurring and what might be causing it.  Simply interspersing -"progress" statements such as the following throughout your tool can help:
    • -
    -             -print "Made it to this point" -

             Here are some other -example "print" statements: -

               print "myVariable -=",   myVariable -

               # To print -Python Numeric array information: -
               print   -"Dimensions of array T:",  T.shape,   "Value of T at point -20, 20: ", T[20][20] -

      -
    • -Simplify:  If the problem is within a complicated method, simplify -it by commenting out the code and gradually introducing pieces of it.  -Go back to something you know works and then start adding functionality -to it.
    • -
    -
    - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/PythonNumericalPython.html b/cave/com.raytheon.viz.gfe/help/PythonNumericalPython.html deleted file mode 100644 index eedfc8c25d..0000000000 --- a/cave/com.raytheon.viz.gfe/help/PythonNumericalPython.html +++ /dev/null @@ -1,318 +0,0 @@ - -GFESuite Documentation - Numpy - -

    -Numpy

    - - -
       Grids
    - - - - - - - - - - - -
       Cubes
    - - - - - -
       Reducing
    - -
    - -Numpy is an extension to Python that provides the capability -of operating on grids easily and efficiently. The syntax for -Numpy is fully explained in the Numpy -Tutorial. In this section, we will explain the basic concepts -that are relevant to the GFESuite.  To access the Numpy -library, include the following statement in your Python module: -

    from numpy import * -

    -Numeric Arrays

    -The basic data structure for Numpy is a Numeric Array. -The array objects are generally homogeneous collections of potentially -large volumes of numbers. All numbers in a array are the same kind (i.e. -number representation, such as double-precision floating point). Array -objects must be full (no empty cells are allowed), and their size is immutable. -The specific numbers within them can change throughout the life of the -array. Here is an example of Python code using the array objects (italicized -text refers to user input, non-italicized text to computer output): -

    > python -
    >>> from numpy import * -
    >>> vector1 = array((1,2,3,4,5)) -
    >>> print vector1 -

    [1 2 3 4 5] -

    >>> matrix1 = array(([0,1],[1,3])) -
    >>> print matrix1 -

    [[0 1] -

    [1 3]] -

    >>> print vector1.shape, matrix1.shape -

    (5,) (2,2) -

    # Note the "shape" is the dimensions of the array -

    >>> print vector1 + vector1 -

    [ 2 4 6 8 10]] -

    >>> print matrix1 * matrix1 -

    [[0 1] -

    [1 9]] -

    # Note that this is not the matrix multiplication of linear algebra - - -

    -Grids

    -GFESuite extensions such as Smart Tools and Smart Initialization provide -access to grid data via 2-dimensional Numpy arrays. The -naming of these grids and the methods of access may differ, but the concepts -and operations on the underlying Numpy arrays is the same. -

    -Basic Arithmetic Operations

    -Basic arithmetic operations are very easy in Numpy and operate -on entire grids at once. When operating on grids, we ensure that -the grids are all the same size in the x and y dimensions. Any D2D or IFP -data that you access is assured to have the same grid sizes. -If you have two grids, called grid1 and grid2 and you want to make a difference -grid and store it into grid3, then the syntax is: -

            grid3 = grid1 - grid2 -

    If you want to add a constant value to a grid, then the syntax is like -this: -

            grid = grid + 5.0 -

    Converting a grid from degrees Kelvin to degrees Fahrenheit is as simple -as: -

            gridF = (gridK - 273.15) -* 9/5 + 32 -

    In general, do not use loops to index through points in the grid. -Performance will suffer greatly. Normally you access the entire grid -at a time, using the above syntax. The operation you specify will be applied to EVERY grid -point in the grid. -

    To initialize a grid, GFESuite extensions provide an empty array (set -to zeros) guaranteed to be of the correct dimensions.  The empty array -is called "self._empty". To initialize a grid to a particular value, -say 3.0: -

            grid = self._empty + 3.0 -

    Note:  self._empty is not available in Python in general. -It is specific to GFESuite extensions such as Smart Tools and Smart Initialization -which have knowledge of the appropriate grid dimensions for your domain. -

    -Logical Statements and Masks

    -Logical statements are used to compare grid values. The result from -a logical statement is typically a "boolean" grid, which is a grid that -has either 1 (true) or 0 (false) values.  These grids are sometimes -called "masks" and are used with conditional statements. Each logical -statement requires two arguments, the first being the grid, -and the second being the numerical value for comparison (or even another -grid). Here is a subset of statements that you may find useful: -

            less(),  equal(),  -not_equal(),  greater(),  greater_equal(),  less_equal() -

    For example, to create a mask called bgrid, which represents whether -grid points of temperatures are greater than 50 degrees, the statement -would be: -

            bgrid = greater(tGrid, 50) -

    -Complex Logical Statements

    -Sometimes you need a mask that has two logical statements. You can -use the logical_and() and logical_or() statements to combine logical statements. -Each of these statements require two arguments, which are the ones that -are going to combine with "and" or "or". -

    For example, to create a mask called bgrid, which represents grid points -from temperatures that are between 40 and 60, you could use a statement -like this: -

            bgrid = logical_and(greater_equal(tGrid, -40), less_equal(tGrid, 60)) -

    To create a mask which represents the grid points from temperatures -that are below 40 or above 60: -

            bgrid = logical_or(less(tGrid, -40), greater(tGrid, 60)) -

    -Conditional Statements -- the "where" statement

    -Normally a logical statement isn't too useful by itself, and you want to -assign a value to a grid based on whether a conditional is true or false. -The where -statement is similar to a if...else... statement in C++ or Python. -The where statement takes three arguments: the first is the -logical statement, the second is the -value to be assigned to the grid if the logical statement is true, -and the third is the value to be assigned to the output if the logical -statement is false. -

            where(conditional statement, -assignment if true, assignment if false) -

    For example, -

            snowGrid = where(less(tGrid, -32), 10.0*QPF,  0.0)) -

    takes the tGrid and compares it to 32 degrees. This results in -a temporary boolean grid which has grid points that are set to true if -the temperature is less than 32 and -false if the temperature is greater to or equal to 32. -The calculated snow grid is based on the boolean grid and the QPF grid. -If the temperature is equal or above -32, then the "false"assignment is done, thus assigning zero to the -snowGrid. If the temperature is below 32, then the "true" assignment -is performed -and the snowGrid is set to 10 times the value of the QPF grid. -

    -Clipping (or Limiting) -the values of a Grid

    -Many output grids need to be clipped or limited to a range of values. -For example, if you calculate a QPF that is modified based on upslope and -downslope and the -calculation results in a negative QPF, you know that you need to change -it to 0.0 (since negative QPFs are not allowed). The "clip" function -takes three arguments: -the input grid, the minimum value, and the maximum value. -

            finalQPF = clip(calcQPF, -0.0, 10.0) -

    -Cubes

    -While the GFESuite Forecast grids represent surface weather elements, D2D -model grids often represent weather elements at various atmospheric levels. -In Numerical Python, we can represent this data as 3-dimensional arrays, -or cubes. When examining weather element cubes, we often -have a cube of geopotential height available to map between pressure levels -and elevation. -

    -
      -

    Note the naming convention we use for cube variables: wxElement_c -where _c indicates a cube. -

    -Accessing Parts of Grids and -Cubes

    -The syntax for accessing individual rows or columns in a grid is similar -to accessing portions of a list in Python, using the bracket and colon -syntax. For example: -

            print grid[25][45] -

    will print the value of the grid at the 45th column of the 25th row. -

    Refer to the Numerical Python documentation for more details. -For cubes, you can access any individual level using indexing, or -multiple levels using more complicated indexing. For example, if -you have an relative humidity cube of 6 levels, and you want just the 2nd -level (remember Python counts from 0), you would use this syntax: -

            rh_c[1] -

    If you wanted a cube that only had the 2nd through 4th levels, then -the syntax would be: -

            rh_c[1:3] -

    -Looking Up the Columns of a Cube

    -Some of your algorithms will want to "look up the columns" of a cube and -then stop when certain critera has been reached. An example of this -is the calculation of freezing level.  We want to start at the surface -and go up until we reach the point where the temperature is below freezing. -Then we interpolate between that level and the previous level to find the -"real" freezing level. -

    The following function (from Smart Initialization) accesses the cubes -of geopotential heights and temperatures.  The true surface topography -grid is also accessed: -

        def calcFzLevel(self,  gh_c,  t_c,  -topo): -

    We start with a grid that contains -1.  The  self._minus variable -is a 2-D grid of -1s. During the calculation up the column, the grid -will contain -1 if the freezing level has -not yet been reached, or the actual freezing level if the level has -been reached. We make the assumption that the freezing level can -never be -1 (since that is below sea level). -

            fzl = self._minus -

    The for loop "i" goes from 0 to the size of the z dimension of  -the cube of gh.  The 0 represents the 'z' dimension. -

            for i in xrange(gh_c.shape[0]): -

    We use a try/except block to "catch" the failure on the first iteration -of the for loop. The exception is caused by accessing the -"i-1"th level which is illegal when i == 0. -

                try: -
                    -# Interpolate between cube levels -
                    -val = gh_c[i-1] + (gh_c[i] - gh_c[i-1]) / (t_c[i] - t_c[i-1])  * (273.15 -- t_c[i-1]) -
                -except: -
                    -# Handle the first level -
                    -val = gh_c[i] -

    After we have calculated "val", which is a 2-D grid, representing the -freezing level height based on the two temperatures and two gh values at -each layer, then we apply it only in certain cases. The following statement only -assigns the calculated freezing level if it already hasn't been assigned, -and the actual temperature of the layer is less than freezing. -

                fzl -= where(logical_and(equal(fzl, -1),  less_equal(t_c[i], 273.15)), -val,  fzl) -

    The following simply converts the meters to feet. -

                fzl -= fzl * 0.3048 -

    And the grid is returned. -

                return -fzl -
    -

    -Reducing

    -The concept of "reducing" is a numpy concept of taking a multi-dimensional -grid (or cube) and reducing its dimensions. Another concept is flattening -the grid. For example, take all of the relative humidities from the -surface to a fixed millibar level and average them. You start with -a cube of rh and end up with a 2-D grid of average rh. This example -calculates the probability of precipitation based on the Fcst QPF, -and the geopotential heights and relative humidity cubes. -

        def calcPoP(self, gh_c, rh_c, QPF, topo): -

    The first few lines take the gh and rh cubes and only use the first -8 levels. -

            # only use the first -8 levels (up to MB600) -
            gh_c = gh_c[:8,:,:] -
            rh_c = rh_c[:8,:,:] -

    The less statement creates a 3-D mask based on the gh levels and the -topography levels.  The mask is 1 where the gh level is less than -the topography and 0 where the gh level is greater or equal to the topography. -

            mask = less(gh_c, topo) -

    Wherever there is a 1 in the mask, rh_avg gets a 0.  Wherever there -was a 0 in the mask, rh_avg gets the value in the rh_c.  The rh_avg -is still a cube with 0 below the surface. -

            rh_avg = where(mask, -0, rh_c) -

    We need a count grid since we have to compute an average. The count -is actually a cube that has a 0 if the rh_avg is 0 or less, and a 1 if -the rh_avg is greater than 0. -

            count = where(greater(rh_avg, -0), 1, 0) -

    The add.reduce() sums up along the z-axis (the 0 indicates the z-direction, -1 the x-direction, 2 the y-direction), and returns a single number that -is the sum in each column.  It turns the 3-D cube into a 2-D grid.  -Count is a 2-D grid. -

            count = add.reduce(count, -0) -

    The add.reduce() sums up the rh grids in the column above the surface. -

            rh_avg = add.reduce(rh_avg, -0) -

    The real average relative humidity is calculated in this next compound -statement. The average relative humidity is the rh_avg/count. -We do some extra work to ensure that the count is not zero by adding 0.001 -to the count. -

            dpop = rh_avg / (count -+ .001) - 70.0 -

    We force dpop to be within the range -30 to 30%. -

            dpop = clip(dpop, -30, -30) -

    Finally we calculate the primary pop. If QPF < 0.02, then the -pop is 1000 * QPF. Otherwise set QPF to 350*QPF + 13. -
            pop = where(less(QPF, -0.02), QPF * 1000, QPF * 350 + 13) -

    We add in the delta pop. -
            pop = pop + dpop -

    We make sure the range is between 0 and 100% -
            pop = clip(pop, 0, 100) -

    And return the answer. -
            return pop - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/PythonWorkingwithVectorData.html b/cave/com.raytheon.viz.gfe/help/PythonWorkingwithVectorData.html deleted file mode 100644 index 21486fa733..0000000000 --- a/cave/com.raytheon.viz.gfe/help/PythonWorkingwithVectorData.html +++ /dev/null @@ -1,25 +0,0 @@ - -GFESuite Documentation - Working With Vector Data - -

    -Working with Vector Data

    -
    -Vector weather elements, such as Wind, are treated as two numerical arrays, -one representing magnitude and one representing direction. For example: -

        def calcWind(self, wind_FHAG10): -
            # The Wind Vector consists -of two numerical array grids, one for magnitude and one for direction -
            mag = wind_FHAG10[0]  -# get the wind magnitude grid -
            dir = wind_FHAG10[1]  -# get wind direction grid -

     A Vector Cube consists of two sub-cubes, one for magnitude and -one for direction. For example: -

       def calcFreeWind(self,  gh_c,  wind_c,  -topo): -
            # The Vector Cube, wind_c, -consists of two sub-cubes, one for magnitude and one for direction -
            magnitudeCube = wind_c[0] -
            directionCube = wind_c[1] - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/PythonWorkingwithWeatherData.html b/cave/com.raytheon.viz.gfe/help/PythonWorkingwithWeatherData.html deleted file mode 100644 index 9df825b8ec..0000000000 --- a/cave/com.raytheon.viz.gfe/help/PythonWorkingwithWeatherData.html +++ /dev/null @@ -1,179 +0,0 @@ - -GFESuite Documentation - Working With Weather Data - -

    -Working with Weather Data

    -

    The -getIndex method -- Creating Weather Data -  
    The -wxValue methods -- Examining Weather Data -


    - -Working with Weather-type elements in Numerical Python tools requires some -special comments. A wx argument represents a 2-tuple: -
      -
    • -wxValues : numerical grid of byte values
    • - -
    • -keys : list of "ugly strings" where the index of the ugly string corresponds -to the byte value in the wxValues grid.
    • -
    -For example, if our keys are: -
      -
    • -"Sct:RW:-:<NoVis>:"
    • - -
    • -"Chc:T:-:<NoVis>:"
    • - -
    • -"Chc:SW:-:<NoVis>:"
    • -
    -then, the wxValues grid will have byte values of 0 where there is "Sct:RW:-:<NoVis>:", -1 where there is "Chc:T:-:<NoVis>:" and 2 where there is "Chc:SW:-:<NoVis>:" -

    -The getIndex Method --- Creating Weather Data

    -The GFESuite method, "getIndex(uglyString, keys)" will return the byte -value that corresponds to the given ugly string. It will add a new key -if a new ugly string is requested. A Numerical Smart Tool or Smart Initialization -method working with weather data must return a (wxValues, keys) tuple.   -For example: -

          def execute(self, Wx): -
              # Assign Wx -based on PoP -

              # Separate the -Weather argument into it's two components, wxValues and keys -
              wxValues = Wx[0] -
              keys = Wx[1] -

              # Assign "SChc:RW:-:<NoVis>:"  -where the PoP is less than 30 -
               wxValues -= where(less(PoP,30),  self.getIndex("SChc:RW:-:<NoVis>:", keys),  -wxValues) -

              # Return the -paired components as a tuple -
               return -(wxValues, keys) -

    -The wxMask Method --- Examining Weather Data

    -The GFESuite method, "wxMask(wxTuple, query, isRegExpr)", allows you to -examine the ugly string values in the numerical grid of byte values.   -The method returns a mask,  i.e. a numeric grid of 0's and 1's, where -the value is 1 if the given query succeeds.  It has the following -arguments: -
    -
  • -wxTuple -- a 2-tuple:
  • - -
    -
  • -wxValues : numerical grid of byte values
  • - -
  • -keys : list of "ugly strings" where the index of the ugly string corresponds -to the byte value in the wxValues grid.
  • -
    - -
  • -query -- a text string representing a query
  • - -
  • -isreg -- if 1, the query is treated as a regular expression, otherwise -as a literal string
  • -
    -Examples: -

        # Here we want to treat the query as a regular expression -to avoid confusion between "Chc" and "SChc" -
        # This statement will assign PoP a value of 40 where -the weather has a coverage of "Chc" -
        PoP = where(self.wxMask(wxTuple, "^Chc:", 1),  -40,   PoP) -

         # Here we want to treat the query as a literal -
         # This statement will assign PoP a value of -5 where the weather has type of "L" -
         PoP = where(self.wxMask(wxTuple, ":L:"),  -5,  PoP) -

    -Working with Discrete Data

    -Working with Discrete-type elements in Numerical Python tools requires -some special comments. A wx argument represents a 2-tuple: -
      -
    • -wxValues : numerical grid of byte values
    • - -
    • -keys : list of "strings" where the index of the  string corresponds -to the byte value in the wxValues grid.
    • -
    -For example, if our keys are: -
      -
    • -"SmCrftADV"
    • - -
    • -"SnowADV^WChillADV"
    • - -
    • -"<None>"
    • -
    -then, the wxValues grid will have byte values of 0 where there is "SmCrftADV", -1 where there is "SnowADV^WChillADV" and 2 where there is "<None>" -

    -The getIndex Method --- Creating Discrete Data

    -The GFESuite method, "getIndex(string, keys)" will return the byte value -that corresponds to the given string. It will add a new key if a new  -string is requested. A Numerical Smart Tool or Smart Initialization method -working with discrete data must return a (wxValues, keys) tuple.   -For example: -

          def execute(self, Highlights, WindChill): -
              # Assign Highlights -based on WindChill -

              # Separate the -Discrete argument into it's two components, wxValues and keys -
              wxValues = Highlights[0] -
              keys = Highlights[1] -

              # Assign "WChillADV"  -where the WindChill is less than -20 -
               wxValues -= where(less(WindChill,-20),  self.getIndex("WChillADV", keys),  -wxValues) -

              # Return the -paired components as a tuple -
               return -(wxValues, keys) -
      -
      -

    -The discreteMask -Method -- Examining Discrete Data

    -The GFESuite method, "discreteMask(wxTuple, query, isRegExpr)", allows -you to examine the  string values in the numerical grid of byte values.   -The method returns a mask,  i.e. a numeric grid of 0's and 1's, where -the value is 1 if the given query succeeds.  It has the following -arguments: -
    -
  • -wxTuple -- a 2-tuple:
  • - -
    -
  • -wxValues : numerical grid of byte values
  • - -
  • -keys : list of "strings" where the index of the string corresponds to the -byte value in the wxValues grid.
  • -
    - -
  • -query -- a text string representing a query
  • - -
  • -isreg -- if 1, the query is treated as a regular expression, otherwise -as a literal string
  • -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/README.html b/cave/com.raytheon.viz.gfe/help/README.html deleted file mode 100644 index 96c1035cb7..0000000000 --- a/cave/com.raytheon.viz.gfe/help/README.html +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - GFESuite Release Notes - - -
    -

    GFESuite Release Notes

    -
    -Note: This file is generated for "real" releases. - - diff --git a/cave/com.raytheon.viz.gfe/help/RemoveWx.html b/cave/com.raytheon.viz.gfe/help/RemoveWx.html deleted file mode 100644 index 70335da3d5..0000000000 --- a/cave/com.raytheon.viz.gfe/help/RemoveWx.html +++ /dev/null @@ -1,73 +0,0 @@ - - - - - RemoveWx - - - - - - -RemoveWx -
    -
    -Introduction -
    -
    -Sometimes you have complex combinations -of weather and you want to remove just one of the “pieces” of weather. It is difficult to do using -the standard Assign_Value dialog for weather, without messing up other weather combinations, or -having to do the operation multiple times for each different combination of weather. The RemoveWx -tool makes it easy to remove a particular weather string from any area of weather. -
    -
    -
    -How -the Procedure Works -
    -
    -Lets say we have a complex combination -of rain/snow (with different probability values) and we have patchy fog combined with both of these -weather types:

    -RemoveWx
    -
    -
    -Now, lets say that we want to remove -the fog. If we do a query to find all the pixels that contain fog, we cannot simply set the -values to rain, because we have the fog combined with rain in some areas and snow in others -(not to mention that we have it combined with ‘chance rain/snow’ in some areas and ‘likely -rain/snow’ in others). If we use the ‘select homogeneous area’ tool we will have to do this -several times to find all the areas of fog combined with other things. When we start the RemoveWx -tool, it presents a dialog where we specify which weather we want to remove:
    -RemoveWx
    -
    -
    -We just need to select F for Fog:
    -RemoveWx
    -
    -
    -Then run the tool, and all mention of -Fog is removed, while preserving all the other weather combinations:
    -RemoveWx"

    -The tool also works if you specify an edit area, so that, for example, you could remove fog from -only some areas, while leaving it in others. Say, for example, that you define an edit area like -this:
    -RemoveWx

    -And then remove the fog. The result is:
    -RemoveWx

    -There are many cases where you want to do this sort of editing operation: removing thunderstorms from -an area of showers, removing freezing rain from an area of rain, etc.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/SPC_Watch_Methodology.html b/cave/com.raytheon.viz.gfe/help/SPC_Watch_Methodology.html deleted file mode 100644 index be4d8eb7f2..0000000000 --- a/cave/com.raytheon.viz.gfe/help/SPC_Watch_Methodology.html +++ /dev/null @@ -1,191 +0,0 @@ - - - - SPC Watch Methodology - - - - - -
    -

    SPC Severe Convective Watches
    -Provided by: Dave Metze, Senior Meteorologist, NWS -Pueblo, CO
    -Update 2 February 2005
    -

    -


    -Table of Contents

    -

    Introduction
    -SPC Issues a Coordination WCL Text Product
    -SPC Issues the WOU -Text Product
    -

    -
    -


    -

    -

    I. Introduction

    -

    There is a new methodology for -including SPC severe -convective watches into the GFE's Hazards Weather Element. This -framework is part of the GFE's VTEC infrastructure. The methodology and -infrastructure were designed by Matt Davis(ITO/NWS ARX) and FSL -Developers. Below is an example of how this methodology works.
    -

    -

    II. SPC Issues a Coordination -WCL Text Product

    -

    Below is an example WCL text product that would be -issued to coordinate a SPC severe convective watch with NWS field -offices.

    -

    NWUS64 KWNS 041200
    -WCLA

    -

    .SEVERE THUNDERSTORM WATCH A
    -COORDINATION COUNTY LIST FROM THE NWS STORM PREDICTION CENTER
    -EFFECTIVE UNTIL 1300 UTC.

    -

    MNC039-045-055-099-109-157-169-050000-
    -
    -
    MN
    -. MINNESOTA COUNTIES INCLUDED ARE

    -

    -
    DODGE        -FILLMORE      HOUSTON
    -MOWER        -OLMSTED       WABASHA
    -WINOA
    -

    -
    -
    -$$
    -
    -ATTN...WFO...ARX...
    -
    -
    -

    After SPC issued the WCL text -product, the GFE will provide the forecaster with a "yellow" alert -banner(below).

    -

    -
    -

    Next, the forecaster will select "Acknowledge" on the -alert banner to close it. He or she will select Hazards => -ViewWCL per the banner's -instructions, and then choose the appropriate WCL type (WCLA, WCLB, -WCLC). For more detailed information in the function of ViewWCL, click here.
    -

    -

     
    -

    -
    WCL Menu
    -
    -

     

    -

    Once -"ViewWCL" is selected, then the proposed SPC watch will be shown via -the "Watches" Weather Element(below). This Weather Element is created -"on-the-fly" and can only be viewed in the GFE for SPC and NWS field -office collaboration efforts.

    -

    WCL Grid
    -

    -


    -

    -

    After SPC and NWS field offices collaborate on the -severe convective watch, SPC will issue the WOU text product.

    -

    III. SPC Issues the WOU Text -Product

    -

    SPC will issue the official severe convective watch -product via the WOU text product (example below).

    -

    WOUS64 KWNS 041230
    -WOU4

    -

    BULLETIN - IMMEDIATE BROADCAST REQUESTED
    -SEVERE THUNDERSTORM WATCH OUTLINE FOR WT 778
    -NWS STORM PREDICTION CENTER NORMAN OK
    -642 AM CST FRI FEB 04 2005

    -

    SEVERE THUNDERSTORM WATCH 799 IS IN -EFFECT UNTIL -600 PM CST
    -FOR THE FOLLOWING LOCATIONS

    -

    MNC039-045-055-099-109-157-169-050000-
    -/X.NEW.KARX.SV.A.0778.050204T1238Z-050205T0000Z/
    -

    -

    MN
    -. MINNESOTA COUNTIES INCLUDED ARE

    -

    -
    DODGE        -FILLMORE      HOUSTON
    -MOWER        -OLMSTED       WABASHA
    -WINOA
    -

    - -
    -


    -$$ -

    -

    ATTN...WFO...ARX...
    -

    -

    After the WOU text product is issued, a -GFE "yellow" alert banner will pop up(below) notifying the forecaster -to take action.

    -

    WOU Notify
    -

    -

    The forecaster will select "Acknowledge" and follow the -instructions. He or she will select Hazards => -PlotSPCWatches (below) per -the banner's instructions. For more information on using the -PlotSPCWatches procedure, click here.

    -
    -

    Plot SPC Watches Menu
    -

    -

    After the forecaster selects "PlotSPCWatches," the -procedure will run without further feedback. It determines all valid -watches which are in effect for the forecast area, and plots them -directly into the Hazards grid. This includes changes made by the local -office via the WCN product, and changes by SPC via the WOU product.
    -

    -

    Next, the forecaster would run the GFE WCN -Text Formatter and issue the product(below).
    -

    -

    -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/SeparateHazards.html b/cave/com.raytheon.viz.gfe/help/SeparateHazards.html deleted file mode 100644 index 0fb6feeae7..0000000000 --- a/cave/com.raytheon.viz.gfe/help/SeparateHazards.html +++ /dev/null @@ -1,96 +0,0 @@ - - - - - SeparateHazards Procedure - - -

    SeparateHazards

    -

    A Procedure for Separating the Hazard -grid into individual hazard elements

    -
    -Methodology
    -How It Works
    -
    -

    Methodology

    -
    -The SeparateHazards procedure takes each individual hazard from -the Hazards grid, and splits it into individual temporary hazards grid. -In complex -situations, this allows the forecaster to modify a single hazard, -without -disturbing the actual Hazard grid. Once modified, the forecaster uses MergeHazards to composite the individual, -temporary hazard grids back into the Hazard grid.
    -
    -In the following example, a Winter Storm Warning (WS.W) exists with a -combined Wind Chill Advisory (WC.Y). The forecaster would like to -extend the -period of the Wind Chill Advisory, without affecting the Winter Storm -Warning.
    -
    -Combined Hazards Separate Hazards
    -
    -First, the forecaster selects SeparateHazards from the Hazards Menu.
    -
    -Separate Hazards Menu 
    -

    -This tool provides no user feedback, it simply breaks the Hazard -grid from the forecast database into it's individual elements. During -the time that the -forecaster has the elements separated, the Hazard grid remains locked, -to prevent others from -affecting the same grids.
    -
    -The temporary grids will be named in the format:
    -
    -"hazVTECWithoutDotoptionalETN" (ie., hazWSW1). Notice in the example -below, the Hazard grid has been separated into a hazWCY and hazWSW grid.
    -

    -Initial Temp Grids
    -
    -To modify only the Wind Chill Advisory, the forecast would either -use the MakeHazards tool, or standard -GFE editing tools like pencil, or stretching of grids to add -or remove zones and change the start or end time of the Wind Chill -Advisory. Notice in the example -below, the southwest portion of the Wind Chill Advisory has been -removed, and the advisory for the -northeast has been extended, as evidenced by the length of the hazWCY -grid.
    -
    -Modifed Temp Grid
    -
    -Finally, the forecaster runs the MergeHazards -tool to recombine the temporary Hazard grids back into the actual -Hazards grid. Notice that the changed Wind Chill Advisory has -now been merged with the unchanged Winter Storm Watch.
    -
    -Recombined Hazards
    -
    -
    -

    -

    How It Works

    -The SeparateHazards procedure looks at the Hazards grids inventory and -contents and separates each hazard into its own weather element. -The software ensures that the grids haven't already been separated and -then before proceeding will lock the entire Hazards weather -element. While your Hazards grids have been separated, no -other forecaster will be able to edit the Hazards grid.
    -
    -The weather elements created as temporary grids and cannot be saved to -EDEX.
    -
    - - - diff --git a/cave/com.raytheon.viz.gfe/help/ShowISC.html b/cave/com.raytheon.viz.gfe/help/ShowISC.html deleted file mode 100644 index a307ca740f..0000000000 --- a/cave/com.raytheon.viz.gfe/help/ShowISC.html +++ /dev/null @@ -1,340 +0,0 @@ - - - - - ShowISC Tools - - - - - - - - -

    -ShowISC Tools
    -

    -

    -A collection of tools to mitigate -site-to-site discrepancies -

    -

    -using algorithms similar to NDFD

    -

    -
    -

    -

    -Tim Barker - WFO Boise, ID

    -

    -
    -

    -
    -

    Table of Contents

    -
    -


    -

    - -
    -

    -
    -

    Introduction

    -

    These tools are adaptations upon Tim Barker's -set of ShowISC tools. These tools were baselined in IFPS16.2 -(November 2004). There are four tools:
    -

    -
      -
    • Show_ISC_Highlights, which -highlight grids in the Grid Manager that exceed thresholds on the ISC -borders,
    • -
    • Show_ISC_Info, which displays the -statistics on each border of the CWA,
    • -
    • Show_ISC_Area, which highlights -the set of grid points within your CWA that exceed the threshold, and
      -
    • -
    • Show_ISC_Grid, which creates a -difference grid showing the differences found.
      -
    • -
    -
    -
    -


    -

    -

    Show_ISC_Highlights -

    -

    The tool calculates "discrepant" in the same -way as -NDFD (see below for a description of the differences between the NDFD -algorithm and this algorithm). Essentially, the gridblock will turn -"red" if the error over any neighboring border would -violate the NDFD threshold, unless the border is a "short" border -(as defined in the configuration section - see below), in which -case it would turn the gridblock "orange". For example, if you -have five ISC neighbors and the average discrepancy along the border -with four of them is within the threshold, but the average -discrepancy for one of the borders violates the threshold - then -the gridblock will turn red. If it fails for only "short" -borders - it turns the gridblock red. When you run the tool on a -vector grid, it checks to see if there is a violation in either -the magnitude or the direction. -

    -

    Here -is a picture of the grid manager after running the -Show_ISC_Highlights tool on several grids:

    -

    -


    -Some -gridblocks had partial failures and are orange, others had total -failure are are red. A message is also sent to the GFE status bar, -either stating that the grid "passed", or had "partial" -failure or completly "failed" the discrepancy check (green -messages for "passed" and "yellow" messages for partial and -failed). -
    -

    Show_ISC_Info -

    -

    This tool creates a table of discrepancy -information for -each neighboring border. If Show_ISC_Highlights flags a grid as -"discrepant", this tool can be very helpful for identifying which -border (or borders) violate the threshold, and by how much.

    -
    -For -example, here is the window created by Show_ISC_Info for a particular -MinT grid. -

    -

    -

    For -each neighbor, it displays the average discrepancy magnitude, the -threshold for that border, the number of points in the average, and a -colored message of OK, FAILED or IGNORED. An average of the total -points along all the borders is also shown at the bottom. The -IGNORED message is used for borders where the discrepancy is larger -than the threshold, but the number of points along that border is so -low that the average is suspicious. This is one of the differences -from the NDFD algorithm, and is detailed below. By default, a border -must have 10 gridpoint pairs with a neighbor to be considered - but -this can be configured (see the configuration -section below).

    -
    -For vector parameters like Wind, the -window will show you the statistics for both magnitude and -direction, like shown in this example: -

    -


    -

    -You -can also configure the tool to check thresholds for several -parameters when you run the tool on certain grids. For example, the -default configuration is set up so that if you run the tool on an RH -grid, it will show you statistics for Temperature, Dewpoint, and -RH, since all three of these parameters are intimately related. -
    -

    Show_ISC_Area

    -The tool sets the -edit area to the points inside your forecast area. This tool -is useful to simply highlight the particular gridboxes where you have -significant differences with your neighbors. Conceivably, you could -perform edit operations on these gridboxes to remove the -discrepancies. However, in practice, this is difficult to do because -different changes need to be made in different areas. -
    -
    -In -this example, the threshold in this area is 7 degrees, and gridboxes -have been added to the edit area when their difference exceeds 7 -degrees. The forecast CWA is to the "left" in this example, with -the neighbors' ISC grid shown to the "right"
    -

    -
    -For -scalar grids like temperature, a gridbox is added to the edit area if -the maximum difference with any of its neighbors is above the -threshold. Normally, there is just a single neighboring point, so the -gridbox is added if the difference is above the threshold. However, -where there are "corners" in the edit areas, a gridbox inside -your forecast area might have two (or more) neighboring gridboxes -inside your neighbors area (for example, one north of your gridbox -and one west of your gridbox). In these cases, the tool finds the -maximum difference for any of the neighboring gridboxes, and adds the -gridbox to the edit area if that difference is greater than the -threshold. -
    -
    -An -example of a corner point is shown in the image below. The point -labelled 82 is inside the forecast area, and only has a 6 degree -difference with the point to the north (the threshold is 7 degrees in -this area). However, this point has a 7 degree difference with the -point to the west - so the tool added this point to the current -edit area.
    -


    -

    -

    -

    -
    -For -vector grids like Wind, the tool will add a gridbox to the edit area -if it violates either the magnitude threshold or the direction -threshold.
    -
    -Keep -in mind that you may have many gridpoints that exceed the threshold -along a border with your neighbor, but the average discrepancy -along the border is what is used to determine if that border is -"discrepant" or not. Thus, even though a border is not flagged -as "discrepant" by the other tools, you may still have many -points in the edit area created by Show_ISC_Area.
    -
    -
    -
    -

    Show_ISC_Grid

    -The tool -sets the gridpoint inside your border equal to the maximum -difference -between that gridpoint and your neighbors gridpoints. The -Show_ISC_Area tool discussed above basically shows you where -you have differences above the threshold, while the grid calculated -by Show_ISC_Grid shows you how big the differences are. -
    -
    -Here -are example difference grids for the two areas shown above for the -Show_ISC_Area tool:
    -

    -

    -
    -

    -

    -

    -

    -
    -

    -Note -that the differences are plotted for every point along the border, -not just the points that are larger than the coodination threshold. -Also note that the differences are positive when the gridpoint is -higher than the neighboring point, and the difference is negative -when the gridpoint is lower than the neighboring point. -
    -

    Differences -with NDFD algorithm

    -As -of September 2004, the differences from the NDFD algorithm are: -

    In order to come up with the exact -same statistics the NDFD and GFE must agree EXACTLY on the location -of the border between two CWAs. Both NDFD and GFE determine if a -gridbox belongs to one CWA or another based on whether the center of -the gridbox lies on which "side" of the CWA border. To make -drawing operations more efficient, GFE 'thins' the points along -the shapefile borders by 'combining' points that are within a -certain 'precision' in terms of latitude and longitude. By -default, GFE sets this to 2 decimal places. For example, if two -points along the border have the same latitude, but have longitudes -of 105.243 and 105.238, they would be 'combined' into a single -point. While this makes almost no difference visually on the GFE -displays, it CAN have an impact when determining if the center of a -gridbox lies on which "side" of a shapefile border.

    - -

    -Using this higher precision, the location of the borders -is much closer to what is calculated with NDFD. However, even with -this high precision, roundoff errors lead to a few gridboxes placed -on different "sides" of the CWA border. If identical results are -desired, IFP focal points might need to override the ISC_xxx edit -areas to ensure that points are identically assigned as they are at -NDFD. Other differences between the NDFD calculations and the -calculations in these tools have been corrected - so the impact of -this difference is quite small, and for many borders is -non-existantant. For sites that run at a different resolution than -the 5-km resolution of NDFD, the border points will already be much -different - so this small difference is irrelevant.

    - -

    -The NDFD algorithm will mark a -particular border as "failing" (marked with a "frowny face") -whenever the average difference is above the threshold. The -algorithm used here ignores averages that have less than 10 -gridboxes. This is to keep discrepancies along very short borders -from marking the whole grid as "suspicious". This value is -configurable in the Show_ISC_Highlights and Show_ISC_Info tools - -as discussed in the installation section below.

    -


    -

    -In order to ignore light wind -difference, in both the wind speed and wind direction calculations, -the NDFD algorithm also ignores neighboring gridbox pairs where -either wind speed value is below 8 knots. This means that your -gridbox can have 0 knots, and your neighboring gridbox can have 50 -knots or more - and NDFD will not mark it as violating the -threshold! In the algorithm used here, neighboring gridbox pairs are -ignored only if BOTH points are below 8 knots.
    -
    -
    -

    Configuration

    -The ShowISC tools on the Smart Tool Repository required configuration -for each site. The baselined version are automatically configured -based on edit area information within EDEX.
    -
    -The Show_ISC_Info and Show_ISC_Highlights tools have a common -configuration section within the ISC_Utility. You can override -these values by copying the configuration() function from ISC_Utility -and putting it into ISC_Utility_Local, and then changing the values.
    -
    -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/SmartInit.html b/cave/com.raytheon.viz.gfe/help/SmartInit.html deleted file mode 100644 index 1a0ce3d3ee..0000000000 --- a/cave/com.raytheon.viz.gfe/help/SmartInit.html +++ /dev/null @@ -1,897 +0,0 @@ - - - - - - Smart Initialization Configuration and User's Guide - - -

    -Smart Initialization Configuration and User's Guide

    -February 15, 2012
    -

    This document describes how smart initialization works, and how it -can be extended and modified. -
    -

    -

    Table of Contents

    -How Smart Initialization Works -
    -Where are the files that control smart -initialization? -
    -Basic File Structure -
    -Working with SCALAR, VECTOR, WEATHER, and -DISCRETE -data -
    -Modifying an Existing Algorithm -
    -Adding New Algorithms -
    -Adding New Models -
    -Running Smart Initialization from the Command -Line -
    -Examples of Complete Smart Initalization Files -
    -Exercises -

    -
    -

    How Smart Initialization -Works

    -Smart initialization is closely coupled with EDEX. EDEX -is aware of D2D model data changes and therefore knows when IFP data -grids -can be created. Whenever EDEX first starts, or new D2D -model -data is detected (which occurs frequently - less than 5 minute -intervals), the server will -examine -the serverConfig/localConfig configuration file for the INITMODULES -definition. -If it finds a match with the updated D2D model, then it will spawn a -process -to run smart initialization for that model. -

    When a smart initialization process is started, it will run a -particular -class file, either one that has been supplied with the release, or one -you have added. The software will examine all of the functions -within -that class looking for function names that begin with calc***. -These -functions define the output weather element, e.g., calcT will derive T, -and also the dependencies. The dependencies are determined from -the -argument list for each function. -

    -

    The smart initialization software then figures out the dependencies -for all of the calc*** functions and will determine what must run -first, -second, third, etc. This is done automatically and the programmer -need not be concerned about it. The software also examines the -inventory -for the dependent grids and the inventory for the output grids to -determine -if the output grid is already present and no calculations are needed, -or -whether the output grid needs to be created by running the algorithms. -

    -

    When all the possible dependencies and algorithms have run, the -process -exits until the next D2D model update. -

    -

    Smart Initialization algorithms are written in a simple, intuitive -language -called Python and its extension, numpy. The following -sections -assume that you have knowledge of Python which is covered in the -GFESuite -Python Tutorial and Programming Guidelines. -
    -

    -
    -

    Where are the files that control -smart initialization?

    -The standard smart initialization files that are supplied with the -release -are installed into your release/edex/data/utility/edex_static/base/smartinit -directory. No modifications -should be made to any of the files in the BASE directory. -User-customized -files are installed into the release/edex/data/utility/edex_static/site/SITE/smartinit -directory. These SITE files are not overwritten during installs and upgrades. -
    -
    -

    Basic File Structure

    -The basic structure of a smart initialization file contains a header -that is simliar to: -

    from Init import * -

    -

    class modelForecaster(derivedFromForecaster): -
    -    def __init__(self): -
    -        derivedFromForecaster.__init__(self, -"sourceDb", "destDb") -

    -

    This is basically defining a new class called "modelForecaster", -which is derived from "derivedFromForecaster". The -__init__ -function is the constructor to the class, which calls the base class -(class -it has been defined from) with three arguments, self, "sourceDb", -and "destDb". The source db is the name of the D2D database, such -as NAM80, NAM40, NAM12, RAP40, GFS40, gfsLR. The -destination database is the name of the output -database, such as NAM12, GFS40, NAM_V. If there is an underscore -in the destination database, then the format is the -modelname_optionaltype. -

    -

    A complete example of the header is shown below: -

    -

    from Init import * -

    -

    class NAM12Forecaster(Forecaster): -
    -    def __init__(self): -
    -        -Forecaster.__init__(self, -"NAM12", "NAM12") -
    -  -

    -

    There usually is a function called levels() which define a set of -vertical -pressure levels which are used when accessing cube data from the -models. -The levels() return a list of level values to use. Make sure that -the levels you specify are actually available in the model. A complete -example is shown below: -

    -

        def levels(self): -
    -        return ["MB950", -"MB900","MB850","MB800","MB750", -
    -                -"MB700","MB650","MB600","MB550", "MB500", -
    -                -"MB450", "MB400", "MB350"] -

    -

    Following the levels() function are the set of functions with a -particular -name. The calculation functions MUST -ALL -BEGIN WITH calc in their name. That is how smart -initialization -can determine what to run. It basically runs all calc*** -functions -that are defined. The remainder of the name of the function after -"calc" is the parameter name to create. For example, if RH is -your -weather element name, the name of the function to calculate RH would be -calcRH(). The typical format for a calc function is shown below, this -one -calculates surface temperature from the eta model: -

    -

        def calcT(self, t_FHAG2, t_BL3060, p_SFC, -stopo, -topo): -
    -        dpdz = 287.04 * t_FHAG2 -/ (p_SFC / 100 * 9.8) # meters / millibar -
    -        # 45milibars is halfway -between 30 and 60 -
    -        dpdz = dpdz * 45 # -meters -between p_SFC and t_BL3060 -
    -        lapse = (t_FHAG2 - -t_BL3060) -/ dpdz # degrees / meter -
    -        lapse = clip(lapse, -lapse, 0.012) -
    -        t = t_FHAG2 + lapse -* (stopo - topo) -
    -        return self.KtoF(t) -
    -  -

    -

    Here is the same function with more details: -

    -

    The following grids from the D2D model database are passed into this -routine, 2 meter temperatures, the boundary layer temperatures from the -30-60 hPa levels, the surface pressure in Pascals, surface topography -from -the model, and the high resolution topographical data. -

    -

        def calcT(self, t_FHAG2, t_BL3060, p_SFC, -stopo, -topo): -

    -

    We begin to calculate the lapse rate, but first we need to determine -the number of meters between the surface and 30-60 hPa level. -
    -        dpdz = 287.04 * t_FHAG2 -/ (p_SFC / 100 * 9.8) # meters / millibar -
    -        # 45milibars is halfway -between 30 and 60 -
    -        dpdz = dpdz * 45 # -meters -between p_SFC and t_BL3060 -

    -

    The lapse rate can now be calculated: -
    -        lapse = (t_FHAG2 - -t_BL3060) -/ dpdz # degrees / meter -

    -

    We ensure that the lapse rate can't get too steep -
    -        lapse = clip(lapse, -lapse, 0.012) -

    -

    We calculate the surface temperature, which is the model 2m -temperature -modified by the lapse rate and the difference between the model surface -and the real surface elevation. -
    -        t = t_FHAG2 + lapse -* (stopo - topo) -

    -

    We perform unit conversion and return. -
    -        return self.KtoF(t) -

    -

    The name of the function is always calc*** where *** is the -weather -element name and level. If you are creating weather elements for -surface data then the weather element name by itself is -sufficient. -If you are creating weather elements for upper air or non-surface data, -then the name of the calc function is:  calc***_***, such as -calcWind_3K() for the Wind at 3000 feet. -

    -

    Note the argument list for the calc*** functions. The first -argument -is always self. The remainder of the arguments represent gridded -data. The format of the specification can be one of the following -formats: -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FormatExamplePurpose
    EditAreaNameColoradoThe name of an editArea. It is probably best to use polygon -edit areas -instead of queries (untested with queries). The value of the paramater, -in this case Colorado, will be a boolean grid suitable for use as a -mask -for numeric functions.
    parmName_levelt_FHAG2Refers to a single grid for the parmName and the level. -The example -accesses the temperature grid from the model that is at the FHAG2 -(fixed -height above ground 2m level)
    parmName_crh_cRefers to a cube of data for the parmName. The "_c" indicates -the cube. -The number of layers in the cube depend upon the levels() function -contents. -For example, if the levels() contain:
    -   def levels(self):
    -         return ["MB950", -"MB900","MB850","MB800","MB750",
    -                 -"MB700","MB650","MB600","MB550", "MB500",
    -                 -"MB450", "MB400", "MB350"]
    -then the cube will contain 13 levels. Access of individual levels -can be done using indexing within the function.
    topotopoRefers to the high-resolution surface topography field, -in units -of meters above MSL.
    stopostopoRefers to the model topography field, in units of meters -above MSL.
    ctimectimeTime from the source database grid currently being -calculated, as a -time range tuple (startTime, endTime), in seconds since January 1, 1970 -at 0000z.
    mtimemtimeTime in the destination database grid currently being -calculated, as -a time range tuple (startTime, endTime), in seconds since January 1, -1970 -at 0000z.
    stimestimeNumber of seconds from the model basetime currently being -calculated, -in seconds since the model analysis time.
    parmNameFzLevelRefers to the weather element in the OUTPUT database, not the -INPUT -D2D database.
    -

    -

    You can place additional functions (e.g., utility) functions -anywhere -in the file after the constructor (__init__) and before the tail end of -the file. An example of a utility function could be one to -calculate Td from T and RH as shown below: -

    -

       def getTd(self, t, rh): -
    -        # input/output in -degrees -K. -
    -        desat = clip(t, 0, -373.15) -
    -        desat = where(less(t, -173.15), 3.777647e-05, t) -
    -        desat = exp(26.660820 -- desat * 0.0091379024 - 6106.3960 / desat) -
    -        desat = desat * rh / -100.0 -
    -        desat = 26.66082 - -log(desat) -
    -        td = (desat - -sqrt(desat*desat-223.1986))/0.0182758048 -
    -        td = where(greater(td, -t), t, td) -
    -        return td -

    -

    The tail end of the file contains a definition of main() and must be -similar to that below: -

    -

    def main(): -
    -    modelForecaster().run() -

    -

    Here is an example of a real tail to the file. The name of the class -within the main() function must match the name of the class you have -defined -in the header: -

    -

    def main(): -
    -    NAM12Forecaster().run() -

    -

    -
    Working with SCALAR, VECTOR, -WEATHER, and DISCRETE Data

    -This section describes accessing scalar, vector, and weather data -through -numerical python. -

    SCALAR

    -


    -When passing in a weather element that is scalar, you will either -get a grid, or a cube. The grid is a numeric 2-d grid -(x,y), -the cube is a numeric 3-d grid (z,x,y). -
    -

    -

    VECTOR

    -For a single vector grid (single level), you get a tuple. The -first -element is a grid of magnitude, the second is a grid of -direction. -To access the magnitude grid, use this syntax: wind_SFC[0], -and -for direction, use this syntax: wind_SFC[1]. Once -you access either the magnitude or direction grid, they are treated -like -a scalar grid. -

    There are several "utility" functions in Init.py (located in your -release/edex/data/utility/edex_static/base/smartinit -directory) that can help you when working with vector data. The self._getUV( -mag, dir) call will convert a magnitude/direction grids into a -returned -tuple of u and v. The u component is [0] and the v component is -[1]. -The self._getMD(u,v) function converts a grid in u and v -components -into a tuple of magnitude and direction. The magnitude component -is [0] and the direction component is [1]. -
    -

    -

    WEATHER

    -Weather is much more complicated and can be a big performance problem. -A tuple is provided. The first element is a grid, which contains -the indexes into the key. The second element is a sequence of all of -the -keys. The keys are the ugly strings associated with a -WeatherKey. -To access the grid: -

    Wx[0] -

    -

    To access the sequence, use: -

    -

    Wx[1] -

    -

    To access a particular entry in the sequence, use: -

    -

    Wx[1][3], would give your the 4th key. -

    -

    Normally you don't access the weather grid in your calculations, but -if you need to, you have generally created a weather grid first. -In smart initialization, we know all of the possible weather keys that -can be created and set up a table with those keys, then we simply poke -in the correct index for the key. This is much more efficient -than -searching the keys for each grid point. -
    -

    -

    DICRETE

    -Discrete is much more complicated than the simple scalar and vector -case, -and like weather, can be a big performance problem. A tuple is -provided. -The first element is a grid, which contains the indexes into the key. -The -second element is a sequence of all of the keys. The keys -are -the discrete key values associated with the weather element. To -access -the grid: -

    DK[0] -

    -

    To access the sequence, use: -

    -

    DK[1] -

    -

    To access a particular entry in the sequence, use: -

    -

    DK[1][3], would give your the 4th key. -

    -

    Normally you don't access the discrete grid in your calculations, -but -if you need to, you have generally created a discrete grid first. -In smart initialization, we know all of the possible discrete keys that -can be created and set up a table with those keys, then we simply poke -in the correct index for the key. This is much more efficient -than -searching the keys for each grid point. -

    -

    -

    -

    -Modifying an Existing -Algorithm

    -The basic procedure to modify an existing algorithm is shown below: -
      -
    • Create a new file in release which should be -named -similarily, -but not identical to, the class in which you are modifying. For -example, -if you are modifying the NAM12 model intiialization, which is stored in -NAM12.py, -perhaps you should name your new file MyNAM12.py to indicate that this -is -your eta.
    • -
    • The format of the file should be standard as shown in the Basic -File Structure section above. In particular, it needs -to -include the following items:
    • -
        -
      • the header, which is set to inherit the file you are inheriting -from
      • -
      • the levels() function, but only if you are changing it
      • -
      • a replacement, named the same, of the function you are -modifying. -You may want to copy this function (not ALL functions -- just this one) -into this file from the original file and then edit it.
      • -
      • the tail, which includes the main() and the final if __name__ -statements
      • -
      -
    • Modify (create first if necessary) your server localConfig.py -file to override the INITMODULES section of the serverConfig.py.
    • -
    -Here is an example of overriding the NAM12 derivation of Snow -Amount. -The original NAM12.py file contains the following information (only -part -of the file is shown). The snow amount function calculates the -snow -ratio which varies depending upon temperature, and then assigns the -snow -amount based on the snow ratio and QPF where the snow level (freezing -level -- 1000 -

    from Init import * -

    -

    class NAM12Forecaster(Forecaster): -
    -    def __init__(self): -
    -        -Forecaster.__init__(self, -"NAM12", "NAM12") -

    -

        def levels(self): -
    -        return ["MB950", -"MB900","MB850","MB800","MB750", -
    -                -"MB700","MB650","MB600","MB550", "MB500", -
    -                -"MB450", "MB400", "MB350"] -

    -

        def calcSnowAmt(self, T, FzLevel, QPF, topo): -
    -        m1 = less(T, 9) -
    -        m2 = greater_equal(T, -30) -
    -        snowr = T * -0.5 + 22.5 -
    -        snowr = where(m1, 20, -snowr) -
    -        snowr = where(m2, 0, -snowr) -
    -        snowamt = -where(less_equal(FzLevel -- 1000, topo*3.048), snowr * QPF, 0) -
    -        return snowamt -

    -

    def main(): -
    -    NAM12Forecaster().run() -

    -

    Here is the derived MyNAM12 file that overrides the calcSnowAmt() -function: -

    -

    from NAM12 import * -

    -

    class MyNAM12Forecaster(NAM12Forecaster): -
    -    def __init__(self): -
    -        -NAM12Forecaster.__init__(self) -

    -

        def calcSnowAmt(self, T, QPF): -
    -        m2 = less_equal(T, 32) -
    -        snowamt = where(m2, -10.0 * QPF, 0) -
    -        return snowamt -

    -

    def main(): -
    -    MyNAM12Forecaster().run() -

    -

    The algorithm was changed to have a fixed 10:1 snow ratio anytime -the -temperature is below 32. The freezing level is no longer used in -this revision. Of course you can completely rewrite the -algorithm, -use different arguments, etc. Note that the name of the function, -calcSnowAmt() in this case is identical to to the name in the original -file. This is important! -
    -

    -
    -

    Adding New Algorithms

    -Adding a new algorithm is just about the same as Modifying -An Existing Algorithm. You will do the similar steps: -
      -
    • Create a new file in release/edex/data/utility/edex_static/site/SITE/smartinit - which should be named similarily, -but not identical to, the class in which you want to add a new -algorithm. -For example, if you are adding to the NAM model intiialization, which -is -stored in NAM.py, perhaps you should name your new file MyNAM.py to -indicate -that this is your eta.
    • -
    • The format of the file should be standard as shown in the Basic -File Structure section above. In particular, it needs -to -include the following items:
    • -
        -
      • the header, which is set to inherit the file you are -interheiting from
      • -
      • the tail, which includes the main() statement
      • -
      -
    • Add your new function into the newly created file.
    • -
    • Modify (create first if necessary) your server localConfig.py -file to override the INITMODULES section of the serverConfig.py.
    • -
    • Modify (create first if necessary) your server localConfig.py -file to add the new weather elements for which you want the -initialization -to populate.
    • -
    -Here is an example of a MyNAM12.py initialization file that creates a -new -weather element called RH for the NAM model.  It does nothing more -than taking the model RH FHAG2 field and storing it into the NAM12 RH -weather -element, after ensuring that the field ranges between 0 and 100%: -

    from NAM12 import * -

    -

    class MyNAM12Forecaster(NAM12Forecaster): -
    -    def __init__(self): -
    -        -NAM12Forecaster.__init__(self) -

    -

        def calcRH(self, rh_FHAG2): -
    -        return clip(rh_FHAG2, -0, 100) -

    -

    def main(): -
    -    MyNAM12Forecaster().run() -

    -
    -

    Adding New Models

    -Adding new models, and all of the algorithms to derive the elements -isn't -much different from Adding New -Algorithms -or Modifying an Existing -Algorithm. -The basic steps are: -
      -
    • Create a new file in release/edex/data/utility/edex_static/site/SITE/smartinit - which should be named appropriately -(and not the same name as any file in release/edex/data/utility/edex_static/base/ -smartnit) For -example, -if you are going to create a GWW model initialization, then the name -should -probably be GWW.py.
    • -
    • The format of the file should be standard as shown in the Basic -File Structure section above. In particular, it needs -to -include the following items:
    • -
        -
      • the header, which is set to inherit the file you are -interheiting from
      • -
      • the levels() function, which you don't need if you aren't -accessing any -D2D-cube data.
      • -
      • all of the calc*** functions that are required to create each -of your -weather -elements.
      • -
      • the tail, which includes the main() statement
      • -
      -
    • Modify (create first if necessary) your server localConfig.py -file to override the INITMODULES section of the serverConfig.py.
    • -
    • Modify (create first if necessary) you server localConfig.py -file to define a new database and all of the weather elements -associated -with the database.
    • -
    -Here is a complete example of creating WaveHeight and Surface Wind from -the GWW model. The wave height logic catches values that -are very high and assumes that they are missing data and resets them to -zero height. There is also a conversion from meters to -feet. -The wind logic also catches values that are very high and assumes that -they are missing data and resets the winds to calm. There is also -a conversion from meters/second to knots.: -

    from Init import * -
    -class GWWForecaster(Forecaster): -
    -    def __init__(self): -
    -        -Forecaster.__init__(self, -"GWW", "GWW") -

    -

        def calcWaveHeight(self, htsgw_SFC): -
    -        grid = -where(greater(htsgw_SFC, -50), 0.0, htsgw_SFC/3.048) -
    -        return clip(grid, 0, -100) -

    -

        def calcWind(self, wind_SFC): -
    -        mag = -where(greater(wind_SFC[0], -50), 0, wind_SFC[0]*1.94) -
    -        dir = -where(greater(wind_SFC[0], -50), 0, wind_SFC[1]) -
    -        dir = clip(dir, 0, 359.5) -
    -        return (mag, dir) -

    -

    def main(): -
    -    GWWForecaster().run() -

    -
    -

    Running Smart Initialization from the -Command -Line

    -Normally you don't need to run smart initialization from the command -line. -Smart initialization is automatically started by EDEX when new -D2D model data arrives. -

    In the event that you do want to run smart initialization from the -command -line, which you probably would when you are developing new algorithms, -here is the proper syntax: -

    -

    ifpInit [-h host] [-p port] [-t modelTime] [-s site] [-u userid] [-a] -algorithmFile -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    SwitchOptional?Purpose
    -h hostyesDefines the host upon which EDEX is running. -Normally -this switch is not needed and the software will determine where EDEX -is running.
    -p portyesDefines the RPC port upon which EDEX is -running. Normally -this switch is not needed and the software will determine where EDEX -is running.
    -t modelTimeyesSpecifies the model run time in the format of -yyyymmdd_hhmm. -If not specified, then run using the latest model data.
    -s sitenoSpecifies the site id for whom to run the init.
    -u useryesSpecifies the user id who is executing the init.
    -ayesSpecifies to create all of the possible data grids, which -will overwrite -existing previously calculated grids. Normally by default, only -those -grids that haven't yet been created will be attempted to be calculated.
    algorithmFilenoMandatory argument specifying the name of the smart -initialization -module, such as NAM12, or MyNAM12.
    -Note: The -h and -p switches are predefined to -match your AWIPS installation, such that they will point to EDEX -specified on installation. Thus the -h and -p switches are not -necessary for normal running of this program. However, if you wish to -connect to a different server, then you will need to specify the -h and -p -switches.
    -

    -
    -

    Examples of Complete Smart Initalization -Files

    -


    -Here is an example of the NAM12.py -smart initialization file that is provided (or similar to what is -provided). -

    -

    Here is an example of a -modification -to the NAM12.py called MyNAM12.py which modifies the snow amount -calculation, -and adds the surface relative humidity field. -

    -

    Here is an example of adding -a new model, the GWW model, to calculate wave height and wind. -

    -

    -
    -

    Exercises

    -Several smart initialization exercises are available here. -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/SmartInitExercises.html b/cave/com.raytheon.viz.gfe/help/SmartInitExercises.html deleted file mode 100644 index a86be00c4e..0000000000 --- a/cave/com.raytheon.viz.gfe/help/SmartInitExercises.html +++ /dev/null @@ -1,389 +0,0 @@ - - - - - - GFESuite Training - Smart Initialization Exercises -</head> -<body> -<h1> -Smart Initialization Exercises</h1> -February 15, 2012<br> -<hr style="width: 100%; height: 2px;"><br> -<br> -Performing these steps in an operational environment will mess up your -guidance. You should only perform these on an non-operational -setup. -<p>If you run out of time, please be sure to <a href="#cleanup">clean -up -your system</a> for the next participant. -</p> -<p><a href="#Exercise1">Exercise 1. Override the NAM algorithm for -Temperature</a> -<br> -<a href="#Exercise2">Exercise 2. Adding a new weather element and -algorithm</a> -<br> -<a href="#cleanup">Clean up the system</a> -<br> -<a href="#Answers">Answers</a> -<br> -<br> -</p> -<hr width="100%"> -<h2><a name="Exercise1"></a>Exercise 1. Override the NAM algorithm for -Temperature</h2> -The purpose of this exercise is to learn how to override existing -algorithms. -We will try three different examples. The first example will -simply -set the T to 32 degrees everywhere as a verification step to ensure -that -you have changed the algorithm correctly. -<br> -<h3><a name="1a"></a>1a) Set the NAM algorithm for Temperature to -T=32</h3> -Create a new file in /release/edex/data/utility/edex_static/site/SITE/smartinit -called MyNAM12.py. This will be your -override file. Perhaps the best way to create this file is to -copy -the original /release/edex/data/utility/edex_static/base/smartinit/NAM12.py into -/release/edex/data/utility/edex_static/site/SITE/MyNAM12.py and then modify -it. -Strip out all of the functions in the class except the calcT(), since -that -is the function we will be overriding. Refer to the documentation -on overriding a class -- you will need to make additional changes to -the -header of the file, the constructor, and the main declaration at the -bottom -of the class. -<p>Change the calcT() function to simply set an entire grid to -32. -Note you cannot simply set T=32, you need to create a numerical grid -first -of zeros, and then add 32 to it. -</p> -<p>Save your file. Run smart init by hand using the appropriate -command, -similar to this, from the bin directory: -<br> -<tt>ifpInit -t 20011117_1200 -a MyNAM</tt> -</p> -<p>Look at the NAM T grids on the GFE, did they get changed to the -constant -32 value? -</p> -<p><a href="#answer1a">Answers for exercise 1a</a> -<br> -  -</p> -<h3><a name="1b"></a>1b) Set the NAM12 algorithm to use the 2m -Temperatures -directly</h3> -Modify your previously created MyNAM12.py. Change the algorithm -to -use the 2m temperatures (t_FHAG2). Don't forget that you want -degrees -Fahrenheit and the model has temperatures in Kelvin. -<p>Save your file. Run smart init by hand. Verify that the grids did -get -changed. -</p> -<p><a href="#answer1b">Answers for exercise 1b</a> -<br> -</p> -<h3><a name="1c"></a>1c) Correct your algorithm for model and real -topographical -differences</h3> -Modify your previously created MyNAM12.py. Change the algorithm -to -use a fixed lapse rate based on the standard atmosphere. We will -assume 6.0 degrees Celsius per kilometer. Your topo and stopo -fields -are in meters, the t_FHAG2 is in degrees Kelvin. Don't forget to -convert the answer to Fahrenheit. -<p>Save your file. Run smart init by hand. Verify that the -grids did get changed. -</p> -<p><a href="#answer1c">Answers for exercise 1c</a> -<br> -</p> -<h3><a name="1d"></a>1d)Putting your new algorithm into operation</h3> -In this exercise, we will be putting your new algorithm into operation -and verifying the correct steps have been made. Normally you will -need to stop EDEX, edit the localConfig.py file, change the -set -of INITMODULES to use your new MyNAM12, then restart the server. -Since -you really wouldn't see any changes until the next model run, before -you -restart your server, you should manually delete all NAM12 databases -under -release/edex/data/hdf5/gfe/NAM12; then connect to the metadata database -and issue SQL "delete from gfe where dbid like '%NAM12%';". -<p>Start EDEX, bring up the GFE, call up the NAM12 T grids. -When -smart init runs your module, the T grids should appear. -</p> -<p>To clean up the system, stop EDEX, remove the -localConfig.py -INITMODULES entry, and remove your MyNAM12.py* files from the -/release/edex/data/utility/edex_static/site/SITE/smartinit directory, -purge the grids again from the release/edex/data/hdf5/gfe/NAM12 directory; -then connect to the metadata database -and issue SQL "delete from gfe where dbid like '%NAM12%';". -Finally, restart EDEX. -</p> -<p><a href="#answer1d">Answers for exercise 1d</a> -<br> -<br> -</p> -<p></p> -<hr width="100%"> -<h2><a name="Exercise2"></a>Exercise 2) Adding a new weather -element and -algorithm</h2> -In this exercise, we will be adding a new weather element to the NAM12 -database, -called DewPointDepression, and then defining a new algorithm to -automatically -create it. Since this is a new element, you first must create the -localConfig.py entry to add the weather element. -<br> -<h3><a name="2a"></a>2a) Define your new weather element.</h3> -<p><br> -Add the DewPointDepression with the following characteristics -to your localConfig.py: -<br> -DPD =    ("TdD", SCALAR, "F", "Dew Point Depression", -50, 0, 0) -</p> -<p>Be sure to identify this as a new parm for the NAM12 model. -Hint: parmsNAM12 -is the variable name you need for your parm grouping. Set the -time -constraint to TC6, since the NAM12 comes in every 6 hours. -</p> -<p>Stop EDEX, then restart it. Bring up the GFE to -verify -that there is now a Dew Point Depression weather element in the NAM -database.<a href="#answer2a"></a> -</p> -<p><a href="#answer2a">Answers for exercise 2a</a> -<br> -</p> -<h3><a name="2b"></a>2b) Create your algorithm and test it.</h3> -Create or modify the MyNAM12.py file in -/release/edex/data/utility/edex_static/site/SITE/smartinit. You may leave -in your calcT() from exercise #1 if desired. Add a new calc function -for Dew Point Depression. The equation is basically T - Td. -You can choose to calculate T-Td in one of two ways: -<ul> - <li>use the T and Td from the output IFP NAM12 database</li> - <li>use the t_FHAG2 from the input D2D NAM12 database, and then -calculate -dew point from the t_FHAG2 and rh_FHAG2.</li> -</ul> -Save your file. Run smart init by hand using the appropriate -command, -similar to this, from the bin directory: -<br> -<tt>ifpInit -s xxx -t 20011117_1200 -a MyNAM12</tt> -<p>Look at the NAM dew point depression grids, compare with the T and -Td -grids with the sample tool to make sure you have done the equation -correctly. -</p> -<p><a href="#answer2b">Answers for exercise 2b</a> -</p> -<hr width="100%"> -<h2><a name="cleanup"></a>Clean up your system</h2> -To clean up the system, stop EDEX, remove the localConfig.py -INITMODULES -and dew point depression entries, and remove your MyNAM12.py* files -from the /release/edex/data/utility/edex_static/site/SITE/smartinit -directory, purge the grids again from the -release/edex/data/hdf5/gfe/NAM12 directory; -then connect to the metadata database -and issue SQL "delete from gfe where dbid like '%NAM12%';". -Restart EDEX. -<br> -<hr width="100%"> -<h2><a name="Answers"></a>Answers</h2> -<h3> -<a name="answer1a"></a>Answer for Exercise 1a</h3> -<tt>from NAM12 import *</tt> -<p><tt>class MyNAM12Forecaster(NAM12Forecaster):</tt> -<br> -<tt>    def __init__(self):</tt> -<br> -<tt>        -NAM12Forecaster.__init__(self)</tt> -</p> -<p><tt>    def calcT(self, t_FHAG2):</tt> -<br> -<tt>        t = self._empty + 32</tt> -<br> -<tt>        return t</tt> -<br> -<tt></tt> <tt></tt> -</p> -<p><tt>def main():</tt> -<br> -<tt>    MyNAM12Forecaster().run()</tt> -</p> -<h3><a name="answer1b"></a>Answer for Exercise 1b</h3> -<p><br> -<tt>from NAM12 import *</tt> -</p> -<p><tt>class MyNAM12Forecaster(NAM12Forecaster):</tt> -<br> -<tt>    def __init__(self):</tt> -<br> -<tt>        -NAM12Forecaster.__init__(self)</tt> -</p> -<p><tt>    def calcT(self, t_FHAG2):</tt> -<br> -<tt>        return self.KtoF(t_FHAG2)</tt><tt></tt> -</p> -<p><tt>def main():</tt> -<br> -<tt>    MyNAM12Forecaster().run()</tt> -</p> -<h3><a name="answer1c"></a>Answer for Exercise 1c</h3> -<tt>from NAM12 import *</tt> -<p><tt>class MyNAM12Forecaster(NAM12Forecaster):</tt> -<br> -<tt>    def __init__(self):</tt> -<br> -<tt>        -NAM12Forecaster.__init__(self)</tt> -</p> -<p><tt>    def calcT(self, t_FHAG2, topo, stopo):</tt> -<br> -<tt>        elevDiff = topo - stopo</tt> -<br> -<tt>        t = t_FHAG2 -- (elevDiff -* 6.0 / 1000)</tt> -<br> -<tt>        return self.KtoF(t)</tt><tt></tt> -</p> -<p><tt>def main():</tt> -<br> -<tt>    MyNAM12Forecaster().run()</tt> -</p> -<h3><a name="answer1d"></a>Answer for Exercise 1d</h3> -Entry in localConfig.py: -<p><tt>from serverConfig import *</tt> -<br> -<tt>import serverConfig</tt><tt></tt> -</p> -<p><tt>serverConfig.INITMODULES["MyNAM12"] = ["NAM12"]</tt> -<br> -<tt>del serverConfig.INITMODULES["NAM12"]</tt> -<br> -<br> -</p> -<h3><a name="answer2a"></a>Answer for Exercise 2a</h3> -Entry in localConfig.py: -<p><tt>from serverConfig import *</tt> -<br> -<tt>import serverConfig</tt><tt></tt> -</p> -<p><tt>DPD =    ("TdDepression", SCALAR, "F", "Dew Point -Depression", 50, 0, 0)</tt> -<br> -<tt>parmsNAM12 = [([DPD], TC6)]</tt> -<br> -<br> -<br> -</p> -<h3><a name="answer2b"></a>Answer for Exercise 2b</h3> -<tt>from NAM12 import *</tt> -<p><tt>class MyNAM12Forecaster(NAM12Forecaster):</tt> -<br> -<tt>    def __init__(self):</tt> -<br> -<tt>        -NAM12Forecaster.__init__(self)</tt> -</p> -<p><tt>    def calcTdD(self, T, Td):</tt> -<br> -<tt>        return T-Td</tt><tt></tt> -</p> -<p><tt>def main():</tt> -<br> -<tt>    MyNAM12Forecaster().run()</tt> -</p> -<p>The alternative form, where you use the t_FHAG2 and rh_FHAG2 would -be -the following. Note that this method will not take advantage of -any -topographical corrections you have made in the temperatures:<tt></tt> -</p> -<p><tt>from NAM12 import *</tt> -</p> -<p><tt>class MyNAM12Forecaster(NAM12Forecaster):</tt> -<br> -<tt>    def __init__(self):</tt> -<br> -<tt>        -NAM12Forecaster.__init__(self)</tt> -</p> -<p><tt>    def calcTdD(self, t_FHAG2, rh_FHAG2):</tt> -<br> -<tt>        td = getTd(t_FHAG2, -rh_FHAG2)</tt> -<br> -<tt>        depression = t_FHAG2 -- td</tt> -<br> -<tt>        return depression -* 9.0 -/ 5.0</tt><tt></tt> -</p> -<p><tt>    def getTd(self, t, rh):</tt> -<br> -<tt>        # input/output in -degrees -K.</tt> -<br> -<tt>        desat = clip(t, 0, -373.15)</tt> -<br> -<tt>        desat = where(less(t, -173.15), 3.777647e-05, t)</tt> -<br> -<tt>        desat = exp(26.660820 -- desat * 0.0091379024 - 6106.3960 / desat)</tt> -<br> -<tt>        desat = desat * rh / -100.0</tt> -<br> -<tt>        desat = 26.66082 - -log(desat)</tt> -<br> -<tt>        td = (desat - -sqrt(desat*desat-223.1986))/0.0182758048</tt> -<br> -<tt>        td = where(greater(td, -t), t, td)</tt> -<br> -<tt>        return td</tt> -<br> -<br> -</p> -<p><tt>def main():</tt> -<br> -<tt>    MyNAM12Forecaster().run()</tt> -</p> -<br> -<br> -</body> -</html> diff --git a/cave/com.raytheon.viz.gfe/help/SmartScriptClass.html b/cave/com.raytheon.viz.gfe/help/SmartScriptClass.html deleted file mode 100644 index 551413ade1..0000000000 --- a/cave/com.raytheon.viz.gfe/help/SmartScriptClass.html +++ /dev/null @@ -1,153 +0,0 @@ -<!DOCTYPE html PUBLIC "-//w3c//dtd html 4.0 transitional//en"> -<html> -<head> - <meta http-equiv="Content-Type" - content="text/html; charset=iso-8859-1"> - <meta name="GENERATOR" - content="Mozilla/4.78 [en] (X11; U; Linux 2.4.18-27.7.xsmp i686) [Netscape]"> - <title>Smart Script Class Documentation - - -

    -Smart Script Class Library

    -The Smart Script Class has many library methods that are available to -Smart -Tools and Procedures. Complete documentation is within the class itself -(viewable from the Edit Action Dialog Utilities Window) and has been -duplicated -here. - -

    Contents

    -General Arguments -
    -Grid Access Methods -
    - -Sounding Methods -
    - -Conversion Methods - -
    -Error Handling - -
    -Procedure Methods - -
    -Calling Smart Tools and Procedures - -
    -Creating On-the-Fly Grids - -
    -Utilities - -
    -Numeric Library Methods - -
    -Python Object Methods -
    -
    -
    -

    General Arguments

    -The following arguments are used throughout the SmartScript Library -methods. -

    self: When you call a method, use the "self" prefix (see examples -below) -

    -

    model: There are various ways to specify the database model from -which -you want the values: -
    -   -- Simply "Fcst" or "Official" OR -
    -   -- siteID_type_model_modeltime -
    -     where the "type" is an empty string for -Standard -GFE data -
    -     and is "D2D" for D2D data. -
    -   Examples: -
    -     BOU__NAM_Mar2912 :gets March 29 12Z NAM run -created by GFE. -
    -     BOU_D2D_ETA_Mar2912 :gets March 29 12Z -original -NAM run from D2D. -
    -   If you omit the "modeltime", the most recent model run -will -
    -   be selected. For example: -
    -     BOU__NAM : gets the most recent NAM run -created -by GFE. -
    -     BOU_D2D_ETA : gets the most recent original -ETA run from D2D. -
    -   -- the result of soliciting a model from the user using -the "model" or "D2D_model" type of VariableList entry. (See examples -above.) -
    -   -- you may also use a DatabaseID (see getDatabase, below) -
    -   -- simple string with no special characters (this will -be assumed to be a model created "on-the-fly" -

    -

    element: The element name in quotes: e.g. "QPF", "rh", "tp" -

    -

    level: The level in quotes: e.g. "SFC", "MB350", "BL030" -

    -

    x, y: integer coordinates -

    -

    timeRange: Must be a special time range object such as that passed -in -the argument list as GridTimeRange -

    -

    mode: specifies how to handle the situation if multiple grids are -found -within the given time range: -
    -   "TimeWtAverage": return time-weighted Average value -
    -   "Average" : return Average value -
    -   "Max" : return Max value -
    -   "Min" : return Min value -
    -   "Sum" : return Summed value -
    -   "First" : return value from grid with earliest time range -
    -   "List" : return list of values -

    -

    noDataError: If 1, and there is no data, the Smart Tool will abort. -Otherwise, return None. None is a special variable in Python which can -be tested as follows: -
    -   PoP = self.getValue("Fcst", "PoP", "SFC", x,y, -GridTimeRange, -noDataError=0) -
    -   if PoP == None: -
    -   print "No data found for PoP" -

    -

    mostRecentModel: Applies only to model data. Will get the most -recent -model and ignore any times (if included) in the model argument. (Note -that -if a time is not included in the model argument, you will automatically -get the most recent model no matter how this argument is set.) -
    -

    - - diff --git a/cave/com.raytheon.viz.gfe/help/SmartScriptClassCalls.html b/cave/com.raytheon.viz.gfe/help/SmartScriptClassCalls.html deleted file mode 100644 index ed690f4aab..0000000000 --- a/cave/com.raytheon.viz.gfe/help/SmartScriptClassCalls.html +++ /dev/null @@ -1,172 +0,0 @@ - -Smart Script Class - Calling Smart Tools and Procedures - - -

    Calling Smart Tools and Procedures

    -
    -Calling Smart Tools and -Procedures -Arguments -
    -callSmartTool -
    -callProcedure - -
    - - -

    -Calling Smart Tools and Procedures Arguments

    -      ## editArea : ReferenceData -or None -
    -      ##     (See -getEditArea) -
    -      ##      If -you specify None, the system will supply -
    -      ##      the -active edit area from the GFE or from -
    -      ##      the -editArea argument for runProcedure. -
    -      ## timeRange: TimeRange -or None -
    -      ##      (See -getTimeRange and createTimeRange) -
    -      ##      If -you specify None, the system will supply -
    -      ##      the -selected Time Range from the GFE or from -
    -      ##      the -timeRange argument for runProcedure. -
    -      ## varDict : If you supply a varDict -in this call, the -
    -      ##      -variable -list dialog will not be displayed -
    -      ##      when -the tool is run. -
    -      ##      If -you supply a varDict from a Procedure, -
    -      ##      make -sure that the variables -
    -      ##      for -all the tools called by the procedure are -
    -      ##      -supplied -in your varDict. -
    -      ## missingDataMode: Can be "Stop", -"Skip", -or "Create". If not -
    -      ##      -included, -will be set to the current GFE default. -
    -      ## modal: If 0, VariableList dialogs -will appear with the -
    -      ##      -non-modal -"Run" and "Run/Dismiss" buttons. -
    -      ##      -Otherwise, -they will appear with the "Ok" button. -
    -      ## -
    -      ## These commands all return an error -which will be None if no -
    -      ##      errors -occurred. Otherwise, the errorType and errorInfo -
    -      ##      can -be accessed e.g. error.errorType() and error.errorInfo() -
    -      ## If "noData" has been called, the -errorType will be "NoData" and -
    -      ##      can -be tested by the calling tool or script. -

    callSmartTool

    -def callSmartTool(self, toolName, elementName, editArea=None, -timeRange=None, -varDict=None, editValues=1, calcArea=0, calcGrid=0, passErrors=[], -missingDataMode="", modal=1): -
    -       # passErrors: a list of errors -to ignore and pass back to the -
    -       # calling program. Some errors -that can be ignored are: -
    -       #     NoData -
    -       #     -NoElementToEdit -
    -       #     -ExecuteOrClassError -
    -       #     -LockedGridError -
    -       # -
    -       # For example: -
    -       # In the Procedure: -
    -       #     error -= self.callSmartTool( -
    -       -#         -"MyTool", "MixHgt", editArea, timeRange, varDict, -
    -       -#         -passErrors= ["NoData"]) -
    -       #     if error -is not None: -
    -       -#         -print "No Data available to run tool" -
    -       # -
    -       # In the Smart Tool: -
    -       #     mixHgt -= self.getGrids(model, "MixHgt", "SFC", timeRange) -
    -       #     if -mixHgt -is None: -
    -       -#          -self.noData() -

    callProcedure

    -def callProcedure(self, name, editArea=None, timeRange=None, -varDict=None, -missingDataMode="Stop", modal=1): \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/SmartScriptClassConversion.html b/cave/com.raytheon.viz.gfe/help/SmartScriptClassConversion.html deleted file mode 100644 index 5031e39f5c..0000000000 --- a/cave/com.raytheon.viz.gfe/help/SmartScriptClassConversion.html +++ /dev/null @@ -1,66 +0,0 @@ - -Smart Script Class - Conversion Methods - -
    - -

    Conversion Methods

    -UVToMagDir -
    -MagDirToUV -
    -convertMsecToKts -
    -convertKtoF -
    -KtoF -
    -convertFtoK -
    -FtoK -
    -convertFtToM - -
    - - -

    -UVToMagDir

    -def UVToMagDir(self, u, v): -

    MagDirToUV

    -def MagDirToUV(self, mag, dir): -

    convertMsecToKts

    -def convertMsecToKts(self, value_Msec): -
    -      # Convert from meters/sec to Kts -
    -      # meters = 1.0/.0006214 * miles -
    -      # seconds = 60*60*hours -
    -      # m/s = (1.0/.0006214) * (1/ 60*60) -* mph -

    convertKtoF

    -def convertKtoF(self, t_K): -
    -      # Convert the temperature from Kelvin -to Fahrenheit -
    -      # Degrees Fahrenheit = (Degrees Kelvin -- 273.15) / (5/9) + 32 -

    KtoF

    -def KtoF(self, t_K): -

    convertFtoK

    -def convertFtoK(self, t_F): -
    -      # Convert the temperature from Kelvin -to Fahrenheit -
    -      # Degrees Kelvin = (Degrees Fahrenheit -- 32) * (5 / 9) + 273.15 -

    FtoK

    -def FtoK(self, t_F): -

    convertFtToM

    -def convertFtToM(self, value_Ft): -
    -      # Convert the value in Feet to Meters - diff --git a/cave/com.raytheon.viz.gfe/help/SmartScriptClassErrorHandling.html b/cave/com.raytheon.viz.gfe/help/SmartScriptClassErrorHandling.html deleted file mode 100644 index dabb5029fc..0000000000 --- a/cave/com.raytheon.viz.gfe/help/SmartScriptClassErrorHandling.html +++ /dev/null @@ -1,64 +0,0 @@ - -Smart Script Class - Error Handling - -

    Error Handling

    -
    -abort -
    -noData -
    -cancel -
    -errorReturn -
    -statusBarMsg - -
    - - - -

    -abort

    -def abort(self, info): -
    -      # This call will send the info to -AlertViz, -
    -      # put up a dialog with the given info, -and abort the -
    -      # smart tool or procedure. -
    -      # Example: -
    -      # self.abort("Error processing my tool") -
    -      # -

    noData

    -def noData(self, info="Insufficient Data to run Tool"): -
    -      #Raise the NoData exception error -

    cancel

    -def cancel(self): -
    -      # Cancels a smart tool without -displaying -an error message -

    errorReturn

    -def errorReturn(self, noDataError, message): -

    statusBarMsg

    -def statusBarMsg(self, message, status, category="GFE"): -
    -      # Sends the text message to AlertViz -with the -
    -      # given status code: "R" (regular), -"S" (significant), or "U" (urgent) -
    -      # Example: -
    -      # self.statusBarMsg("Running Smart -Tool", -"R") -
    -      # \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/SmartScriptClassGridAccess.html b/cave/com.raytheon.viz.gfe/help/SmartScriptClassGridAccess.html deleted file mode 100644 index fc37e19196..0000000000 --- a/cave/com.raytheon.viz.gfe/help/SmartScriptClassGridAccess.html +++ /dev/null @@ -1,252 +0,0 @@ - -Smart Script Class Grid Access - - -

    Grid Access Methods

    -

    -getGrids -
    -taperGrid -
    -directionTaperGrid -
    -getComposite (numeric only) -
    -getGridInfo -
    -


    - -

    getGrids

    -def getGrids(self, model, element, level, timeRange, -mode="TimeWtAverage", -noDataError=1, mostRecentModel=0, cache=1): -
    -      # Get the value(s) for the given model, -element, and level -
    -      # at the x, y coordinate and over the -given timeRange. -
    -      # -
    -      # The resulting grid values can be -accessed -as follows: -
    -      # PoPGrid = -self.getGrids("Fcst","PoP","SFC", -GridTimeRange) -
    -      # popValue = PoPGrid[x][y] -
    -      # -
    -      # where x and y are integer grid -coordinates. -

    taperGrid

    -def taperGrid(self, editArea, taperFactor=5): -
    -      # Returns a 2-D Grid of values between -0-1 about the -
    -      # given edit area. -
    -      # These values can be applied by smart -tools to taper results. -
    -      # -
    -      # Argument: -
    -      # editArea: Reference data or None
    -      # (use editArea tool argument) -
    -      # taperFactor: If set to zero, will -do Full Taper -
    -      # -
    -      # Example: -
    -      # def preProcessTool(self, editArea): -
    -      #     self._tGrid -= self.getTaperGrid(editArea, 5) -
    -      # def execute(self, variableElement): -
    -      #     return = -variableElement + self._tGrid * 10.0 -
    -      # -

    directionTaperGrid

    -def directionTaperGrid(self, editArea, direction): -
    -      # Returns a 2-D Grid of values between -0-1 within the -
    -      # given edit area. -
    -      # E.g. if the Dir is W and x,y is -half-way -along the -
    -      # W to E vector within the given edit -area, the value of -
    -      # directionTaperGrid at x,y will be -.5 -
    -      # These values can be applied by smart -tools to show -
    -      # spatial progress across an edit area. -
    -      # -
    -      # Argument: -
    -      # editArea : ReferenceData -or None -
    -      # (use editArea tool argument) -
    -      # direction : 16 point text direction -e.g. "NNW", "NW", etc. -
    -      # -
    -      # Example: -
    -      # def preProcessTool(self, editArea): -
    -      #     self._spaceProgress -= self.directionTaperGrid(editArea, "NW") -
    -      # def execute(self, variableElement): -
    -      #     return -variableElement * self._spaceProgress -
    -      # -

    getComposite (numeric only)

    -def getComposite(self, WEname, GridTimeRange, exactMatch=1, onlyISC=0): -
    -       # Returns a composite grid -consisting -of the primary grid and any -
    -       # corresponding ISC grid, blended -together based on the mask information -
    -       # derived from the Grid Data -History. -Primary grid must exist. Returns -
    -       # the set of points that are valid -in the output grid. (Note the output -
    -       # grid consists of the primary -grid and isc grid. Any "invalid" points, -
    -       # indicate those areas that have -no isc data and are outside the home -
    -       # site's region. The returned -grid will have the primary data in -
    -       # the site's region.) -
    -       # -
    -       # A Python tuple is returned. -
    -       # For Scalar elements, the tuple -contains: -
    -       # a numeric grid of 1's and 0's -where 1 indicates a valid point -
    -       # a numeric grid of scalar values -
    -       # For Vector elements, the tuple -contains: -
    -       # a numeric grid of 1's and 0's -where 1 indicates a valid point -
    -       # a numeric grid of scalar values -representing magnitude -
    -       # a numeric grid of scalar values -representing direction -
    -       # For Weather elements, the tuple -contains: -
    -       # a numeric grid of 1's and 0's -where 1 indicates a valid point -
    -       # a numeric grid of byte values -representing the weather value -
    -       # list of keys corresponding to -the weather values -
    -       # -
    -       # For example: -
    -       #     isc -= self.getComposite(WEname, GridTimeRange) -
    -       #     if isc -is None: -
    -       -#         -self.noData() -
    -       #     # See -if we are working with a Scalar or Vector element -
    -       #     wxType -= variableElement_GridInfo.type() -
    -       #     if -wxType -== 0: # SCALAR -
    -       -#         -bits, values = isc -
    -       #     elif -wxType == 1: # VECTOR -
    -       -#         -bits, mag, dir = isc -
    -

    getGridInfo

    -def getGridInfo(self, model, element, level, timeRange, -mostRecentModel=0): -
    -      #  Return the GridInfo object for the given weather element and timeRange
    -      #  Example:
    -      #  timeRange = self.getTimeRange("Today")
    -      #  infoList = self.getGridInfo("Fcst", "T", "SFC", timeRange)
    -      #  for info in infoList:
    -      #  print "grid", info.gridTime()
    -      # 
    -      #  @param model: The model for which grid info is requested.
    -      #  @type model: DatabaseId or String
    -      #  @param element: The element for which grid info is requested.
    -      #  @type element: String
    -      #  @param level: The level for which grid info is requested.
    -      #  @type level: String
    -      #  @param timeRange: A time range over which grid info is requested.
    -      #  @type timeRange: com.raytheon.uf.common.time.TimeRange or TimeRange
    -      #  @param mostRecentModel: whether to use current time in request expr.
    -      #  @type mostRecentModel: integer or boolean
    -      #  @return: Java GridParmInfo object
    diff --git a/cave/com.raytheon.viz.gfe/help/SmartScriptClassNumerics.html b/cave/com.raytheon.viz.gfe/help/SmartScriptClassNumerics.html deleted file mode 100644 index 26eabe5fc4..0000000000 --- a/cave/com.raytheon.viz.gfe/help/SmartScriptClassNumerics.html +++ /dev/null @@ -1,277 +0,0 @@ - -Smart Script Class - Numerics - -

    Numeric Library Methods

    -
    -getTopo -
    -wxMask/discreteMask -
    -sortUglyStr -
    -getIndex -
    -encodeEditArea -
    -decodeEditArea -
    -getindicies -
    -offset -
    -agradient -
    -diff2 -
    -getGridShape - -
    - -

    getTopo

    -def getTopo(self): -
    -      # Return the numeric topo grid -

    wxMask

    -def wxMask(self, wx, query, isreg=0): -
    -       # Returns a numeric mask i.e. -a grid of 0's and 1's -
    -       # where the value is 1 if the -given query succeeds -
    -       # Arguments: -
    -       #     wx -- -a 2-tuple: -
    -       -#         -wxValues : numerical grid of byte values -
    -       -#         -keys : list of "ugly strings" where the index of -
    -       -#             -the ugly string corresponds to the byte value in -
    -       -#             -the wxValues grid. -
    -       #     query --- a text string representing a query -
    -       #     isreg --- if 1, the query is treated as a regular expression -
    -       -#         -otherwise as a literal string -
    -       # Examples: -
    -       #     # Here -we want to treat the query as a regular expression -
    -       #     PoP -= where(self.wxMask(wxTuple, "^Chc:", 1), maximum(40, PoP), PoP) -
    -       #     # Here -we want to treat the query as a literal -
    -       #     PoP -= where(self.wxMask(wxTuple, ":L:") maximum(5, PoP), PoP) -
    -       # -
    -      # See the Smart -Tool Training Guide -- Numerical Tools and Working with Weather Section -for more information. -
    -

    discreteMask

    -def wxMask(self, wx, query, isreg=0): -
    -       # Returns a numeric mask i.e. -a grid of 0's and 1's -
    -       # where the value is 1 if the -given query succeeds -
    -       # Arguments: -
    -       #     wx -- -a 2-tuple: -
    -       -#         -values : numerical grid of byte values -
    -       -#         -keys : list of "ugly strings" where the index of -
    -       -#             -the ugly string corresponds to the byte value in -
    -       -#             -the discreteValues grid. -
    -       #     query --- a text string representing a query -
    -       #     isreg --- if 1, the query is treated as a regular expression -
    -       -#         -otherwise as a literal string -
    -       # Examples: -
    -       #     # Here -we want to treat the query as a regular expression -
    -       #     PoP -= where(self.wxMask(wxTuple, "BlzrdWRN", 1), maximum(40, PoP), PoP) -
    -       #     # Here -we want to treat the query as a literal -
    -       #     PoP -= where(self.wxMask(wxTuple, "WintStmWRN") maximum(5, PoP), PoP) -
    -       # -

    sortUglyStr

    -def sortUglyStr(self, uglyStr): -
    -       # Sort the subkeys of uglyStr alphabetically.
    -       #
    -       # @param uglyStr: A key with "^"s separating subkeys
    -       # @type uglyStr: string
    -       # @return: uglyStr with alpha sorted subkeys.
    -       # @rtype: string
    -

    getIndex

    -def getIndex(self, uglyStr, keys): -
    -       #     Returns -the byte value that corresponds to the -
    -       #     given -ugly string. If the ugly string is not found a new key will be added -
    -       #     and -the index to the new entry will be returned.  This method works -for -grids -
    -       #     of type -weather and discrete. -
    -       # Arguments: -
    -       #     uglyStr: -a string representing a weather value or a discrete value -
    -       #     keys: -a list of ugly strings. -
    -       -#         -A Wx argument represents a 2-tuple: -
    -       -#         -wxValues : numerical grid of byte values -
    -       -#         -keys : list of "ugly strings" where the index of -
    -       -#          -the ugly string corresponds to the byte value in the wxValues grid. -
    -       -#         -For example, if our keys are: -
    -       -#             -"Sct:RW:-::" -
    -       -#             -"Chc:T:-::" -
    -       -#             -"Chc:SW:-::" -
    -       -#         -Then, the wxValues grid will have byte values of 0 where -
    -       -#          -there is "Sct:RW:-::", 1 where there is "Chc:T:-::" -
    -       -#          -and 2 where there is "Chc:SW:-::" -
    -       # -
    -      # See the Smart -Tool Training Guide -- Numerical Tools and Working with Weather Section -for more information. 
    -

    encodeEditArea

    -def encodeEditArea(self, editArea): -
    -      # Returns a numpy mask for -the edit area -
    -      # "editArea" can be a named area or -a ReferenceData object -

    decodeEditArea

    -def decodeEditArea(self, mask): -
    -      # Returns a ReferenceData object for the given -mask -

    getindicies

    -def getindicies(self, o, l): -

    offset

    -def offset(self, a, x, y): -
    -      # Gives an offset grid for array, a, -by x and y points -

    agradient

    -def agradient(self, a): -
    -      # Gives offset grids in the "forward" -x and "up" y directions -

    diff2

    -def diff2(self, x, n=1, axis=-1): -
    -      # diff2(x,n=1,axis=-1) calculates the -first-order, discrete -
    -      # center difference approximation to -the derivative along the axis -
    -      # specified. array edges are padded -with adjacent values. - -

    getGridShape

    -def getGridShape(self): -
    -      # Get the grid shape from the GridLocation stored in the parm manager.
    -      #
    -      # @return: The number of data points in the X and Y directions.
    -      # @rtype: 2-tuple of int
    \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/SmartScriptClassOnTheFly.html b/cave/com.raytheon.viz.gfe/help/SmartScriptClassOnTheFly.html deleted file mode 100644 index c11175f755..0000000000 --- a/cave/com.raytheon.viz.gfe/help/SmartScriptClassOnTheFly.html +++ /dev/null @@ -1,207 +0,0 @@ - -Smart Script Class - Creating On-the-Fly Grids - -

    Creating On-the-Fly Grids

    -
    -createGrid -
    -deleteGrid -
    -highlightGrids -
    -makeHeadlineGrid - -
    - -

    -createGrid

    -

        def createGrid(self, model, element, elementType, -numericGrid, timeRange,
    -                   -descriptiveName=None, timeConstraints=None,
    -                   -precision=None, minAllowedValue=None,
    -                   -maxAllowedValue=None, units=None, rateParm=0,
    -                   -discreteKeys=None, discreteOverlap=None,
    -                   -discreteAuxDataLength=None, defaultColorTable=None):
    -                                                                                -
    -                                                                                -
    -        # Creates a grid for the -given model and element.
    -        # If the model and element -do not already exist, creates them -on-the-fly       
    -        # The descriptiveName, -timeConstraints, precision, minAllowedValue,
    -        # maxAllowedValue, units, -rateParm, discreteKeys, discreteOverlap,
    -        # and discreteAuxDataLength only need to be specified -for the first grid being created.  These
    -        # values are ignored for -subsequent calls to createGrid() for
    -        # the same weather element.

    - -        # For new parms, the defaultColorTable is the one to be used for
    -        # display. If not specified and not in the gfe configuration file,
    -        # a DEFAULT color table will be used.

    - -        # DISCRETE elements require a definition for discreteKeys and
    -        # discreteOverlap. For -DISCRETE, the precision, minAllowedValue,
    -        # maxAllowedValue, and -rateParm are ignored.
    -                                                                                                                                  -
    -        # Note that this works for -numeric grids only.
    -        # The arguments -exampleModel, exampleElement, and exampleLevel can be
    -        # supplied so that the new -element will have the same characteristics
    -        # (units, precision, etc.) -as the example element.
    -        #
    -        # model -- If you are -creating an "on-the-fly" element (i.e. not
    -        -#          in the server), -this should be a simple string with
    -        -#          with no special -characters.  The site ID and other
    -        -#          information -will be added for you.
    -        -#          If you are -creating a grid for a model that exists
    -        -#          in the server, -follow the guidelines for the model
    -        -#          argument -described for the "getValue" command.
    -        # element -- This should be -a simple string with no special
    -        -#          characters.
    -        # elementType -- "SCALAR", -"VECTOR", "WEATHER", or "DISCRETE"
    -        # numericGrid -- a numpy grid
    -        # timeRange -- valid time -range for the grid.  You may want
    -        -#          to use the -"createTimeRange" command
    -        #
    -        # The descriptiveName, -timeConstraints, precision, minAllowedValue,
    -        # precision, -minAllowedValue, maxAllowedValue, and units can be
    -        # used to define the -GridParmInfo needed. Note that timeConstraints
    -        # is not the Java version, -but a (startSec, repeatSec, durSec).
    -        #
    -        # Example:
    -        #    -self.createGrid("ISCDisc", WEname+"Disc", "SCALAR", maxDisc,
    -        -#                   -GridTimeRange, descriptiveName=WEname+"Disc")
    -        #
    -
    -  -

    -

    deleteGrid

    -def deleteGrid(self, model, element, level, timeRange): -
    -      # Deletes any grids for the given model -and element -
    -      # completely contained in the given -timeRange. -
    -      # If the model and element do not exist -or if there are no existing grids, -
    -      # no action is taken. -

    highlightGrids

    -def highlightGrids(self, model, element, level, timeRange, color, -on=1): -
    -      # Highlight the grids in the given time -range using designated -
    -      # color. If "on" is 0, turn off the -highlight. -

    makeHeadlineGrid -

    -

        def makeHeadlineGrid(self, headlineTable, -fcstGrid, -headlineGrid = None): -
    -        # This method defines a -headline grid based on the specified data. -
    -        # The headlineTable -parameter -must be a list of tuples each containing -
    -        # the threshold for each -headline category and headline label -
    -        # Example: -
    -        #     -headlineTable =[(15.0, 'SmCrftHSADV'), -
    -        -#                     -(21.0, 'SmCrftADV'), -
    -        -#                     -(34.0, 'GaleWRN'), -
    -        -#                     -(47.0, 'StormWRN'), -
    -        -#                     -(67.0, 'HurcnFrcWindWRN'), -
    -        -#                     -] -
    -        # "fsctGrid" is the grid -that defines what headline category should -
    -        # be assigned. -"headlineGrid" -is the grid you wish to combine with -
    -        # the calculated grid.  -This forces a combine even if the GFE is not -
    -        # in combine mode.  -Omitting "headlineGrid" will cause the calculated -
    -        # grid to replace whatever -is in the GFE, no matter what the GFE's -
    -        # combine mode. Note that -a side effect of omitting the headline grid -
    -        # is that the GFE will end -up in replace mode after the tool completes. -
    -  -

    \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/SmartScriptClassProcedure.html b/cave/com.raytheon.viz.gfe/help/SmartScriptClassProcedure.html deleted file mode 100644 index 91da0b0bc4..0000000000 --- a/cave/com.raytheon.viz.gfe/help/SmartScriptClassProcedure.html +++ /dev/null @@ -1,461 +0,0 @@ - -Smart Script Class - Procedure Methods - - - -

    Procedure Methods

    -
    -copyCmd -
    -copyToCmd -
    -deleteCmd -
    -zeroCmd -
    -interpolateCmd -
    -createFromScratchCmd -
    -timeShiftCmd -
    -splitCmd -
    -fragmentCmd -
    -assignValueCmd - -
    - -

    -Command Arguments

    -      # These commands always apply to the -mutable -model only. -
    -      # name1, name2, name3 is a list of the -weather element names -
    -      # startHour is the starting hour for -the command offset from modelbase -
    -      # endHour is the ending hour for the -command offset from modelbase. -
    -      # The ending hour is NOT included in -the processing of the -
    -      # command. -
    -      # modelbase is the name of the model -to be used to determine base times -
    -      # Note that if this is "", then 0000z -from today will be -
    -      # used for the base time. -
    -      # modelsource is the name of the model -to be used in the copy command -
    -      # copyOnly is 0 for move and 1 for copy -only in the time shift command -
    -      # hoursToShift is the number of hours -to shift the data in time -
    -      # shift command -
    -      # DatabaseID -
    -      # Can be obtained in various ways: -
    -      # --By calling findDatabase (see below) -
    -      # --By calling getDatabase (see below) -with the result -
    -      # of a VariableList entry of type -"model" -or "D2D_model" -
    -      # TimeRange. -
    -      # Can be obtained in various ways: -
    -      # --As an argument passed into Smart -Tool or Procedure, -
    -      # --By calling getTimeRange (see below) -
    -      # --By calling createTimeRange (see -below) -

    copyCmd

    -def copyCmd(self, elements, databaseID, timeRange): -
    -      # copyCmd(['name1', 'name2', 'name3'], -databaseID, timeRange) -
    -      # Copies all grids for each weather -element from the given database -
    -      # into the weather element in the -mutable -database that overlaps -
    -      # the time range. -
    -      # Example: -
    -      #     databaseID -= self.findDatabase("NAM") # Most recent NAM model -
    -      #     timeRange -= self.createTimeRange(0, 49, "Database", databaseID) -
    -      #     -self.copyCmd(['T', -'Wind'], databaseID, timeRange) -
    -      # will copy the Temperature and Wind -fields analysis through 48 hours -
    -      # from the latest NAM and place them -into the forecast. -
    -      # -

    copyToCmd

    -def copyToCmd(self, elements, databaseID, timeRange): -
    -      # copyCmd([('srcName1', 'dstName1), -('srcName2', 'dstName2')], databaseID, timeRange) -
    -      # Copies all grids for each weather -element from the given database -
    -      # into the weather element in the -mutable -database that overlaps -
    -      # the time range. Both the source -
    -      # and destination names are given. -
    -      # Example: -
    -      #     databaseID -= self.findDatabase("NAM") # Most recent NAM model -
    -      #     timeRange -= self.createTimeRange(0, 49, "Database", databaseID) -
    -      #     -self.copyToCmd([('T', -'MaxT'), ('MaxT', 'MinT')], databaseID, timeRange) -
    -      # will copy T to MaxT and MaxT to MinT -
    -      # from the latest NAM and place them -into the forecast. -
    -      # -

    deleteCmd

    -def deleteCmd(self, elements, timeRange): -
    -      # deleteCmd(['name1', 'name2', 'name3'], -timeRange) -
    -      # Deletes all grids that overlap the -input time range for element -
    -      # in the mutable database. -
    -      # Example: -
    -      #     databaseID -= self.findDatabase("NAM") # Most recent NAM model -
    -      #     timeRange -= self.createTimeRange(0, 49, "Database", databaseID) -
    -      #      -self.deleteCmd(['T', -'Wind'], databaseID, timeRange) -
    -      # will delete the Temperature and Wind -fields analysis up to -
    -      # but not including 48 hours relative -to the start time of -
    -      # the latest NAM model. -
    -      # -

    zeroCmd

    -def zeroCmd(self, elements, timeRange): -
    -      # zeroCmd(['name1', 'name2', 'name3'], -timeRange) -
    -      # Assigns the minimum possible value -for scalar and vector, and "" -
    -      # for weather for the parameter in the -mutable database for all grids -
    -      # that overlap the specified time range. -
    -      # Example: -
    -      #     databaseID -= self.findDatabase("NAM") # Most recent NAM model -
    -      #     timeRange -= self.createTimeRange(0, 49, "Database", databaseID) -
    -      #     -self.zeroCmd(['T', -'Wind'], databaseID, timeRange) -
    -      # will zero the Temperature and Wind -grids through 48 hours -
    -      # relative to the start time of the -latest NAM model. -
    -      # 
    -

    interpolateCmd

    -def interpolateCmd(self, elements, timeRange, interpMode="GAPS", -interpState="SYNC", -interval=0, duration=0): -
    -      # interpolateCmd(['name1', 'name2', -'name3'], timeRange, -
    -      # interpMode="GAPS", interpState="SYNC", -interval=0, duration=0) -
    -      # Interpolates data in the forecast -for the named weather elements -
    -      # for the given timeRange. -
    -      # Example: -
    -      #     databaseID -= self.findDatabase("NAM") # Most recent NAM model -
    -      #     timeRange -= self.createTimeRange(0, 49, "Database", databaseID) -
    -      #     -self.interpolateCmd(['T', -'Wind'], timeRange, "GAPS","SYNC") -
    -      # will interpolate the Temperature and -Wind grids up to but -
    -      # but not including 48 hours relative -to the start time of -
    -      #the latest NAM model. -
    -      # The interpolation will run in SYNC -mode i.e. completing before -
    -      # continuing with the procedure. -
    -      # -

    createFromScratchCmd

    -def createFromScratchCmd(self, elements, timeRange, repeat=0, -duration=0): -
    -      # createFromScratchCmd(['name1', -'name2'], -timeRange, repeat, duration) -
    -      # Creates one or more grids from scratch -over the given timeRange -
    -      # and assigns the default (minimum -possible -value for scalar -
    -      # and vector, "" for weather). -
    -      # The repeat interval and duration (both -specified in hours) are -
    -      # used to control the number of grids -created. If 0 is specified for -
    -      # either one, than only 1 grid is -created -for the given time range. If -
    -      # valid numbers for duration and repeat -are given, then grids will -
    -      # be created every "repeat" hours and -they will have a duration -
    -      # of "duration" hours. If there is not -enough room remaining to create -
    -      # a grid with the full duration, then -no grid will be created in the space -
    -      # remaining. If you don't get the -desired -results, be sure that your input -
    -      # time range starts on a valid time -constraint for the element. If the -
    -      # element's time constraints (not the -values supplied in this routine) contains -
    -      # gaps (i.e., duration != -repeatInterval), -then the repeat interval and -
    -      # duration will be ignored and grids -will be created for each possible -
    -      # constraint time. -
    -      # Example: -
    -      #     databaseID -= self.findDatabase("NAM") # Most recent NAM model -
    -      #     timeRange -= self.createTimeRange(0, 49, "Database", databaseID) -
    -      #     -self.createFromScratchCmd(['T', -'Wind'], timeRange, 3, 1) -
    -      # will create the 1-hour Temperature -grids through 48 hours at -
    -      # 3 hour intervals relative to the start -time of the latest NAM model. -
    -      # 
    -

    timeShiftCmd

    -def timeShiftCmd(self, elements, copyOnly, shiftAmount, timeRange): -
    -      # timeShiftCmd(['name1', 'name2'], -copyOnly, -shiftAmount, timeRange) -
    -      # Performs a time shift by the -shiftAmount -for all elements that -
    -      # overlap the time range. -
    -      # Example: -
    -      #     databaseID -= self.findDatabase("NAM") # Most recent NAM model -
    -      #      -timeRange -= self.createTimeRange(0, 49, "Database", databaseID) -
    -      #      -self.timeShiftCmd(['T', -'Wind'], 1, 3, timeRange) -
    -      # -

    splitCmd

    -def splitCmd(self, elements, timeRange): -
    -      # splitCmd(elements, timeRange) -
    -      # Splits any grid that falls on the -start time or ending time of the -
    -      # specified time range for the given -parameter in the mutable database. -
    -      # -

    fragmentCmd

    -def fragmentCmd(self, elements, timeRange): -
    -      # fragmentCmd(elements, timeRange) -
    -      # Fragments any grids that overlap the -input time range for the parm -
    -      # identified in the mutable database. -
    -      # -

    assignValueCmd

    -def assignValueCmd(self, elements, timeRange, value): -
    -      # assignValueCmd(elements, timeRange, -value) -
    -      # Assigns the specified value to all -grids points for the grids that -
    -      # overlap the specified time range, -for the weather element in the mutable -
    -      # database specified. -
    -      # value is: -
    -      # an Integer or Float for SCALAR -
    -      # a magnitude-direction tuple for -VECTOR: -e.g. (55,120) -
    -      # a text string for Weather which can -be obtained via the -
    -      # WxMethods WxString method -
    -      # Example: -
    -      # -
    -      # Scalar -
    -      #     value = 60 -
    -      #     -self.assignValue(["T","Td"], -0, 12, 'NAM', value) -
    -      # -
    -      # Vector -
    -      #     value = (15, -120) -
    -      #     -self.assignValue(["Wind"], -0, 12, 'NAM', value) -
    -      # -
    -      # Weather -
    -      #     from WxMethods -import * -
    -      #      value -= WxString("Sct RW") -
    -      #      -self.assignValue(["Wx"], -0, 12, 'NAM', value) - - - diff --git a/cave/com.raytheon.viz.gfe/help/SmartScriptClassPythonObjectMethods.html b/cave/com.raytheon.viz.gfe/help/SmartScriptClassPythonObjectMethods.html deleted file mode 100644 index f6493be134..0000000000 --- a/cave/com.raytheon.viz.gfe/help/SmartScriptClassPythonObjectMethods.html +++ /dev/null @@ -1,54 +0,0 @@ - -Smart Script Class - Python Object Methods - -

    Python Object Methods

    -
    -saveObject -
    -getObject -
    -deleteObject - -
    - -These methods allow you to save, get, and delete Python objects to and -from the server. -

    saveObject

    -def saveObject(self, name, object, category): -
    -      # Save a Python object (e.g. a Numeric -grid) -
    -      # in the server under the given name -
    -      # Example: -
    -      # self.saveObject("MyGrid", numericGrid, -"DiscrepancyValueGrids") -
    -      # -

    getObject

    -def getObject(self, name, category): -
    -      # Returns the given object stored in -the server -
    -      # Example: -
    -      # discrepancyValueGrid = -self.getObject("MyGrid","DiscrepancyValueGrids") -
    -      # -

    deleteObject

    -def deleteObject(self, name, category): -
    -      # Delete the given object stored in -the server -
    -      # Example: -
    -      # self.deleteObject("MyGrid", -"DiscrepancyValueGrids") -
    -      # -
    \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/SmartScriptClassSounding.html b/cave/com.raytheon.viz.gfe/help/SmartScriptClassSounding.html deleted file mode 100644 index e5c36ab05e..0000000000 --- a/cave/com.raytheon.viz.gfe/help/SmartScriptClassSounding.html +++ /dev/null @@ -1,59 +0,0 @@ - -Smart Script Class - Sounding Methods - - -

    Sounding Methods

    -makeNumericSounding -(numeric only) -
    -getNumericMeanValue -(numeric only) -
    - -
    - -

    makeNumericSounding (numeric only)

    -def makeNumericSounding(self, model, element, levels, timeRange, -noDataError=1, -mostRecentModel=0): -
    -      # Make a numeric sounding for the given -model, element, and levels -
    -      # Example: -
    -      # levels = -["MB850","MB800","MB750","MB700","MB650","MB600"] -
    -      # gh_Cube, rh_Cube = -self.makeNumericSounding( -
    -      # model, "rh", levels, GridTimeRange) -
    -      # -
    -      # Arguments: -
    -      # -
    -      # The "levels" argument is a Python -list of levels INCREASING -
    -      # in height. -
    -      # This method returns two numeric cubes: -
    -      # ghCube of geopotential heights for -the given levels -
    -      # valueCube of values for the given -levels -

    getNumericMeanValue (numeric only)

    -def getNumericMeanValue(self, model, element, levels, timeRange, -noDataError=1): -
    -      # Return a numeric array of mean values -for the given element between and including -
    -      # the given levels - diff --git a/cave/com.raytheon.viz.gfe/help/SmartScriptClassUtilities.html b/cave/com.raytheon.viz.gfe/help/SmartScriptClassUtilities.html deleted file mode 100644 index 3a0e1a9cc7..0000000000 --- a/cave/com.raytheon.viz.gfe/help/SmartScriptClassUtilities.html +++ /dev/null @@ -1,481 +0,0 @@ - -Smart Script Class - Utilities - - -

    Utilities

    -
    -findDatabase -
    -getDatabase -
    -getTimeRange -
    -createTimeRange -
    -getSamplePoints -
    -dayTime -
    -determineTimeShift -
    -getEditArea -
    -saveEditArea -
    -setActiveEditArea -
    -clearActiveEditArea -
    -setActiveElement -
    -getActiveElement -
    -getGridCellSwath -
    -getLatLon -
    -getLatLonGrids -
    -getGridCell -
    -getGrid2DBit -
    -getGridTimes -
    -getExprName -
    -getModelName -
    -getD2Dmodel -
    -getParm -
    -getParmByExpr -
    -cacheElements -
    -unCacheElements -
    -loadWEGroup -
    -unloadWE -
    -saveElements -
    -publishElements -
    -combineMode -
    -setCombineMode -
    -getVectorEditMode -
    -setVectorEditMode -
    -getConfigItem -
    -esat - -
    - - -

    -findDatabase

    -def findDatabase(self, databaseName, version=0): -
    -      # Return a database id. -
    -      # databaseName can have the appended -type. E.g. "NAM" or "D2D_NAM" -
    -      # version is 0 (most recent), -1 -(previous), --2, etc. -
    -      # E.g. -
    -      # databaseID = -self.findDatabase("NAM",0) -
    -      # returns most recent NAM model -

    getDatabase

    -def getDatabase(self, databaseString): -
    -      # Return a database id. -
    -      # databaseString is the result of a -VariableList entry of type -
    -      # "model" or "D2D_model" -

    getTimeRange

    -def getTimeRange(self, timeRangeName): -
    -      # Returns TimeRange given -a time range name -
    -      # as defined in the GFE -
    -      # E.g. -
    -      # timeRange = self.getTimeRange("Today") -

    createTimeRange

    -def createTimeRange(self, startHour, endHour, mode="LT", dbID=None): -
    -      # Returns TimeRange given -by: -
    -      # startHour, endHour -
    -      # (range is startHour up to and not -including endHour) -
    -      # startHour and endHour are relative -to midnight of the -
    -      # current day either in Local or Zulu -time (see below) -
    -      # mode can be: -
    -      # "LT" : the startHour and endHour are -relative to local time -
    -      # "Zulu": relative to Zulu time, -
    -      # "Database": relative to a database -(e.g. model time. -
    -      # In this case, the databaseID for the -model must -
    -      # be supplied (see findDatabase) -
    -      # -
    -      # E.g. -
    -      # timeRange = -self.createTimeRange(0,121,"Zulu") -
    -      # databaseID = self.findDatabase("NAM") -
    -      # timeRange = -self.createTimeRange(120,241,"Database",databaseID) -

    getSamplePoints

    -def getSamplePoints(self, sampleSetName=None): -
    -      # Return a list of x,y tuples -representing -sample points -
    -      # sampleSet is the name of a saved -sample -set -
    -      # if sampleSet is None, the sample -points -will be -
    -      # those currently displayed on the GFE - - -

    dayTime

    -def dayTime(self, timeRange, startHour=6, endHour=18): -
    -      # Return 1 if start of timeRange is -between the -
    -      # startHour and endHour, Return 0 -otherwise. -
    -      # Assume timeRange is GMT and convert -to local time. -

    determineTimeShift

    -def determineTimeShift(self): -
    -      # Returns the difference: Local time -- GMT in seconds -

    getEditArea

    -def getEditArea(self, editAreaName): -
    -      # Returns a ReferenceData object -given an edit area name -
    -      # as defined in the GFE -

    saveEditArea

    -def saveEditArea(self, editAreaName, refData): -
    -      # Saves the ReferenceData object -with the given name -

    setActiveEditArea

    -def setActiveEditArea(self, area): -
    -      # Set the ReferenceData area to -be the active one in the GFE -
    -      # Note: This will not take effect until -AFTER the smart tool or -
    -      # procedure is finished executing. -

    clearActiveEditArea

    -def clearActiveEditArea(self): -
    -      # Clear the active edit area in the -GFE -

    setActiveElement

    -def setActiveElement(self, model, element, level, timeRange, -colorTable=None, -minMax=None, fitToData=0): -
    -      # Set the given element to the active -one in the GFE -
    -      # A colorTable name may be given. -
    -      # A min/max range for the colorTable -may be given. -
    -      # If fitToData = 1, the color table -is fit to the data -
    -      # -
    -      # Example: -
    -      # self.setActiveElement("ISCDisc", -WEname+"Disc", -"SFC", GridTimeRange, -
    -      # colorTable="Discrepancy", -minMax=(-20,+20), -
    -      # fitToData=1) -
    -      # -

    getActiveElement

    -def getActiveElement(self): -
    -      # Return the parm for the current active -element -

    getGridCellSwath

    -def getGridCellSwath(self, editArea, cells): -
    -      # Returns a ReferenceData swath -of the given -
    -      # number of cells around the given an -edit area. -
    -      # The edit area must not be a query. -

    getLatLon

    -def getLatLon(self, x, y): -
    -      # Get the latitude/longitude values -for the given grid point
    -      coords = Coordinate(float(x), float(y))
    -      cc2D = self.getGridLoc().latLonCenter(coords)
    -      return cc2D.y, cc2D.x - - -

    getLatLonGrids

    -def getLatLonGrids(self): -
    -      # Get the latitude/longitude grids
    -      gridLoc = self.getGridLoc()
    -      latLonGrid = gridLoc.getLatLonGrid().__numpy__[0];
    -      latLonGrid = numpy.reshape(latLonGrid, (2,gridLoc.getNy().intValue(),
    -           gridLoc.getNx().intValue()), order='F')
    -      return latLonGrid[1], latLonGrid[0] - -

    getGridCell

    -def getGridCell(self, lat, lon): -
    -      # Get the corresponding x,y values for -the given lat/lon -
    -      # Return None, None if the lat/lon is -outside the grid domain -

    getGrid2DBit

    -def getGrid2DBit(self, editArea): -
    -      # Returns a Grid of on/off values -indicating -whether -
    -      # or not the grid point is in the given -edit area. -
    -      # This could be used as follows in a -Smart Tool: -
    -      # def preProcessGrid(self): -
    -      # editArea = self.getEditArea("Area1") -
    -      # self.__area1Bits = -self.getGrid2DBit(editArea) -
    -      # editArea = self.getEditArea("Area2") -
    -      # self.__area2Bits = -self.getGrid2DBit(editArea) -
    -      # -
    -      # def execute(self, x, y): -
    -      # if self.__area1Bits.get(x,y) == 1: -
    -      #  -
    -      # elif self.__area2Bits.get(x,y) == -1: -
    -      #  -
    -      # 
    -

    getGridTimes

    -def getGridTimes(self, model, element, level, startTime, hours): -
    -      # Return the timeRange and gridTimes -for the number of hours -
    -      # FOLLOWING the given startTime -

    getExprName

    -def getExprName(self, model, element, level="SFC", mostRecent=0): -
    -      # Return an expressionName for the -element -
    -      # This method is complicated because -it is handling all the -
    -      # variations for the "model" argument. -For a description -
    -      # of the variations, see the "getValue" -documentation above. -

    getModelName

    -def getModelName(self, databaseString): -
    -      # Return the model name. -
    -      # databaseString is the result of a -VariableList entry of type -
    -      # "model" or "D2D_model" -

    getD2Dmodel

    -def getD2Dmodel(self, model): -
    -      # Given a GFE Surface model, return -the corresponding D2D model -

    getParm

    -def getParm(self, model, element, level, timeRange=None, mostRecent=0): -
    -      # Returns the parm object for the given -model, element, and level - -

    getParmByExpr

    -def getParmByExpr(self, exprName): -
    -      # Returns the parm object for the given expression -

    cacheElements

    -def cacheElements(self, elementNames): -
    -      # This routine is deprecated - caching is controlled by the system. -

    unCacheElements

    -def unCacheElements(self, elementNames): -
    -      # This routine is deprecated
    -      # Users may still call this method
    -      # to delete temporary parms in the parm manager. -

    loadWEGroup

    -def loadWEGroup(self, groupName): -
    -      # Load the given weather element group -into the GFE -

    unloadWE

    -def unloadWE(self, model, element, level, mostRecent=0): -
    -      # Unload the given weather element from GFE -

    saveElements

    -def saveElements(self, elementList): -
    -      # Save the given Fcst elements to the -server -
    -      # Example: -
    -      # self.saveElements(["T","Td"]) -

    publishElements

    -def publishElements(self, elementList, timeRange): -
    -      # Publish the given Fcst elements to -the server -
    -      # over the given time range -
    -      # Example: -
    -      # self.publishElements(["T","Td"], -timeRange) -

    combineMode

    -def combineMode(self): -
    -      # returns 1 if we are in COMBINE mode -and 0 if not -
    -  -

    setCombineMode

    -def setCombineMode(self): -
    -      # call it like this -
    -      self.setCombineMode("Replace") -

          #or -

    -

          self.setCombineMode("Combine") -
    -  -

    -

    getVectorEditMode

    -def getVectorEditMode(self): -
    -       # Returns Vector Edit mode in -the GFE -
    -       # mode: -
    -       #     -"Magnitude -Only" -
    -       #     "Vector -Only" -
    -       #     "Both" -

    setVectorEditMode

    -def setVectorEditMode(self, mode): -
    -       # Sets the Vector Edit mode in -the GFE -
    -       # mode: -
    -       #     -"Magnitude -only" -
    -       #     "Vector -only" -
    -       #     "Both" -

    getConfigItem

    -def getConfigItem(elf, itemName, default=None): -
    -       # Return the configuration file value for "itemName"
    -       # If not found, return the default given -

    esat

    -def esat(self, temp): diff --git a/cave/com.raytheon.viz.gfe/help/SmartTools.html b/cave/com.raytheon.viz.gfe/help/SmartTools.html deleted file mode 100644 index cb6561ada2..0000000000 --- a/cave/com.raytheon.viz.gfe/help/SmartTools.html +++ /dev/null @@ -1,208 +0,0 @@ - - - - - - Smart Tools and Procedures Training Guide - - -
    -

    Smart Tools and -Procedures Training Guide

    -
    -

    -Contents


    -Edit Actions -
    -Smart Tools -
    -Procedures -
    -Utilities -
    -Answers to Exercises
    -Appendix -- Point-based Tools - - - - - -

    Edit Actions

    - -
    -
    -Edit Actions are operators that can modify many grids in a single -operation, -thus potentially saving you time. The GFE has two kinds of Edit -Actions: -
  • Smart Tools: bits of code which perform -operations on a -grid-by-grid -basis. Smart Tools are written in a language called, Python.
  • -
  • Procedures: bits of code which can perform operations on many -grids and -may call Smart Tools and other useful commands which can create, -interpolate, -and delete grids.
  • -
    -The combination of Smart Tools and Procedures is very powerful. -However, -be careful. It's easy to unintentionally modify grids, too. The next -section -describes how you control which grids get modified. -
    -
    Before you actually execute an Edit Action you must -first -indicate the grids that you wish to modify. There are two ways to -indicate -which grid(s) you wish to edit. One uses the Spatial Editor Time and -the -other uses the Selected Time Range in the Grid Manager.
    -

    -Using the Spatial Editor Time to Identify Editable Grids

    -
    If you want to edit a single grid, the simplest way -is -to MB1 press over that grid in the Grid Manager. This will make the -grid -"Editable" and set the Time Range to that of the grid. To edit your -selected -grid using the Edit Actions, follow the steps below. The grid you wish -to modify should now be displayed in the Spatial Editor and the label -for -that grid should start with the word "(edit)".
    -
    -
      -
        -
          -
        1. Make any grid you choose editable by moving the cursor over -that grid in -the Grid Manager pressing MB1. Alternatively, you can MB2 click on the -Spatial Editor label that corresponds to that grid.
        2. -
        3. In the Spatial Editor, pick the Select Points tool and create -an edit area on the display.
        4. -
        5. On the button bar, MB1-click on the button that looks like -the icon to -the right. A list dialog will appear -looking similar the figure below containing items such as SetValue, -AdjustValue_Up, -AdjustValue_Down, and Smooth.
        6. -
        7. MB1 press and hold on the AdjustValue_Up entry. Look at the -corresponding -grid in the Grid Manager. Note that the color of this grid has changed, -indicating which grid is about to be modified.
        8. -
        9. Now release MB1 and watch your selected area change in value.
        10. -
        11. For more practice, select a different edit area and operate -on the -gridded -data using different edit actions.
        12. -
        -
      -
    -
    - -
    -
    -Once you have selected an edit area, you can execute any of these Smart -Tools in any order. (Sometimes the Edit Actions Dialog appears in -an inconvenient location such as on top of the data you wish to edit. -The -Edit Actions Dialog is easily moved by pressing -MB1 on the menu and dragging the menu to a more desirable location. -Moving -the cursor over the title bar of this menu and MB1 dragging will move -this -dialog as well.)

    -
    When a grid is "Editable", the Smart Tools that apply -to it will appear in the Edit Actions Dialog. If no grid is -editable, -all tools will appear. However, to execute a tool, the Weather Element -to be modified by it, MUST be "Editable". The tools that apply to -the "Editable" Weather Element also appear and can be executed from the -MB3 pop-up menu over the Spatial Editor. In addition, keyboard -shortcuts can be set up for Smart Tools and Procedures (see -gfeConfig Keyboard Shortcuts).
    -

    -Using the Selected Time Range to Identify Editable Grids

    -
    Since editing one grid at a time would be too -cumbersome, -the GFE allows you to edit many grids at once. However, this powerful -capability -must be used with great care or you could modify grids unintentionally. -To learn how to modify many grids at once, follow the steps below.
    -
    -
    -
      -
    1. Make the Weather Element you wish to modify "Editable" as -described -above.
    2. -
    3. In the Grid Manager, select a time range that spans across as -many -grids -for the weather element that you wish to modify. To accomplish this, -press -and drag MB1 in the Time Scale or the weather element data pane.
    4. -
    5. Now that you've identified the grids you wish to edit, press -and hold -MB1 -on either the SetValue, AdjustUp(Down), or the Smooth edit actions.
    6. -
    7. While holding down MB1, look at the Grid Manager and notice -that the -grids -that you previously selected have changed color, indicating that those -grids are about to be modified.
    8. -
    9. Release MB1 and a warning message will appear.
    10. -
    11. Click Yes and watch the data change as defined by the edit -action that -you chose.
    12. -
    -
    -
    -
    Examine all of the grids that you modified until you -convince yourself that you did modify all the grids that you intended. -

    Procedures may also depend upon the Spatial Editor time and Selected -Time Range. However, they have the capability of internally defining -the grids and time range upon which they operate.

    -
    -
    -
    -In summary, the Grid Manager's selected time range is used to indicate -which grids will be modified by a Smart Tool. If no selected time range -is defined, the Spatial Editor time is used. Pressing MB1 over a Smart -Tool is the best way to know which grids will be edited before the -operation -is executed. If you decide NOT to perform the edit, simply move the -mouse -off the Smart Tool before releasing MB1.

    -
    The list of Smart Tools may include items that are -defined -at the local site. These Smart Tools can use previously defined fields -to modify new fields. Algorithms that incorporate the local terrain can -be included as well. This paradigm allows for extensibility so that the -local office can create their own tools customized for their office.
    -

    -Edit Action Warnings

    -
    There are two types of warnings you might see when -performing -Edit Actions: Empty Edit Area Warning and Time Range Warning. These can -both be turned on or off from the Main Menu or from the Warning itself.
    -
    -
    -The Time Range Warning cautions you that multiple grids will be -modified -and will not appear if only one grid will be affected. Also, if the -user -is performing the same Edit Action (same weather element, tool or -procedure, -time range, and edit area), no warnings will appear. This way someone -can -smooth or adjust repeatedly without the warnings. The pickup value is -not -checked, so one can also perform Assign_Value repeatedly and change the -pickup value in between without getting a warning message. -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/SmartToolsAppendix.html b/cave/com.raytheon.viz.gfe/help/SmartToolsAppendix.html deleted file mode 100644 index 5bc2093a6d..0000000000 --- a/cave/com.raytheon.viz.gfe/help/SmartToolsAppendix.html +++ /dev/null @@ -1,852 +0,0 @@ - -GFESuite Documentation - Smart Tools - -

    Smart Tools Appendix: Point-based Tools

    - -

         Point-based -Arguments -
    -     Reserved Methods -
    -     Exercise Point-based-1 -- -Creating a Tool -
    -     Exercise Point-based-2 -- -Modifying a Tool -
    -     Exercise Point-based-3 -- -Using VariableLists -
    -     Working With  Point-based Weather -
    -     Exercise Point-based -SmartScript-1 --- Accessing Grids Directly -
    -     Exercise Point-based -SmartScript-2 --- Accessing Variable Grids Directly -
    -     Exercise Point-based -SmartScript-3 --- Making and Accessing Soundings -
    -     Answers to Point-based -Exercises -
    -

    -
    - -
    -

    Appendix -- Point-based Tools

    -Prior to the introduction of Numeric Python, Smart Tools were -Point-based -i.e. the "execute" method of the tool was called for each point of the -grid. Point-based tools are much slower than their Numeric -counterparts. -However, for backward compatibility, Point-based tools are still -supported. -In some cases, they are easier to write since if-then-else logic -can be used for assigning values instead of "where" statements. -This -section discusses the differences between Point-based and Numeric Smart -Tools and contains exercises to illustrate how to write Point-based -tools. -

    Point-based Arguments

    -The arguments to point-based tools differ slightly from those to -numeric -tools. The differences are listed below: -
      -
    • <weName> -- the value for one point of the -given weather -element. -Weather element values are as follows:
    • -
      -
        -
      • Scalar value: floating point value,
      • -
      • Vector value: two-tuple of magnitude and direction, for example:
      • -
        -   mag = Wind[0]
        -   dir = Wind[1]
      • Weather value: text string indicating -weather -Coverage:Type:Intensity:Visibility:Attributes. -See the "Working With Point-based Weather" section -for -more information.
      • -
      -
    -
      -
    • Topo -- this will give you the topography -information i.e. the -elevation -at each point.
    • -
    • variableElement-- the grid point value for the -editable weather element -in the GFE.
    • -
    • <weName>_Grid -- the entire Grid for the -given element. weName -can be -"variableElement", "Topo", or a weather element name. A time-weighted -average -of grid values is given. To access grid values, use x and y coordinates -(see below) as follows:
    • -
      -    value = T_Grid[x][y]
    • x -- the -x coordinate for the grid point being -changed
    • -
    • y -- the y coordinate for the grid point being -changed
    • -
    • lat -- the latitude for the x,y coordinates for -the grid point being -changed
    • -
    • lon -- the longitude for the x,y coordinates for -the grid point being -changed
    • -
    • <weName>_MaxGrid -- a grid of maximum -values for the element over -the -GridTimeRange
    • -
    • <weName>_MinGrid -- a grid of minimum -values for the elementover -the -GridTimeRange
    • -
    • <weName>_SumGrid -- a grid of the sum of -values for the element -over -the GridTimeRange
    • -
    • GridHistory is not available for point-based -tools.
    • -
    -

    -Reserved Methods

    -Some methods have reserved names and meanings. To understand the -framework, -recall that a Point-based Smart Tool may operate over a time range -which -may include multiple grids. The mandatory "execute" method is called -for -each grid to be modified. Sometimes, you may wish to set up information -before or after this point-by-point processing occurs. If so, you may -use -the following methods: -
      -
    • preProcessTool:   Called once at beginning of the Tool, -before -any grids are processed.
    • -
    • postProcessTool:   Called once at end of the Tool, -after all -grids are processed.
    • -
    • preProcessGrid:   Called once at the beginning of each -Grid.
    • -
    • postProcessGrid:   Called once at the end of each Grid.
    • -
    -Of course, these methods will be called only if you supply them in your -tool. They are included as comments in the Smart Tool template that -appears -when you create a new tool and are documented there. The possible -arguments -to these methods will vary according to the logic of when they are -called. -

    Exercise Point-based-1 -- -Creating a new tool

    -
    Create a Smart Tool to yield a SnowAmt equal to the -current -QPF value multiplied by 10.
    -
    -
      -
    1. Select GFE -> Define SmartTools. The Localization perspective will open - with the SmartTools folder selected. Select MB3 and click New. -The -New -Tool Dialog appears into which you will enter:
    2. -
    -
      -
    • Name of the Tool: The Name of the Tool cannot -have spaces or special -characters -except an underline. Enter the name: SnowAmt_LearningTool.
    • -
    • The Weather Element it modifies. Select -SnowAmt.
    • -
    -
    -
      -
    1. Press OK and a Python Editor will appear with a template Python -module -for your Tool.
    2. -
    -
      -
    • There are lines to specify that this is a -"numeric" type tool and to -import -the Numeric library.
    • -
    • Another line specifies the -WeatherElementEdited. This may be changed if -you ever wish to modify the element edited by the tool.
    • -
    • Notice that the Python module has a class -named "Tool" and several -methods. -The "execute" method is mandatory and the one with which we will be -concerned. -The "execute" method may have weather element arguments plus various -special -arguments which will be supplied by the system when it is called.
    • -
    • You will notice a funny argument, "self". -This refers to this Tool -class -instance. You don't need to understand much about this now. All you -need -to do is make sure you leave it as the first argument to your "execute" -method.
    • -
    • If desired, a VariableList can define -run-time variables that will be -solicited -from the user when the Tool is executed. These variables will be passed -to the method.
    • -
    • We'll explore the various arguments and -VariableList later, but for -this -tool, you need only one argument (in addition to "self"): QPF.
    • -
    -
    -
      -
    1. Remove the sample arguments from the "execute" definition, leave -the -"self" -argument, and enter the argument, QPF in the parentheses. When -the -tool executes, this argument will contain a Numeric Array representing -the Fcst QPF grid.
    2. -
    3. Type in a description of your tool below the -"execute" definition. This -description will appear when you click Button-3 --> Info over your -new -tool.
    4. -
    5. Insert a line to multiply the QPF values by 10:
    6. -
          SnowAmt = QPF * 10
      -
      This line produces a Numeric Array named "SnowAmt" -which -has values 10 times the corresponding QPF values.
      -
    7. Save the Python module. Select File-->Save.
    8. -
    9. Execute the new tool to see that it works. If you -encounter errors when -executing your tool, a Dialog will appear to help you locate the -problem. -After successfully executing the tool, the QPF grid appears. Examine -the -data by sampling the QPF values and the SnowAmt values.  If your -results -seem confusing, check to see
    10. -
    11. Close the Python Editor. Select File-->Close.
    12. -
    - -

    -Exercise Point-based-2 -- Modifying a Tool

    -
    Modify your SnowAmt_LearningTool to base its new -value -based on temperature values. Use the following table:
    - - - - - - - - - - - - - - - - - - - -
    -

    -
    -
    T
    -
    -
    Multiply QPF by
    -
    -
    < 20
    -
    -
    18
    -
    -
    between 20 and 25
    -
    -
    14
    -
    -
    over 25
    -
    -
    10
    -
    -
    -
      -
    1. Select Modify... on the Button-3 popup over the -SnowAmt_LearningTool. A -dialog appears and you can change the Weather Element on which it -operates. -You are not allowed to change the name of the tool. Do not change -anything -for this example.
    2. -
    3. Select OK. This opens the Python Editor in which you can make -changes. -You will need the corresponding T grid, so add this as an argument to -your -method. Modify the Python code with if-elif-else statements to implement -the Temperature-based table.
    4. -
    5. Save the file. You can try your Tool without closing the editor -or -restarting -the GFE. The changes are effective as soon as you Save. Verify that the -tool worked by Sampling the SnowAmt and QPF grid values.
    6. -
    -
    - -

    -Exercise Point-based-3 -- Using VariableLists

    -
    Modify your SnowAmt_LearningTool to adjust the QPF -only -in areas above a user-given elevation. To perform this exercise, we -will -need to define a variable for the user to input at execution time. -Remember -to include "varDict" in your argument list to get the value for the -user's -variable. You will also need to access the variable, Topo.
    -
    Click here for Answer to -Exercise -Point-based-3. -
    -

    Working with Point-based Weather

    -
    The Wx parameter is passed to Tools in a string -format -affectionately called the "ugly string." We will examine examples of -ugly -strings and how to manipulate them. The WxMethods utility provides some -"prettier", more convenient methods for working with Weather strings. -Using -these methods will make your tool run slower than one that works -directly -with the "ugly" string. However, you may want to develop your tool -using -the WxMethods and revert to "ugly" string manipulation after your -algorithm -is established if you find the performance to be unacceptable. As -processing -speed improves, this may become less of an issue. There are many -examples -of Wx-based Smart Tools in the examples/smartTools directory.
    -

    -"Ugly" Weather Strings

    -
    The "ugly string" format is:
    -
      -
      Coverage:Type:Intensity:Visibility:Attributes
      -
    -
    Examples:
    -
      -
      Iso:RW:-:<NoVis>:
      -
      Wide:T:+:1SM:DmgW,HvyRain
      -
       
      -
    -
    Weather strings can be concatenated with the ^.
    -
      -
      Iso:RW:--:<NoVis>:^Iso:T:--:<NoVis>:
      -
    -
    To create a Wx string simply assign a variable to the -string value. For example:
    -
      -
      Wx = -"Iso:RW:--:<NoVis>:^Iso:T:--:<NoVis>:"
      -
      Wx = "Wide:S:+:<NoVis>:"
      -
       
      -
    -To examine the Wx string, you may use Python "string" commands. Here's -an example in which we are looking for a particular pattern: -

            import string -
    -        import SmartScript -

    -

            class Tool -(SmartScript.SmartScript): -
    -            -def __init__(self, dbss): -
    -                -SmartScript.SmartScript.__init__(self, dbss) -
    -            -def execute(self, Wx, varDict): -
    -                -"Tool to calculate LAL from Wx" -

    -

                    -if string.find(Wx, "Iso:T")>=0: -
    -                    -LAL = 2 -
    -                -elif string.find(Wx, "Sct:T")>=0: -
    -                    -LAL = 3 -
    -                -elif string.find(Wx, "Num:T")>=0: -
    -                    -LAL = 4 -
    -                -elif string.find(Wx, "Wide:T")>=0: -
    -                    -LAL = 5 -
    -                -else -
    -                    -LAL = 1 -
    -                -return LAL -
    -

    -
    To look for a particular Coverage or Type in a Wx -string -you could use the string command as follows: -

                    -if string.find(Wx, ":R:")>=0: -

    -

    Note that we need to include the colons so that the test -distinguishes -between "R" and "RW". A similar confusion can arise when looking for -Coverages -such as "Sct" and "WSct" or "Chc" and "SChc". If you are looking for a -particular Coverage, you may want to use the simple (and fast) -WxMethod, -WxParts, to separate the string into a list of parts and then test for -inclusion. At the beginning of your tool, be sure to "import" the -WxMethods -utility as shown: -

    -

            from WxMethods import * -
    -        import SmartScript -

    -

            class Tool -(SmartScript.SmartScript): -
    -            -def __init__(self, dbss): -
    -                -SmartScript.SmartScript.__init__(self, dbss) -
    -            -def execute(self, Wx, varDict): -
    -                -"Tool to calculate PoP from Wx" -

    -

                    -parts = WxParts(Wx) -
    -                -if "Def" in parts: -
    -                    -PoP = 100 -
    -                -elif "Wide" in parts: -
    -                    -PoP = 90 -
    -                -elif "Ocnl" in parts: -
    -                    -PoP = 80 -
    -                -elif "Lkly" in parts: -
    -                    -PoP = 70 -
    -                -elif "Chc" in parts: -
    -                    -PoP = 40 -
    -                -elif "SChc" in parts: -
    -                    -PoP = 20 -
    -                -elif "Iso" in parts: -
    -                    -PoP = 10 -
    -                -return PoP -

    -

    "Prettier" Weather Methods

    -
    Let's look at other WxMethods available and how they -are used.
    -
    -
      -
    1. In Localization Perspective, drill down to the SITE or USER level of the PoP_SmartTool - and select Button-3-->Open over the PoP_SmartTool.
    2. -
    3. Examine the code to see the WxContains method in use.
    4. -
    5. In the EditAction Dialog, Select Windows --> Windows --> -Utilities. -Select Button-3-->Modify over WxMethods.
    6. -
    7. Look at the documentation for the WxContains method.
    8. -
    9. In Localization Perspective, drill down to the SITE or USER level of the Wx_SmartTool - and select Button-3-->Open over the Wx_SmartTool.py and examine -the code to see the WxString method in use.
    10. -
    11. Look at the documentation for the WxString method in WxMethods.
    12. -
    13. Finally, read the documentation for the WxModify.
    14. -
    15. Close the Python Editor windows.
    16. -
    -

    -Exercise Point-based SmartScript-1 -- Accessing -Grids -Directly

    -In this exercise, we will access grid values directly from the Smart -Tool -instead of from the argument list. -
      -
    1. In Localization Perspective, select -Utilities. -Drill down to BASE level and select MB-3-->Open over SmartScript.
    2. -
    3. Find the method, "getValue" and read the documentation.
    4. -
    5. Return to the Smart Tools Window and create a new smart tool -which -edits -QPF. Access both the current QPF value and the most -recent -D2D NAM12 tp (total precipitation) value directly using the "getValue" -method. -If the current QPF value is zero, assign the tp value to it. Otherwise, -return it as is.
    6. -
    7. Run and test your tool to make sure it works.
    8. -
    -Click here for Answer to Exercise Point-based -SmartScript-1. -

    Exercise Point-based SmartScript-2 -- -Accessing Variable -Grids Directly

    -Often, you will want to choose the model you want to work with at -run-time. -You can use a variable list to get the model and then access the grids -directly. -
      -
    1. Modify your tool from Exercise SmartScript-1 to have a variable -D2D -model -from which to get the "tp" value.
    2. -
    3. Run and test your tool to make sure it works.
    4. -
    -Click here for Answer to Exercise Point-based -SmartScript-2. -

    -Exercise Point-based SmartScript-3 -- Making and -Accessing -Soundings

    -The Smart Script class has the capability to create a sounding and get -a value from the sounding based on a given elevation. In this -exercise, -we will create a sounding from model data and Topo information to -determine the surface temperature. -
      -
    1. In the SmartScript class, find the method, -"getSoundingValue". -Read -the documentation to learn how to call this method.
    2. -
    3. Find the Unit Conversion methods section and examine the methods -available.
    4. -
    5. Create a new smart tool which edits T. Allow the user -to -set -the D2D model using a VariableList. Get the value from a sounding -made from the D2D model grids using the Topo information. You -will -have to convert Topo from feet to meters and temperature from K to F.
    6. -
    7. Run and test your tool to make sure it works.
    8. -
    -Click here for Answer to Exercise Point-based -SmartScript-3. -
    -
    -
    -

    -Answers to Point-based Exercises

    -

    -Answer to Exercise Point-based-1

    -import SmartScript -

    class Tool (SmartScript.SmartScript): -
    -   def __init__(self, dbss): -
    -      SmartScript.SmartScript.__init__(self, -dbss) -

    -

        def execute(self, QPF): -
    -        "Tool to return QPF -multiplied -by 10" -

    -

            # Determine new value -
    -        SnowAmt = QPF * 10 -

    -

            # Return the new value -
    -        return SnowAmt -

    -

    Answer to Exercise Point-based-2

    -import SmartScript -

    class Tool (SmartScript.SmartScript): -
    -   def __init__(self, dbss): -
    -      SmartScript.SmartScript.__init__(self, -dbss) -

    -

        def execute(self, QPF, T): -
    -        "Tool to calculate SnowAmt" -

    -

           if T < 20: -
    -           SnowRatio -= 18 -
    -       elif T < 25: -
    -           SnowRatio -= 14 -
    -       else: -
    -            -SnowRatio = 10 -
    -        # Determine new value -
    -        SnowAmt = QPF * SnowRatio -

    -

            # Return the new value -
    -        return SnowAmt -

    -

    Answer to Exercise Point-based-3

    -import SmartScript -

    class Tool (SmartScript.SmartScript): -
    -   def __init__(self, dbss): -
    -      SmartScript.SmartScript.__init__(self, -dbss) -

    -

        def execute(self, QPF, T, Topo, varDict): -
    -        "Tool to calculate SnowAmt" -

    -

            # Set up Variables from -the -varDict -
    -        elevation = varDict["Enter -elevation"] -

    -

            if T < 20: -
    -            -SnowRatio = 18 -
    -        elif T < 25: -
    -            -SnowRatio = 14 -
    -        else: -
    -            -SnowRatio = 10 -

    -

            # Determine new value -
    -        if Topo > elevation: -
    -            -SnowAmt = SnowRatio * QPF -
    -        else: -
    -            -SnowAmt = 0 -

    -

            # Return the new value -
    -           return -SnowAmt -

    -

    VariableList = [ -
    -        ("Enter elevation" , 5000, -"numeric"), -
    -       ] -
    -  -

    -

    Answer to Exercise Point-based -SmartScript-1

    -import SmartScript -

    class Tool (SmartScript.SmartScript): -
    -   def __init__(self, dbss): -
    -      SmartScript.SmartScript.__init__(self, -dbss) -

    -

        def execute(self,  x,  y, -GridTimeRange): -
    -           "This -tool accesses QPF and tp  grids directly" -

    -

                    -#  Get QPF and tp values -
    -                -qpf = self.getValue("Fcst", "QPF", "SFC", x, y, GridTimeRange) -
    -                -tp = self.getValue("BOU_D2D_NAM12", "tp","SFC", x, y, GridTimeRange) -

    -

                    -if qpf == 0: -
    -                    -return tp -
    -                -else: -
    -                    -return qpf -

    -

    Answer to Exercise Point-based -SmartScript-2

    -import SmartScript -

    VariableList = [("Model:" , "", "D2D_model")] -
    -class Tool (SmartScript.SmartScript): -
    -   def __init__(self, dbss): -
    -      SmartScript.SmartScript.__init__(self, -dbss) -

    -

        def execute(self,  x,  y, -GridTimeRange, -varDict): -
    -           "This -tool accesses QPF and tp  grids directly" -

    -

                    -model = varDict["Model:"] -

    -

                    -#  Get QPF and tp values -
    -                -qpf = self.getValue("Fcst", "QPF", "SFC", x, y, GridTimeRange) -
    -                -tp = self.getValue(model, "tp","SFC", x, y, GridTimeRange) -

    -

                    -if qpf == 0: -
    -                    -return tp -
    -                -else: -
    -                    -return qpf -
    -  -

    -

    Answer to Exercise Point-based -SmartScript-3

    -import SmartScript -

    VariableList = [("Model:" , "", "D2D_model")] -

    -

    class Tool (SmartScript.SmartScript): -
    -    def __init__(self, dbss): -
    -        -SmartScript.SmartScript.__init__(self, -dbss) -

    -

        def execute(self, Topo, x, y, GridTimeRange, -varDict): -
    -        "This tool initializes T -based on model temperature soundings" -
    -        model = varDict["Model:"] -

    -

            # Make a sounding for T -at -this point -
    -        # Height will increase in -the sounding -
    -        levels = -["MB1000","MB950","MB900","MB850","MB800", -
    -                        -"MB750","MB700","MB650","MB600"] -
    -        topo_M = -self.convertFtToM(Topo) -
    -        T_K = -self.getSoundingValue(model, -"t", levels, x, y, GridTimeRange, topo_M) -

    -

            T_F = -self.convertKtoF(T_K) -

    -

            # Return the new value -
    -        return T_F -
    -
    -

    diff --git a/cave/com.raytheon.viz.gfe/help/SmartToolsBaseline.html b/cave/com.raytheon.viz.gfe/help/SmartToolsBaseline.html deleted file mode 100644 index 55cfaaf03c..0000000000 --- a/cave/com.raytheon.viz.gfe/help/SmartToolsBaseline.html +++ /dev/null @@ -1,328 +0,0 @@ - - - - - - - GFESuite Documentation - - -
    -

    Smart Tools and Procedures
    -

    -
    -
    This section of the reference manual describes -each of the baselined smart tools and procedures that are provided with -the GFE.
    -
    -Hazard and Watch Methodology
    -Hazard Procedures
    -ISC Tools
    -Tropical Cyclone Tools
    -Weather Element Integrity Tools
    -
    -

    -
    -Hazard and Watch -Methodology
    -
    - - - - - - - - - - - -
    Hazard Grid MethodologyThis document describes the use -of the GFE with the hazard procedures.  It discusses the -separation -of hazards into temporary weather elements, making new hazards, and -merging the hazards back into the Hazards grid.
    SPC Watch MethodologyThis document describes the use -of the GFE with the SPC Watch techniques.  It discusses the -initial WCL coordination message, the receipt and plotting of the WOU, -and the generation of the WCN using the GFE formatters.
    -
    -Hazard Procedures
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    PlotSPCWatchesThis procedure is used to modify -your Hazards grid based on the incoming WOU coordination message from -the Storm Prediction Center. The user can choose which watches to add -or remove.
    ViewWCLThis -procedure allows an office to view the WCL product, and use it for -watch coordination with SPC.
    -
    PlotTPCEventsThis procedure allows an office to plot tropical hazards as -outlined in the TCV product issued by the Tropical Prediction Center.
    -
    SeparateHazardsThis procedure allows an office to separate Hazard grids into -their individual elements, which is useful for editing in complex -situations.
    -
    MergeHazardsThis procedure allow separated hazard grids to be merged back -into the forecast Hazard grid.
    -
    MakeHazardThis procedure is allows the creation and editing of all -hazards in GFE.
    -
    HazardRecoveryThis procedure, only used in extreme situations, allows all -hazards to be recovered from the internal VTEC active table. Used if -Hazard grid becomes badly corrupted, and no official database exists.
    -
    -
    -ISC Tools
    -
    - - - - - - - -
    Show_ISC_Area
    -Show_ISC_Grid
    -Show_ISC_Info
    -Show_ISC_Highlights
    This set of tools provide -discrepancy checking for ISC grids.  This set is the baseline -version of Tim Barker's (SOO - BOI) set of ShowISC tools.
    -
    -
    -Tropical Cyclone Tools
    - - - - - - - - - - - -
    TCMWindTool
    -
    This -procedure decodes a TCM bulletin and makes GFE wind grids derived from -it.
    -
    GenerateCyclone
    -
    This -procedure is intended to be used for Tropical Depressions, but can be -used to make any cyclonic wind field.
    -
    -
    -
    -Weather Element Integrity Tools
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    CheckTandTd
    -
    Check -MinT, MaxT, T and Td to ensure inter-element integrity. Checks T -against MinT and maxT and checks Td against T.
    -
    ModelBlend
    -
    Combine model grids and forecast - grids in simple averages, nudging toward a model solution, or in complex weighted averages - or extrapolations.
    -
    CopyFromModel
    -
    Numeric tool that copies a - grid from a specified model - only in the active edit area - and possibly time-shifting the - model data.
    -
    Adjust
    -
    Performs basic math functions - like add, subtract, multiply and divide on a grid. Allows options related to elevation - and edit areas. You can combine these options in a variety of ways.
    -
    Enhanced_Wx
    -
    An enhancement to the original - Wx_SmartTool. Both tools assign Wx based on the corresponding PoP grids, but Enhanced_Wx has - some additional functionality.
    -
    LimitValues
    -
    Clips grid values - at limits that you specify.
    -
    RemoveWx
    -
    Allows removal of - "pieces" of weather from complex combinations of weather.
    -
    ERQCcheck
    -
    Allows the user to cross - check elements against one another to assure consistency. Where inconsistencies are found, - the forecaster has the option to either just see where the inconsistencies are, or have - one element or the other forced so that they are consistent. It also includes a routine - that check for the existence of grids required for NDFD.
    -
    Extrapolate
    -
    Allows to linearly - extrapolate features in time.
    -
    Align_Grids
    -
    Aligns the time breaks - of selected weather elements to match the time breaks of the individual grids of a - "source" element.
    -
    Populate_SkyProcedure
    -
    Populates the GFE Sky_Cover - grids based on an algorithm that finds the maximum model-layer relative humidity (RH), - and then applies an exponential relationship to convert RH to sky cover at each grid point.
    -
    Collaborate_PoP_SnowAmt_QPF
    -
    Creates fixed 12-hour PoP - (PoP12hr), 6-hour SnowAmt (SnowAmt6hr), and 6-hour QPF (QPF6hr) grids based on the values - contained in the floating PoP, SnowAmt, and QPF grids. These new grids may then be used - for the purposes of intersite coordination as well as web graphic generation.
    -
    NDFD_QPF_Checks
    -
    Performs checks to ensure - the five NDFD QPF related parameter consistency requirements are met.
    -
    CarSnowAmt
    -
    Uses upper level temperatures, - vertical motion, and relative humidity to calculate a snowratio.
    -
    -
    -
    -

    Back To TOC -
    -

    -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/SmartToolsCreatingandModifyingTools.html b/cave/com.raytheon.viz.gfe/help/SmartToolsCreatingandModifyingTools.html deleted file mode 100644 index 6482fdfd60..0000000000 --- a/cave/com.raytheon.viz.gfe/help/SmartToolsCreatingandModifyingTools.html +++ /dev/null @@ -1,1070 +0,0 @@ - - - - GFESuite Documentation - Smart Tools - - -

    Creating And Modifying Tools

    -

    Edit Action Button-3 Pop-Up Menu
    -Creating A New Tool
    -Description of Tool Arguments
    -Description of VariableList
    -Additional Smart Tool Methods
    -Creating a Smart Tool from an -Existing -File
    -Smart Script Class Library
    -

    -
    -

    Creating and Modifying -Tools

    -
    Now we will look behind the scenes to see how Smart -Tools -work, how they can be modified and created. The following diagram -depicts -the Smart Tool architecture within the GFESuite software. It shows -Smart -Tools as meteorological algorithms which modify the Forecast database. -These algorithms are written in a simple, intuitive language called -Python -and have access to Numerical Models, Observations, and Topography data. -The Smart Script Library is a set of convenient library functions -available -to simplify the job of tools. Through it, Smart Tools access data, -create -soundings, and perform unit conversion. The GFESuite software locates -the -tool, sets up information to be passed to it, and calls it to obtain -revised -grid values.
    -
    -
    -


    -In the following sections, we will see how to create and modify -tools and procedures through the Edit Action Dialog. We will -demonstrate -the use of the Smart -Tool Framework and Smart Script Library through a set of exercises -and tutorials. The following sections assume that you have -knowledge of Python and its Numpy extension which are -covered -in the GFESuite Python Tutorial and Programming -Guidelines. -

    -
    -

    Edit Action Button 3 Pop-up Menu

    -
    In AWIPS1, the Edit Actions dialog was used to access -new tool creation functionality. Pressing MB3 over each of the Smart Tools -listed in the Edit Actions Dialog opens a pop-up menu. -This menu is described in the Editable -Listbox description. However, in AWIPS2, new tools are created via the -Localization Perspective. This perspective will open when you select -GFE -> Define Smart Tools from the Menu bar.
    -
    -

    Creating a New Tool

    -

            Exercise -Tool-1 -- Creating a New Tool
    -

    -
    The following exercises will show you how to create -and -modify tools. We will build a tool to produce SnowAmt grid values. We -will -proceed in steps, building more functionality into the Tool at each -step.
    -
    -

    Exercise Tool-1 -- Creating a -new tool

    -
    Create a Smart Tool to yield a SnowAmt equal to the -current -QPF value multiplied by 10.
    -
    -
      -
    1. Select New... on the MB3 popup over the Smart Tools folder. The -New Tool -Dialog appears into which you will enter:
    2. -
    -
      -
    • Name of the Tool: The Name of the Tool cannot -have spaces or special -characters -except an underline. Enter the name: SnowAmt_LearningTool.
    • -
    • The Weather Element it modifies. Select -SnowAmt.
    • -
    • Tool Type is set to "numeric."
    • -
    -
    -
      -
    1. Press OK and a Python Editor will appear with a template Python -module -for your Tool.
    2. -
    -
      -
    • There are lines to specify that this is a -"numeric" type tool and to -import -the numpy library.
    • -
    • Another line specifies the -WeatherElementEdited. This may be changed if -you ever wish to modify the element edited by the tool.
    • -
    • Notice that the Python module has a class -named "Tool" and several -methods. -The "execute" method is mandatory and the one with which we will be -concerned. -The "execute" method may have weather element arguments plus various -special -arguments which will be supplied by the system when it is called.
    • -
    • You will notice a funny argument, "self". -This refers to this Tool -class -instance. You don't need to understand much about this now. All you -need -to do is make sure you leave it as the first argument to your "execute" -method.
    • -
    • If desired, a VariableList can define -run-time variables that will be -solicited -from the user when the Tool is executed. These variables will be passed -to the method.
    • -
    • We'll explore the various arguments and -VariableList later, but for -this -tool, you need only one argument (in addition to "self"): QPF.
    • -
    -
    -
      -
    1. Remove the sample arguments from the "execute" definition, leave -the -"self" -argument, and enter the argument, QPF in the parentheses. When -the -tool executes, this argument will contain a Numeric Array representing -the Fcst QPF grid.
    2. -
    3. Type in a description of your tool below the -"execute" definition. This -description will appear when you click MB3 --> Info over your new -tool.
    4. -
    5. Insert a line to multiply the QPF values by 10:
    6. -
          SnowAmt = QPF * 10
      -
      This line produces a Numeric Array named "SnowAmt" -which -has values 10 times the corresponding QPF values.
      -
    7. Save the Python module. Select File-->Save.
    8. -
    9. Execute the new tool to see that it works. If you -encounter errors when -executing your tool, a dialog will appear to help you locate the -problem. -After successfully executing the tool, the QPF grid appears. Examine -the -data by sampling the QPF values and the SnowAmt values. If your -results -seem confusing, check to see that the QPF and SnowAmt grids are aligned -in the Grid Manager. If not, you will be getting time averaged -QPF -values over multiple grids.
    10. -
    11. Close the Python Editor. Select File-->Close.
    12. -
    - -
    -

    Description of Tool Arguments

    -
    Here is a complete description of the various -arguments -that you can receive into your Smart Tool methods. To receive a -particular -argument, simply list it between the parentheses in the method -definition. -For example:
    -
        def execute(self, QPF, Topo, -SnowAmt_DeltaValue, -FzLevel, varDict):
    -
      -
    • <weName> -- the value for a given weather -element. If you want to base -the new value for an element on its current one, you must include it in -the argument list. You may also include other weather elements. A -Numeric Array representing the grid values for the weather element is -returned. Weather element values are as follows:
    • -
      -
        -
      • Scalar value: floating point values,
      • -
      • Vector value: two-tuple of magnitude and direction numeric -arrays, for -example:
      • -
        -   mag = Wind[0]
        -   dir = Wind[1]
      • Weather value: A Wx argument -represents a 2-tuple:
      • -
          -
        • wxValues : numerical grid of byte values
        • -
        • keys : list of "ugly strings" where the index of the ugly -string -corresponds -to the byte value in the wxValues grid.
        • -
        -
      - -


      -Weather elements do not need to be loaded in the GFE to be accessible -to Smart Tools. The weather element is assumed to come from the Fcst -database -unless you specify a more complete name of the form:

      -

             -elementName_level_siteID_type_model_modeltime

      -

      The "type" is an empty string for GFE Fcst data and is "D2D" for -D2D -data.

      -

             -MaxT_SFC_BOU__NAM12_Mar2912  -:              -gets MaxT from the March 29 12Z NAM12 run created by GFE -initialization.
      -       -MaxT_SFC_BOU_D2D_NAM12_Mar2912  -:  gets MaxT from the March 29 12Z original NAM12 run from D2D.

      -

      If you omit the "modeltime", the most recent model run will be -selected. -For example:

      -

             MaxT_SFC_BOU__NAM12  -:              -gets MaxT from the most recent NAM run created by GFE initialization.
      -       MaxT_SFC_BOU_D2D_NAM12 -:   -gets MaxT from the most recent original NAM12 run from D2D.
      -       rh_MB300_BOU_D2D_GFS40 -:    -gets rh from the most recent original GFS40 run from D2D.

      -

      For a list of D2D elements and descriptions -click here.

      -

      If you request a weather element value other than the one you are -editing, -it is possible that the system will encounter multiple corresponding -grids. -For example, if you are editing a 6-hour QPF grid, there may be -multiple -Wind grids that fall within the QPF time range. In this case, the -system -will automatically return the time-weighted average value of the -multiple -grids. This means that the values in a 3-hour Wind grid will be -weighted -3 times more heavily than those in a 1-hour grid when calculating the -average -value. Only the portion of the grid that overlaps the edited grid will -be counted in the time weighting. Time-weighted average for a -Weather-type -element is defined as the combination of all weather values -encountered.

      -

      Smart Script Class Library:   For more advanced -methods -of accessing grids in your Smart Tool, see the section below on the Smart -Script Class Library. In this library you will find more -sophisticated -processing. For example, if you are not satisfied with a -time-weighted -average of grids over a time range, you can get a sum, max/min or even -the actual grid values themselves. Or, if you do not know ahead -of -time which model you will want to access, you can create a call at -execution -time to get the grids you want.

      -
    -
      -
    • Topo -- this will give you the topography -information in the form of a -numeric array of elevation values.
    • -
    • variableElement-- the numeric array for the -editable weather element in -the GFE.
    • -
    • WEname -- the name of the element being edited. -This is handy if your -tool -works on "variableElement". WEname will be the element edited for this -run of the tool e.g. T, Wind, Td, etc.
    • -
    • <weName>_PickUpValue -- the PickUp Value -for the given element -where -<weName> could be "variableElement", e.g. MaxT_PickUpValue, -variableElement_PickUpValue
    • -
    • <weName>_DeltaValue -- the Delta Value for -the given element
    • -
    • <weName>_FuzzValue -- the Fuzz Value for -the given element
    • -
    • GridTimeRange -- The time range for the current -grid being modified. -Example:
    • -
      -
      def execute(self, GridTimeRange):
      -    gridStartTime = GridTimeRange.startTime()
      -    hour = gridStartTime.hour()
      -    if hour == 18:
      -        # Now you know the grid -is valid at 18Z -

        There are many methods for working with time ranges. Here's -the -basic methods:

      -
        -
      •     GridTimeRange.startTime()
      • -
      •     GridTimeRange.endTime()
      • -
      •     GridTimeRange.duration() # In seconds
      • -
      -

      -The start and end times are TimeRange objects. -

      -

      -Here's an example of creating your own time range relative to the -given GridTimeRange:

      -

      def execute(self, GridTimeRange):
      -   import TimeRange
      -   start = GridTimeRange.startTime()
      -   end = GridTimeRange.endTime()
      -   timeRange2 = TimeRange.TimeRange(start - 24 *3600, end - 24 -*3600)

      -

         T0 = self.getGrids("Fcst", "T","SFC", timeRange2, -noDataError=0)
      -   if T0 is None:
      -      self.noData()
      -

      -
      NOTE: Values supplied to the tool are initial values -only i.e. the values of the variables at the beginning of Smart Tool -execution. -Changes made by the Smart Tool will not be reflected in the values of -the -variables passed to the tool.
      -
      -

      Exercise Tool-2 -- Modifying a -Tool

      -
      Modify your SnowAmt_LearningTool to base its new -value -on temperature values. Use the following table:
      - - - - - - - - - - - - - - - - - - - -
      -

      -
      -
      T
      -
      -
      Multiply QPF by
      -
      -
      < 20
      -
      -
      18
      -
      -
      between 20 and 25
      -
      -
      14
      -
      -
      over 25
      -
      -
      10
      -
      -
      -
        -
      1. Select Open... on the MB3 popup over the SnowAmt_LearningTool at USER level (drill-down). -This -opens -the Python Editor in which you can make changes.
      2. -
      3. You will need the corresponding T grid, so add this as an -argument to -your -method. Modify the Python code with where statments to implement the -Temperature-based -table.
      4. -
      5. Save the file. You can try your Tool without closing the editor -or -restarting -the GFE. The changes are effective as soon as you Save. Verify that the -tool worked by Sampling the SnowAmt and QPF grid values.
      6. -
      -
      - -
      -

      Description of VariableList

      -

      Exercise -Tool-3 -- Using VariableLists
      -Creating -VariableLists "On-the-fly"
      -

      -
      The VariableList defines values to be supplied to a -Tool -by the user. It consists of a list of tuples defining each variable and -resides in the Python file for the Tool. (Make sure it appears before -or -after the Tool Class, not within it!) These variables will be solicited -from the user prior to executing the Tool.
      -
      For example, suppose we want to let the user set -threshold -values prior to executing our tool named MyTool. Then in the Python -module -for MyTool, we list:
      -
      -
      -VariableList = [
      -
                  -("Threshold Value1", 10, "numeric"),
      -
                  -("Threshold Value2", 20, "numeric")
      -
          ]
      -
      The values, 10 and 20, will be used as the default -values. -The method call within MyTool must then include the argument, -"varDict", -and can access the values as follows:
      -
          def execute(self, QPF, Wind, -QPF_DeltaValue, -x, y, varDict):
      -
               # -Get -the values for the variables:
      -
              threshold1 -= varDict["Threshold Value1"]
      -
              threshold2 -= varDict["Threshold Value2"]
      -
      The Variable tuple in the VariableList is in the -format:
      -
        -
        ("Variable Name", default value, variable type, -optional -list)
        -
      -
      Variables can be of many types:
      -
        -
      • "numeric" -- will ensure the user enters a number
      • -
      • "alphaNumeric" -- will accept any characters and -will automatically -convert -the string to a number if possible
      • -
      • "radio" -- a set of Radio buttons i.e. one and -only one choice must be -made by the user among a list of values. In this case, a list of values -must be supplied.
      • -
      • "check" -- a set of Check buttons i.e. the user -may select zero of more -values from a list. In this case a list of values must be supplied and -the default value is a list of values to be checked "On" initially. The -returned value for such a variable in varDict is a list of values that -were checked "On" when the user selected "OK."
      • -
      • "scale" -- a slider-bar type Scale. In this -case, a list containing the -minimum and maximum values must be supplied along with the default -value. -You can also specify a resolution if you wish. The default is 1.
      • -
      • "model" -- gives a list of GFE Surface model -runs e.g. NAM12, GFS40, RAP40
      • -
      • "D2D_model" -- give a list of D2D model runs -e.g. NAM12, GFS40, RAP40
      • -
      • "label" -- simply displays text given in the -"Variable Name" slot.
      • -
      • "scrollbar" -- adds a scrollbar to the -VariableList dialog. This is -intended -for dialogs that have become too large for the screen.  A desired -height for the dialog must be given.  For example:
      • -
                       -("", 500, "scrollbar")
        -
        will add a scrollbar to the dialog and set the -dialog -height to 500 pixels. Only one scrollbar entry is processed per -VariableList -dialog.
        -
      -
      -
      -

      Exercise Tool-3 -- Using -VariableLists

      -
      Modify your SnowAmt_LearningTool to adjust the QPF -only -in areas above a user-given elevation. To perform this exercise, we -will -need to define a variable for the user to input at execution time. -Remember -to include "varDict" in your argument list to get the value for the -user's -variable. You will also need to access the variable, Topo. -

      Click here for Answer to Exercise Tool-3.

      -
      -
      -

      Creating VariableLists -"On-the-fly"

      -It is possible to create VariableLists and display dialogs from a Smart -Tool or Procedure in the event that the VariableList entries are -dependent -on run-time values. To do so, you must import the "ProcessVariableList" -class and use it to display your dialog. The following example -illustrates -how this might be done: -

            ToolType = "numeric" -
      -      WeatherElementEdited = "variableElement" -
      -      ScreenList = ["SCALAR"] -
      -      from numpy import * -

      -

            import ProcessVariableList -
      -      import SmartScript -

      -

            class Tool (SmartScript.SmartScript): -
      -           def -__init__(self, -dbss): -
      -               -SmartScript.SmartScript.__init__(self, dbss) -

      -

                 def -preProcessTool(self): -
      -               -# This is necessary so that we show the -
      -               -# dialog once per tool, not once per grid. -
      -               -self._dialogShown = 0 -

      -

                 def -execute(self, -variableElement_GridInfo): -
      -               -if self._dialogShown == 0: -
      -                  -minval=variableElement_GridInfo.minLimit() -
      -                  -maxval=variableElement_GridInfo.maxLimit() -
      -                  -variableList=[ ("Modify value to:",0,"scale",[minval,maxval])] -
      -                  -varDict = {} -
      -                  -processVarList = ProcessVariableList.ProcessVariableList( -
      -                                                -"Title", variableList, varDict,  parent = self.eaMgr().root()) -
      -                  -status = processVarList.status() -
      -                  -if status != "Ok": -
      -                        -self.cancel() -
      -                  -self._modifyValue = varDict["Modify value to:"] -
      -                  -self._dialogShown = 1 -

      -

                     -variableElement = self._empty +  self._modifyValue -
      -               -return variableElement -

      -
      -
      -

      Additional Smart Tool Methods

      -

      Reserved -Methods
      -Creating -Your Own Methods
      -Naming -Conventions
      -

      -Your Smart Tool class can contain methods in addition to the mandatory -"execute" method. -
      -

      Reserved Methods

      -Some methods have reserved names and meanings. To understand the -framework, -recall that a Smart Tool may operate over a time range which may -include -multiple grids. The mandatory "execute" method is called for each grid -to be modified. Sometimes, you may wish to set up information before or -after grid-by-grid processing occurs. If so, you may use the following -methods: -
        -
      • preProcessTool:   Called once at beginning of the Tool, -before -any grids are processed.
      • -
      • postProcessTool:   Called once at end of the Tool, -after all -grids are processed.
      • -
      -Additional methods, "preProcessGrid" and "postProcessGrid" are reserved -for Point-based Tools. Of course, -reserved methods will be called only if you supply them in your tool. -They -are included as comments in the Smart Tool template that appears when -you -create a new tool and are documented there. The possible arguments to -these -methods will vary according to the logic of when they are called. -
      -

      Creating Your Own Methods

      -You may write your own methods and call them from within others. The -only -tricky part is in using the funny "self" variable. Here's an example: -

      -
      import SmartScript
      -
      class Tool (SmartScript.SmartScript):
      -
         def __init__(self, dbss):
      -
            -SmartScript.SmartScript.__init__(self, -dbss)
      -
       
      -
          def execute(self, QPF, T):
      -
              "Tool to -calculate -SnowAmt"
      -
       
      -
              # -Determine -new value
      -
              SnowRatio -= self._getSnowRatio(T)
      -
              SnowAmt = -QPF * SnowRatio
      -
       
      -
              # Return -the -new value
      -
              return -SnowAmt
      -
       
      -
          def _getSnowRatio(self, T): -
      -         SnowRatio = where( -less(T, 20), 18, -
      -                                              -where( less(T, 21), 14, 10) -
      -         return SnowRatio
      -
      Notice that we did two things: -
        -
      • Included "self" as the first argument in the definition of our -new -method, -_getSnowRatio.
      • -
      • Used the prefix "self" when calling the method WITHOUT putting -"self" -in -the argument list.
      • -
      -
      -

      Naming Conventions

      -To help distinguish the source of methods and variables, Smart Tools -(and -Procedures) follow these naming conventions: -
    • User-defined Smart Tool and Procedure methods and -variables, which need -to span multiple methods, are preceeded by an underscore: e.g -self._modifyValue, -def _myMethod.
    • -
    • SmartScript library methods do not have a preceeding underscore: -e.g. -self.getGrids.
    • -
    • The Reserved methods, e.g. execute, preProcessTool, do not have a -preceeding -underscore.
    • -
    • Utility methods (see Utility section), are -preceeded -by an underscore.
    • -
      -These conventions are important to follow not only for clarity, but to -insure that you do not inadvertently override an existing library -method -by giving your method or variable a duplicate name. -
      -

      Creating a Smart Tool from an -Existing File

      -
      Suppose you have an existing smart tool -file. -You might receive a file from a repository, from a colleague, or find -one -in the examples directories of your release. How can you add it to your -Edit Action Dialog?
      -
      -
        -
      1. From the Localization Perspective Smart Tool folder, Select MB3 ---> -New...
      2. -
      3. Enter the name of the Tool and the weather element it modifies.
      4. -
      5. Select OK and a template for the Tool should appear.
      6. -
      7. Open another window with the file that contains the existing tool -via -Select -File-->Open and choose the file.
      8. -
      9. Copy and Paste the existing smart tool into the new smart tool -window -and -Save it. Select File-->Save.
      10. -
      11. Close the Python windows. Select File-->Close.
      12. -
      -
      -

      Smart Script Class Library

      -Exercise -SmartScript-1 -- Accessing Grids Directly
      -Exercise -SmartScript-2 -- Accessing Variable Grids Directly
      -Exercise -SmartScript-3 -- Making and Accessing Soundings
      -Exercise -SmartScript-4 -- Making and Accessing Soundings
      -Exercise -SmartScript-5 -- Making and Accessing Soundings
      -Exercise -SmartScript-6 -- Creating Elements On-the-fly
      -Exercise -SmartScript-7 -- Working with Weather and Discrete
      -Exercise -SmartScript-8 -- Working with Weather and Discrete
      -Exercise -SmartScript-9 -- Translating between Smart Initialization and Smart -Tools -
      Smart Script Class -Library -documentation. -

      Notice that all the Smart Tools we've created begin with the -following -lines: -

      -
        -
        import SmartScript
        -
         
        -
        class Tool (SmartScript.SmartScript):
        -
           def __init__(self, dbss):
        -
                -SmartScript.SmartScript.__init__(self, -dbss)
        -
      -These lines define a class, Tool, that "inherits" from an existing -SmartScript -class. This means that all the methods in the SmartScript class are -available -to your tool. As an example, there is a method in the SmartScript class -named "convertFtoK" -which -converts Fahrenheit degrees to Kelvin. You would call it from within -one -of your tool methods as follows: -
      def execute(self, T):
      -        degreesK = -self.convertFtoK(T)
      -Notice that we used the prefix, "self." to tell the system that this -method -belongs to my class (which inherited it from the SmartScript class). -Procedures -begin in a similar way with a class, Procedure, instead of Tool, and -the -same methods are available to them. -

      The SmartScript class contains methods for: -

      -
    • -accessing grids directly (This means that it is not necessary to list -all -the grids you need in the Smart Tool argument list.),
    • -
    • creating a sounding and accessing values from it based on -elevation,
    • -
    • error handling,
    • -
    • unit conversion,
    • -
    • "procedure" commands e.g. copy, interpolate, createFromScratch, -accessing -named time ranges and named edit areas, and calling Smart Tools.
    • -
      -
      -

      Exercise SmartScript-1 -- Accessing Grids -Directly

      -In this exercise, we will access grids directly from the Smart Tool -instead -of from the argument list. -
        -
      1. Study the "getGrids" -command -in the Smart Script Library.
      2. -
      3. Return to the Smart Tools Window and create a new smart tool -which -edits -QPF.  Access both the current QPF value and the  most -recent  -D2D NAM12 tp (total precipitation) value directly using the "getGrids" -method. -If the current QPF value is zero, assign the tp value to it. Otherwise, -return it as is.
      4. -
      5. Run and test your tool to make sure it works.
      6. -
        -
      -Click here for Answer to Exercise SmartScript-1. -
      -

      Exercise SmartScript-2 -- Accessing Variable -Grids -Directly

      -Often, you will want to choose the model you want to work with at -run-time.  -You can use a variable list to get the model and then access the grids -directly. -
      -
      -
      -
        -
      1. Modify your tool from Exercise SmartScript-1 to have a variable -D2D -model -from which to get the "tp" value.
      2. -
      3. Run and test your tool to make sure it works.
      4. -
      -
      -
      -
      -Click here for Answer to Exercise SmartScript-2. -
      -

      Exercise SmartScript-3 -- Making and Accessing -Soundings

      -The SmartScript library allows you to make a sounding of numpy -grids. The method, "makeNumericSounding" returns two numerical "cubes" --- one cube for the gh height values for a given set of levels and one -cube for the weather parameter values. In this exercise, we will create -a sounding from model data and use Topo information to determine -the surface temperature. You will use the "makeNumericSounding" -method -to get gh and t numerical cubes. You will then have to "walk up" the -cubes -assigning values directly from the t weather parameter at ground -height. -For a more information, see GFESuite -Python Tutorial -- Looking Up the Columns of a Cube. -
        -
      1. In the SmartScript class, find the method, "makeNumericSounding". -Read the documentation to learn how to call this method.
      2. -
      3. Find the Unit Conversion methods section and examine the methods -available.
      4. -
      5. Create a new smart tool which edits T. Allow the user -to -set -the D2D model using a VariableList. Assign values from the -sounding -made from the D2D model grids using the Topo information. You -will -have to convert Topo from feet to meters and temperature from K to F.
      6. -
      7. Run and test your tool to make sure it works.
      8. -
      -Click here for Answer to Exercise SmartScript-3.
      -
      -
      -

      Exercise SmartScript-4 -- -Making and Accessing -Soundings

      -
      To help you understand the concept of Numerical -logical -statements, rewrite the tool from Exercise SmartScript-3 and simplify -the -"where" statement by using some logical statements. For more -information, -see the discussion of Simple and Compound statements in - -GFESuite Python Tutorial and Programming Guidelines -- Style -Suggestions. -

      Click here for Answer to Exercise SmartScript-4.

      -
      -
      -
      -

      Exercise SmartScript-5 -- -Creating Elements "On-the-Fly"

      -It is now possible to create "temporary" weather elements from a Smart -Tool and add grids to them. These elements appear in the GridManager -but -cannot be saved. So if you unload them or shut down the GFE, they are -gone. -They can be accessed by subsequent Smart Tools. -
      -
      Suppose we want to create a temporary RH element from -T an Td. Look at the documentation for the SmartScript method, "createGrid." -The first time this is called during a GFE session a new model and -element -can be created. Subsequent calls will simply add grids to the element. -

      Now, try your hand at writing a tool to create a new "TempRH" -element. -Select your own model name and use the equations in the RH_Tool (found -in the Edit Action Dialog). When you create your tool, select "None" -for -the element edited. Use the "ScreenList" that appears in the tool -template -to specify how it will be displayed within the Edit Action Dialog. -Instead -of returning the resulting grid, your tool will call the "createGrid" -command. -

      -

      Now you should be able to access this element in other tools with -the -"getGrids" command using your model name, element name, and "SFC" for -the -level. For example: -

      -

           RH = self.getGrids("TempModel","TempRH", -"SFC",GridTimeRange) -

      -

      Click here for Answer to Exercise SmartScript-5. -

      -
      -

      Exercise SmartScript-6 -- -Working with Weather/Discrete

      -
      Weather and Discrete are similar to each other. -They -both are represented as a 2-tuple:
      -
        -
      • wxValues : numerical grid of byte values
      • -
      • keys : list of "ugly strings" where the index of the ugly string -corresponds -to the byte value in the wxValues grid for the WEATHER type of grid, -and -a list of "strings" where the index of the string corresponds to the -byte -value in the wxValues grid for the DISCRETE type of grid.
      • -
      -For a complete description, see Working -with Weather Data in the GFESuite Python Tutorial and Working -with Discrete Data in the GFESuite Python Tutorial. Two -particularily useful functions are getIndex() and wxMask() for Weather -data, and getIndex() and discreteMask() for Discrete data. -

      Use the SmartScript method "getIndex" to assign weather values -based on PoP according to the following criteria: -

      -
    • -where PoP < 15,  assign -"<NoCov>:<NoWx>:<NoInten>:<NoVis>:"
    • -
    • where PoP >=15 and PoP < 35, assign "Chc:R:-:<NoVis>:"
    • -
    • where PoP >=35 and PoP < 55, assign -"Sct:RW:m:<NoVis>:"
    • -
    • where PoP >= 55, assign "Wide:R:+:<NoVis>:"
    • -
      -Click here for Answer to Exercise SmartScript-6. -

      Here is an example of a Discrete smart tool that converts all -gridpoints -that have a value of <None> to "BL.W": -

      -

      def execute(self, Hazards): -
      -        "Sample tool to put -in Blizzard Warnings (VTEC code BL.W)" -

      -

              # Determine new value -
      -        grid, key = Hazards
      -        indexBlizzard = -self.getIndex("BL.W", -key) -
      -        indexNone = -self.getIndex("<None>", -key) -
      -        mask = equal(grid, -indexNone) -
      -        grid = where(mask, -indexBlizzard, -grid) -
      -  -
      -         # Return the new -value -
      -        return grid, key -

      -
      -
      -

      Exercise SmartScript-7 -- -Working with Weather/Discrete

      -
      Weather and Discrete are similar to each -other.  -They both are represented as a 2-tuple of (grid, keys). -

      Use the SmartScript method, "wxMask()" to assign PoP values based on -Wx coverage according to the following criteria:

      -
      -
    • where coverage is "<NoCov>", -assign 0
    • -
    • where coverage is "Chc", assign 25
    • -
    • where coverage is "Sct", assign 55
    • -
    • where coverage is "Wide", assign 80
    • -
      - -
      -
      -
      -
      -

      Exercise SmartScript-8 -- -Translating Between -Smart -Initialization and Smart Tools

      -Overview of the correlation between Smart Initialization and Smart Tools. -For the most part, the code is similar. However, the Smart Tools have -access the sounding cubes through the "getNumericSounding" method. Smart Tools are -also enhanced to extrapolate and interpolate, but the Smart -Initialization code works as well. In general, when going between -Smart -Initialization and Smart Tools, follow these tips: -
        -
      • In a Smart Tool, use "getNumericSounding" to get the sounding -value -cubes.
      • -
      • In a Smart Tool, use "interpolateValues" instead of the Smart -Initialization -method, "linear". Notice the order of arguments is different.
      • -
      • In a Smart Tool, the Topo argument is in feet while the Smart -Initialization -topo argument has been converted to meters.
      • -
      -
      -
      -
    -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/SmartToolsExecutingSmartTools.html b/cave/com.raytheon.viz.gfe/help/SmartToolsExecutingSmartTools.html deleted file mode 100644 index 2bcc2f6be0..0000000000 --- a/cave/com.raytheon.viz.gfe/help/SmartToolsExecutingSmartTools.html +++ /dev/null @@ -1,103 +0,0 @@ - -GFESuite Documentation - Smart Tools - -

    Executing Smart Tools

    -Convective Scenario
    -Winter Scenario
    -
    - -

    -Executing Smart Tools

    -
    To execute any Smart Tool, you must perform these -steps:
    -
    -
      -
    1. Set the Weather Element you wish to modify "Editable" by clicking -MB2 -over -it on the Legend or MB1 in the Grid Manager. Note that the Edit -Action -Dialog displays only the tools which can operate on the "Editable" -Weather -Element.
    2. -
    3. Select the set of grids you wish to modify by defining the -Spatial -Editor -time or the Grid Manager's selected time range as described in the -previous -section.
    4. -
    5. Select the area over which you want the Smart tool to apply using -the -Select -Points tool or by executing an edit area query, both described in -previous -sections.
    6. -
    7. Open the Edit Actions Dialog and Execute the desired Smart Tool -by -clicking -on the Smart Tool label with MB1. You may also execute a Smart Tool by -clicking MB3 over the Spatial Editor and selecting the desired tool.
    8. -
    9. Some Smart Tools display a dialog allowing you to choose various -options -prior to running the tool. In this case, select the desired options. -You -may then choose to simply "Run" the tool (in which case the dialog will -remain for further executions of the tool) or to "Run/Dismiss" (in -which -case the dialog will disappear as the tool executes).
    10. -
    -
    -As the Smart Tool executes, you will see its progress indicated on the -Progress Bar located on the bottom right of the GFE window. -
    -
    -If you are unclear at all about Step 1 or Step 2, we strongly recommend -that you review those sections of this document. It is very important -that -you understand how to identify the specific grids and the area you wish -to modify before executing any Smart Tool. Without this understanding -it -is very easy to modify grids in ways you do not intend.
    -
    -
    -The following exercises take you through the execution of Smart Tools -in the context of two forecasting scenarios. The exercises are -presented -in a visual format that shows how the Background weather situation, the -GFE simple tools and the GFE Smart Tools interact within the Scenario. -These exercises give you the "Big Picture" for using the GFE in a -Forecast -situation and bring much of what you have learned to culmination. They -are meant to stimulate your thinking about how Smart Tools can be used -at your particular site. The exercises are challenging as all steps are -not detailed. Feel free to refer back to previous sections if necessary -to perform an instruction.
    -

    -Convective Scenario

    -
    The following diagram shows the forecast situation -which -is addressed in the Convective Scenario. If the -"Convective_SmartTool" -does not appear in the list of Edit Actions, please contact your ITO -for help converting it to AWIPS2 from the AWIPS1 examples/smartTools -directory. -

    Follow the instructions below to see how Smart Tools might be -applied in this kind of situation. -
    -

    -
    -
    -
     
    -
    -

    -Winter Scenario

    -
    The following Scenario is meant for areas with -diverse -terrain, but will serve as an illustration of the power and flexibility -of Smart Tools and perhaps give ideas for other forecast situations. -Follow -the instructions in the Scenario.
    -
    diff --git a/cave/com.raytheon.viz.gfe/help/SmartToolsExerciseAnswers.html b/cave/com.raytheon.viz.gfe/help/SmartToolsExerciseAnswers.html deleted file mode 100644 index bb7521977b..0000000000 --- a/cave/com.raytheon.viz.gfe/help/SmartToolsExerciseAnswers.html +++ /dev/null @@ -1,818 +0,0 @@ - -GFESuite Documentation - Smart Tools - -

    Smart Tools Answers to Exercises

    -

    Answer to Exercise Tool-1

    -
    -
    -
    ToolType = "numeric"
    -
    WeatherElementEdited = "SnowAmt"
    -
    from numpy import *
    -
    import SmartScript
    -
    class Tool (SmartScript.SmartScript):
    -
        def __init__(self, dbss):
    -
          -SmartScript.SmartScript.__init__(self, -dbss)
    -
        def execute(self, QPF):
    -
            "Tool -to return QPF multiplied by 10"
    -
            # -Determine -new value
    -
            -SnowAmt -= QPF * 10
    -
            # -Return -the new value
    -
            return -SnowAmt
    -

    -Answer to Exercise Tool-2

    -
    ToolType = "numeric" -
    -WeatherElementEdited = "SnowAmt" -
    -from numpy import * -
    -import SmartScript -

    class Tool (SmartScript.SmartScript): -
    -    def __init__(self, dbss): -
    -        -SmartScript.SmartScript.__init__(self, -dbss) -

    -

        def execute(self, QPF, T): -
    -        "Tool to calculate SnowAmt" -

    -

            SnowAmt = where(less(T, -20), -QPF * 18, -
    -                               -where(less(T, 25), QPF * 14, -
    -                               -QPF * 10)) -
    -        # Return the new value -
    -        return SnowAmt -
    -  -

    -

    Answer to Exercise Tool-3

    -
    -
    ToolType = "numeric" -
    -WeatherElementEdited = "SnowAmt" -
    -from numpy import * -
    -import SmartScript -

    VariableList = [ -
    -        ("Enter elevation" , 5000, -"numeric"), -
    -       ] -
    -class Tool (SmartScript.SmartScript): -
    -    def __init__(self, dbss): -
    -        -SmartScript.SmartScript.__init__(self, -dbss) -

    -

        def execute(self, QPF, T, Topo, varDict): -
    -        "Tool to calculate SnowAmt" -

    -

            # Set up Variables from -the -varDict -
    -        elevation = varDict["Enter -elevation"] -

    -

            SnowAmt = where(less(T, -20), -QPF * 18, -
    -                               -where(less(T, 25), QPF * 14, -
    -                               -QPF * 10)) -
    -        SnowAmt = where(less(Topo, -elevation), 0, SnowAmt) -
    -        # Return the new value -
    -        return SnowAmt -
    -

    -
    -
    -
    -
    -
    -

    Answer to Exercise -SmartScript-1

    -
    -
    -
    -
    ToolType = "numeric" -
    -WeatherElementEdited = "QPF" -
    -from numpy import * -
    -import SmartScript -

    class Tool (SmartScript.SmartScript): -
    -    def __init__(self, dbss): -
    -        -SmartScript.SmartScript.__init__(self, -dbss) -

    -

        def execute(self, GridTimeRange, varDict): -
    -        "This tool accesses QPF -and tp  grids directly" -

    -

            #  Get QPF and tp -values -
    -        qpf = self.getGrids("Fcst", -"QPF", "SFC", GridTimeRange) -
    -        tp = -self.getGrids("BOU_D2D_NAM12", -"tp","SFC", GridTimeRange) -

    -

            qpf = -where(equal(qpf,0.0), -tp, qpf) -
    -        return qpf

    -
    -
    -

    -Answer to Exercise SmartScript-2

    -
    -
    -
    -
    ToolType = "numeric" -
    -WeatherElementEdited = "QPF" -
    -from numpy import * -
    -import SmartScript -

    VariableList = [("Model:" , "", "model")] -
    -class Tool (SmartScript.SmartScript): -
    -    def __init__(self, dbss): -
    -        -SmartScript.SmartScript.__init__(self, -dbss) -

    -

        def execute(self, GridTimeRange, varDict): -
    -        "This tool accesses QPF -and tp  grids directly" -

    -

            model = varDict["Model:"] -

    -

            #  Get QPF and tp -values -
    -        qpf = self.getGrids("Fcst", -"QPF", "SFC", GridTimeRange) -
    -        tp = self.getGrids(model, -"tp","SFC", GridTimeRange) -

    -

            qpf = -where(equal(qpf,0.0), -tp, qpf) -
    -        return qpf -
    -

    -

    Answer to Exercise -SmartScript-3

    -
    -
    -
    -
    ToolType = "numeric" -
    -WeatherElementEdited = "T" -
    -from numpy import * -
    -import SmartScript -

    VariableList = [("Model:" , "", "D2D_model")] -
    -class Tool (SmartScript.SmartScript): -
    -    def __init__(self, dbss): -
    -        -SmartScript.SmartScript.__init__(self, -dbss) -

    -

        def execute(self, GridTimeRange, Topo, varDict): -
    -        "This tool accesses QPF -and tp  grids directly" -

    -

            model = varDict["Model:"] -

    -

            # Convert Topo to meters -
    -        topo_M = -self.convertFtToM(Topo) -

    -

            # Make a sounding cubes -for -T -
    -        # Height will increase in -the sounding and be the -
    -        # first dimension -
    -        levels = -["MB1000","MB950","MB900","MB850","MB800", -
    -        -"MB750","MB700","MB650","MB600"] -
    -        gh_Cube, t_Cube = -self.makeNumericSounding( -
    -            -model, "t", levels, GridTimeRange) -

    -

            print "Cube shapes ", -gh_Cube.shape, -t_Cube.shape -

    -

            # Make an initial T grid -with values of -200 -
    -        # This is an out-of-range -value to help us identify values that -
    -        # have already been set. -
    -        T = (Topo * 0) - 200 -

    -

            # Work "upward" in the -cubes -to assign T -
    -        # We will only set the value -once, i.e. the first time the -
    -        # gh height is greater than -the Topo -
    -        # For each level -
    -        for i in -xrange(gh_Cube.shape[0]): -
    -                -# where ( gh > topo and T == -200), -
    -                -#       set to t_Cube value, otherwise -keep -value already set)) -
    -                -T = where(logical_and(greater(gh_Cube[i], topo_M), equal(T,-200)), -t_Cube[i], -T) -

    -

            # Convert from K to F -
    -        T_F = self.convertKtoF(T) -

    -

            return T_F -
    -

    -

    Answer to Exercise -SmartScript-4

    -
    -
    -
    -
    ToolType = "numeric" -
    -WeatherElementEdited = "T" -
    -from numpy import * -
    -import SmartScript -

    VariableList = [("Model:" , "", "D2D_model")] -
    -class Tool (SmartScript.SmartScript): -
    -    def __init__(self, dbss): -
    -        -SmartScript.SmartScript.__init__(self, -dbss) -

    -

        def execute(self, GridTimeRange, Topo, varDict): -
    -        "This tool accesses QPF -and tp  grids directly" -

    -

            model = varDict["Model:"] -

    -

            # Convert Topo to meters -
    -        topo_M = -self.convertFtToM(Topo) -

    -

            # Make a sounding cubes -for -T -
    -        # Height will increase in -the sounding and be the -
    -        # first dimension -
    -        levels = -["MB1000","MB950","MB900","MB850","MB800", -
    -        -"MB750","MB700","MB650","MB600"] -
    -        gh_Cube, t_Cube = -self.makeNumericSounding( -
    -             -model, "t", levels, GridTimeRange) -

    -

            print "Cube shapes ", -gh_Cube.shape, -t_Cube.shape -

    -

            # Make an initial T grid -with values of -200 -
    -        # This is an out-of-range -value to help us identify values that -
    -        # have already been set. -
    -        T = (Topo * 0) - 200 -

    -

            # Work "upward" in the -cubes -to assign T -
    -        # We will only set the value -once, i.e. the first time the -
    -        # gh height is greater than -the Topo -
    -        # For each level -
    -        for i in -xrange(gh_Cube.shape[0]): -
    -                -# where ( gh > topo and T == -200 ), -
    -                -#       set to t_Cube value, otherwise -keep -value already set)) -
    -                -notSet = equal(T, -200) -
    -                -aboveGround = greater(gh_Cube[i], topo_M) -
    -                -readyToSet = logical_and(notSet, aboveGround) -
    -                -T = where(readyToSet, t_Cube[i], T) -

    -

            # Convert from K to F -
    -        T_F = self.convertKtoF(T) -

    -

            return T_F -
    -

    -

    Answer to Exercise -SmartScript-5

    -ToolType = "numeric" -
    -WeatherElementEdited = "None" -
    -from numpy import * -

    ScreenList = ["T","Td"] -

    -

    import SmartScript -

    -

    class Tool (SmartScript.SmartScript): -
    -    def __init__(self, dbss): -
    -        -SmartScript.SmartScript.__init__(self, -dbss) -

    -

        def execute(self, T, Td, GridTimeRange): -
    -        "Creates a temporary -element, -TempRH" -

    -

            # Determine new value -
    -        Tc = .556 * (T - 32.0) -
    -        Tdc = .556 * (Td - 32.0) -
    -        Vt = 6.11 * pow(10,(Tc * -7.5 / (Tc + 237.3))) -
    -        Vd = 6.11 * pow(10,(Tdc -* 7.5 / (Tdc + 237.3))) -
    -        RH = (Vd / Vt) * 100.0
    -

    -

            # clip
    -        RH = clip(RH, 0.0, 100.0)
    -

    -

            # Create Element and add -Grid -
    -        self.createGrid("TempModel", -"TempRH", "SCALAR", RH, GridTimeRange,
    -          descriptiveName="TempRH",
    -          -timeConstraints=(0, 3600,3600), minAllowedValue = 0.0,
    -          maxAllowedValue -= 100.0, units="%") -
    -

    -

    Answer to Exercise SmartScript-6

    -ToolType = "numeric" -
    -WeatherElementEdited = "Wx" -
    -from numpy import * -

    import SmartScript -

    -

    class Tool (SmartScript.SmartScript): -
    -    def __init__(self, dbss): -
    -        -SmartScript.SmartScript.__init__(self, -dbss) -

    -

        def execute(self, PoP, Wx): -
    -        # Assign Wx based on PoP -

    -

            # Separate Wx into -components -
    -        wxValues = Wx[0] -
    -        keys = Wx[1] -

    -

            wxValues = where( -less(PoP, -20), -self.getIndex("<NoCov>:<NoWx>:<NoInten>:<NoVis>:",keys), -wxValues) -
    -        wxValues = -where(logical_and( -greater_equal(PoP, 20), less(PoP, 35)),  -self.getIndex("Chc:R:-:<NoVis>:" -,keys), wxValues) -
    -        wxValues = -where(logical_and( -greater_equal(PoP, 35), less(PoP, 55)),  -self.getIndex("Sct:RW:m:<NoVis>:" -,keys), wxValues) -
    -        wxValues = -where(greater_equal(PoP, -55),  self.getIndex("Wide:R:+:<NoVis>:" ,keys), wxValues) -

    -

            return (wxValues, keys) -

    -

    Answer to Exercise SmartScript-7

    -ToolType = "numeric" -
    -WeatherElementEdited = "PoP" -
    -from numpy import * -

    import SmartScript -

    -

    class Tool (SmartScript.SmartScript): -
    -    def __init__(self, dbss): -
    -        -SmartScript.SmartScript.__init__(self, -dbss) -

    -

        def execute(self, PoP, Wx): -
    -         # Assign PoP based -on Wx -

    -

              PoP = -where(self.wxMask(Wx, -"<NoCov>:"),  0,   PoP) -

    -

              # Here we -need -to require a regular expression to avoid confusion between "Chc" and -"SChc" -and "Sct" and "WSct" -
    -          PoP = -where(self.wxMask(Wx, -"^Chc:", 1),  25,   PoP) -
    -          PoP = -where(self.wxMask(Wx, -"^Sct:", 1),  55,   PoP) -

    -

              PoP = -where(self.wxMask(Wx, -"Wide:"),  80,   PoP) -

    -

              return PoP -

    -

    Answer to Exercise -Procedure-1

    -
    -
    MenuItems = ["Edit"]
    -
    ToolList = [
    -
                -("AdjustValue_Up", "variableElement"),
    -
                -("Smooth", "variableElement"),
    -
              -]
    -
    import SmartScript
    -
    class Procedure (SmartScript.SmartScript):
    -
        def __init__(self, dbss):
    -
            -SmartScript.SmartScript.__init__(self, -dbss)
    -
        def execute(self, editArea, -timeRange, -varDict):
    -
            # -Calls -each Smart Tool: T_Tool, PoP_Tool, Wind_Tool
    -
            for -toolName, -elementName in ToolList:
    -
                  -error = self.callSmartTool(toolName, elementName,
    -
                                  -editArea, timeRange, varDict)
    -
                  -if error is not None:
    -
                      -break
    -

    -Answer to Exercise Procedure-2

    -
    import SmartScript
    -
    VariableList = [("Model:" , "", "D2D_model")]
    -
    class Procedure (SmartScript.SmartScript):
    -
        def __init__(self, dbss):
    -
            -SmartScript.SmartScript.__init__(self, -dbss)
    -
     
    -
        def execute(self, editArea, -varDict):
    -
            -"""Copy -from model, create grids, run smart tool."""
    -
            model -= varDict["Model:"]
    -
            -databaseID -= self.getDatabase(model)
    -
            -timeRange -= self.createTimeRange(0, 12, "Database", databaseID)
    -
            -elements -= ['T', 'Wind','Wx']
    -
            -self.copyCmd(elements, -databaseID, timeRange)
    -
            -self.createFromScratchCmd(['T'], -timeRange, repeat=3, duration=1)
    -
            -self.callSmartTool("ExSS4","T", -editArea, timeRange, varDict,
    -
                   -missingDataMode="Create")
    -

    -Answer to Exercise Procedure-3

    -**Running Revised Exercise Procedure-1 using runProcedure: -

       ./runProcedure -n Proc1 -u hansen -c gfeConfig -a -CO_Boulder --t Tonight -

    -

    **Revised Procedure-1  (does not use variableElement) -
    -

    -
    MenuItems = ["Edit"]
    -
    ToolList = [
    -
                -("AdjustValue_Up", "T"),
    -
                -("Smooth", "T"),
    -
              -]
    -
    import SmartScript
    -
    class Procedure (SmartScript.SmartScript):
    -
        def __init__(self, dbss):
    -
            -SmartScript.SmartScript.__init__(self, -dbss)
    -
        def execute(self, editArea, -timeRange, -varDict):
    -
            # -Calls -each Smart Tool: T_Tool, PoP_Tool, Wind_Tool
    -
            for -toolName, -elementName in ToolList:
    -
                  -error = self.callSmartTool(toolName, elementName,
    -
                                  -editArea, timeRange, varDict)
    -
                  -if error is not None:
    -
                      -break
    -

    -Answer to Exercise Utility-1

    -

    -New Utility named:  Common

    -
    import SmartScript -

    class Common(SmartScript.SmartScript): -
    -    def __init__(self, dbss, eaMgr, mdMode=None, -toolType="numeric"): -
    -        -SmartScript.SmartScript.__init__(self, -dbss) -
    -        self.setUp(eaMgr, mdMode, -toolType) -

    -

        # Include your utility methods here -
    -    def _convertFtToM(self, value): -
    -        return value/3.28084

    -
    -

    -Smart Tool:

    -
    ToolType = "numeric" -
    -WeatherElementEdited = "T" -
    -from Numeric import * -

    import SmartScript -
    -import Common -

    -

    VariableList = [("Model:" , "", "D2D_model")] -

    -

    class Tool (SmartScript.SmartScript): -
    -    def __init__(self, dbss): -
    -        self._dbss = dbss -
    -        -SmartScript.SmartScript.__init__(self, -dbss) -

    -

        def execute(self, GridTimeRange, Topo, varDict): -
    -        "This tool accesses QPF -and tp  grids directly" -
    -        self._common = -Common.Common(self._dbss, -self.eaMgr()) -

    -

            # Convert Topo to meters -
    -        topo_M = -self._common._convertFtToM(Topo) -

    -

            # Make a sounding cubes -for -T -
    -        # Height will increase in -the sounding and be the -
    -        # first dimension -
    -        levels = -["MB1000","MB950","MB900","MB850","MB800", -
    -        -"MB750","MB700","MB650","MB600"] -
    -        gh_Cube, t_Cube = -self.makeNumericSounding( -
    -            -model, "t", levels, GridTimeRange) -

    -

            print "Cube shapes ", -gh_Cube.shape, -t_Cube.shape -

    -

            # Make an initial T grid -with values of -200 -
    -        # This is an out-of-range -value to help us identify values that -
    -        # have already been set. -
    -        T = (Topo * 0) - 200 -

    -

            # Work "upward" in the -cubes -to assign T -
    -        # We will only set the value -once, i.e. the first time the -
    -        # gh height is greater than -the Topo -
    -        # For each level -
    -        for i in -xrange(gh_Cube.shape[0]): -
    -                -# where ( gh > topo and T == -200), -
    -                -#       set to t_Cube value, otherwise -keep -value already set)) -
    -                -T = where(logical_and(greater(gh_Cube[i], topo_M), equal(T,-200)), -t_Cube[i], -T) -

    -

            # Convert from K to F -
    -        T_F = self.convertKtoF(T) -

    -

            return T_F

    -
    diff --git a/cave/com.raytheon.viz.gfe/help/SmartToolsProcedures.html b/cave/com.raytheon.viz.gfe/help/SmartToolsProcedures.html deleted file mode 100644 index 799992c333..0000000000 --- a/cave/com.raytheon.viz.gfe/help/SmartToolsProcedures.html +++ /dev/null @@ -1,199 +0,0 @@ - -GFESuite Documentation - Smart Tools - -

    Smart Tools Procedures

    - -Executing -Procedures
    -Exercise Procedure-1 -- Creating -a Procedure
    -Exercise Procedure-2 -- Using -the Smart Script Library from a Procedure
    -Exercise Procedure-3 -- Running -Procedures in the Background - -
    -

    -Procedures

    - -
    Once we have a set of Smart Tools, it is natural to -want -to execute related tools together in succession and to perform other -operations -such as copying, creating, and interpolating grids. For this, we have -Procedures. -The following diagram depicts the Procedure architecture within the -GFESuite -software. It shows Procedures as a sequence of commands which modify -the -Forecast database. Like Smart Tools, these commands are written in -Python, -but operate at a higher level through the Smart Script Library to copy -the Forecast database from models, interpolate grids, and call Smart -Tools. -The GFESuite software locates the procedure, sets up information to be -passed to it, and invokes it. Procedures can be run from the GFE or in -background mode. -
    -  -
    -


    -Using procedures you can:

    -
    -
      -
    • Copy grids from a model into your forecast
    • -
    • Remove grids from the forecast
    • -
    • Interpolate gaps in your forecast
    • -
    • Assign the default value to a set of grids
    • -
    • Create grids from scratch
    • -
    • TimeShift grids of your choice
    • -
    • Call Smart Tools
    • -
    • Call other Procedures
    • -
    -
    -

    -Executing Procedures

    -
    Procedures can be set up to appear under various menu -items on the GFE Main Menu. Keep in mind that you can make a -procedure -that can take several minutes to complete, particularly if it includes -a lot of interpolation.
    -
    -
      -
    1. Try executing the QPF_SnowAmt Procedure which appears under -Main -Menu --> Edit and runs the QPF_SmartTool followed by the -SnowAmt_SmartTool.
    2. -
    -
    -NOTE: Procedures can be run in background mode from the command line. -For -instructions, see the runProcedure -documentation -and Exercise Procedure-3 below. -

    Exercise Procedure-1 -- -Creating a Procedure

    -
    For the following exercise, choose two or more tools -from the Smart Tool list you would like to run in sequence. One -possibility -would be to run the Assign_Value tool followed by the Smooth tool.
    -
    -
      -
    1. Choose Main Menu-->GFE-->Define Procedures. From the -MB3 -Pop-up on -the Procedures folder, choose New....
    2. -
    3. Enter a Name for your Procedure.
    4. -
    5. Select OK. A Python Editor window will appear with the Procedure -template.
    6. -
    7. The MenuItems list defines the GFE menu item(s) under which the -Procedure -is to appear. Possible items are: Populate, Edit, Consistency, -Verify, and Hazards. -Set up the MenuItems list, perhaps listing "Edit" as the item under -which -you want your procedure to appear.
    8. -
    9. Make sure the Tools you want to run in your procedure (if any) -appear -in -the proper order in the Tool List. Specify the weather element to be -modified -by the tool. If you want the tool to modify the active element, -whatever -it may be, enter "variableElement" for the element name. This is likely -to be your choice for tools like Assign_Value or Smooth.
    10. -
    11. Save the Python file and run your Procedure.
    12. -
    -
    -
    Note: If any of the tools in your procedure need -user-supplied -variables, the system will automatically ask the user for them when -your -procedure is run. Procedures can be simple or extremely powerful -because -of the availability of the Smart Script Class library. (See -the section describing this library) -

    Answer to Procedure Exercise 1

    -

    Exercise Procedure-2 -- -Using the SmartScript Library -from a Procedure

    -
    The Smart Script library contains methods for -"procedure-type" -commands which allow you to copy data from models, create grids from -scratch -and perform interpolation, as well as methods for calling Smart -Tools. In this exercise, we'll create a Procedure to call some of -these commands. -
  • Study the SmartScript Libary commands: copyCmd, createFromScratchCmd, - getDatabase, -and createTimeRange.
  • -
  • Study the SmartScript Library section on "Calling -Smart Tools and Procedures."
  • -
  • From the Define Procedures Dialog Procedures Window, select -MB3-->New.
  • -
  • Name your Procedure and select OK.
  • -
  • Include a VariableList with a "model" field for the user to -select -an IFP input model.
  • -
  • Use the SmartScript Library commands: getDatabase, -createTimeRange, -copyCmd, -createFromScratchCmd, and callSmartTool to:
  • -
      -
    • Create a databaseID for the chosen model,
    • -
    • Create a time range based on the model (perhaps the first 12 -hours),
    • -
    • Copy the grids from the model for the new time range,
    • -
    • Create 1-hour T grids every 3 hours over the new time range,
    • -
    • Run the Smart Tool from Exercise SmartScript-4 over the new -time range, -interpolating for missing data by setting the Missing -Data Mode. Pass the varDict from the Procedure to the Smart -Tool -in the "callSmartTool" command so that the VariableList dialog does not -appear twice. For this to work, make sure that the VariableList model -field -has the same name as that in the Smart Tool.
    • -
    -
  • Run and test your Procedure to make sure it works. -Note -that -the Procedure could take some time to execute since the Smart Tool is -being -called over a time range of grids. You can notice the progress of -execution in the progress bar at the bottom right of the display. -Also, if you are running the GFE from a terminal window with a -console -argument, you will see status messages appear in the window.
  • -

    Answer to Procedure Exercise 2

    -
    -
    -
    -
    -

    -Exercise Procedure-3 -- Running Procedures in the -Background

    -
    Procedures which are routine or take time to execute -can be run in background mode. This exercise will show you how to do -this. -
  • Study the documentation and example for the runProcedure -command.
  • -
  • Run your the procedure of Exercise Procedure-1 from the command -line -using -the "runProcedure" command. Note you will need to specify an edit -area and a time range. Also, since you will be running the -Procedure -outside the context of the GFE, you will have to reference -specific -weather elements instead of "variableElement" in your ToolList.
  • -

    Answer to Procedure Exercise 3

    -
    -
    -
    diff --git a/cave/com.raytheon.viz.gfe/help/SmartToolsSmartTools.html b/cave/com.raytheon.viz.gfe/help/SmartToolsSmartTools.html deleted file mode 100644 index 7643ae9081..0000000000 --- a/cave/com.raytheon.viz.gfe/help/SmartToolsSmartTools.html +++ /dev/null @@ -1,22 +0,0 @@ - -GFESuite Documentation - Smart Tools - - -

    Smart Tools

    -

    Executing Smart Tools
    - - Creating and Modifying Tools
    - - -


    - -

    Smart Tools

    -
    Smart Tools are Edit Actions that you create. These -tools -allow you to write an equation that modifies forecast grids in a -meteorologically -consistent way. The following sections will show how to execute smart -tools -and then how to create and modify them.
    -
    - diff --git a/cave/com.raytheon.viz.gfe/help/SmartToolsUtilities.html b/cave/com.raytheon.viz.gfe/help/SmartToolsUtilities.html deleted file mode 100644 index c9adddb943..0000000000 --- a/cave/com.raytheon.viz.gfe/help/SmartToolsUtilities.html +++ /dev/null @@ -1,89 +0,0 @@ - -GFESuite Documentation - Smart Tools - -

    Smart Tools Utilities

    -Edit Action Windows
    -Exercise Utility-1 -- Making a Utility to Share -Among Smart Tools and Procedures - -
    -

    -Utilities

    - -

    Edit Action Windows

    -
    So far, we have modified Smart Tools and Procedures. -We will look at Utilities.
    -
    -
      -
    1. From the Localization perspective, choose GFE-->Utilities.
    2. -
    -
    -You will see some utilities listed including the SmartScript library -which -you can view from the MB3 popup over the window. You can add Python -modules -here which might contain methods you wish to share among the Smart -Tools -and Procedures you've created. - -
    -
    -
    -
    -

    Exercise Utility-1 -- Making a -Utility to Share Among -Smart Tools and Procedures

    -
    Suppose that you would like to create your own -library -methods to share among your smart tools and procedures. In this -exercise, -we will create a Utility that can be imported and accessed from any -Smart -Tool or Procedure. -
      -
    1. In Localization perspective under the GFE section, - on the Utility folder, select MB3-->New.
    2. -
    3. Name your Utility and select OK.
    4. -
    5. A Python window will appear. Enter some utility method -within the -utility class. For example, you could simply copy the -"convertFtToM" -method from the SmartScript module. To follow the naming -conventions, precede the name of your method with an -underscore. -For example, _convertFtToM.
    6. -
    7. Now, modify your Smart Tool from the previous Exercise to call -this method. -To do this, you must do several things:
    8. -
      -
        -
      • First, at the beginning of your Smart Tool, insert the -statement:
      • -
        -
      -                 -import MyUtility -

                 where -"MyUtility" -is the name of your Utility.

      -
        -
      • Create an instance of your Utility as follows:
      • -
        -

            class Tool (SmartScript.SmartScript):
        -        def __init__(self, dbss):
        -            -self._dbss = dbss
        -            -SmartScript.SmartScript.__init__(self, dbss)

        -

               def preProcessTool(self):
        -            -self._myUtility = MyUtility.MyUtility(self._dbss, self.eaMgr())

        -
      • Next, call your method as follows:
      • -
        -
      -            T_F -= self._myUtility._convertFtToM(T_K)
    9. Run and test your tool to make sure it works.
    10. -
    -Click here for Answer to Exercise Utility-1.
    diff --git a/cave/com.raytheon.viz.gfe/help/SpatialEditorDialogs.html b/cave/com.raytheon.viz.gfe/help/SpatialEditorDialogs.html deleted file mode 100644 index 3d3a3fa0b3..0000000000 --- a/cave/com.raytheon.viz.gfe/help/SpatialEditorDialogs.html +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - Spatial Editor Dialogs - - -

    -Spatial Editor Dialogs

    -The following dialogs are involked from the Spatial Editor: - -
    -

    Display Attributes Dialog

    -The Display Attributes Dialog allows the user to choose the type of -visualization -that is used when the editor is in "image" mode and "graphic" -mode. -You can never turn off the "Image" display for the "image" mode. -The dialog is sensitive to the current editor, and the current -mode. -It will only display those options that are available at that -time. -Note that you must always select 1 image while in image mode, and at -least -1 graphic, while in graphic mode. -


    -

    -
    -

    Fuzz Value Dialog

    -The Fuzz Value Dialog is opened from the Edit Actions Dialog. It -allows you to set the value used when defining Homogeneous -Edit Areas. -

    Type in the fuzz value and click OK or use the slider to set the -value. -

    -

    At any time you can click Cancel to cancel the operation and close -the -dialog. -

    -
    -
    -
    -
    -
    -
    -
    -

    Color Table Editor

    -The Color Table Editor allows the user to create new and modify -existing color enhancement curves for various scalar and vector weather -elements. For details on how to use the color table editor, see -the Color Table Editor -Dialog documentation.
    -
    -Color Table Editor
    -
    -
    -
    -

    Color Chooser

    -The Color Chooser allows the user to change the "graphic color" for -weather elements. For details on how to use the color chooser, -see the Color Chooser Dialog -documentation.
    -
    -
    -
    -
    -
    -
    Back To Top
    - - diff --git a/cave/com.raytheon.viz.gfe/help/StatusBar.html b/cave/com.raytheon.viz.gfe/help/StatusBar.html deleted file mode 100644 index 08f572d35e..0000000000 --- a/cave/com.raytheon.viz.gfe/help/StatusBar.html +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - AlertViz Monitor - - -

    -AlertViz

    -February 17, 2012
    -

    -AlertViz is a separate component of AWIPS2 that is shared among all the -perspectives, including GFE. It contains -two -complete status bars, each with a log list and a message -display. Messages are color-coded (set up in the AlertViz configuration file) -and of the following categories: -
      -
    • Regular: Successful completion of an operation. (default color: -green)
    • -
    • Significant: An error message usually indicating an operation -cannot be -completed (default color: yellow). When a Significant message -occurs, the Significant Messages Dialog will -appear.
      -
    • -
    • Urgent: A serious error usually indicating a server or system -problem -(default color: red). When an Urgent message occurs, the Urgent -Messages Dialog will appear.
    • -
    • Alert: A warning to the forecaster of an event (default -color: orange).
      -
    • -
    -To acknowledge an Alert popup message, click MB1 over the message -"Acknowledge Last" button which will close the message dialog. -To view a list of previous messages, click on the notepad icon to the right -of the Status message. The View Messages -Dialog will appear. Aleternately you can click the "Show Log" button.
    -

    Most of the status messages will appear in the left status -bar. -The right status bar is reserved for incoming ISC traffic and -Smart -Init model arrival messages. -

    -


    -

    -
    -

    Urgent Messages -Dialog

    -The Urgent Messages Dialog appears with a red message bar. Multiple -messages -may be active in the Dialog and each must be acknowledged by clicking -"Acknowledge Last". -You can acknowledge all the active messages by clicking "Acknowledge -All". -A history of all messages, including Urgent Messages, can be viewed in -the View Messages Dialog, or by -clicking the "Show Log" button. -

    Urgent Message

    -
    -

    Significant -Messages Dialog

    -

    -The Significant Messages Dialog appears with a yellow message bar. -Multiple -messages -may be active in the Dialog and each must be acknowledged by clicking -"Acknowledge Last". -You can acknowledge all the active messages by clicking "Acknowledge -All". -A history of all messages, including Significant Messages, can be -viewed in -the View Messages Dialog, or by clicking the -"Show Log" button. -

    Significant

    -
    -

    View Messages -Dialog

    -To view a history of status messages, click on the notepad icon to the right of the -Status Bar message. The Log list Dialog will appear. The messages -are listed with level of significance displayed to the right of the time of the -message. The most recent message is listed at the bottom. -Click "Close" to close the dialog. -

    -
    -
    -
    -

    Other

    -

    The "C" button causes the message log to be cleared from the display window, however -the messages are still present if the user clicks the notepad button.

    -

    The "i" button at the left side of the AlertViz monitor will display information -about the AlertViz monitor.

    -
    -
    -
    -
    -
    Back To TOC
    -
    -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TCMWindTool.html b/cave/com.raytheon.viz.gfe/help/TCMWindTool.html deleted file mode 100644 index 094b4d70bc..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TCMWindTool.html +++ /dev/null @@ -1,322 +0,0 @@ - - - - - TCMWindTool - - - - - - -

    -TCMWind Tool

    -

    -March 9, 2012

    -

    -
    -

    -The TCMWind tool was designed to read and decode the TCM -text bulletin and create a sequence of wind grids based on the -location and wind radii information. Forecasters can choose between -the current forecast, NAM, or the GFS as background wind fields. The -tool generates wind grids based on the local wind time constraints. -For example, if a site configures the wind weather element such that -there is a grid every hour, the tool will produce a wind grid every -hour for the time span of the the TCM bulletin (usually 5 days). - -

    Running the Tool

    -

    -

    -To run the TCMWind tool, select from the GFE main menu, -

    -

    -

    -

    Populate->TCMWindTool.

    -

    -

    -
    -

    -As soon as the tool starts, it displays a dialog that -looks like Figure 1 below. Using this dialog you can indicate the -TCM bulletin that should be decoded, the background wind field, the -eye diameter, the 34-knot radius at 3, 4, and 5 days, and whether you -want the tool to make wind grids over the selected time range only. -Each of the options are described in more detail below. -

    Product to decode

    -Each new tropical cyclone is assigned a slightly -different product PIL. It is very important that you select the -correct product name or the wrong TCM will be decoded and plotted. Use -one of the first two columns of product PILs to select the -appropriate product. One and only one selection is allowed. Any -more or less than one will result in an error message in the form of -a GFE yellow banner. -


    -

    -

    -TCMWind tool user interface
    -

    -

    -
    -

    -

    -
    -

    -

    -
    -

    -

    -
    -

    -

    -
    -

    -

    -
    -

    -

    -
    -

    -

    -
    -

    -

    -
    -

    -

    -
    -

    -

    -
    -

    -

    -
    -

    -

    -
    -

    -

    -
    -

    -

    -
    -

    -

    -
    -

    -

    -
    -

    -

    -
    -

    -

    -
    -

    -

    -
    -

    -

    -
    -

    -

    -
    -

    -

    -
    -

    -

    -
    -

    -
    -Figure 1 - Snapshot of the TCMWindTool interface
    -


    -

    -

    -Background Model

    -

    -
    -

    -This is where you select the background for your grid. -The tool will do its best to match the time of the model (or Fcst) -grid with the time of the cyclone. The background grid is blended -with the cyclone wind field so that you have winds defined over your -entire domain. -

    Eye Diameter

    -

    -
    -

    -TPC will generally report an observed eye diameter in -the TCM bulletin. This value is used to calculate the radius of -maximum wind (RMW) using this equation: -

    -

    RMW = (EyeDiameter / 2.0) + 8.0

    -

    -The value for this radius of maximum wind is used -throughout the 5-day forecast period. If you wish to override this -TPC value, move the slider bar to the right. Any value greater than -zero will be used by the tool. If you do not adjust this slider, the -value used will be the same as found in the TCM bulletin.
    -
    -
    -

    34 knot radius at 3 days (4 days) (5 days)

    -Beyond 72 hours, the TCM bulletin defines only a center -location and maximum sustained wind at 24 hour intervals. To better -define the spatial extent of the cyclone for the 3-5 day period, -three sliders allow the forecasters to set the radius of the 34 knot -wind threshold at 24 hour intervals. This is effectively the same as -if the TCM bulletin defined 34 knot radii at these distances. To -adjust the radii, simply move the slider to the desired value for -each of the sliders.
    -
    -
    -

    Decrease Wind over Land by (%)

    -Adjusting this slider will reduce the wind magnitude over areas where -the elevation is greater than zero (above sea level). Note that the -scale range is from -20% to +50%. Negative values will increase the -wind magnitude by that amount over areas above sea level.
    -
    -
    -Make Grid over Selected Time Only
    -
    -Selecting “Yes” for this option will produce grids only over a -time range that you select in the grid manager. Selecting “No” -will cause the tool to create grids for the entire forecast period of -the TCM bulletin. De-selecting the grid manager time range will have -the same effect as selecting “No”. If you have a time range -selected and select “Yes” to “Make Grid Over Selected Time -Only”, but your selected time does not intersect the valid time of -the TCM bulletin, a yellow banner will display informing you that you -selected a time outside the time period defined in the bulletin.

    -MakeWind Swath for TCWindThreat?
    -
    -This option is for use only by those offices that are part of Tropical -Impact Graphics experiment. This option, using the detailed wind radii info -provided calculates a swath of maximum wind for each grid point that incorporates -the specified land friction. This creates a TCMMaxWindComposite object that -gets stored in the server. When the office runs the TCWindThreat tool as part of the tropical -impact grids/graphics, that object is available as one of two options for use as the -deterministic WindMax source. In the context of the TCWindThreat tool, the WindMax -source created by the TCMWindTools would be named TCM. The downside to running -TCMWindTool with this option is that it will take 5 to 6 extra minutes to run.
    -

    The Algorithm

    -The algorithm used to calculate the wind field is roughly a Rankine -vortex. Wind values at specified radii are defined in the TCM bulletin. -Wind values between these radii are interpolated using an exponential -curve. An example of this curve using forecast data from the northeast -quadrant of Hurricane Irene (17 Oct 1999) is shown in Figure 2 below.
    -
    -

    -

    Rankine example
    -

    -


    -

    -


    -

    -


    -

    -


    -

    -


    -

    -


    -

    -


    -

    -


    -

    -


    -

    -


    -

    -


    -

    -


    -

    -


    -

    -
    -Figure 2 – Example of Rankine vortex algorithm that -interpolates wind speed as a function of distance fro the center.

    -
    -
    -This process is repeated for each quadrant, based on the specified -radii in the TCM bulletin. This technique is used to calculate the -winds from the RMW outward. A linear curve is used to calculate wind -values from the RMW toward the center.
    -

    Wind -Speed Caps

    -Based on guidance from the TPC and the wind team, limitations on the -magnitude of the wind are applied based on the forecast lead-time. -These wind caps are documented in the table below.
    -
    -Wind Caps for TCMWind Tool
    -
    - - - - - - - - - - - - - - - - - - - -
    Forecast period Maximum Allowed Wind Value
    0 – 24 hours Maximum Sustained Wind
    25-72 hours 100 knots
    73-120 hours 64 knots
    -


    -

    -Table 1 – List of wind speed caps as a function of -lead time. -


    -

    - - diff --git a/cave/com.raytheon.viz.gfe/help/TemporalEditorDialogs.html b/cave/com.raytheon.viz.gfe/help/TemporalEditorDialogs.html deleted file mode 100644 index 9e94fafbc1..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TemporalEditorDialogs.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - Temporal Editor Dialogs - - -

    -Temporal Editor Dialogs

    -
    -February 14, 2012
    - -
    -
  • -The following dialogs are invoked from the Temporal Editor:
  • - -


    -

    -
    -

    Move -Weather Element Dialog

    -The Move Weather Element Dialog provides the capability of moving a -weather -element from one temporal pane to another temporal pane. -

    -

    -

    -Temporal -Editor Display Attributes Dialog -

    The Temporal Editor Display Attributes Dialog displays the following -information corresponding to the weather element -
    -you selected: Image Visual Type or Graphic Visual Type. -

    -

    You can change the settings of any of the attributes listed in the -dialog -and click OK. To close the dialog without -
    -making any changes, simply click Cancel. -

    -

    -

    -
    -

    Set Weather Dialog

    -The set weather dialog is used to define a new weather value, and then -set the data in the temporal editor to that value. Pressing the -"SET" -button will set the current pickup value for the Wx parm and will also -change the data. -

    For more details on how the dialog works, please refer to the Weather -PickUpValue dialog that is used for the spatial editor. -

    -


    -

    -

    -
    -

    Set Discrete Value Dialog

    -The set discrete value dialog is used to define a new discrete value, -and -then set the data in the temporal editor to that value. Pressing -the "SET" button will set the current pickup value for the discrete -parm -and will also change the data. -

    For more details on how the dialog works, please refer to the Discrete -PickUpValue dialog that is used for the spatial editor. -

    -

    Set Discrete Dialog
    -

    -
    -
    Back To Top
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextFormatter.html b/cave/com.raytheon.viz.gfe/help/TextFormatter.html deleted file mode 100644 index e08d1dcf53..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextFormatter.html +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - Text Formatter User Guide - - - -
    -

    Text Products User Guide

    -
    -

    The following GFESuite Text Product Documents are available:
    -

    - - - - - - - - - - - - - - - - - - - - - - - -
    - -Text Formatter User GuideThis covers product setup and -basic customization.
    - -Text Formatter User -Guide for Tabular ProductsThis covers simple tabular and -smart -tabular products.
    - -Text Formatter User -Guide for Narrative ProductsThis covers narrative products, -narrative strategies, and narrative phrases and methods. - -
    -Text Reference GuideMaterial presented in the user -guide refers to this -document. This contains many examples, troubleshooting strategies, and -exercises.
    - -Text Formatter ProjectPresentation at the -FSL Technical Review for GFESuite, September 2003 (updated for AWIPS2). -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide1.JPG b/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide1.JPG deleted file mode 100644 index d631ae3514..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide1.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide1.html b/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide1.html deleted file mode 100644 index 9c2c5a5f0d..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide1.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -
    -

    Text Formatter Project

    -

    1. GFESuite Text Product User Guide

    -
    -Next Slide

    -



    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide10.JPG b/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide10.JPG deleted file mode 100644 index 5cc2964467..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide10.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide10.html b/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide10.html deleted file mode 100644 index b63370fb65..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide10.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter Project

    -

    10. "Holographic" Processing

    -
    -Previous Slide Next Slide

    -

    We can make phrases more detailed, add new phrases...


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide11.JPG b/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide11.JPG deleted file mode 100644 index 63bafbc281..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide11.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide11.html b/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide11.html deleted file mode 100644 index d451f47250..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide11.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter Project

    -

    11. "Holographic" Processing

    -
    -Previous Slide Next Slide

    -

    ...or change the order of the phrases on-the-fly. The point is, we don't commit to any part of the product until all dependencies are accounted for and the whole is complete.



    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide12.JPG b/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide12.JPG deleted file mode 100644 index a2212a2baf..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide12.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide12.html b/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide12.html deleted file mode 100644 index 1642fa875e..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide12.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter Project

    -

    12. Rapid Prototype Process

    -
    -Previous Slide Next Slide

    -

    Once this framework was in place, we worked with our Focus Group to determine WHICH rules to apply to the tree-like structure. It turns out that these are the rules forecasters have used almost intuitively over the years as they typed their text forecasts. The Rapid Prototype Process, working interatively with the users, is a very effective way of extracting this information.



    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide13.JPG b/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide13.JPG deleted file mode 100644 index fe5a0e4d65..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide13.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide13.html b/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide13.html deleted file mode 100644 index 221b1cb558..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide13.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter Project

    -

    13. Development Cycle

    -
    -Previous Slide Next Slide

    -

    This approach was successful and in June of 2003, we released the core products for national deployment.



    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide14.JPG b/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide14.JPG deleted file mode 100644 index e9287edfa9..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide14.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide14.html b/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide14.html deleted file mode 100644 index 4cbbb1508f..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide14.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter Project

    -

    14. Grids as Source of NWS Products

    -
    -Previous Slide Next Slide

    -

    What this means is that if you look up the official forecast for a National Weather service office, it is likely that the words you read were generated by softward written here at FSL. Similarly, if you listen to NOAA weather radio, the words you here are likely to be a result of this system. And now this infrastructure, bolstered by our experience with the core products can be used to create new and innovative products such as point-casts, traveler's forecasts and products for other programs such as Aviation and River Forecast products.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide15.JPG b/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide15.JPG deleted file mode 100644 index 296bf9d0e8..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide15.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide15.html b/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide15.html deleted file mode 100644 index 78d153e6d2..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide15.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter Project

    -

    15. Grids as Source of NWS Products

    -
    -Previous Slide Next Slide

    -

    Here's an example of an experimental Tabular Product.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide16.JPG b/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide16.JPG deleted file mode 100644 index e9287edfa9..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide16.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide16.html b/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide16.html deleted file mode 100644 index 9c7fd37dee..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide16.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter Project

    -

    16. Grids as Source of NWS Products

    -
    -Previous Slide Next Slide

    -

    Notice that all these products emanate from the grids. There is still refinement to be done on the formatters, but we could issue the most well-formed, descriptive words and they will be meaningless unless the underlying grids are meteorologically sound. This brings a tremendous responsibility and opportunity to our laboratory.



    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide17.JPG b/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide17.JPG deleted file mode 100644 index 2242e38e7d..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide17.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide17.html b/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide17.html deleted file mode 100644 index a6041d94c4..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide17.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter Project

    -

    17. Science

    -
    -Previous Slide Next Slide

    -

    As we turn our attention to improving the quality of the grids by injecting science at every step of the forecast process, we can leverage off of our experience with the Text Product project. We can again use a Focus Group to understand the forecasters. challenges in the digital world. We will tackle problems such as enforcing consistency between the many weather elements represented in the grids and creating 4-dimensional smart tools that operate in space and time over multiple elements. Our experience in dealing with the complexities and dependencies inherent in the problem of text generation will serve us well as we formulate innovative processing techniques for the scientific challenges ahead.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide18.JPG b/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide18.JPG deleted file mode 100644 index 1c6ca0b017..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide18.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide18.html b/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide18.html deleted file mode 100644 index cc585a73d9..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide18.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter Project

    -

    18. Regional Tiered Support Plan

    -
    -Previous Slide Next Slide

    - - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide19.JPG b/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide19.JPG deleted file mode 100644 index 0a9ea6424e..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide19.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide19.html b/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide19.html deleted file mode 100644 index 3090d76dbe..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide19.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -
    -

    Text Formatter Project

    -

    19. Regional Tiered Support Plan

    -
    -Previous Slide Next Slide

    -

    In supporting the Text Products, the emphasis is on having users understand the system and be self-sufficient in solving their own problems. To this end, we are attempting to provide adequate documentation which includes trouble-shooting strategies.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide2.JPG b/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide2.JPG deleted file mode 100644 index 6497ddd829..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide2.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide2.html b/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide2.html deleted file mode 100644 index f2ebf18965..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide2.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter Project

    -

    2. Project Overview

    -
    -Previous Slide Next Slide

    -



    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide20.JPG b/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide20.JPG deleted file mode 100644 index c350303430..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide20.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide20.html b/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide20.html deleted file mode 100644 index 540b051d07..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide20.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter Project

    -

    20. Regional Tiered Support

    -
    -Previous Slide Next Slide

    -

    A "tiered" support system is in place. The Text Product users at each site can set up and customize the core products as well create new products. The second "tier" is composed of Regional Support Teams composed of members who are familiar with the documentation, trouble-shooting strategies and Text Product Infrastructure. They are also responsible for supporting Regional Local files which include customizations specific to their region. Finally, the FSL developers provide documentation and refine and maintain the baseline core products and infrastructure.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide21.JPG b/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide21.JPG deleted file mode 100644 index 6978f28dd1..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide21.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide21.html b/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide21.html deleted file mode 100644 index ef7fe1cc3b..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide21.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter Project

    -

    21. Regional Tiered Support

    -
    -Previous Slide Next Slide

    -

    A field user can post questions and problems to the Text Support Listserver (ifpslocalformatterdev). Other users and/or the Regional Support Team members can respond to these posts. If the problem does not get solved, a member of the Regional Team can post a message to the Regional Listserver (gfetextsupport). Other Regional Team members and/or FSL developers will respond. The Regional Team members have direct access to FSL developers through the Regional Listserver.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide22.JPG b/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide22.JPG deleted file mode 100644 index 4b4161905f..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide22.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide22.html b/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide22.html deleted file mode 100644 index 481700c4f2..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide22.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter Project

    -

    22. Baselining Refinements

    -
    -Previous Slide

    -

    Any user can post refinements to the listserver as a repository to be shared by other users. If appropriate, a refinement can be nominated as a candidate for baselining. In this case, a Regional Team member should post the request on the Regional Support Listserver. A "tkgnats" entry will be created and the Regional Teams can then vote on whether the refinement should be baselined and if so, the priority it should have. Finally, FSL will review and if necessary re-work the refinement, test it, and include it in the baseline.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide3.JPG b/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide3.JPG deleted file mode 100644 index fd65364f76..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide3.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide3.html b/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide3.html deleted file mode 100644 index c4bc612108..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide3.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter Project

    -

    3. Grids to Text

    -
    -Previous Slide Next Slide

    -

    The task of automatically generating text products from the GFESuite forecast grids has is the purpose of the GFESuite Text Product Project.



    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide4.JPG b/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide4.JPG deleted file mode 100644 index 69a2a0b5b1..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide4.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide4.html b/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide4.html deleted file mode 100644 index 2619031e20..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide4.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter Project

    -

    4. Development Cycle

    -
    -Previous Slide Next Slide

    -

    We introduced an experimental prototype in 1998 at the Modernized Product
    Workshop as a way to create new innovative text products. The field
    forecasters picked up on this new approach which, like Smart Tools, uses
    Python to make it extendable and easy to customize to the Local site. They
    explored the use of this technology to create new products as well as to work
    with the legacy text products. This approach became so popular that in August
    2002, the NWS asked FSL in concert with field forecasters to write a set of
    core products as an alternative to the existing products. This was quite an
    undertaking and the first thing we did was to form a Focus Group of about 25
    motivated forecasters who had been working with the text product framework.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide5.JPG b/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide5.JPG deleted file mode 100644 index c17a624579..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide5.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide5.html b/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide5.html deleted file mode 100644 index bf96988821..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide5.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter Project

    -

    5. Rapid Prototype Process

    -
    -Previous Slide Next Slide

    -

    The directives for the core products include the Zone Forecast Product, Coastal Waters Forecast, Fire Weather Forecast as well as tables such as the Coded Cities Forecast. There are about 12 in all. The directives needed to be encoded into the baseline software, but that's only half the story. These directives act only as guidelines and each local office has its own variations and preferences based on the geographic and meteorological characteristics of its domain. So we began a series of 14 releases of the software to the forecasters on our team for them to try out the code, make sure it could handle their local customizations and give us bug reports and requests for enhancements.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide6.JPG b/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide6.JPG deleted file mode 100644 index e4457f1693..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide6.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide6.html b/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide6.html deleted file mode 100644 index b6ae4f4bce..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide6.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter Project

    -

    6. Grids to Text

    -
    -Previous Slide Next Slide

    -

    On the surface, the idea of representing numbers as simple phrases doesn't seem so tough. "Sunny. Highs in the 80's" -- how hard could that be? But we discovered that there are many subtleties and complexities that we didn't foresee. For example, the PoP phrase, "chance of rain...", "chance of snow..." depends on the current weather events. Or the snow accumulation we report in the Today period will contribute to the total snow amount reported in a later period.



    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide7.JPG b/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide7.JPG deleted file mode 100644 index f736afb8b5..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide7.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide7.html b/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide7.html deleted file mode 100644 index ec7484fffa..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide7.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter Project

    -

    7. Grids to Text

    -
    -Previous Slide Next Slide

    -

    We could have chance of rain and fog in the morning then chance of rain in the afternoon and the formatters have to smart enough to see that there is a chance of rain all day and fog only in the morning.



    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide8.JPG b/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide8.JPG deleted file mode 100644 index a14449a920..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide8.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide8.html b/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide8.html deleted file mode 100644 index ad1dc4f7fc..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide8.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter Project

    -

    8. Grids to Text

    -
    -Previous Slide Next Slide

    -

    The temporal resolution of the grids can lead to more complexity with many different weather scenarios in a 12-hour period. The formatters have to be able to consolidate this digital information and produce concise yet accurate phrases. Beyond that, we needed to account for local effects and report differences between areas such as the "coast" versus "inland" or "mountains" versus "valleys".



    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide9.JPG b/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide9.JPG deleted file mode 100644 index 71c827b952..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide9.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide9.html b/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide9.html deleted file mode 100644 index f3d7f8e149..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductProject/Slide9.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter Project

    -

    9. "Holographic" Processing

    -
    -Previous Slide Next Slide

    -

    In order to tackle these complexities and dependencies, we invented a new way of processing which I like to call "holographic". What I mean by that is we represent the narrative components and phrases in a tree-like structure in the computer memory. Then we can apply different dependency and logical rules to any part of the tree BEFORE producing the final product. So we can examine the weather conditions to properly word our PoP phrase. We can sum the snow accumulation over consecutive periods to yield a total snow amount that is consistent and accurate.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/TOC.txt b/cave/com.raytheon.viz.gfe/help/TextProductProject/TOC.txt deleted file mode 100644 index 8fc821c075..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductProject/TOC.txt +++ /dev/null @@ -1,22 +0,0 @@ -1: GFESuite Text Product User Guide -2: Project Overview -3: Grids to Text -4: Development Cycle -5: Rapid Prototype Process -6: Grids to Text -7: Grids to Text -8: Grids to Text -9: "Holographic" Processing -10: "Holographic" Processing -11: "Holographic" Processing -12: Rapid Prototype Process -13: Development Cycle -14: Grids as Source of NWS Products -15: Grids as Source of NWS Products -16: Grids as Source of NWS Products -17: Science -18: Regional Tiered Support Plan -19: Regional Tiered Support Plan -20: Regional Tiered Support -21: Regional Tiered Support -22: Baselining Refinements diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/notes1.txt b/cave/com.raytheon.viz.gfe/help/TextProductProject/notes1.txt deleted file mode 100644 index 8d1c8b69c3..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductProject/notes1.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/notes10.txt b/cave/com.raytheon.viz.gfe/help/TextProductProject/notes10.txt deleted file mode 100644 index 3d5c99b449..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductProject/notes10.txt +++ /dev/null @@ -1,2 +0,0 @@ -We can make phrases more detailed, add new phrases... - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/notes11.txt b/cave/com.raytheon.viz.gfe/help/TextProductProject/notes11.txt deleted file mode 100644 index 70c42a0090..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductProject/notes11.txt +++ /dev/null @@ -1,3 +0,0 @@ -...or change the order of the phrases on-the-fly. The point is, we don't commit to any part of the product until all dependencies are accounted for and the whole is complete. - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/notes12.txt b/cave/com.raytheon.viz.gfe/help/TextProductProject/notes12.txt deleted file mode 100644 index 563ff12603..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductProject/notes12.txt +++ /dev/null @@ -1,3 +0,0 @@ -Once this framework was in place, we worked with our Focus Group to determine WHICH rules to apply to the tree-like structure. It turns out that these are the rules forecasters have used almost intuitively over the years as they typed their text forecasts. The Rapid Prototype Process, working interatively with the users, is a very effective way of extracting this information. - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/notes13.txt b/cave/com.raytheon.viz.gfe/help/TextProductProject/notes13.txt deleted file mode 100644 index 686eea70d1..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductProject/notes13.txt +++ /dev/null @@ -1,3 +0,0 @@ -This approach was successful and in June of 2003, we released the core products for national deployment. - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/notes14.txt b/cave/com.raytheon.viz.gfe/help/TextProductProject/notes14.txt deleted file mode 100644 index fc66013104..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductProject/notes14.txt +++ /dev/null @@ -1,2 +0,0 @@ -What this means is that if you look up the official forecast for a National Weather service office, it is likely that the words you read were generated by softward written here at FSL. Similarly, if you listen to NOAA weather radio, the words you here are likely to be a result of this system. And now this infrastructure, bolstered by our experience with the core products can be used to create new and innovative products such as point-casts, traveler's forecasts and products for other programs such as Aviation and River Forecast products. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/notes15.txt b/cave/com.raytheon.viz.gfe/help/TextProductProject/notes15.txt deleted file mode 100644 index 5e4d446abb..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductProject/notes15.txt +++ /dev/null @@ -1,2 +0,0 @@ -Here's an example of an experimental Tabular Product. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/notes16.txt b/cave/com.raytheon.viz.gfe/help/TextProductProject/notes16.txt deleted file mode 100644 index 8cfbdbe7f8..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductProject/notes16.txt +++ /dev/null @@ -1,3 +0,0 @@ -Notice that all these products emanate from the grids. There is still refinement to be done on the formatters, but we could issue the most well-formed, descriptive words and they will be meaningless unless the underlying grids are meteorologically sound. This brings a tremendous responsibility and opportunity to our laboratory. - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/notes17.txt b/cave/com.raytheon.viz.gfe/help/TextProductProject/notes17.txt deleted file mode 100644 index 3539c135ad..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductProject/notes17.txt +++ /dev/null @@ -1,2 +0,0 @@ -As we turn our attention to improving the quality of the grids by injecting science at every step of the forecast process, we can leverage off of our experience with the Text Product project. We can again use a Focus Group to understand the forecasters. challenges in the digital world. We will tackle problems such as enforcing consistency between the many weather elements represented in the grids and creating 4-dimensional smart tools that operate in space and time over multiple elements. Our experience in dealing with the complexities and dependencies inherent in the problem of text generation will serve us well as we formulate innovative processing techniques for the scientific challenges ahead. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/notes19.txt b/cave/com.raytheon.viz.gfe/help/TextProductProject/notes19.txt deleted file mode 100644 index 0ac16d7277..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductProject/notes19.txt +++ /dev/null @@ -1,2 +0,0 @@ -In supporting the Text Products, the emphasis is on having users understand the system and be self-sufficient in solving their own problems. To this end, we are attempting to provide adequate documentation which includes trouble-shooting strategies. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/notes2.txt b/cave/com.raytheon.viz.gfe/help/TextProductProject/notes2.txt deleted file mode 100644 index 8d1c8b69c3..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductProject/notes2.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/notes20.txt b/cave/com.raytheon.viz.gfe/help/TextProductProject/notes20.txt deleted file mode 100644 index 7c1faf4073..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductProject/notes20.txt +++ /dev/null @@ -1,2 +0,0 @@ -A "tiered" support system is in place. The Text Product users at each site can set up and customize the core products as well create new products. The second "tier" is composed of Regional Support Teams composed of members who are familiar with the documentation, trouble-shooting strategies and Text Product Infrastructure. They are also responsible for supporting Regional Local files which include customizations specific to their region. Finally, the FSL developers provide documentation and refine and maintain the baseline core products and infrastructure. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/notes21.txt b/cave/com.raytheon.viz.gfe/help/TextProductProject/notes21.txt deleted file mode 100644 index 1839bd90e8..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductProject/notes21.txt +++ /dev/null @@ -1,2 +0,0 @@ -A field user can post questions and problems to the Text Support Listserver (ifpslocalformatterdev). Other users and/or the Regional Support Team members can respond to these posts. If the problem does not get solved, a member of the Regional Team can post a message to the Regional Listserver (gfetextsupport). Other Regional Team members and/or FSL developers will respond. The Regional Team members have direct access to FSL developers through the Regional Listserver. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/notes22.txt b/cave/com.raytheon.viz.gfe/help/TextProductProject/notes22.txt deleted file mode 100644 index b2d11b36fb..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductProject/notes22.txt +++ /dev/null @@ -1,2 +0,0 @@ -Any user can post refinements to the listserver as a repository to be shared by other users. If appropriate, a refinement can be nominated as a candidate for baselining. In this case, a Regional Team member should post the request on the Regional Support Listserver. A "tkgnats" entry will be created and the Regional Teams can then vote on whether the refinement should be baselined and if so, the priority it should have. Finally, FSL will review and if necessary re-work the refinement, test it, and include it in the baseline. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/notes3.txt b/cave/com.raytheon.viz.gfe/help/TextProductProject/notes3.txt deleted file mode 100644 index 77cac25f79..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductProject/notes3.txt +++ /dev/null @@ -1,3 +0,0 @@ -The task of automatically generating text products from the GFESuite forecast grids has is the purpose of the GFESuite Text Product Project. - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/notes4.txt b/cave/com.raytheon.viz.gfe/help/TextProductProject/notes4.txt deleted file mode 100644 index 4af12b155a..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductProject/notes4.txt +++ /dev/null @@ -1,11 +0,0 @@ -We introduced an experimental prototype in 1998 at the Modernized Product -Workshop as a way to create new innovative text products. The field -forecasters picked up on this new approach which, like Smart Tools, uses -Python to make it extendable and easy to customize to the Local site. They -explored the use of this technology to create new products as well as to work -with the legacy text products. This approach became so popular that in August -2002, the NWS asked FSL in concert with field forecasters to write a set of -core products as an alternative to the existing products. This was quite an -undertaking and the first thing we did was to form a Focus Group of about 25 -motivated forecasters who had been working with the text product framework. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/notes5.txt b/cave/com.raytheon.viz.gfe/help/TextProductProject/notes5.txt deleted file mode 100644 index 81e888fab7..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductProject/notes5.txt +++ /dev/null @@ -1,2 +0,0 @@ -The directives for the core products include the Zone Forecast Product, Coastal Waters Forecast, Fire Weather Forecast as well as tables such as the Coded Cities Forecast. There are about 12 in all. The directives needed to be encoded into the baseline software, but that's only half the story. These directives act only as guidelines and each local office has its own variations and preferences based on the geographic and meteorological characteristics of its domain. So we began a series of 14 releases of the software to the forecasters on our team for them to try out the code, make sure it could handle their local customizations and give us bug reports and requests for enhancements. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/notes6.txt b/cave/com.raytheon.viz.gfe/help/TextProductProject/notes6.txt deleted file mode 100644 index 387840dd88..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductProject/notes6.txt +++ /dev/null @@ -1,3 +0,0 @@ -On the surface, the idea of representing numbers as simple phrases doesn't seem so tough. "Sunny. Highs in the 80's" -- how hard could that be? But we discovered that there are many subtleties and complexities that we didn't foresee. For example, the PoP phrase, "chance of rain...", "chance of snow..." depends on the current weather events. Or the snow accumulation we report in the Today period will contribute to the total snow amount reported in a later period. - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/notes7.txt b/cave/com.raytheon.viz.gfe/help/TextProductProject/notes7.txt deleted file mode 100644 index 82de5234ba..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductProject/notes7.txt +++ /dev/null @@ -1,3 +0,0 @@ -We could have chance of rain and fog in the morning then chance of rain in the afternoon and the formatters have to smart enough to see that there is a chance of rain all day and fog only in the morning. - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/notes8.txt b/cave/com.raytheon.viz.gfe/help/TextProductProject/notes8.txt deleted file mode 100644 index e1246903b5..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductProject/notes8.txt +++ /dev/null @@ -1,3 +0,0 @@ -The temporal resolution of the grids can lead to more complexity with many different weather scenarios in a 12-hour period. The formatters have to be able to consolidate this digital information and produce concise yet accurate phrases. Beyond that, we needed to account for local effects and report differences between areas such as the "coast" versus "inland" or "mountains" versus "valleys". - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductProject/notes9.txt b/cave/com.raytheon.viz.gfe/help/TextProductProject/notes9.txt deleted file mode 100644 index 66a07ec690..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductProject/notes9.txt +++ /dev/null @@ -1,2 +0,0 @@ -In order to tackle these complexities and dependencies, we invented a new way of processing which I like to call "holographic". What I mean by that is we represent the narrative components and phrases in a tree-like structure in the computer memory. Then we can apply different dependency and logical rules to any part of the tree BEFORE producing the final product. So we can examine the weather conditions to properly word our PoP phrase. We can sum the snow accumulation over consecutive periods to yield a total snow amount that is consistent and accurate. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide1.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide1.JPG deleted file mode 100644 index 4da5c8c77d..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide1.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide1.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide1.html deleted file mode 100644 index 3d28708b0a..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide1.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    1. GFESuite Text Product User Guide

    -
    -Next Slide

    -

    This set of slides and notes is to be used in conjunction with the Text Product Reference Guide which is referred to throughout for more details and in-depth examples.

    The GFESuite Text Products are considered Local Applications. This means that the out-of-the-box core products require customization by most sites to meet local requirements. In addition to the core products, the Text Product framework will support the creation of new local products.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide10.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide10.JPG deleted file mode 100644 index 46db1c63ac..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide10.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide10.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide10.html deleted file mode 100644 index c5baf86a4d..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide10.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    10. Introduction - Steps to Product Creation - Sampler - Grids to Histograms

    -
    -Previous Slide Next Slide

    -

    For a given edit area, the histogram will list the number of occurrences of each grid value. Suppose, for example, we are sampling a MaxT grid over a small edit area of 30 points. You might have a list of pairs:
    (10,70), (15, 71), (5, 73)
    indicating that 10 grid points had a value of 70 degrees, 15 points had a value of 71 degrees, and 5 grid point had a value of 73 degrees.

    The Sampler code is written in C++ for maximum performance.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide100.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide100.JPG deleted file mode 100644 index d50bb51c12..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide100.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide100.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide100.html deleted file mode 100644 index aefb0c91a7..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide100.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    100. Basic Customizations - Analysis-Driven Phrases - Example Result Changing Temporal Resolution

    -
    -Previous Slide Next Slide

    -

    The phrases will automatically use this additional information to report more detail. For example, we will now see phrases that distinguish between morning and afternoon Wind values. Of course, the code checks for similar values across time periods and reports the simpler phrase if appropriate.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide101.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide101.JPG deleted file mode 100644 index 729758fc3d..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide101.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide101.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide101.html deleted file mode 100644 index 1ba6e08757..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide101.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    101. Basic Customizations - Analysis-Driven Phrases - Double Weather Element Entries

    -
    -Previous Slide Next Slide

    -

    In some products, you will see more than one analysis method listed for a weather element. It is important to know that the phrase methods are sensitive ONLY to the FIRST one listed. Additional analysis is performed by the system and is used as a secondary piece of information by the formatter code. For example, the second method shown here (vectorMinMax) is used when reporting wind gusts. DO NOT remove or change the secondary analysis methods as they the system expects them to be there!
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide102.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide102.JPG deleted file mode 100644 index b822509a06..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide102.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide102.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide102.html deleted file mode 100644 index 9b7eb0bc4f..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide102.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    102. Basic Customizations - Analysis-Driven Phrases - Weather Analysis

    -
    -Previous Slide Next Slide

    -

    The default Wx analysis method, "rankedWx", returns the pre-dominant weather keys for the time period.
    The details of this algorithm can be found in the Text Reference Guide.

    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide103.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide103.JPG deleted file mode 100644 index 7ef64dab03..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide103.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide103.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide103.html deleted file mode 100644 index 0f178d5350..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide103.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    103. Basic Customizations - Analysis-Driven Phrases - Changing Temporal Resolution for Weather

    -
    -Previous Slide Next Slide

    -

    Wx is a parameter for which we would like more temporal resolution. The length of the Wx grids can often be meaningful in representing the duration of the weather event. The special "[0]" temporal resolution entry tells the system to produce the analysis (in this case, "rankedWx" keys) for EACH grid within the component time range.

    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide104.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide104.JPG deleted file mode 100644 index cad7df859f..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide104.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide104.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide104.html deleted file mode 100644 index 18fbac4817..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide104.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    104. Basic Customizations - Analysis-Driven Phrases - Example Result Changing Temporal Resolution of Weather

    -
    -Previous Slide Next Slide

    -

    Now the phrases will automatically reflect whatever temporal resolution is represented by the duration of the grids.

    PLEASE NOTE: You should only use this temporal resolution IF you using the duration of the Wx grids to indicate the duration of weather events. IF, on the other hand, you are producing hourly Wx grids through interpolation, this could yield cumbersome, lengthy phrases. In this case, keep the default temporal resolution for the product.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide105.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide105.JPG deleted file mode 100644 index e4a73b5e27..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide105.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide105.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide105.html deleted file mode 100644 index 230f6abacc..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide105.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    105. Basic Customizations - Choosing An Alternate Phrase-1

    -
    -Previous Slide Next Slide

    -

    How do we determine what thresholds and variables to override? The weather elements and associated phrase methods are listed in the Text Rules Reference section of the Text Product Reference Guide.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide106.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide106.JPG deleted file mode 100644 index 2f24f49182..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide106.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide106.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide106.html deleted file mode 100644 index 1fdeee5cca..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide106.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    106. Basic Customizations - TextRules Reference

    -
    -Previous Slide Next Slide

    -

    You may want to choose an alternative phrase
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide107.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide107.JPG deleted file mode 100644 index 351319feca..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide107.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide107.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide107.html deleted file mode 100644 index ed6a5b6d73..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide107.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    107. Basic Customizations - Choosing An Alternate Phrase-2

    -
    -Previous Slide Next Slide

    -

    To change the phrase method, override the ENTIRE product component in yourOverrides file and change the "phraseList" there.

    The phrase methods in the "phraseList" show the ordering of phrases as they appear in the component product. To change this ordering...


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide108.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide108.JPG deleted file mode 100644 index 2755642e35..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide108.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide108.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide108.html deleted file mode 100644 index 57b278971f..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide108.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    108. Basic Customizations - Changing the Order of Phrases

    -
    -Previous Slide Next Slide

    -

    ...simply move the phrase method within the "phraseList" in your Overrides file.

    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide109.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide109.JPG deleted file mode 100644 index 2388d3c70d..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide109.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide109.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide109.html deleted file mode 100644 index 1960bbab2f..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide109.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    109. Basic Customizations - Locating Thresholds and Variables

    -
    -Previous Slide Next Slide

    -

    To understand more about a particular phrase and how you can alter it's behavior, first find the name in the "phraseList".
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide11.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide11.JPG deleted file mode 100644 index 58fa036348..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide11.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide11.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide11.html deleted file mode 100644 index 50e1c765f9..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide11.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    11. Introduction - Steps to Product Creation - Analysis and Text Rules

    -
    -Previous Slide Next Slide

    -

    Next, the SampleAnalysis component of the Infrastructure generates summary statistics from the histogram information. For example, we can generate averages, minimum values, maximum values, modes, etc. The SampleAnalysis component is written in Python and is thus, extendable.
    The summary statistics are then examined by a set of Text Rules which produce either the rows of a table or a set of narrative phrases representing the data.
    The Simple Table or Smart Text Product Python modules specifiy which areas are sampled, what statistics are generated, and what Text Rules to employ to produce the desired product.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide110.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide110.JPG deleted file mode 100644 index 0e244c0bc2..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide110.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide110.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide110.html deleted file mode 100644 index 7c9d24d3bb..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide110.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    110. Basic Customizations - TextRules Reference - Phrase Listing

    -
    -Previous Slide Next Slide

    -

    Then find it's listing in the TextRules Reference section with the associated Weather Element.

    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide111.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide111.JPG deleted file mode 100644 index efa096f77f..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide111.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide111.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide111.html deleted file mode 100644 index e7d6275f28..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide111.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    111. Basic Customizations - TextRules Reference - Phrase Information

    -
    -Previous Slide Next Slide

    -

    Here you will see example phrasing, the recommended analysis method(s), and all the thresholds and variables that apply to the phrase. By changing these thresholds and variables, you can alter the results of the phrase method. Remember to check the Standard file first for any pre-existing overrides, If not there, the Reference tells which modules to search to find the threshold or variable. View the module through the Define Text Products Text Utilities window to locate the threshold or variable. You can read the documentation there, and if you decide to alter the default, you can copy and paste it into your Overrides file to make the change.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide112.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide112.JPG deleted file mode 100644 index 7e41051a68..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide112.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide112.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide112.html deleted file mode 100644 index 9b55499434..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide112.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    112. Basic Customizations - Inheritance Hierarchy for Core Products

    -
    -Previous Slide Next Slide

    -

    Recall the Infrastructure Inheritance Hierarchy with the SampleAnalysis and TextRules libraries. The SampleAnalysis library is relatively concise and self-contained. However, the TextRules library is very extensive and is composed of it's own Inheritance Hierarchy of classes


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide113.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide113.JPG deleted file mode 100644 index 128d2c8aee..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide113.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide113.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide113.html deleted file mode 100644 index 45ee090a85..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide113.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    113. Basic Customizations - Text Rules Modules

    -
    -Previous Slide Next Slide

    -

    Here is a diagram showing all of the Text Rules classes and their inheritance relationships. Though there are many classes, the number with which you'll be concerned, shown with solid bars, are relatively few. Their names are descriptive of the types of narrative phrases with which they're concerned...
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide114.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide114.JPG deleted file mode 100644 index d0e9cb55eb..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide114.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide114.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide114.html deleted file mode 100644 index 44131bbd4f..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide114.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    114. Basic Customizations - Text Rules Classes

    -
    -Previous Slide Next Slide

    -

    For example, "ScalarPhrases" deals with scalar weather elements such as "MaxT", "MinT', "PoP", "SnowAmt", etc. "VectorRelatedPhrases" deals with "Wind" and "WindGust". Many of the most common thresholds and variables apply to multiple weather elements and are, thus, included in the "ConfigVariables" class. These are the module names that appear in the Text Reference tables for narrative phrases to help you locate the threshold or variable of interest.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide115.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide115.JPG deleted file mode 100644 index 94aafddfdb..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide115.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide115.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide115.html deleted file mode 100644 index 8d09c880bc..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide115.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    115. Basic Customizations - Basic Local Effects - Original Phrase

    -
    -Previous Slide Next Slide

    -

    The system is capable of producing Local Effect phrases which describe distinctions between designated edit areas. For example, "Highs in the 80's except in the 70's in the mountains." You must describe the criteria for a local effect on a phrase-by-phrase basis and virtually any phrase listed in the phraseList can have a set of Local Effects associated with it. The system will report the FIRST Local Effect (if any) that meets the given criteria. To set up a local effect for a phrase...
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide116.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide116.JPG deleted file mode 100644 index 29e8005d61..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide116.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide116.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide116.html deleted file mode 100644 index 58b6feb6d1..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide116.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    116. Basic Customizations - Basic Local Effects - Adding a Local Effect List

    -
    -Previous Slide Next Slide

    -

    You must add two items to the Product component definition. First, include a Local Effects list with the phrase method listed in the "phraseList".

    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide117.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide117.JPG deleted file mode 100644 index 5bfe9be708..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide117.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide117.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide117.html deleted file mode 100644 index d8f5075929..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide117.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    117. Basic Customizations - Basic Local Effects - Example Local Effect List

    -
    -Previous Slide Next Slide

    -

    This is an example of a method that returns the Local Effect specification. It tells what edit areas to compare, gives labels for each of them, and a threshold difference. In this case a wind magnitude difference greater than 10 will trigger Local Effect wording. Finally, we can specify connector wording for the Local Effect phrase.

    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide118.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide118.JPG deleted file mode 100644 index 533f23cd2d..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide118.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide118.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide118.html deleted file mode 100644 index 3134040e4b..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide118.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    118. Basic Customizations - Basic Local Effects - Adding "intersectAreas"

    -
    -Previous Slide Next Slide

    -

    Next, add an "intersectAreas" section that specifies for each weather element, the names of the local effect edit areas, intersected with the current area, to be compared for potential Local Effect wording.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide119.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide119.JPG deleted file mode 100644 index 28101a9a67..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide119.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide119.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide119.html deleted file mode 100644 index 89d8932483..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide119.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    119. Basic Customizations - Basic Local Effects - Example Results

    -
    -Previous Slide Next Slide

    -

    Here are some example Local Effect phrases that might result. The first case is a simple "embedded" local effect where both local effect areas can be reported in one phrase. This is because the data for each local effect area is constant throughout the time period. For clarity and simplicity, if this is not the case, we separate the Local Effect reporting into separate phrases which we call "conjunctive" phrases.

    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide12.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide12.JPG deleted file mode 100644 index d5ec381831..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide12.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide12.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide12.html deleted file mode 100644 index f552572c42..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide12.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    12. Introduction - Steps to Product Creation - Example

    -
    -Previous Slide Next Slide

    -

    As an example, suppose we are sampling MaxT over a given edit area. The Sampler will give us a list of histogram pairs where each pair tells us the number of points within the edit area with the given value. In the example, 10 points have a MaxT of 85 degrees, 15 points have a MaxT of 86 degrees, etc. Next, we analyze the data. In this case, we have requested a "minMax" summary statistic which returns a minimum value of 85 and a maximum value of 93 over the entire edit area. Finally, we submit these statstics to a Text Rules method which produces wording, "HIGHS 85 to 93".
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide120.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide120.JPG deleted file mode 100644 index ae82e78249..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide120.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide120.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide120.html deleted file mode 100644 index 86c0a2a103..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide120.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    120. Basic Customizations - Basic Local Effects - Specification Options

    -
    -Previous Slide Next Slide

    -

    There is much more information and examples regarding Local Effects in the Local Effects section of the TextProduct Reference Guide.
    There you can see that any part of the Local Effect definition may be determined "on-the-fly", perhaps based on the current edit area. This is possible by specifying any portion of the Local Effect definition as a method which will have the familiar "tree, node" arguments. You can also set up more than 2 Local Effect edit areas and more than one Local Effect per phrase.

    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide121.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide121.JPG deleted file mode 100644 index 4c7f11afc9..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide121.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide121.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide121.html deleted file mode 100644 index 2d73198c2f..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide121.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    121. Basic Customizations - Product Component Exercises

    -
    -Previous Slide Next Slide

    -

    Next, add an "intersectAreas" section that specifies for each weather element, the names of the local effect edit areas, intersected with the current area, to be compared for potential Local Effect wording.



    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide122.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide122.JPG deleted file mode 100644 index 0ebcec009b..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide122.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide122.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide122.html deleted file mode 100644 index ab717163fe..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide122.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    122. Basic Customizations - Narrative Products

    -
    -Previous Slide Next Slide

    -

    Components are "glued together" via a Narrative Definition which specifies the order of the components and the time period to be represented by each component.

    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide123.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide123.JPG deleted file mode 100644 index 205fbae020..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide123.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide123.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide123.html deleted file mode 100644 index e4cfb448de..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide123.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    123. Basic Customizations - Narrative Product Definition

    -
    -Previous Slide Next Slide

    -

    Here is Narrative Definition which lists each component name in the order in which it is to appear with the number of hours to be covered by the component.

    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide124.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide124.JPG deleted file mode 100644 index 716e720059..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide124.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide124.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide124.html deleted file mode 100644 index 1b9dfe8d70..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide124.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    124. Basic Customizations - Narrative Product Example

    -
    -Previous Slide Next Slide

    - - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide125.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide125.JPG deleted file mode 100644 index 5a41a04f54..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide125.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide125.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide125.html deleted file mode 100644 index 319e11a2f5..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide125.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -
    -

    Text Formatter User Guide

    -

    125. Basic Customizations - Configurable Issuance

    -
    -Previous Slide Next Slide

    -

    In the core narrative products, the Narrative Definition will vary depending on the Issuance time chosen and, thus, must be assembled "on-the-fly." In fact, the dialog and possible Issuance selections are defined in the Standard file and are configurable.

    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide126.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide126.JPG deleted file mode 100644 index b16945389e..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide126.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide126.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide126.html deleted file mode 100644 index 550ac736e0..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide126.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    126. Basic Customizations - Configurable Issuance - Issuance List

    -
    -Previous Slide Next Slide

    -

    This is done through the _issuance_list method which has two sections. First, the possible narrative definitions appear. The narrative definition for an AM issuance is shown. The next section creates the list of dialog entries and the issuance information including the corresponding narrative definition. Other information included is the start and end hours for the first period of the product, the expiration hour, labels to be used in the component. For more details and a complete explanation of the Configurable Issuance capability, see the: Configurable Issuance section of the Text Product Reference Guide.

    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide127.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide127.JPG deleted file mode 100644 index 501ee76cf1..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide127.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide127.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide127.html deleted file mode 100644 index 40dcaa17e6..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide127.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    127. Basic Customizations - Configurable Issuance Exercises

    -
    -Previous Slide Next Slide

    -

    Here's an example of a narrative product composed of components of the specified time periods.



    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide128.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide128.JPG deleted file mode 100644 index e0693ecc98..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide128.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide128.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide128.html deleted file mode 100644 index f7e3d89532..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide128.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    128. Basic Customizations - Headlines - Hazards Grid

    -
    -Previous Slide Next Slide

    -

    Headlines are generated from the Hazards Discrete-type grid. They will appear automatically in the narrative products.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide129.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide129.JPG deleted file mode 100644 index 49aaa83cf2..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide129.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide129.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide129.html deleted file mode 100644 index 14e8564c9d..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide129.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    129. Basic Customizations - Headlines - Hazards Grid Example

    -
    -Previous Slide Next Slide

    -

    Here's an example Hazards grid in the GFE.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide13.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide13.JPG deleted file mode 100644 index 397a99d604..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide13.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide13.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide13.html deleted file mode 100644 index c2e7557b8f..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide13.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    13. Introduction - Inheritance Hierarchy for Smart Text Products - Inheritance Relationship

    -
    -Previous Slide Next Slide

    -

    Recall the notation for representing classes and their inheritance relationships from the GFESuite Python Tutorial. The symbol indicates that the Derived Class inherits all the methods and variables from the Base Class. Think of the symbol not as an arrow indicating flow, but as an "umbrella" indicating inclusion of capatilities. Now we'll look at the Text Products classes and their inheritance relationships.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide130.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide130.JPG deleted file mode 100644 index 57d3184a3c..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide130.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide130.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide130.html deleted file mode 100644 index 0d0d86be63..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide130.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    130. Basic Customizations - Headlines Configuration - Allowed Hazards

    -
    -Previous Slide Next Slide

    - - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide131.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide131.JPG deleted file mode 100644 index cff25f985f..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide131.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide131.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide131.html deleted file mode 100644 index b4c404f8f9..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide131.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -
    -

    Text Formatter User Guide

    -

    131. Basic Customizations - Headlines Configuration - Allowed Hazards Example

    -
    -Previous Slide Next Slide

    -

    Here's an example "allowedHeadlines" list.

    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide132.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide132.JPG deleted file mode 100644 index 69e9a8b0d3..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide132.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide132.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide132.html deleted file mode 100644 index 6b62c16995..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide132.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    132. Basic Customizations - Headlines Configuration - Allowed Hazards Modification

    -
    -Previous Slide Next Slide

    -

    To include other hazards, we can copy the method into our Local file and then add to it. There is much more information about Headlines, VTEC codes and special considerations for Marine Headlines in the Text Reference Guide.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide133.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide133.JPG deleted file mode 100644 index dd277cd5f0..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide133.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide133.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide133.html deleted file mode 100644 index c890f80e3b..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide133.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    133. Basic Customizations - Headline Exercises

    -
    -Previous Slide Next Slide

    -

    You can customize the Headlines in the products in two ways: Each standard file contains a list of "allowedHeadlines". You can alter this list if you like. In addition, you may customize the time descriptors for the headlines in various ways.



    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide134.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide134.JPG deleted file mode 100644 index 8cbcf93dcd..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide134.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide134.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide134.html deleted file mode 100644 index 7ffbd83d67..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide134.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    134. Basic Customizations - Override File Organization - Standard and Override Files

    -
    -Previous Slide Next Slide

    -

    During development of the core product formatters, we put out many and frequent releases of the software for field testing by the Local Formatter Team. For each product, there was a Standard version and a Local Override file. In general, the Local file was very small in comparison and we discouraged the field from putting many overrides in the Local file so that we could refine the baseline product and to protect the users from the ever-changing infrastructure. As the infrastructure has become more stable over time, we have allowed more overrides...

    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide135.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide135.JPG deleted file mode 100644 index 9601c6be4c..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide135.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide135.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide135.html deleted file mode 100644 index 462fb45380..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide135.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    135. Basic Customizations - Override File Organization - Need for Organization in Override Files

    -
    -Previous Slide Next Slide

    -

    ...to the point that the Override file is often larger than the original Standard file. These files are overriding functionality not only from the Standard file, but also from other Text Rules libraries. As a result, it is very important that the Override files be carefully organized and documented.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide136.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide136.JPG deleted file mode 100644 index 50b101c975..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide136.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide136.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide136.html deleted file mode 100644 index 5ca8b618f3..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide136.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    136. Basic Customizations - Override File Organization - Guidelines

    -
    -Previous Slide Next Slide

    -

    Here are some suggestions for organizing your Override file into sections that will make trouble-shooting and understanding your Customizations easier. Put all the code that you are overriding in one section, perhaps labeled by the source of the overridden code e.g. "Overrides from AreaFcst", "Overrides from ConfigVariables", "Overrides from FirePhrases. Be sure and comment the lines you are changing! Sometimes you might find it useful to override methods and insert print statements to trouble-shoot a problem you might be having. This is an excellent way to track problems and also learn how the code works. However, be sure and put this code in a separate section and clear it out after the problem is fixed so that you will not miss upgrades and bug fixes to this code in subsequent releases.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide137.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide137.JPG deleted file mode 100644 index d9e33bb05f..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide137.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide137.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide137.html deleted file mode 100644 index 0dab522e5e..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide137.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    137. Help and Feedback

    -
    -Previous Slide Next Slide

    -

    There is a tiered approach in place to help you with product installation and customization. Through the listserver, you can receive help from Regional Formatter Team members and other RPP participants and IFPS Focal Points. FSL developers will be come involved when necessary. This is the central place for getting help with all GFE formatter issues. The emphasis is on learning about the products and becoming self-sufficient in trouble-shooting problems.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide138.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide138.JPG deleted file mode 100644 index 9454f37225..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide138.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide138.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide138.html deleted file mode 100644 index 9c4afc1c3c..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide138.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    138. Help and Feedback - Trouble-shooting

    -
    -Previous Slide Next Slide

    - - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide139.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide139.JPG deleted file mode 100644 index 26aae003be..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide139.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide139.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide139.html deleted file mode 100644 index c767151101..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide139.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -
    -

    Text Formatter User Guide

    -

    139. Help and Feedback - Using the Listserver-1

    -
    -Previous Slide Next Slide

    -

    If you cannot find the problem using these techniques, you can post a message to the listserver for help. Your chances of getting help quickly will be greatly increased by providing adequate information! Describe your problem in detail and BE SURE to include the entire error traceback message with line numbers AND your Overrides file.

    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide14.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide14.JPG deleted file mode 100644 index e132463012..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide14.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide14.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide14.html deleted file mode 100644 index b682a8c1f0..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide14.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    14. Introduction - Inheritance Hierarchy for Smart Text Products - Classes

    -
    -Previous Slide Next Slide

    -

    The Text Product Infrastructure consists of dozens of modules each of which performs a particular set of tasks. While the structure is complex, the entire infrastructure can be viewed conceptually as functional groups. Here we see the CommonUtils, SampleAnalysis and TextRules classes which have the jobs of generating summary statistics and creating text representations of the data. We also see the class for a Text Product, which specifies the data and format for a particular product. Note the "inheritance" symbol connecting the TextProduct class to the SampleAnalysis and TextRules classes. This relationship implies that the Text Product class has access to, or "inherits", ALL of the functionality of the other two classes. Finally, we have the Local Text Product class which, in turn, inherits the functionality of ALL the classes above it in the hierarchy. The CommonUtils, SampleAnalysis , TextRules, and TextProduct classes are read-only and you cannot modify them directly. However, you may "override" any method in these read-only classes by copying the code into the Local Text Product class and making modifications there. The version in the Local class will supercede the original, thus allowing you to customize the formatter to you liking.
    This inheritance scheme has several advantages. It allows flexibility for each local site to tailor virtually any part of the product to their unique requirements. At the same time, by restricting all customizations to the Local file, we can isolate problems when they arise. The site can revert to the baseline Text Product, if necessary. Then, as a trouble-shooting technique, we can begin to introduce the customizations one at a time in order to isolate the problem.

    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide140.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide140.JPG deleted file mode 100644 index ed8f36cb5e..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide140.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide140.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide140.html deleted file mode 100644 index b4ced8a758..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide140.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    140. Help and Feedback - Using the Listserver-2

    -
    -Previous Slide Next Slide

    -

    If the results of the product are undesirable, check the documentation for the offending phrase to see if customization would help. If not, you can use the listserver to describe your desired results. It is often helpful to describe the data in the grids that produced the undesirable results. And always include your Override file.

    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide141.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide141.JPG deleted file mode 100644 index 1fe474d8e3..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide141.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide141.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide141.html deleted file mode 100644 index 0f32cb34ad..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide141.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    141. Help and Feedback - Exercises

    -
    -Previous Slide Next Slide

    -

    Here are some suggestions for organizing your Local file into sections that will make trouble-shooting and understanding your Customizations easier. Put all the code that you are overriding in one section, perhaps labeled by the source of the overridden code e.g. "Overrides from AreaFcst", "Overrides from ConfigVariables", "Overrides from FirePhrases", "Overrides from Region". Be sure and comment the lines you are changing! FSL has a Patches page with sections of code to include in your Local file to allow you to fix bugs before the next release is issued. Put this code in it's own section and then clear out that section with each new release. Sometimes you might find it useful to override methods and insert print statements to trouble-shoot a problem you might be having. This is an excellent way to track problems and also learn how the code works. However, be sure and put this code in a separate section and clear it out after the problem is fixed so that you will not miss upgrades and bug fixes to this code in subsequent releases.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide142.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide142.JPG deleted file mode 100644 index 8b90b692cf..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide142.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide142.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide142.html deleted file mode 100644 index ff688345d8..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide142.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    142. Summary - End of Part 2

    -
    -Previous Slide Next Slide

    -

    Some regions are creating Regional product files as a starting point for the local sites. You could simply have a section in your Local file labeled "Overrides from Region" to isolate these changes and keep them separate from your Local overrides. Alternatively, you could implement an inheritance scheme as follows: First, comment out all overrides in the Local file. Then create a Text Utility (Define Text Products Text Utilities window) that has a class e.g. Regional_ZFP, that includes desired overrides. Finally, you can import and inherit this class into your Local file to enable it's overrides.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide143.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide143.JPG deleted file mode 100644 index 66b6531038..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide143.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide143.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide143.html deleted file mode 100644 index 9395e6e1d1..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide143.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    143. Exercises - Part 2

    -
    -Previous Slide

    -

    Here's an example Text Utility override class. Note that it does not inherit from any other classes.



    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide15.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide15.JPG deleted file mode 100644 index 7e41051a68..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide15.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide15.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide15.html deleted file mode 100644 index c2efef24f6..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide15.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    15. Introduction - Inheritance Hierarchy for Core Text Products - Site Level Files

    -
    -Previous Slide Next Slide

    -

    The Core Products required by the NWS have a more complex file structure to facilitate support and to help organize the overrides to the baseline functionality. Instead of a single Local file, the regional and local overrides are distributed throughout several files.

    The Site version of the formatter can be activated by setting the "displayName" in the Site Definition file. The product will then be displayed and run from the Local Formatter Dialog.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide16.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide16.JPG deleted file mode 100644 index 545aaa20b0..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide16.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide16.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide16.html deleted file mode 100644 index c80167b62f..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide16.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    16. Introduction - File Structure for Core Products - Explanation of Files

    -
    -Previous Slide Next Slide

    -

    Site Text Product -- Gathers all the overrides for the site's
    version of the product
    Inherits from:
    Standard Text Product
    Patch Overrides -- Only one file for all the products.
    Contains FSL-issued patches.
    Region Overrides -- Regional method overrides and
    product-specific definitions
    Site Overrides -- Site method overrides
    Imports:
    Site Definitions -- Site Product-specific definitions
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide17.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide17.JPG deleted file mode 100644 index a57bc5de10..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide17.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide17.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide17.html deleted file mode 100644 index c2831de291..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide17.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    17. Introduction - Inheritance Hierarchy for Core Text Products - Region Level Files

    -
    -Previous Slide Next Slide

    -

    For each Core Product, there is also a Baseline version and a Regional version which can be run as a backup should the Site version fail.
    These can be displayed from the Local Formatter Dialog --> Products --> Baseline or Region, respectively.

    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide18.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide18.JPG deleted file mode 100644 index 3b168a6fd4..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide18.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide18.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide18.html deleted file mode 100644 index 40f8ed941d..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide18.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    18. Introduction - Inheritance Hierarchy for Core Text Products - Base Level Files

    -
    -Previous Slide Next Slide

    -

    From the table in the Quick Start Product Set-up section of the Text Product Reference Guide, choose a core product to set-up. It is best to start with a Tabular-type product first and then advance to Narrative-type products. From the Main Menu select GFE-->Define Text Products Dialog.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide19.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide19.JPG deleted file mode 100644 index 9df8d0eba0..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide19.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide19.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide19.html deleted file mode 100644 index 9047d437c4..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide19.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    19. Product set-up - Steps to Set-up Core Products

    -
    -Previous Slide Next Slide

    -

    In this section, we will see the Inheritance Hierarchy in action as we set-up the core products. To set-up the core product, we first define a set of generic edit areas which some products require to run "out-of-the-box." Next we suggest reading the Standard file documentation to become familiar with the settings for the product. There are three versions of each core product: Baseline, Regional, and Site. All products come delivered in the BASE user directory with the Baseline and Regional versions already activated and available from the "Products" menu of the Local Formatter Dialog. The Site version must be activated by setting up a display name to appear in the Local Formatter dialog. Once activated, we can then run the product. At this point, we must customize the edit areas for for the local site. Finally, we verify that all three versions, Baseline, Regional, and Site run correctly with the customized edit areas.

    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide2.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide2.JPG deleted file mode 100644 index b6a544f4d2..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide2.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide2.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide2.html deleted file mode 100644 index 7183e3774b..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide2.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    2. Overview

    -
    -Previous Slide Next Slide

    -

    This presentation describes the GFESuite Local Formatter Infrastructure and Core Products. An overview is given in the Introduction section. We describe how to set up the core products and how to make basic customizations to these products to meet the requirements of your local site. Finally, we will cover how to obtain help and give feedback when setting up the formatters.
    Note that there is a section in the Text Products Reference Guide on "Upgrades and Backward Compatibility" to which you can refer if you have text products from prior releases.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide20.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide20.JPG deleted file mode 100644 index 628f6ff748..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide20.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide20.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide20.html deleted file mode 100644 index 38b94dbeb4..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide20.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    20. Product set-up - Set-up Generic Edit Areas

    -
    -Previous Slide Next Slide

    -

    Log in for setting up products. When you are satisfied with a product, you will want to move it to the SITE directory. Create the designated generic edit areas. Some of the core products set-up initially to run with these edit areas as the default
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide21.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide21.JPG deleted file mode 100644 index 545c65d1ef..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide21.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide21.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide21.html deleted file mode 100644 index 33ba093955..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide21.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    21. Product set-up - Read Standard File Documentation

    -
    -Previous Slide Next Slide

    -

    From the table in the Quick Start Product Set-up section of the Text Product Reference Guide, choose a core product to set-up. It is best to start with a Tabular-type product and then advance to Narrative-type products. From the Main Menu select GFE-->Define Text Products Dialog.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide22.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide22.JPG deleted file mode 100644 index b3fd0364f7..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide22.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide22.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide22.html deleted file mode 100644 index f1c0216b88..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide22.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    22. Product set-up - Define Text Products Dialog

    -
    -Previous Slide Next Slide

    -

    In the left-hand window, you will see many Text Product files already installed at the BASE level. Many of the files are read-only and you do not need to know much about them. You will however be concerned with the Standard files that appear in this window.

    The right-hand window is the Text Utilities window. Here you will see several types of files:
    Utility classes that make up the Text Product Infrastructure
    Site Definition Files
    Site Override Files
    Region Override Files
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide23.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide23.JPG deleted file mode 100644 index 22b1f76c0d..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide23.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide23.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide23.html deleted file mode 100644 index 2848858e05..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide23.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    23. Product set-up - Read Standard File Documentation

    -
    -Previous Slide Next Slide

    -

    From the table in the Quick Start Product Set-up section of the Text Product Reference Guide, locate the name of the Standard file for the product you are configuring. View the Standard file and read the documentation at the beginning of the product to become familiar with it's settings and required data. Pay particular attention to the "Edit Areas Needed" section to see if you need to set up additional edit areas. If so, create them at this time. Also, read the "Additional Information" section to see if you need to perform any additional steps to get the product to run.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide24.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide24.JPG deleted file mode 100644 index 1e5b5add56..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide24.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide24.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide24.html deleted file mode 100644 index bdfe1c9476..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide24.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    24. Product set-up - Activate Site Product

    -
    -Previous Slide Next Slide

    -

    Next, we need to Modify the Site Definition file to set up a display name...
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide25.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide25.JPG deleted file mode 100644 index 51ace791c8..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide25.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide25.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide25.html deleted file mode 100644 index bd40b86960..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide25.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    25. Product set-up - Definition File "displayName"

    -
    -Previous Slide Next Slide

    -

    Notice that within the Standard file, the display name is set to None. We want to change this in the Local file. Simply uncomment the line that sets the "displayName" definition...
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide26.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide26.JPG deleted file mode 100644 index 28298d1b88..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide26.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide26.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide26.html deleted file mode 100644 index 82222e7bb8..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide26.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    26. Product set-up - Setting Definition File "displayName"

    -
    -Previous Slide Next Slide

    -

    ...and Save the Local file.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide27.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide27.JPG deleted file mode 100644 index cd48d66f47..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide27.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide27.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide27.html deleted file mode 100644 index 910eb1f9b0..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide27.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    27. Product set-up - Run Site Product

    -
    -Previous Slide Next Slide

    -

    From the GFE Main Menu, select Products--> Local Formatters. You should now see your product listed in the dialog. Select it and Select Processor: Local from the Menu bar. This is so that you can monitor its progress from the Process Monitor window. Click Run Formatters. The product text will appear in a text output window. If it does not, check the Process Monitor terminal window for error messages. Refer to the Text Product Reference Guide Trouble-shooting section for help in locating the problem.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide28.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide28.JPG deleted file mode 100644 index 1c3f67aa05..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide28.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide28.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide28.html deleted file mode 100644 index 68cc9870c1..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide28.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    28. Product set-up - Set-up Customized Edit Areas - Applies to "defaultEditAreas" products

    -
    -Previous Slide Next Slide

    -

    Now that your product runs with the generic edit areas, you will want to set-up the edit areas specific to your site. This will apply to products listed as "defaultEditAreas" in the Edit Areas column of the Quick Start Product set-up table in the Text Reference Guide. Products listed as "Combinations" come pre-configured with edit areas appropriate to your site. In either case, you will may need to adjust the entries in the AreaDictionary for generating proper Area Headers.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide29.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide29.JPG deleted file mode 100644 index 1d909222f5..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide29.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide29.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide29.html deleted file mode 100644 index c6f7631438..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide29.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    29. Product set-up - Set-up Customized Edit Areas - Definition "defaultEditAreas"

    -
    -Previous Slide Next Slide

    -

    Within the Site Definition file, find the "defaultEditAreas" Definition entry. For each edit area, you must specify the GFE edit area name and a label which you select...
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide3.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide3.JPG deleted file mode 100644 index dbece9bec6..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide3.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide3.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide3.html deleted file mode 100644 index 8e6d311146..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide3.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    3. Part 1

    -
    -Previous Slide Next Slide

    - - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide30.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide30.JPG deleted file mode 100644 index 5239fbb3ff..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide30.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide30.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide30.html deleted file mode 100644 index fc49e75d5a..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide30.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -
    -

    Text Formatter User Guide

    -

    30. Product set-up - set-up Customized Edit Areas - "defaultEditAreas" Example

    -
    -Previous Slide Next Slide

    -

    Here's an example.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide31.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide31.JPG deleted file mode 100644 index 7c36ae615e..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide31.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide31.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide31.html deleted file mode 100644 index 9c92f3826c..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide31.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    31. Product set-up - set-up Customized Edit Areas - Specifying by lat/lon

    -
    -Previous Slide Next Slide

    -

    Alternatively, you may specify the edit area by giving a (latitude, longitude, dimension) tuple. The dimension is in kilometers and the the system will create a temporary edit area on-the-fly which is a square of the given dimension with the lat/lon as center. An example is shown here. Be sure that your dimension is large enough to include at least on grid point!
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide32.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide32.JPG deleted file mode 100644 index f4f839d4f5..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide32.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide32.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide32.html deleted file mode 100644 index dfcb11b276..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide32.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    32. Product set-up - set-up Customized Edit Areas - Area Dictionary

    -
    -Previous Slide Next Slide

    -

    Once you have set up the edit areas for your site, you may want to adjust the entries in the AreaDictionary which is used to generate Area Headers for your product. From the Utilities Window of the Define Text Products Dialog, find the AreaDictionary and choose MB3-->Modify. You will see a Python dictionary with entries for the many edit areas, including the generic ones we set up previously. For each site-specific edit area you set up for your product, make sure the entry in the AreaDictionary is correct.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide33.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide33.JPG deleted file mode 100644 index b65ab251b6..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide33.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide33.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide33.html deleted file mode 100644 index 2ca43339a5..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide33.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    33. Product set-up - set-up Customized Edit Areas - Area Dictionary Example

    -
    -Previous Slide Next Slide

    -

    Here's some example AreaDictionary entries...
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide34.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide34.JPG deleted file mode 100644 index aedcfada09..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide34.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide34.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide34.html deleted file mode 100644 index 38b39d1409..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide34.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    34. Product set-up - set-up Customized Edit Areas - Area Header

    -
    -Previous Slide Next Slide

    -

    ...and a resulting Area Header.

    Make sure to save the AreaDictionary. You are ready to run your product again. This time it will produce an "out-of-the-box" version using customized edit areas specific to your site.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide35.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide35.JPG deleted file mode 100644 index bc20ecfd4c..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide35.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide35.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide35.html deleted file mode 100644 index b459cc9c30..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide35.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    35. Product set-up - Run Baseline, Region, Site

    -
    -Previous Slide Next Slide

    -

    Verify that the Site product runs successfully with your customized edit areas. Then verify that it works correctly for the Baseline and Regional versions. Since the Site Definition file is part of the Baseline and Regional versions, it is very important that whenever you make changes to the Site Definition file, you make sure that the Baseline and Regional versions still work.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide36.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide36.JPG deleted file mode 100644 index 46afe7f04f..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide36.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide36.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide36.html deleted file mode 100644 index b1f751f59d..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide36.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    36. Product set-up - Trouble-shooting Fallback

    -
    -Previous Slide Next Slide

    - - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide37.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide37.JPG deleted file mode 100644 index 6071c9c89b..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide37.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide37.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide37.html deleted file mode 100644 index 816cb83212..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide37.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -
    -

    Text Formatter User Guide

    -

    37. Product set-up - Exercises

    -
    -Previous Slide Next Slide

    -

    Before beginning this section, you should have a running "out-of-the-box" version of your selected text product using customized edit areas specific to your site. We will call this the "vanilla" version of the product. At this point, you are ready to further customize the product to your Local site's requirements. We will first examine the template format used for all smart text products, and then discuss customizations of the Definition section of each Local file. For Tabular-type products, this will cover most of the customizations you will want to make. Then we will cover further customization techniques for Narrative-type products. Finally, we will learn how to create Headlines in the text products.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide38.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide38.JPG deleted file mode 100644 index a4dbc3ada6..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide38.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide38.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide38.html deleted file mode 100644 index 1f32e91cbf..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide38.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    38. Basic Customizations

    -
    -Previous Slide Next Slide

    -

    Before beginning this section, you should have a running "out-of-the-box" version of your selected text product using customized edit areas specific to your site. We will call this the "vanilla" version of the product. At this point, you are ready to further customize the product to your Local site's requirements. We will first examine the template format used for all smart text products, and then discuss customizations of the Definition section of each Local file. For Tabular-type products, this will cover most of the customizations you will want to make. Then we will cover further customization techniques for Narrative-type products. Finally, we will learn how to create Hazards in the text products.

    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide39.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide39.JPG deleted file mode 100644 index 004f500155..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide39.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide39.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide39.html deleted file mode 100644 index 46b2f4b56a..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide39.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    39. Basic Customizations - Product Template

    -
    -Previous Slide Next Slide

    -

    All Smart Text Products follow a standard format. This provides consistency among the products which makes them easier to understand, customize, and support.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide4.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide4.JPG deleted file mode 100644 index dc22786c01..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide4.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide4.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide4.html deleted file mode 100644 index bee0c90de8..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide4.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    4. Introduction

    -
    -Previous Slide Next Slide

    -

    In this section, we introduce the basic concepts of the GFE Text Product Infrastructure including how they are invoked from the GFE Formatter Launcher Dialog.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide40.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide40.JPG deleted file mode 100644 index 7e41051a68..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide40.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide40.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide40.html deleted file mode 100644 index 3f62dc2dfc..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide40.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    40. Basic Customizations - Inheritance Hierarchy for Core Products

    -
    -Previous Slide Next Slide

    -

    Recall the inheritance hierarchy in which each product has a Standard Text Product file.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide41.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide41.JPG deleted file mode 100644 index c14788577b..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide41.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide41.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide41.html deleted file mode 100644 index c4d0a82ef3..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide41.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    41. Basic Customizations - Standard Product Template

    -
    -Previous Slide Next Slide

    -

    At the beginning of each Standard file is a documentation section followed by an example of the resulting output. For the core products, the example output has been omitted since the NWS directives supply complete descriptions and examples of the required product formats.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide42.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide42.JPG deleted file mode 100644 index 2267714cc2..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide42.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide42.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide42.html deleted file mode 100644 index 00446afd02..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide42.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    42. Basic Customizations - Documentation Section

    -
    -Previous Slide Next Slide

    -

    The documentation section has each of the entries listed. The "Customization Points" section is particularly useful as it describes the various flags and variables in the Definition section that allow you to customize the product. The Additional Information section will include common overrides.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide43.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide43.JPG deleted file mode 100644 index 00873c628e..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide43.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide43.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide43.html deleted file mode 100644 index 45806805ab..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide43.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    43. Basic Customizations - Standard Product Template

    -
    -Previous Slide Next Slide

    -

    Next, the Standard file may have a VariableList to define any variables to be entered by the user at run-time. After the declaration of the Text Product class, the Definition section appears containing flags and variables pertinent to the product. In the Definition section, you can specify the "displayName", the "outputFile" and the edit areas over which the product will run. Most customizations for tabular products will occur in this section. The class definition and contructor (__init__ method) set up the inheritance of the TextRules and SampleAnalysis classes.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide44.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide44.JPG deleted file mode 100644 index b51d5156d8..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide44.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide44.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide44.html deleted file mode 100644 index bb219a48d1..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide44.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    44. Basic Customizations - Standard Product Main Method

    -
    -Previous Slide Next Slide

    -

    Next, we have the "generateProducts" method which conducts the general flow of product execution. It consists of the following methods and steps:
    _getVariables: Get the variables entered by the user from the VariableList definition and set up any product specific variables.
    _getAreaList: Get the list of edit areas over which the product will run.
    _determineTimeRanges: Calculate the time ranges over which we'll need to sample the data.
    _sampleData: Sample the data
    _preProcessProduct: Create the product header.
    Now we loop through each edit area producing a header (_preProcessArea), the product text (_makeProduct), and a footer (_postProcessArea).
    _postProcessProduct: Create product footer.
    Return the resulting text string.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide45.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide45.JPG deleted file mode 100644 index 225db5d515..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide45.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide45.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide45.html deleted file mode 100644 index 0eb9f84178..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide45.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    45. Basic Customizations - Standard Product Sub-Methods

    -
    -Previous Slide Next Slide

    -

    After the "generateProduct" method, each of the sub-methods appears. This is the "meat" of the product where its unique format is created.

    Note that the methods and variables in the Standard file are prefixed with an underscore. For example, "_getVariables", "_areaList", etc. It is imperative that all files inheriting from the Text Product infrastructure adhere to this rule to avoid inadvertent name conflicts with the library methods.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide46.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide46.JPG deleted file mode 100644 index 475d2aacae..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide46.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide46.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide46.html deleted file mode 100644 index 8c4b52e018..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide46.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    46. Basic Customizations - Standard Product Other Methods

    -
    -Previous Slide Next Slide

    -

    Next, the product-specific methods will appear. For many products, there will be a _getAnalysisList method specifying which weather elements to sample and what summary statistics to generate for each of them. In the next section, there may be methods from the infrastructure which have been altered to operate differently for this particular product. Finally, we will find any product component definitions. These apply to narrative products and we will learn more about them in a later section. Once again, remember that for the core products, this file is read-only.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide47.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide47.JPG deleted file mode 100644 index 053b3bcb04..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide47.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide47.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide47.html deleted file mode 100644 index c04825c031..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide47.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    47. Basic Customizations - Site Definition File

    -
    -Previous Slide Next Slide

    -

    The Site Definition File is imported into the Text Product along with the Standard file such that the Site Definitions will override those in the baseline Standard file. Note that the Definition section is simply a Python dictionary so we can set the entries just as we would any dictionary. We will now explore in detail how to set the Definition section variables to customize your product.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide48.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide48.JPG deleted file mode 100644 index c3e792b174..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide48.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide48.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide48.html deleted file mode 100644 index 042e416cd8..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide48.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    48. Basic Customizations - Site Overrides File

    -
    -Previous Slide Next Slide

    -

    The Site Overrides File is also imported into the Text Product along with the Standard file and Site Definitions File such that the methods in the Site Overrides File will override those in the baseline Standard file as well as those in the Regional Overrides File. We will now explore in detail how to include override methods to customize your product.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide49.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide49.JPG deleted file mode 100644 index 6c5621aa2b..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide49.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide49.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide49.html deleted file mode 100644 index 4da7c9f8a0..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide49.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    49. Basic Customizations - Definition Section - Standard File

    -
    -Previous Slide Next Slide

    -

    Each standard file has a text product definition similar to that shown for the CCF. The first line declares our text product and states that it "inherits" all the library methods from the TextRules and SampleAnalysis classes. The next line begins the Definition section which is simply a Python dictionary describing settings for the text product. The following lines define the "type" of product and "displayName". The Standard file is "inactivated" since the "displayName" is set to None. Another flag, "alwaysIncludeSnow" appears for this product.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide5.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide5.JPG deleted file mode 100644 index a9d6dd1363..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide5.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide5.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide5.html deleted file mode 100644 index cc4ebf1015..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide5.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    5. Introduction - Concepts

    -
    -Previous Slide Next Slide

    -

    The GFESuite supports the creation of text products in both tabular and narrative forms. The Local Formatters delivered with the release are considered "templates" in that they meet the NWS directives for the standard core products. You will want to customize them to your local site's requirements. The wording of the narrative products is not considered to be of extremely high quality, but can be characterized as accurate and "good enough." Also, as they become more widely used, we expect to identify bugs and important enhancements. Since the products are written in Python, these can be easily patched into the existing formatters. The infrastructure upon which these products are built consisted of C++ and Python modules in AWIPS1; Java and Python modules in AWIPS2 and provides the framework upon which new local products can be created.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide50.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide50.JPG deleted file mode 100644 index 6086617806..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide50.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide50.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide50.html deleted file mode 100644 index e9de9c9f8b..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide50.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    50. Basic Customizations - Definition Section - Site Definition File-1

    -
    -Previous Slide Next Slide

    -

    The entries in the Definition section can be overridden in the Site Definition file which looks similar to that above. The first line declares our Local product and states that it inherits all the functionality from the Standard file, in this case, the CCF product. The next line makes a copy of the Definition from the Standard file. We can now override Definition entries by changing their value in the Site Definition file as we did previously for the "displayName".
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide51.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide51.JPG deleted file mode 100644 index f9bcc58175..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide51.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide51.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide51.html deleted file mode 100644 index 6eaddbac00..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide51.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    51. Basic Customizations - Definition Section - Site Definition File-2

    -
    -Previous Slide Next Slide

    -

    Here we have changed the value of the "alwaysIncludeSnow" flag.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide52.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide52.JPG deleted file mode 100644 index 1c2956775b..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide52.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide52.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide52.html deleted file mode 100644 index 085fae94de..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide52.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    52. Basic Customizations - Definition Section - Flags

    -
    -Previous Slide Next Slide

    -

    Note that, in general, flags in the Site Definition file are commented out and set as the opposite of the Standard file.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide53.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide53.JPG deleted file mode 100644 index 5b9072604c..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide53.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide53.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide53.html deleted file mode 100644 index fcc9ca7769..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide53.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    53. Basic Customizations - Definition Section - Flags

    -
    -Previous Slide Next Slide

    -

    So to modify the value of a flag, you must only remove the comment symbol (#) from the beginning of the file.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide54.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide54.JPG deleted file mode 100644 index bba168e6a4..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide54.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide54.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide54.html deleted file mode 100644 index a621693507..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide54.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    54. Basic Customizations - Definition Section - Exercises

    -
    -Previous Slide Next Slide

    -

    Here's an example of a product header for the ZFP product.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide55.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide55.JPG deleted file mode 100644 index ae6d1b527a..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide55.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide55.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide55.html deleted file mode 100644 index d4acd14514..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide55.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    55. Basic Customizations - Overriding Methods

    -
    -Previous Slide Next Slide

    -

    It is also useful to override methods from the Standard file or the Text Product Infrastructure. This means that instead of modifying the read-only files, you copy the code into your Site Overrides file and modify it there. Because of the inheritance hierarchy, the code within your Site Overrides file takes precedence and is executed instead of the original. To do so, make sure you copy the method within the class definition and preserve the indentation.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide56.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide56.JPG deleted file mode 100644 index a3af4a9da2..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide56.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide56.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide56.html deleted file mode 100644 index e69ca56fa1..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide56.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    56. Basic Customizations - Overriding Methods Example

    -
    -Previous Slide Next Slide

    -

    Here's an example where we have overridden _postProcessProduct method from the Standard CCF file into the CCF Site Overrides file and modified it's functioning.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide57.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide57.JPG deleted file mode 100644 index b54580fa32..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide57.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide57.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide57.html deleted file mode 100644 index 851da16888..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide57.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    57. Basic Customizations - Text Product Arguments

    -
    -Previous Slide Next Slide

    -

    Within the Standard file, there are various arguments and objects with which we deal. They are listed here with a basic description. For more detailed information on these objects, see: Arguments in the Standard Product File section of the Text Product Reference Guide.

    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide58.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide58.JPG deleted file mode 100644 index 8251f923ed..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide58.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide58.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide58.html deleted file mode 100644 index a26162bf1f..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide58.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    58. Basic Customizations - Customizing Narrative Products

    -
    -Previous Slide Next Slide

    -

    For Tabular products, most product settings will be found in the Definition section. For Narrative products, however, there are many additional customizations you may want to make.
    In this section, we'll see how to customize Narrative products by locating and setting thresholds and variables as well as altering the product component definitions and narrative definitions through the configurable issuance capability.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide59.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide59.JPG deleted file mode 100644 index cd9aad2b97..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide59.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide59.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide59.html deleted file mode 100644 index 3decfe6409..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide59.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    59. Basic Customizations - Thresholds and Variables

    -
    -Previous Slide Next Slide

    - - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide6.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide6.JPG deleted file mode 100644 index 77a1638ecd..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide6.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide6.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide6.html deleted file mode 100644 index 18ac5a7f87..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide6.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -
    -

    Text Formatter User Guide

    -

    6. Introduction - Prerequisites

    -
    -Previous Slide Next Slide

    -

    In order to work with the GFESuite Text Products and Infrastructure, you should have completed GFESuite Training including some experience with Smart Tools and/or Smart Init. You should also be familiar with basic Python concepts and basic object-oriented principles. For this information, see the GFESuite Python Tutorial and Programming Guidelines
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide60.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide60.JPG deleted file mode 100644 index 51a1adb1ae..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide60.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide60.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide60.html deleted file mode 100644 index f5e798fb09..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide60.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    60. Basic Customizations - Inheritance Hierarchy for Core Products

    -
    -Previous Slide Next Slide

    -

    Recall the Infrastructure and inheritance hierarchy with the SampleAnalysis and TextRules libraries. We will now learn how to override methods from these libraries.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide61.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide61.JPG deleted file mode 100644 index e18f9b972f..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide61.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide61.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide61.html deleted file mode 100644 index ba5fcc8e55..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide61.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    61. Basic Customizations - Thresholds and Variables

    -
    -Previous Slide Next Slide

    -

    Thresholds and variables defined in the classes of the Text Product Infrastructure are overridden by repeating them in the Site Overrides File and modifying them there. Many thresholds and variables may be important to your product. They may already be included in the Standard file. If so and you want to adjust them, copy them into your Site Overrides file from the Standard file. If not, you will find them in the library modules which can be Viewed from the Utilities Window of the Define Text Products dialog. They can then be copied into the Site Overrides File and modified.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide62.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide62.JPG deleted file mode 100644 index aac2e2b9da..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide62.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide62.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide62.html deleted file mode 100644 index 73dcfa2fbc..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide62.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    62. Basic Customizations - Thresholds and Variables - Examples-1

    -
    -Previous Slide Next Slide

    -

    Here's an example of a threshold that has been copied into the ZFP Override file from the infrastructure. In Part 2 we will learn how to find WHICH thresholds and variables to override and where to find them. For now, note that it was copied into the body of the TextProduct class AFTER the class declaration, that the entire threshold method was copied, and the indentation was preserved.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide63.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide63.JPG deleted file mode 100644 index f1b11b6392..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide63.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide63.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide63.html deleted file mode 100644 index db0a8f62cd..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide63.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    63. Basic Customizations - Thresholds and Variables - Examples-2

    -
    -Previous Slide Next Slide

    -

    This is a temporal coverage threshold copied from the SampleAnalysis class. For a grid to be included in the analysis, it must cover this percentage of the time range of interest OR be completely included within the time range.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide64.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide64.JPG deleted file mode 100644 index 81a85389ee..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide64.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide64.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide64.html deleted file mode 100644 index 72b79dbd56..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide64.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    64. Basic Customizations - Thresholds and Variables - Examples-3

    -
    -Previous Slide Next Slide

    -

    So in this case, with a temporalCoverage_percentage of 20, only grids B,C, and D will be included in the analysis.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide65.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide65.JPG deleted file mode 100644 index 91e604943c..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide65.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide65.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide65.html deleted file mode 100644 index 31899a2816..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide65.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    65. Basic Customizations - Thresholds and Variables - Naming Conventions

    -
    -Previous Slide Next Slide

    -

    Thresholds and variables are named with suffixes to indicate the type of value returned. Most of these should be clear. We'll look more closely at dictionaries and non-linear values.

    For a more complete list of naming convention suffixes, see: Naming Conventions section of the Text Product Reference Guide.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide66.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide66.JPG deleted file mode 100644 index 8d9f207a53..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide66.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide66.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide66.html deleted file mode 100644 index 0d8732f35d..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide66.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    66. Basic Customizations - Thresholds and Variables - Dictionaries

    -
    -Previous Slide Next Slide

    -

    Here is a dictionary of phrase descriptors. Note that it is a typical Python dictionary with an entry for each weather element. This dictionary is used by the TextRules phrase methods to begin phrases such as "Winds 20 knots" or "Wind chill readings 20 below zero."
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide67.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide67.JPG deleted file mode 100644 index e499dd8602..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide67.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide67.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide67.html deleted file mode 100644 index 38dfadfe6c..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide67.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    67. Basic Customizations - Thresholds and Variables - Dictionaries--Short-hand for accessing

    -
    -Previous Slide Next Slide

    -

    If you would like to change the default settings, you can copy this dictionary into your Site Overrides file. However, this particular dictionary is very large and, most likely, you will only want to override one or two entries. You can use the trick shown in which the method definition and argument list appear as in the original file, but the second line retrieves the entire dictionary. Now you can simply override selected entries and return the altered dictionary.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide68.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide68.JPG deleted file mode 100644 index 05ac98a586..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide68.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide68.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide68.html deleted file mode 100644 index 112d5149d6..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide68.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    68. Basic Customizations - Thresholds and Variables - Dictionaries--Using a method as an entry

    -
    -Previous Slide Next Slide

    -

    For added flexibility, the entry for a dictionary value can be the name of a method. Here's an example for which we might want to base the descriptor for the PoP phrase on the current data e.g. "Probability of precipitation 20 percent." or "Areal coverage of precipitation 20 percent". We specify the name of the method in the dictionary...
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide69.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide69.JPG deleted file mode 100644 index 2591b87a1c..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide69.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide69.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide69.html deleted file mode 100644 index d838cfaca1..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide69.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    69. Basic Customizations - Thresholds and Variables - Dictionaries--Using a method as an entry

    -
    -Previous Slide Next Slide

    -

    ...and then include the method which should expect the arguments shown. We can then include logic to base our returned value on current data. We'll learn more about these arguments and accessing data in later sections.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide7.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide7.JPG deleted file mode 100644 index 1f3c5a3162..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide7.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide7.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide7.html deleted file mode 100644 index bc0419d637..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide7.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    7. Introduction - Formatter Launcher Dialog

    -
    -Previous Slide Next Slide

    -

    To run Text Products from the GFE, from the Main Menu, choose Products-->Formatter Launcher. Select the product(s) to run. You can select a source database if you like. You can adjust any zone combinations and then run the product using the "Run All" button.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide70.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide70.JPG deleted file mode 100644 index df8c9c8336..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide70.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide70.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide70.html deleted file mode 100644 index 2e9e600111..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide70.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    70. Basic Customizations - Thresholds and Variables - Dictionaries--"otherwise" entry

    -
    -Previous Slide Next Slide

    -

    The dictionary may also have a special "otherwise" entry. If the key we are seeking is not found, this value will be used. In this case we want to use the $B!H!D(Bthen" string as a connector for long phrases EXCEPT for Wx and Sky.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide71.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide71.JPG deleted file mode 100644 index 784564352c..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide71.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide71.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide71.html deleted file mode 100644 index 5d1e090ff1..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide71.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    71. Basic Customizations - Thresholds and Variables - Non-Linear Thresholds

    -
    -Previous Slide Next Slide

    -

    The "minimum_range" threshold sets up a minimum reported range. In this example, we are requesting that wind phrases report a range of AT LEAST 5 mph. Sometimes we want to set thresholds differently depending on the value of the affected data.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide72.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide72.JPG deleted file mode 100644 index a0ccce626b..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide72.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide72.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide72.html deleted file mode 100644 index 1aed9e19dd..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide72.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    72. Basic Customizations - Thresholds and Variables - Non-Linear Thresholds

    -
    -Previous Slide Next Slide

    -

    We might want the minimum range to vary based on the magnitude of the winds. Any threshold with the "nlValue" suffix can be set as a dictionary of non-linear values. Each entry specifies a (lowVal, highVal) range such that if the wind magnitude is greater or equal to the first value AND less than the second value, the threshold will be set to the corresponding dictionary value. The special "default" entry will be used if the data value in question does not fall into any of the ranges given. It is recommended that you always include a "default" entry.
    It is the responsibility of the code using the non-linear threshold to apply it to the data value. For more examples and a complete description of non-linear thresholds see the Strategy for Non-linear Thresholds section of the Text Product Reference Guide.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide73.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide73.JPG deleted file mode 100644 index 0e0f7260ff..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide73.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide73.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide73.html deleted file mode 100644 index b6bca88332..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide73.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    73. Basic Customizations - Thresholds and Variables - SampleAnalysis Arguments

    -
    -Previous Slide Next Slide

    -

    The thresholds and variables from the SampleAnalysis class have these arguments from which you can access information upon which to base returned values. For more details see: Arguments to SampleAnalysis Methods section of the Text Product Reference Guide.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide74.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide74.JPG deleted file mode 100644 index ccf67f1d83..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide74.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide74.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide74.html deleted file mode 100644 index f4a5df37d1..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide74.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    74. Basic Customizations - Thresholds and Variables - Text Rules Arguments

    -
    -Previous Slide Next Slide

    -

    The thresholds and variables from the TextRules classes some or all of these arguments from which you can access information upon which to base returned values.
    In the Advanced User Guide, you will learn much more about the Narrative "tree" and "node" arguments. For now, know that there are some simple ways that you can make use of them.

    For example...
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide75.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide75.JPG deleted file mode 100644 index d2995e6de3..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide75.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide75.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide75.html deleted file mode 100644 index 76c53ced7b..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide75.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    75. Basic Customizations - Thresholds and Variables - Arguments Example

    -
    -Previous Slide Next Slide

    -

    Here is the gust_wind_difference_threshold. Note that it is expecting the "tree" and "node" arguments.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide76.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide76.JPG deleted file mode 100644 index cc8e79c6db..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide76.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide76.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide76.html deleted file mode 100644 index 925e43bcd7..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide76.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    76. Basic Customizations - Thresholds and Variables - Base Override on Current Edit Area

    -
    -Previous Slide Next Slide

    -

    Using information contained in the tree, we can test for the current edit area and return a value based on the result. We use the special helper method, "currentAreaContains", which checks to see if the current edit area is equal to any of the listed edit areas OR if the current edit area is a Combination which contains ANY of the edit areas listed. We can then return different values of for gust_wind_difference for different edit areas.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide77.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide77.JPG deleted file mode 100644 index 5fa1871ca8..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide77.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide77.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide77.html deleted file mode 100644 index 8aeb23225e..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide77.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    77. Basic Customizations - Thresholds and Variables - Base Override on Current Component

    -
    -Previous Slide Next Slide

    -

    We may also check the current component name upon which to base the returned value. We will learn more about product components in the next section. There is more information available about the "tree" and "node" arguments in the Arguments to TextRules Methods section of the Text Product Reference Guide.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide78.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide78.JPG deleted file mode 100644 index 03fa63cae9..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide78.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide78.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide78.html deleted file mode 100644 index be0e2c5d4a..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide78.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    78. Basic Customizations - Thresholds and Variables - Customizing Weather

    -
    -Previous Slide Next Slide

    -

    If you want to customize the wording for describing various weather conditions, you can do so by overriding the "wxCoverageDescriptors", "wxTypeDescriptors", "wxIntensityDescriptors", and/or "wxAttributeDescriptors" In the example, we use pattern-matching syntax so that any weather key with a type of RW will be called "showers" instead of the default, "rain showers". This is a very simple case. This mechanism affords you much control over weather descriptors. There is more information and examples at: Customizing Weather Descriptors section of the Text Product Reference Guide.

    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide79.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide79.JPG deleted file mode 100644 index 9a94c09fed..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide79.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide79.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide79.html deleted file mode 100644 index 5807003a1c..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide79.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    79. Basic Customizations - Thresholds and Variables - Exercises

    -
    -Previous Slide Next Slide

    -

    If you haven't already, you will need to activate the displayName in the ZFP Site Definition file to work with in these exercises.

    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide8.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide8.JPG deleted file mode 100644 index a28d6dd2f7..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide8.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide8.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide8.html deleted file mode 100644 index 8cbc4269e1..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide8.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    8. Introduction - Editor Window

    -
    -Previous Slide Next Slide

    -

    When the product is complete, the product tab will turn blue and the editor window of the Formatter Launcher will appear. You may further edit the product and optionally save it and/or transmit it. The Formatter Launcher has many other features which are documented in the online documentation.

    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide80.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide80.JPG deleted file mode 100644 index 947c918c62..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide80.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide80.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide80.html deleted file mode 100644 index 40e71976cb..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide80.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    80. Summary - End of Part 1

    -
    -Previous Slide Next Slide

    -


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide81.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide81.JPG deleted file mode 100644 index c6d1311c16..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide81.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide81.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide81.html deleted file mode 100644 index 40d9306271..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide81.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    81. Exercises - Part 1

    -
    -Previous Slide Next Slide

    -

    If you want to customize the wording for describing various weather conditions, you can do so by overriding the "wxCoverageDescriptors", "wxTypeDescriptors", "wxIntensityDescriptors", and/or "wxAttributeDescriptors" In the example, we use pattern-matching syntax so that any weather key with a type of RW will be called "showers" instead of the default, "rain showers". This is a very simple case. This mechanism affords you much control over weather descriptors. There is more information and examples at: Customizing Weather Descriptors section of the Text Product Reference Guide.



    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide82.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide82.JPG deleted file mode 100644 index 5eb44bc370..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide82.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide82.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide82.html deleted file mode 100644 index 236d38670b..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide82.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    82. Exercises - Part 2

    -
    -Previous Slide Next Slide

    -

    If you haven't already, you will need to activate the ZFP_Local file to work with in these exercises.



    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide83.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide83.JPG deleted file mode 100644 index 5ce6d1cc16..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide83.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide83.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide83.html deleted file mode 100644 index de30c230a4..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide83.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    83. Basic Customizations - Product Components - Overview

    -
    -Previous Slide Next Slide

    - - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide84.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide84.JPG deleted file mode 100644 index bb2c281357..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide84.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide84.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide84.html deleted file mode 100644 index 55bf44bd0d..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide84.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -
    -

    Text Formatter User Guide

    -

    84. Basic Customizations - Product Components - Entries

    -
    -Previous Slide Next Slide

    - - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide85.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide85.JPG deleted file mode 100644 index 1b86888178..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide85.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide85.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide85.html deleted file mode 100644 index 88a3b69bfb..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide85.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -
    -

    Text Formatter User Guide

    -

    85. Basic Customizations - Product Components - Example

    -
    -Previous Slide Next Slide

    - - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide86.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide86.JPG deleted file mode 100644 index 07619db15a..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide86.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide86.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide86.html deleted file mode 100644 index e18c4fa083..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide86.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -
    -

    Text Formatter User Guide

    -

    86. Basic Customizations - Product Components - Analysis

    -
    -Previous Slide Next Slide

    -

    Here's the "analysisList" showing weather elements and corresponding analysis methods.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide87.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide87.JPG deleted file mode 100644 index 085db4bab7..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide87.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide87.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide87.html deleted file mode 100644 index 440fb464d0..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide87.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    87. Basic Customizations - Product Components - Phrases

    -
    -Previous Slide Next Slide

    -

    Here's the "phraseList" showing the phrase methods in the order they are to appear in the component.

    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide88.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide88.JPG deleted file mode 100644 index 1ae61d72dd..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide88.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide88.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide88.html deleted file mode 100644 index 2a2ec542c7..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide88.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    88. Basic Customizations - Product Components - Component Phrase Result

    -
    -Previous Slide Next Slide

    -

    Here's an example of the resulting output for this component.

    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide89.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide89.JPG deleted file mode 100644 index 56826ffd80..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide89.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide89.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide89.html deleted file mode 100644 index 523a7cc31b..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide89.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    89. Basic Customizations - Analysis-Driven Phrases

    -
    -Previous Slide Next Slide

    -

    We say that the phrases of the narrative products are "analysis-driven" because if we change the analysis method in the product component, the character of the phrase will change.
    Here we are asking to have a minimum and maximum value reported for the Wind.

    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide9.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide9.JPG deleted file mode 100644 index 39a8e9fa53..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide9.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide9.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide9.html deleted file mode 100644 index 05ef4f027e..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide9.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    9. Introduction - Steps to Product Creation

    -
    -Previous Slide Next Slide

    -

    This diagram shows the steps to producing a Text Product using the Infrastructure. First, the grids from the database are "sampled" to produce a set of histograms...
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide90.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide90.JPG deleted file mode 100644 index b98b4b1e96..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide90.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide90.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide90.html deleted file mode 100644 index d50ac3cb45..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide90.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    90. Basic Customizations - Analysis-Driven Phrases - Changing the Analysis Method-1

    -
    -Previous Slide Next Slide

    -

    We can change the analysis for Wind by copying the ENTIRE component definition into ourOverrides file, meaning everything within the rectangle, and...

    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide91.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide91.JPG deleted file mode 100644 index 60a6e9918d..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide91.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide91.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide91.html deleted file mode 100644 index 02d2d68709..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide91.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    91. Basic Customizations - Analysis-Driven Phrases - Changing the Analysis Method-2

    -
    -Previous Slide Next Slide

    -

    ...changing the definition there.

    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide92.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide92.JPG deleted file mode 100644 index 4e693d39fc..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide92.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide92.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide92.html deleted file mode 100644 index 4622d57683..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide92.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    92. Basic Customizations - Analysis-Driven Phrases - Example Result

    -
    -Previous Slide Next Slide

    -

    This shows the different phrasing that results when we alter the analysis method. You can control the phrasing in many ways through this mechanism.

    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide93.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide93.JPG deleted file mode 100644 index 2223dcb46a..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide93.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide93.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide93.html deleted file mode 100644 index 9bfc687e44..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide93.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    93. Basic Customizations - SampleAnalysis Reference - Analysis Methods

    -
    -Previous Slide Next Slide

    -

    The SampleAnalysis Reference found at:
    Sample Analysis Reference section in the Text Product Reference Guide
    lists all the analysis methods and describes their result.

    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide94.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide94.JPG deleted file mode 100644 index 8f828b2b15..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide94.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide94.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide94.html deleted file mode 100644 index 3f5d463390..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide94.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    94. Basic Customizations - SampleAnalysis Reference - Moderated Methods

    -
    -Previous Slide Next Slide

    -

    You can use the Reference to learn about other analysis methods. For example, the "vectorModeratedMinMax" analysis method filters the min/max values to eliminate outlying high and low values based on information in the "moderated_dict".

    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide95.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide95.JPG deleted file mode 100644 index 7b633cd416..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide95.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide95.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide95.html deleted file mode 100644 index c84b95ca2f..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide95.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    95. Basic Customizations - SampleAnalysis Reference - Moderated Dictionary

    -
    -Previous Slide Next Slide

    -

    The Reference also lists the thresholds and variables associated with the analysis methods.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide96.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide96.JPG deleted file mode 100644 index 88147c88da..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide96.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide96.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide96.html deleted file mode 100644 index 43eb2083f8..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide96.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    96. Basic Customizations - SampleAnalysis Reference - Moderated Dictionary

    -
    -Previous Slide Next Slide

    -

    Here's the "moderated_dict" which can be copied from the SampleAnalysis module and overridden in your Overrides file to change the default percentages for filtering the minimum and maximum data values.

    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide97.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide97.JPG deleted file mode 100644 index 37c2c14c0b..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide97.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide97.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide97.html deleted file mode 100644 index 13c87d9afe..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide97.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    97. Basic Customizations - Analysis-Driven Phrases - Example Result using Moderated Method

    -
    -Previous Slide Next Slide

    -

    In general, the "moderatedMinMax" yields smaller reported ranges as illustrated here.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide98.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide98.JPG deleted file mode 100644 index 0fa03f8965..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide98.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide98.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide98.html deleted file mode 100644 index ddc970ac64..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide98.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    98. Basic Customizations - Analysis-Driven Phrases - Changing Temporal Resolution-1

    -
    -Previous Slide Next Slide

    -

    In this set-up, the analysis will be done over the entire time period for the component. For example, if our component is 12 hours long, an average Wind value over the 12 hours will be reported.

    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide99.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide99.JPG deleted file mode 100644 index 7529f7b89c..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide99.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide99.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide99.html deleted file mode 100644 index 9dd8b9786b..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/Slide99.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide

    -

    99. Basic Customizations - Analysis-Driven Phrases - Changing Temporal Resolution-2

    -
    -Previous Slide Next Slide

    -

    In many cases, we would like to increase the temporal resolution reported. To do so, we can add an optional entry to specify the time period over which we want statistics. In this example, we are requesting that a vectorAvg be calculated for every 6-hour period within the component time period. So if our component is 12 hours long, we will get a pair of statistics, one for the first 6 hours and another for the second 6 hours.

    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/TOC.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/TOC.txt deleted file mode 100644 index 5ef0cb92a1..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/TOC.txt +++ /dev/null @@ -1,144 +0,0 @@ -1: GFESuite Text Product User Guide -2: Overview -3: Part 1 -4: Introduction -5: Introduction|Concepts -6: Introduction|Prerequisites -7: Introduction|Formatter Launcher Dialog -8: Introduction|Editor Window -9: Introduction|Steps to Product Creation -10: Introduction|Steps to Product Creation|Sampler - Grids to Histograms -11: Introduction|Steps to Product Creation|Analysis and Text Rules -12: Introduction|Steps to Product Creation|Example -13: Introduction|Inheritance Hierarchy for Smart Text Products|Inheritance Relationship -14: Introduction|Inheritance Hierarchy for Smart Text Products|Classes -15: Introduction|Inheritance Hierarchy for Core Text Products|Site Level Files -16: Introduction|File Structure for Core Products|Explanation of Files -17: Introduction|Inheritance Hierarchy for Core Text Products|Region Level Files -18: Introduction|Inheritance Hierarchy for Core Text Products|Base Level Files -19: Product set-up|Steps to Set-up Core Products -20: Product set-up|Set-up Generic Edit Areas -21: Product set-up|Read Standard File Documentation -22: Product set-up|Define Text Products Dialog -23: Product set-up|Read Standard File Documentation -24: Product set-up|Activate Site Product -25: Product set-up|Definition File "displayName" -26: Product set-up|Setting Definition File "displayName" -27: Product set-up|Run Site Product -28: Product set-up|Set-up Customized Edit Areas|Applies to "defaultEditAreas" products -29: Product set-up|Set-up Customized Edit Areas|Definition "defaultEditAreas" -30: Product set-up|set-up Customized Edit Areas|"defaultEditAreas" Example -31: Product set-up|set-up Customized Edit Areas|Specifying by lat/lon -32: Product set-up|set-up Customized Edit Areas|Area Dictionary -33: Product set-up|set-up Customized Edit Areas|Area Dictionary Example -34: Product set-up|set-up Customized Edit Areas|Area Header -35: Product set-up|Run Baseline, Region, Site -36: Product set-up|Trouble-shooting Fallback -37: Product set-up|Exercises -38: Basic Customizations -39: Basic Customizations|Product Template -40: Basic Customizations|Inheritance Hierarchy for Core Products -41: Basic Customizations|Standard Product Template -42: Basic Customizations|Documentation Section -43: Basic Customizations|Standard Product Template -44: Basic Customizations|Standard Product Main Method -45: Basic Customizations|Standard Product Sub-Methods -46: Basic Customizations|Standard Product Other Methods -47: Basic Customizations|Site Definition File -48: Basic Customizations|Site Overrides File -49: Basic Customizations|Definition Section|Standard File -50: Basic Customizations|Definition Section|Site Definition File-1 -51: Basic Customizations|Definition Section|Site Definition File-2 -52: Basic Customizations|Definition Section|Flags -53: Basic Customizations|Definition Section|Flags -54: Basic Customizations|Definition Section|Exercises -55: Basic Customizations|Overriding Methods -56: Basic Customizations|Overriding Methods Example -57: Basic Customizations|Text Product Arguments -58: Basic Customizations|Customizing Narrative Products -59: Basic Customizations|Thresholds and Variables -60: Basic Customizations|Inheritance Hierarchy for Core Products -61: Basic Customizations|Thresholds and Variables -62: Basic Customizations|Thresholds and Variables|Examples-1 -63: Basic Customizations|Thresholds and Variables|Examples-2 -64: Basic Customizations|Thresholds and Variables|Examples-3 -65: Basic Customizations|Thresholds and Variables|Naming Conventions -66: Basic Customizations|Thresholds and Variables|Dictionaries -67: Basic Customizations|Thresholds and Variables|Dictionaries--Short-hand for accessing -68: Basic Customizations|Thresholds and Variables|Dictionaries--Using a method as an entry -69: Basic Customizations|Thresholds and Variables|Dictionaries--Using a method as an entry -70: Basic Customizations|Thresholds and Variables|Dictionaries--"otherwise" entry -71: Basic Customizations|Thresholds and Variables|Non-Linear Thresholds -72: Basic Customizations|Thresholds and Variables|Non-Linear Thresholds -73: Basic Customizations|Thresholds and Variables|SampleAnalysis Arguments -74: Basic Customizations|Thresholds and Variables|Text Rules Arguments -75: Basic Customizations|Thresholds and Variables|Arguments Example -76: Basic Customizations|Thresholds and Variables|Base Override on Current Edit Area -77: Basic Customizations|Thresholds and Variables|Base Override on Current Component -78: Basic Customizations|Thresholds and Variables|Customizing Weather -79: Basic Customizations|Thresholds and Variables|Exercises -80: Summary|End of Part 1 -81: Exercises|Part 1 -82: Exercises|Part 2 -83: Basic Customizations|Product Components|Overview -84: Basic Customizations|Product Components|Entries -85: Basic Customizations|Product Components|Example -86: Basic Customizations|Product Components|Analysis -87: Basic Customizations|Product Components|Phrases -88: Basic Customizations|Product Components|Component Phrase Result -89: Basic Customizations|Analysis-Driven Phrases -90: Basic Customizations|Analysis-Driven Phrases|Changing the Analysis Method-1 -91: Basic Customizations|Analysis-Driven Phrases|Changing the Analysis Method-2 -92: Basic Customizations|Analysis-Driven Phrases|Example Result -93: Basic Customizations|SampleAnalysis Reference|Analysis Methods -94: Basic Customizations|SampleAnalysis Reference|Moderated Methods -95: Basic Customizations|SampleAnalysis Reference|Moderated Dictionary -96: Basic Customizations|SampleAnalysis Reference|Moderated Dictionary -97: Basic Customizations|Analysis-Driven Phrases|Example Result using Moderated Method -98: Basic Customizations|Analysis-Driven Phrases|Changing Temporal Resolution-1 -99: Basic Customizations|Analysis-Driven Phrases|Changing Temporal Resolution-2 -100: Basic Customizations|Analysis-Driven Phrases|Example Result Changing Temporal Resolution -101: Basic Customizations|Analysis-Driven Phrases|Double Weather Element Entries -102: Basic Customizations|Analysis-Driven Phrases|Weather Analysis -103: Basic Customizations|Analysis-Driven Phrases|Changing Temporal Resolution for Weather -104: Basic Customizations|Analysis-Driven Phrases|Example Result Changing Temporal Resolution of Weather -105: Basic Customizations|Choosing An Alternate Phrase-1 -106: Basic Customizations|TextRules Reference -107: Basic Customizations|Choosing An Alternate Phrase-2 -108: Basic Customizations|Changing the Order of Phrases -109: Basic Customizations|Locating Thresholds and Variables -110: Basic Customizations|TextRules Reference|Phrase Listing -111: Basic Customizations|TextRules Reference|Phrase Information -112: Basic Customizations|Inheritance Hierarchy for Core Products -113: Basic Customizations|Text Rules Modules -114: Basic Customizations|Text Rules Classes -115: Basic Customizations|Basic Local Effects|Original Phrase -116: Basic Customizations|Basic Local Effects|Adding a Local Effect List -117: Basic Customizations|Basic Local Effects|Example Local Effect List -118: Basic Customizations|Basic Local Effects|Adding "intersectAreas" -119: Basic Customizations|Basic Local Effects|Example Results -120: Basic Customizations|Basic Local Effects|Specification Options -121: Basic Customizations|Product Component Exercises -122: Basic Customizations|Narrative Products -123: Basic Customizations|Narrative Product Definition -124: Basic Customizations|Narrative Product Example -125: Basic Customizations|Configurable Issuance -126: Basic Customizations|Configurable Issuance|Issuance List -127: Basic Customizations|Configurable Issuance Exercises -128: Basic Customizations|Headlines|Hazards Grid -129: Basic Customizations|Headlines|Hazards Grid Example -130: Basic Customizations|Headlines Configuration|Allowed Hazards -131: Basic Customizations|Headlines Configuration|Allowed Hazards Example -132: Basic Customizations|Headlines Configuration|Allowed Hazards Modification -133: Basic Customizations|Headline Exercises -134: Basic Customizations|Override File Organization|Standard and Override Files -135: Basic Customizations|Override File Organization|Need for Organization in Override Files -136: Basic Customizations|Override File Organization|Guidelines -137: Help and Feedback -138: Help and Feedback|Trouble-shooting -139: Help and Feedback|Using the Listserver-1 -140: Help and Feedback|Using the Listserver-2 -141: Help and Feedback|Exercises -142: Summary|End of Part 2 -143: Exercises|Part 2 - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes1.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes1.txt deleted file mode 100644 index d89e9f892b..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes1.txt +++ /dev/null @@ -1,3 +0,0 @@ -This set of slides and notes is to be used in conjunction with the Text Product Reference Guide which is referred to throughout for more details and in-depth examples. - -The GFESuite Text Products are considered Local Applications. This means that the out-of-the-box core products require customization by most sites to meet local requirements. In addition to the core products, the Text Product framework will support the creation of new local products. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes10.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes10.txt deleted file mode 100644 index 63fd20881d..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes10.txt +++ /dev/null @@ -1,5 +0,0 @@ -For a given edit area, the histogram will list the number of occurrences of each grid value. Suppose, for example, we are sampling a MaxT grid over a small edit area of 30 points. You might have a list of pairs: - (10,70), (15, 71), (5, 73) -indicating that 10 grid points had a value of 70 degrees, 15 points had a value of 71 degrees, and 5 grid point had a value of 73 degrees. - -The Sampler code is written in C++ for maximum performance. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes100.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes100.txt deleted file mode 100644 index 774996b4ad..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes100.txt +++ /dev/null @@ -1 +0,0 @@ -The phrases will automatically use this additional information to report more detail. For example, we will now see phrases that distinguish between morning and afternoon Wind values. Of course, the code checks for similar values across time periods and reports the simpler phrase if appropriate. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes101.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes101.txt deleted file mode 100644 index 9b5d3bf1c2..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes101.txt +++ /dev/null @@ -1 +0,0 @@ -In some products, you will see more than one analysis method listed for a weather element. It is important to know that the phrase methods are sensitive ONLY to the FIRST one listed. Additional analysis is performed by the system and is used as a secondary piece of information by the formatter code. For example, the second method shown here (vectorMinMax) is used when reporting wind gusts. DO NOT remove or change the secondary analysis methods as they the system expects them to be there! \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes102.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes102.txt deleted file mode 100644 index b11400bacd..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes102.txt +++ /dev/null @@ -1,2 +0,0 @@ -The default Wx analysis method, $B!H(BrankedWx$B!I(B, returns the pre-dominant weather keys for the time period. -The details of this algorithm can be found in the Text Reference Guide. diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes103.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes103.txt deleted file mode 100644 index 0a272663b9..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes103.txt +++ /dev/null @@ -1 +0,0 @@ -Wx is a parameter for which we would like more temporal resolution. The length of the Wx grids can often be meaningful in representing the duration of the weather event. The special $B!H(B[0]$B!I(B temporal resolution entry tells the system to produce the analysis (in this case, $B!H(BrankedWx$B!I(B keys) for EACH grid within the component time range. diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes104.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes104.txt deleted file mode 100644 index f9f7b34629..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes104.txt +++ /dev/null @@ -1,3 +0,0 @@ -Now the phrases will automatically reflect whatever temporal resolution is represented by the duration of the grids. - -PLEASE NOTE: You should only use this temporal resolution IF you using the duration of the Wx grids to indicate the duration of weather events. IF, on the other hand, you are producing hourly Wx grids through interpolation, this could yield cumbersome, lengthy phrases. In this case, keep the default temporal resolution for the product. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes105.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes105.txt deleted file mode 100644 index 2340c238ef..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes105.txt +++ /dev/null @@ -1 +0,0 @@ -How do we determine what thresholds and variables to override? The weather elements and associated phrase methods are listed in the Text Rules Reference section of the Text Product Reference Guide. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes106.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes106.txt deleted file mode 100644 index 780ee0db2c..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes106.txt +++ /dev/null @@ -1 +0,0 @@ -You may want to choose an alternative phrase \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes107.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes107.txt deleted file mode 100644 index 8be3657f8f..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes107.txt +++ /dev/null @@ -1,4 +0,0 @@ -To change the phrase method, override the ENTIRE product component in yourOverrides file and change the $B!H(BphraseList$B!I(B there. - -The phrase methods in the $B!H(BphraseList$B!I(B show the ordering of phrases as they appear in the component product. To change this ordering... - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes108.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes108.txt deleted file mode 100644 index cf6eeb891d..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes108.txt +++ /dev/null @@ -1 +0,0 @@ -$B!D(Bsimply move the phrase method within the $B!H(BphraseList$B!I(B in your Overrides file. diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes109.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes109.txt deleted file mode 100644 index d52167e069..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes109.txt +++ /dev/null @@ -1 +0,0 @@ -To understand more about a particular phrase and how you can alter it$B!G(Bs behavior, first find the name in the $B!H(BphraseList$B!I(B. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes11.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes11.txt deleted file mode 100644 index a53c740096..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes11.txt +++ /dev/null @@ -1,3 +0,0 @@ -Next, the SampleAnalysis component of the Infrastructure generates summary statistics from the histogram information. For example, we can generate averages, minimum values, maximum values, modes, etc. The SampleAnalysis component is written in Python and is thus, extendable. -The summary statistics are then examined by a set of Text Rules which produce either the rows of a table or a set of narrative phrases representing the data. -The Simple Table or Smart Text Product Python modules specifiy which areas are sampled, what statistics are generated, and what Text Rules to employ to produce the desired product. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes110.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes110.txt deleted file mode 100644 index 443f5770e7..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes110.txt +++ /dev/null @@ -1 +0,0 @@ -Then find it$B!G(Bs listing in the TextRules Reference section with the associated Weather Element. diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes111.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes111.txt deleted file mode 100644 index 7ab497caf4..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes111.txt +++ /dev/null @@ -1 +0,0 @@ -Here you will see example phrasing, the recommended analysis method(s), and all the thresholds and variables that apply to the phrase. By changing these thresholds and variables, you can alter the results of the phrase method. Remember to check the Standard file first for any pre-existing overrides, If not there, the Reference tells which modules to search to find the threshold or variable. View the module through the Define Text Products Text Utilities window to locate the threshold or variable. You can read the documentation there, and if you decide to alter the default, you can copy and paste it into your Overrides file to make the change. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes112.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes112.txt deleted file mode 100644 index 3549ca7c8d..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes112.txt +++ /dev/null @@ -1,2 +0,0 @@ -Recall the Infrastructure Inheritance Hierarchy with the SampleAnalysis and TextRules libraries. The SampleAnalysis library is relatively concise and self-contained. However, the TextRules library is very extensive and is composed of it$B!G(Bs own Inheritance Hierarchy of classes - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes113.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes113.txt deleted file mode 100644 index 8d1f5ce49f..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes113.txt +++ /dev/null @@ -1 +0,0 @@ -Here is a diagram showing all of the Text Rules classes and their inheritance relationships. Though there are many classes, the number with which you$B!G(Bll be concerned, shown with solid bars, are relatively few. Their names are descriptive of the types of narrative phrases with which they$B!G(Bre concerned... \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes114.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes114.txt deleted file mode 100644 index 64c8acb30f..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes114.txt +++ /dev/null @@ -1 +0,0 @@ -For example, $B!H(BScalarPhrases$B!I(B deals with scalar weather elements such as $B!H(BMaxT$B!I(B, $B!H(BMinT$B!G(B, $B!H(BPoP$B!I(B, $B!H(BSnowAmt$B!I(B, etc. $B!H(BVectorRelatedPhrases$B!I(B deals with $B!H(BWind$B!I(B and $B!H(BWindGust$B!I(B. Many of the most common thresholds and variables apply to multiple weather elements and are, thus, included in the $B!H(BConfigVariables$B!I(B class. These are the module names that appear in the Text Reference tables for narrative phrases to help you locate the threshold or variable of interest. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes115.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes115.txt deleted file mode 100644 index 6d1ee4a0b9..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes115.txt +++ /dev/null @@ -1 +0,0 @@ -The system is capable of producing Local Effect phrases which describe distinctions between designated edit areas. For example, $B!H(BHighs in the 80$B!G(Bs except in the 70$B!G(Bs in the mountains.$B!I(B You must describe the criteria for a local effect on a phrase-by-phrase basis and virtually any phrase listed in the phraseList can have a set of Local Effects associated with it. The system will report the FIRST Local Effect (if any) that meets the given criteria. To set up a local effect for a phrase... \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes116.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes116.txt deleted file mode 100644 index bd908377ab..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes116.txt +++ /dev/null @@ -1 +0,0 @@ -You must add two items to the Product component definition. First, include a Local Effects list with the phrase method listed in the $B!H(BphraseList$B!I(B. diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes117.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes117.txt deleted file mode 100644 index e9c6662eca..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes117.txt +++ /dev/null @@ -1 +0,0 @@ -This is an example of a method that returns the Local Effect specification. It tells what edit areas to compare, gives labels for each of them, and a threshold difference. In this case a wind magnitude difference greater than 10 will trigger Local Effect wording. Finally, we can specify connector wording for the Local Effect phrase. diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes118.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes118.txt deleted file mode 100644 index 3f85133ba4..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes118.txt +++ /dev/null @@ -1 +0,0 @@ -Next, add an $B!H(BintersectAreas$B!I(B section that specifies for each weather element, the names of the local effect edit areas, intersected with the current area, to be compared for potential Local Effect wording. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes119.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes119.txt deleted file mode 100644 index c1d0232488..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes119.txt +++ /dev/null @@ -1 +0,0 @@ -Here are some example Local Effect phrases that might result. The first case is a simple $B!H(Bembedded$B!I(B local effect where both local effect areas can be reported in one phrase. This is because the data for each local effect area is constant throughout the time period. For clarity and simplicity, if this is not the case, we separate the Local Effect reporting into separate phrases which we call $B!H(Bconjunctive$B!I(B phrases. diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes12.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes12.txt deleted file mode 100644 index a400b79a5a..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes12.txt +++ /dev/null @@ -1 +0,0 @@ -As an example, suppose we are sampling MaxT over a given edit area. The Sampler will give us a list of histogram pairs where each pair tells us the number of points within the edit area with the given value. In the example, 10 points have a MaxT of 85 degrees, 15 points have a MaxT of 86 degrees, etc. Next, we analyze the data. In this case, we have requested a $B!H(BminMax$B!I(B summary statistic which returns a minimum value of 85 and a maximum value of 93 over the entire edit area. Finally, we submit these statstics to a Text Rules method which produces wording, $B!H(BHIGHS 85 to 93$B!I(B. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes120.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes120.txt deleted file mode 100644 index b4af755a6d..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes120.txt +++ /dev/null @@ -1,2 +0,0 @@ -There is much more information and examples regarding Local Effects in the Local Effects section of the TextProduct Reference Guide. -There you can see that any part of the Local Effect definition may be determined $B!H(Bon-the-fly$B!I(B, perhaps based on the current edit area. This is possible by specifying any portion of the Local Effect definition as a method which will have the familiar $B!H(Btree, node$B!I(B arguments. You can also set up more than 2 Local Effect edit areas and more than one Local Effect per phrase. diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes121.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes121.txt deleted file mode 100644 index d4b2b5c745..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes121.txt +++ /dev/null @@ -1,3 +0,0 @@ -Next, add an "intersectAreas" section that specifies for each weather element, the names of the local effect edit areas, intersected with the current area, to be compared for potential Local Effect wording. - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes122.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes122.txt deleted file mode 100644 index d60d1e81a2..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes122.txt +++ /dev/null @@ -1 +0,0 @@ -Components are $B!H(Bglued together$B!I(B via a Narrative Definition which specifies the order of the components and the time period to be represented by each component. diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes123.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes123.txt deleted file mode 100644 index 4deaa75ef6..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes123.txt +++ /dev/null @@ -1 +0,0 @@ -Here is Narrative Definition which lists each component name in the order in which it is to appear with the number of hours to be covered by the component. diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes125.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes125.txt deleted file mode 100644 index 731661aeb7..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes125.txt +++ /dev/null @@ -1 +0,0 @@ -In the core narrative products, the Narrative Definition will vary depending on the Issuance time chosen and, thus, must be assembled $B!H(Bon-the-fly.$B!I(B In fact, the dialog and possible Issuance selections are defined in the Standard file and are configurable. diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes126.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes126.txt deleted file mode 100644 index bd579b86ab..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes126.txt +++ /dev/null @@ -1 +0,0 @@ -This is done through the _issuance_list method which has two sections. First, the possible narrative definitions appear. The narrative definition for an AM issuance is shown. The next section creates the list of dialog entries and the issuance information including the corresponding narrative definition. Other information included is the start and end hours for the first period of the product, the expiration hour, labels to be used in the component. For more details and a complete explanation of the Configurable Issuance capability, see the: Configurable Issuance section of the Text Product Reference Guide. diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes127.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes127.txt deleted file mode 100644 index dd4ba81915..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes127.txt +++ /dev/null @@ -1,3 +0,0 @@ -Here's an example of a narrative product composed of components of the specified time periods. - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes128.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes128.txt deleted file mode 100644 index 44f45fe3c4..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes128.txt +++ /dev/null @@ -1 +0,0 @@ -Headlines are generated from the Hazards Discrete-type grid. They will appear automatically in the narrative products. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes129.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes129.txt deleted file mode 100644 index 297524b763..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes129.txt +++ /dev/null @@ -1 +0,0 @@ -Here$B!G(Bs an example Hazards grid in the GFE. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes13.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes13.txt deleted file mode 100644 index 040348408c..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes13.txt +++ /dev/null @@ -1 +0,0 @@ -Recall the notation for representing classes and their inheritance relationships from the GFESuite Python Tutorial. The symbol indicates that the Derived Class inherits all the methods and variables from the Base Class. Think of the symbol not as an arrow indicating flow, but as an $B!H(Bumbrella$B!I(B indicating inclusion of capatilities. Now we$B!G(Bll look at the Text Products classes and their inheritance relationships. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes131.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes131.txt deleted file mode 100644 index 8768c50617..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes131.txt +++ /dev/null @@ -1 +0,0 @@ -Here$B!G(Bs an example $B!H(BallowedHeadlines$B!I(B list. diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes132.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes132.txt deleted file mode 100644 index c93a02b85b..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes132.txt +++ /dev/null @@ -1 +0,0 @@ -To include other hazards, we can copy the method into our Local file and then add to it. There is much more information about Headlines, VTEC codes and special considerations for Marine Headlines in the Text Reference Guide. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes133.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes133.txt deleted file mode 100644 index 77010bbf68..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes133.txt +++ /dev/null @@ -1,3 +0,0 @@ -You can customize the Headlines in the products in two ways: Each standard file contains a list of "allowedHeadlines". You can alter this list if you like. In addition, you may customize the time descriptors for the headlines in various ways. - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes134.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes134.txt deleted file mode 100644 index 7aff5fed19..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes134.txt +++ /dev/null @@ -1 +0,0 @@ -During development of the core product formatters, we put out many and frequent releases of the software for field testing by the Local Formatter Team. For each product, there was a Standard version and a Local Override file. In general, the Local file was very small in comparison and we discouraged the field from putting many overrides in the Local file so that we could refine the baseline product and to protect the users from the ever-changing infrastructure. As the infrastructure has become more stable over time, we have allowed more overrides... diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes135.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes135.txt deleted file mode 100644 index 8fca1b1af8..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes135.txt +++ /dev/null @@ -1 +0,0 @@ -...to the point that the Override file is often larger than the original Standard file. These files are overriding functionality not only from the Standard file, but also from other Text Rules libraries. As a result, it is very important that the Override files be carefully organized and documented. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes136.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes136.txt deleted file mode 100644 index ee15c144a3..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes136.txt +++ /dev/null @@ -1 +0,0 @@ -Here are some suggestions for organizing your Override file into sections that will make trouble-shooting and understanding your Customizations easier. Put all the code that you are overriding in one section, perhaps labeled by the source of the overridden code e.g. $B!H(BOverrides from AreaFcst$B!I(B, $B!H(BOverrides from ConfigVariables$B!I(B, $B!H(BOverrides from FirePhrases. Be sure and comment the lines you are changing! Sometimes you might find it useful to override methods and insert print statements to trouble-shoot a problem you might be having. This is an excellent way to track problems and also learn how the code works. However, be sure and put this code in a separate section and clear it out after the problem is fixed so that you will not miss upgrades and bug fixes to this code in subsequent releases. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes137.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes137.txt deleted file mode 100644 index f448c16baa..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes137.txt +++ /dev/null @@ -1 +0,0 @@ -There is a tiered approach in place to help you with product installation and customization. Through the listserver, you can receive help from Regional Formatter Team members and other RPP participants and IFPS Focal Points. FSL developers will be come involved when necessary. This is the central place for getting help with all GFE formatter issues. The emphasis is on learning about the products and becoming self-sufficient in trouble-shooting problems. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes139.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes139.txt deleted file mode 100644 index 0a9d9f69bd..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes139.txt +++ /dev/null @@ -1 +0,0 @@ -If you cannot find the problem using these techniques, you can post a message to the listserver for help. Your chances of getting help quickly will be greatly increased by providing adequate information! Describe your problem in detail and BE SURE to include the entire error traceback message with line numbers AND your Overrides file. diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes14.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes14.txt deleted file mode 100644 index 649ebf5d95..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes14.txt +++ /dev/null @@ -1,2 +0,0 @@ -The Text Product Infrastructure consists of dozens of modules each of which performs a particular set of tasks. While the structure is complex, the entire infrastructure can be viewed conceptually as functional groups. Here we see the CommonUtils, SampleAnalysis and TextRules classes which have the jobs of generating summary statistics and creating text representations of the data. We also see the class for a Text Product, which specifies the data and format for a particular product. Note the $B!H(Binheritance$B!I(B symbol connecting the TextProduct class to the SampleAnalysis and TextRules classes. This relationship implies that the Text Product class has access to, or $B!H(Binherits$B!I(B, ALL of the functionality of the other two classes. Finally, we have the Local Text Product class which, in turn, inherits the functionality of ALL the classes above it in the hierarchy. The CommonUtils, SampleAnalysis , TextRules, and TextProduct classes are read-only and you cannot modify them directly. However, you may $B!H(Boverride$B!I(B any method in these read-only classes by copying the code into the Local Text Product class and making modifications there. The version in the Local class will supercede the original, thus allowing you to customize the formatter to you liking. -This inheritance scheme has several advantages. It allows flexibility for each local site to tailor virtually any part of the product to their unique requirements. At the same time, by restricting all customizations to the Local file, we can isolate problems when they arise. The site can revert to the baseline Text Product, if necessary. Then, as a trouble-shooting technique, we can begin to introduce the customizations one at a time in order to isolate the problem. diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes140.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes140.txt deleted file mode 100644 index 78e7d542bb..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes140.txt +++ /dev/null @@ -1 +0,0 @@ -If the results of the product are undesirable, check the documentation for the offending phrase to see if customization would help. If not, you can use the listserver to describe your desired results. It is often helpful to describe the data in the grids that produced the undesirable results. And always include your Override file. diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes141.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes141.txt deleted file mode 100644 index eae91086b3..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes141.txt +++ /dev/null @@ -1,2 +0,0 @@ -Here are some suggestions for organizing your Local file into sections that will make trouble-shooting and understanding your Customizations easier. Put all the code that you are overriding in one section, perhaps labeled by the source of the overridden code e.g. "Overrides from AreaFcst", "Overrides from ConfigVariables", "Overrides from FirePhrases", "Overrides from Region". Be sure and comment the lines you are changing! FSL has a Patches page with sections of code to include in your Local file to allow you to fix bugs before the next release is issued. Put this code in it's own section and then clear out that section with each new release. Sometimes you might find it useful to override methods and insert print statements to trouble-shoot a problem you might be having. This is an excellent way to track problems and also learn how the code works. However, be sure and put this code in a separate section and clear it out after the problem is fixed so that you will not miss upgrades and bug fixes to this code in subsequent releases. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes142.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes142.txt deleted file mode 100644 index 6c99236ba7..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes142.txt +++ /dev/null @@ -1,2 +0,0 @@ -Some regions are creating Regional product files as a starting point for the local sites. You could simply have a section in your Local file labeled "Overrides from Region" to isolate these changes and keep them separate from your Local overrides. Alternatively, you could implement an inheritance scheme as follows: First, comment out all overrides in the Local file. Then create a Text Utility (Define Text Products Text Utilities window) that has a class e.g. Regional_ZFP, that includes desired overrides. Finally, you can import and inherit this class into your Local file to enable it's overrides. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes143.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes143.txt deleted file mode 100644 index 7d5c68cfa8..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes143.txt +++ /dev/null @@ -1,3 +0,0 @@ -Here's an example Text Utility override class. Note that it does not inherit from any other classes. - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes15.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes15.txt deleted file mode 100644 index ef10e50d33..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes15.txt +++ /dev/null @@ -1,4 +0,0 @@ -The Core Products required by the NWS have a more complex file structure to facilitate support and to help organize the overrides to the baseline functionality. Instead of a single Local file, the regional and local overrides are distributed throughout several files. - -The Site version of the formatter can be activated by setting the "displayName" in the Site Definition file. The product will then be displayed and run from the Local Formatter Dialog. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes16.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes16.txt deleted file mode 100644 index a624df8fc7..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes16.txt +++ /dev/null @@ -1,11 +0,0 @@ -Site Text Product -- Gathers all the overrides for the site's - version of the product - Inherits from: - Standard Text Product - Patch Overrides -- Only one file for all the products. - Contains FSL-issued patches. - Region Overrides -- Regional method overrides and - product-specific definitions - Site Overrides -- Site method overrides - Imports: - Site Definitions -- Site Product-specific definitions \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes17.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes17.txt deleted file mode 100644 index f8d41c8a16..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes17.txt +++ /dev/null @@ -1,2 +0,0 @@ -For each Core Product, there is also a Baseline version and a Regional version which can be run as a backup should the Site version fail. -These can be displayed from the Local Formatter Dialog --> Products --> Baseline or Region, respectively. diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes18.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes18.txt deleted file mode 100644 index 1e646b29a4..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes18.txt +++ /dev/null @@ -1,2 +0,0 @@ -From the table in the Quick Start Product Set-up section of the Text Product Reference Guide, choose a core product to set-up. It is best to start with a Tabular-type product first and then advance to Narrative-type products. From the Main Menu select GFE-->Define Text Products Dialog. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes19.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes19.txt deleted file mode 100644 index 8d492072c7..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes19.txt +++ /dev/null @@ -1 +0,0 @@ -In this section, we will see the Inheritance Hierarchy in action as we set-up the core products. To set-up the core product, we first define a set of generic edit areas which some products require to run $B!H(Bout-of-the-box.$B!I(B Next we suggest reading the Standard file documentation to become familiar with the settings for the product. There are three versions of each core product: Baseline, Regional, and Site. All products come delivered in the BASE user directory with the Baseline and Regional versions already activated and available from the $B!H(BProducts$B!I(B menu of the Local Formatter Dialog. The Site version must be activated by setting up a display name to appear in the Local Formatter dialog. Once activated, we can then run the product. At this point, we must customize the edit areas for for the local site. Finally, we verify that all three versions, Baseline, Regional, and Site run correctly with the customized edit areas. diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes2.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes2.txt deleted file mode 100644 index 2d4dfa7024..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes2.txt +++ /dev/null @@ -1,2 +0,0 @@ -This presentation describes the GFESuite Local Formatter Infrastructure and Core Products. An overview is given in the Introduction section. We describe how to set up the core products and how to make basic customizations to these products to meet the requirements of your local site. Finally, we will cover how to obtain help and give feedback when setting up the formatters. -Note that there is a section in the Text Products Reference Guide on $B!H(BUpgrades and Backward Compatibility$B!I(B to which you can refer if you have text products from prior releases. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes20.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes20.txt deleted file mode 100644 index 03e0074057..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes20.txt +++ /dev/null @@ -1 +0,0 @@ -Log in as a new user for setting up products. When you are satisfied with a product, you will want to move it to the SITE directory. Create the designated generic edit areas. Some of the core products set-up initially to run with these edit areas as the default \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes21.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes21.txt deleted file mode 100644 index 617a335cd3..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes21.txt +++ /dev/null @@ -1 +0,0 @@ -From the table in the Quick Start Product Set-up section of the Text Product Reference Guide, choose a core product to set-up. It is best to start with a Tabular-type product and then advance to Narrative-type products. From the Main Menu select GFE-->Define Text Products Dialog. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes22.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes22.txt deleted file mode 100644 index 0fc1fa8e3a..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes22.txt +++ /dev/null @@ -1,7 +0,0 @@ -In the left-hand window, you will see many Text Product files already installed at the BASE level. Many of the files are read-only and you do not need to know much about them. You will however be concerned with the Standard files that appear in this window. - -The right-hand window is the Text Utilities window. Here you will see several types of files: -Utility classes that make up the Text Product Infrastructure -Site Definition Files -Site Override Files -Region Override Files \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes23.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes23.txt deleted file mode 100644 index bb4c5f3354..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes23.txt +++ /dev/null @@ -1 +0,0 @@ -From the table in the Quick Start Product Set-up section of the Text Product Reference Guide, locate the name of the Standard file for the product you are configuring. View the Standard file and read the documentation at the beginning of the product to become familiar with it$B!G(Bs settings and required data. Pay particular attention to the $B!H(BEdit Areas Needed$B!I(B section to see if you need to set up additional edit areas. If so, create them at this time. Also, read the $B!H(BAdditional Information$B!I(B section to see if you need to perform any additional steps to get the product to run. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes24.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes24.txt deleted file mode 100644 index d6eb23e89d..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes24.txt +++ /dev/null @@ -1 +0,0 @@ -Next, we need to Modify the Site Definition file to set up a display name... \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes25.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes25.txt deleted file mode 100644 index fc6019f7ae..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes25.txt +++ /dev/null @@ -1 +0,0 @@ -Notice that within the Standard file, the display name is set to None. We want to change this in the Local file. Simply uncomment the line that sets the $B!H(BdisplayName$B!I(B definition... \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes26.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes26.txt deleted file mode 100644 index 17e98ffe79..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes26.txt +++ /dev/null @@ -1 +0,0 @@ -...and Save the Local file. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes27.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes27.txt deleted file mode 100644 index 73546f3605..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes27.txt +++ /dev/null @@ -1,2 +0,0 @@ -From the GFE Main Menu, select Products--> Local Formatters. You should now see your product listed in the dialog. Select it and Select Processor: Local from the Menu bar. This is so that you can monitor its progress from the Process Monitor window. Click Run Formatters. The product text will appear in a text output window. If it does not, check the Process Monitor terminal window for error messages. Refer to the Text Product Reference Guide Trouble-shooting section for help in locating the problem. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes28.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes28.txt deleted file mode 100644 index 17e72dc84d..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes28.txt +++ /dev/null @@ -1 +0,0 @@ -Now that your product runs with the generic edit areas, you will want to set-up the edit areas specific to your site. This will apply to products listed as $B!H(BdefaultEditAreas$B!I(B in the Edit Areas column of the Quick Start Product set-up table in the Text Reference Guide. Products listed as $B!H(BCombinations$B!I(B come pre-configured with edit areas appropriate to your site. In either case, you will may need to adjust the entries in the AreaDictionary for generating proper Area Headers. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes29.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes29.txt deleted file mode 100644 index a67453d056..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes29.txt +++ /dev/null @@ -1 +0,0 @@ -Within the Site Definition file, find the $B!H(BdefaultEditAreas$B!I(B Definition entry. For each edit area, you must specify the GFE edit area name and a label which you select... \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes30.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes30.txt deleted file mode 100644 index 1c17d426a2..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes30.txt +++ /dev/null @@ -1 +0,0 @@ -Here's an example. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes31.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes31.txt deleted file mode 100644 index aededeb1ef..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes31.txt +++ /dev/null @@ -1 +0,0 @@ -Alternatively, you may specify the edit area by giving a (latitude, longitude, dimension) tuple. The dimension is in kilometers and the the system will create a temporary edit area on-the-fly which is a square of the given dimension with the lat/lon as center. An example is shown here. Be sure that your dimension is large enough to include at least on grid point! \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes32.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes32.txt deleted file mode 100644 index f2e6d6b83f..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes32.txt +++ /dev/null @@ -1 +0,0 @@ -Once you have set up the edit areas for your site, you may want to adjust the entries in the AreaDictionary which is used to generate Area Headers for your product. From the Utilities Window of the Define Text Products Dialog, find the AreaDictionary and choose MB3-->Modify. You will see a Python dictionary with entries for the many edit areas, including the generic ones we set up previously. For each site-specific edit area you set up for your product, make sure the entry in the AreaDictionary is correct. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes33.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes33.txt deleted file mode 100644 index 676e52f6ef..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes33.txt +++ /dev/null @@ -1 +0,0 @@ -Here$B!G(Bs some example AreaDictionary entries... \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes34.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes34.txt deleted file mode 100644 index 0887d0bb20..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes34.txt +++ /dev/null @@ -1,3 +0,0 @@ -$B!D(Band a resulting Area Header. - -Make sure to save the AreaDictionary. You are ready to run your product again. This time it will produce an $B!H(Bout-of-the-box$B!I(B version using customized edit areas specific to your site. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes35.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes35.txt deleted file mode 100644 index c2da650c42..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes35.txt +++ /dev/null @@ -1 +0,0 @@ -Verify that the Site product runs successfully with your customized edit areas. Then verify that it works correctly for the Baseline and Regional versions. Since the Site Definition file is part of the Baseline and Regional versions, it is very important that whenever you make changes to the Site Definition file, you make sure that the Baseline and Regional versions still work. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes37.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes37.txt deleted file mode 100644 index 2c522d493e..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes37.txt +++ /dev/null @@ -1,2 +0,0 @@ -Before beginning this section, you should have a running "out-of-the-box" version of your selected text product using customized edit areas specific to your site. We will call this the "vanilla" version of the product. At this point, you are ready to further customize the product to your Local site's requirements. We will first examine the template format used for all smart text products, and then discuss customizations of the Definition section of each Local file. For Tabular-type products, this will cover most of the customizations you will want to make. Then we will cover further customization techniques for Narrative-type products. Finally, we will learn how to create Headlines in the text products. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes38.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes38.txt deleted file mode 100644 index dd41f3ac74..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes38.txt +++ /dev/null @@ -1,2 +0,0 @@ -Before beginning this section, you should have a running $B!H(Bout-of-the-box$B!I(B version of your selected text product using customized edit areas specific to your site. We will call this the $B!H(Bvanilla$B!I(B version of the product. At this point, you are ready to further customize the product to your Local site$B!G(Bs requirements. We will first examine the template format used for all smart text products, and then discuss customizations of the Definition section of each Local file. For Tabular-type products, this will cover most of the customizations you will want to make. Then we will cover further customization techniques for Narrative-type products. Finally, we will learn how to create Hazards in the text products. - \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes39.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes39.txt deleted file mode 100644 index 9532da0440..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes39.txt +++ /dev/null @@ -1 +0,0 @@ -All Smart Text Products follow a standard format. This provides consistency among the products which makes them easier to understand, customize, and support. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes4.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes4.txt deleted file mode 100644 index 2cc02e939b..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes4.txt +++ /dev/null @@ -1 +0,0 @@ -In this section, we introduce the basic concepts of the GFE Text Product Infrastructure including how they are invoked from the GFE Formatter Launcher Dialog. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes40.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes40.txt deleted file mode 100644 index d601b35968..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes40.txt +++ /dev/null @@ -1,2 +0,0 @@ -Recall the inheritance hierarchy in which each product has a Standard Text Product file. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes41.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes41.txt deleted file mode 100644 index d74df28a02..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes41.txt +++ /dev/null @@ -1 +0,0 @@ -At the beginning of each Standard file is a documentation section followed by an example of the resulting output. For the core products, the example output has been omitted since the NWS directives supply complete descriptions and examples of the required product formats. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes42.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes42.txt deleted file mode 100644 index 737d3d9a62..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes42.txt +++ /dev/null @@ -1 +0,0 @@ -The documentation section has each of the entries listed. The $B!H(BCustomization Points$B!I(B section is particularly useful as it describes the various flags and variables in the Definition section that allow you to customize the product. The Additional Information section will include common overrides. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes43.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes43.txt deleted file mode 100644 index 9035a584bb..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes43.txt +++ /dev/null @@ -1 +0,0 @@ -Next, the Standard file may have a VariableList to define any variables to be entered by the user at run-time. After the declaration of the Text Product class, the Definition section appears containing flags and variables pertinent to the product. In the Definition section, you can specify the $B!H(BdisplayName$B!I(B, the $B!H(BoutputFile$B!I(B and the edit areas over which the product will run. Most customizations for tabular products will occur in this section. The class definition and contructor (__init__ method) set up the inheritance of the TextRules and SampleAnalysis classes. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes44.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes44.txt deleted file mode 100644 index 40e06e3df6..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes44.txt +++ /dev/null @@ -1,9 +0,0 @@ -Next, we have the $B!H(BgenerateProducts$B!I(B method which conducts the general flow of product execution. It consists of the following methods and steps: - _getVariables: Get the variables entered by the user from the VariableList definition and set up any product specific variables. - _getAreaList: Get the list of edit areas over which the product will run. - _determineTimeRanges: Calculate the time ranges over which we$B!G(Bll need to sample the data. - _sampleData: Sample the data - _preProcessProduct: Create the product header. - Now we loop through each edit area producing a header (_preProcessArea), the product text (_makeProduct), and a footer (_postProcessArea). - _postProcessProduct: Create product footer. - Return the resulting text string. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes45.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes45.txt deleted file mode 100644 index 10d2be689a..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes45.txt +++ /dev/null @@ -1,3 +0,0 @@ -After the $B!H(BgenerateProduct$B!I(B method, each of the sub-methods appears. This is the $B!H(Bmeat$B!I(B of the product where its unique format is created. - -Note that the methods and variables in the Standard file are prefixed with an underscore. For example, $B!H(B_getVariables$B!I(B, $B!H(B_areaList$B!I(B, etc. It is imperative that all files inheriting from the Text Product infrastructure adhere to this rule to avoid inadvertent name conflicts with the library methods. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes46.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes46.txt deleted file mode 100644 index 43d48827ce..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes46.txt +++ /dev/null @@ -1 +0,0 @@ -Next, the product-specific methods will appear. For many products, there will be a _getAnalysisList method specifying which weather elements to sample and what summary statistics to generate for each of them. In the next section, there may be methods from the infrastructure which have been altered to operate differently for this particular product. Finally, we will find any product component definitions. These apply to narrative products and we will learn more about them in a later section. Once again, remember that for the core products, this file is read-only. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes47.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes47.txt deleted file mode 100644 index a936cf9074..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes47.txt +++ /dev/null @@ -1 +0,0 @@ -The Site Definition File is imported into the Text Product along with the Standard file such that the Site Definitions will override those in the baseline Standard file. Note that the Definition section is simply a Python dictionary so we can set the entries just as we would any dictionary. We will now explore in detail how to set the Definition section variables to customize your product. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes48.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes48.txt deleted file mode 100644 index 0fb2d291af..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes48.txt +++ /dev/null @@ -1 +0,0 @@ -The Site Overrides File is also imported into the Text Product along with the Standard file and Site Definitions File such that the methods in the Site Overrides File will override those in the baseline Standard file as well as those in the Regional Overrides File. We will now explore in detail how to include override methods to customize your product. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes49.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes49.txt deleted file mode 100644 index 1e3bd280b7..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes49.txt +++ /dev/null @@ -1 +0,0 @@ -Each standard file has a text product definition similar to that shown for the CCF. The first line declares our text product and states that it $B!H(Binherits$B!I(B all the library methods from the TextRules and SampleAnalysis classes. The next line begins the Definition section which is simply a Python dictionary describing settings for the text product. The following lines define the $B!H(Btype$B!I(B of product and $B!H(BdisplayName$B!I(B. The Standard file is $B!H(Binactivated$B!I(B since the $B!H(BdisplayName$B!I(B is set to None. Another flag, $B!H(BalwaysIncludeSnow$B!I(B appears for this product. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes5.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes5.txt deleted file mode 100644 index 574ff2f56c..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes5.txt +++ /dev/null @@ -1 +0,0 @@ -The GFESuite supports the creation of text products in both tabular and narrative forms. The Local Formatters delivered with the release are considered $B!H(Btemplates$B!I(B in that they meet the NWS directives for the standard core products. You will want to customize them to your local site$B!G(Bs requirements. The wording of the narrative products is not considered to be of extremely high quality, but can be characterized as accurate and $B!H(Bgood enough.$B!I(B Also, as they become more widely used, we expect to identify bugs and important enhancements. Since the products are written in Python, these can be easily patched into the existing formatters. The infrastructure upon which these products are built consists of C++ and Python modules and provides the framework upon which new local products can be created. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes50.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes50.txt deleted file mode 100644 index 026001b231..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes50.txt +++ /dev/null @@ -1 +0,0 @@ -The entries in the Definition section can be overridden in the Site Definition file which looks similar to that above. The first line declares our Local product and states that it inherits all the functionality from the Standard file, in this case, the CCF product. The next line makes a copy of the Definition from the Standard file. We can now override Definition entries by changing their value in the Site Definition file as we did previously for the $B!H(BdisplayName$B!I(B. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes51.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes51.txt deleted file mode 100644 index be557579cd..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes51.txt +++ /dev/null @@ -1 +0,0 @@ -Here we have changed the value of the $B!H(BalwaysIncludeSnow$B!I(B flag. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes52.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes52.txt deleted file mode 100644 index 538fe7660d..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes52.txt +++ /dev/null @@ -1 +0,0 @@ -Note that, in general, flags in the Site Definition file are commented out and set as the opposite of the Standard file. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes53.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes53.txt deleted file mode 100644 index bd76361e26..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes53.txt +++ /dev/null @@ -1 +0,0 @@ -So to modify the value of a flag, you must only remove the comment symbol (#) from the beginning of the file. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes54.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes54.txt deleted file mode 100644 index 9fbb27c51a..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes54.txt +++ /dev/null @@ -1,2 +0,0 @@ -Here's an example of a product header for the ZFP product. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes55.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes55.txt deleted file mode 100644 index 99b504d380..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes55.txt +++ /dev/null @@ -1 +0,0 @@ -It is also useful to override methods from the Standard file or the Text Product Infrastructure. This means that instead of modifying the read-only files, you copy the code into your Site Overrides file and modify it there. Because of the inheritance hierarchy, the code within your Site Overrides file takes precedence and is executed instead of the original. To do so, make sure you copy the method within the class definition and preserve the indentation. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes56.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes56.txt deleted file mode 100644 index b35920099b..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes56.txt +++ /dev/null @@ -1 +0,0 @@ -Here$B!G(Bs an example where we have overridden _postProcessProduct method from the Standard CCF file into the CCF Site Overrides file and modified it$B!G(Bs functioning. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes57.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes57.txt deleted file mode 100644 index eeea3ee3df..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes57.txt +++ /dev/null @@ -1 +0,0 @@ -Within the Standard file, there are various arguments and objects with which we deal. They are listed here with a basic description. For more detailed information on these objects, see: Arguments in the Standard Product File section of the Text Product Reference Guide. diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes58.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes58.txt deleted file mode 100644 index 0d2f3700a2..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes58.txt +++ /dev/null @@ -1,2 +0,0 @@ -For Tabular products, most product settings will be found in the Definition section. For Narrative products, however, there are many additional customizations you may want to make. -In this section, we$B!G(Bll see how to customize Narrative products by locating and setting thresholds and variables as well as altering the product component definitions and narrative definitions through the configurable issuance capability. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes6.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes6.txt deleted file mode 100644 index d14ebda23f..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes6.txt +++ /dev/null @@ -1 +0,0 @@ -In order to work with the GFESuite Text Products and Infrastructure, you should have completed GFESuite Training including some experience with Smart Tools and/or Smart Init. You should also be familiar with basic Python concepts and basic object-oriented principles. For this information, see the GFESuite Python Tutorial and Programming Guidelines \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes60.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes60.txt deleted file mode 100644 index e30b4ed022..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes60.txt +++ /dev/null @@ -1,2 +0,0 @@ -Recall the Infrastructure and inheritance hierarchy with the SampleAnalysis and TextRules libraries. We will now learn how to override methods from these libraries. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes61.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes61.txt deleted file mode 100644 index 225c3d9288..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes61.txt +++ /dev/null @@ -1 +0,0 @@ -Thresholds and variables defined in the classes of the Text Product Infrastructure are overridden by repeating them in the Site Overrides File and modifying them there. Many thresholds and variables may be important to your product. They may already be included in the Standard file. If so and you want to adjust them, copy them into your Site Overrides file from the Standard file. If not, you will find them in the library modules which can be Viewed from the Utilities Window of the Define Text Products dialog. They can then be copied into the Site Overrides File and modified. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes62.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes62.txt deleted file mode 100644 index bc58e87210..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes62.txt +++ /dev/null @@ -1 +0,0 @@ -Here$B!G(Bs an example of a threshold that has been copied into the ZFP Override file from the infrastructure. In Part 2 we will learn how to find WHICH thresholds and variables to override and where to find them. For now, note that it was copied into the body of the TextProduct class AFTER the class declaration, that the entire threshold method was copied, and the indentation was preserved. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes63.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes63.txt deleted file mode 100644 index 519e6453ab..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes63.txt +++ /dev/null @@ -1 +0,0 @@ -This is a temporal coverage threshold copied from the SampleAnalysis class. For a grid to be included in the analysis, it must cover this percentage of the time range of interest OR be completely included within the time range. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes64.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes64.txt deleted file mode 100644 index f92b9b2cf5..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes64.txt +++ /dev/null @@ -1 +0,0 @@ -So in this case, with a temporalCoverage_percentage of 20, only grids B,C, and D will be included in the analysis. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes65.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes65.txt deleted file mode 100644 index 6f7fd66c45..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes65.txt +++ /dev/null @@ -1,3 +0,0 @@ -Thresholds and variables are named with suffixes to indicate the type of value returned. Most of these should be clear. We$B!G(Bll look more closely at dictionaries and non-linear values. - -For a more complete list of naming convention suffixes, see: Naming Conventions section of the Text Product Reference Guide. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes66.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes66.txt deleted file mode 100644 index dd9a85b44b..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes66.txt +++ /dev/null @@ -1 +0,0 @@ -Here is a dictionary of phrase descriptors. Note that it is a typical Python dictionary with an entry for each weather element. This dictionary is used by the TextRules phrase methods to begin phrases such as $B!H(BWinds 20 knots$B!I(B or $B!H(BWind chill readings 20 below zero.$B!I(B \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes67.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes67.txt deleted file mode 100644 index fe3596eb47..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes67.txt +++ /dev/null @@ -1 +0,0 @@ -If you would like to change the default settings, you can copy this dictionary into your Site Overrides file. However, this particular dictionary is very large and, most likely, you will only want to override one or two entries. You can use the trick shown in which the method definition and argument list appear as in the original file, but the second line retrieves the entire dictionary. Now you can simply override selected entries and return the altered dictionary. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes68.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes68.txt deleted file mode 100644 index 76d4c2d381..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes68.txt +++ /dev/null @@ -1 +0,0 @@ -For added flexibility, the entry for a dictionary value can be the name of a method. Here$B!G(Bs an example for which we might want to base the descriptor for the PoP phrase on the current data e.g. $B!H(BProbability of precipitation 20 percent.$B!I(B or $B!H(BAreal coverage of precipitation 20 percent$B!I(B. We specify the name of the method in the dictionary... \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes69.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes69.txt deleted file mode 100644 index d6d46e9393..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes69.txt +++ /dev/null @@ -1 +0,0 @@ -$B!D(Band then include the method which should expect the arguments shown. We can then include logic to base our returned value on current data. We$B!G(Bll learn more about these arguments and accessing data in later sections. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes7.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes7.txt deleted file mode 100644 index d35a415747..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes7.txt +++ /dev/null @@ -1 +0,0 @@ -To run Text Products from the GFE, from the Main Menu, choose Products-->Formatter Launcher. Select the product(s) to run. You can select a source database if you like. You can adjust any zone combinations and then run the product using the $B!H(BRun All$B!I(B button. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes70.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes70.txt deleted file mode 100644 index 3c61063fe3..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes70.txt +++ /dev/null @@ -1 +0,0 @@ -The dictionary may also have a special $B!H(Botherwise$B!I(B entry. If the key we are seeking is not found, this value will be used. In this case we want to use the $B!H!D(Bthen$B!I(B string as a connector for long phrases EXCEPT for Wx and Sky. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes71.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes71.txt deleted file mode 100644 index bed8f3504c..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes71.txt +++ /dev/null @@ -1 +0,0 @@ -The $B!H(Bminimum_range$B!I(B threshold sets up a minimum reported range. In this example, we are requesting that wind phrases report a range of AT LEAST 5 mph. Sometimes we want to set thresholds differently depending on the value of the affected data. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes72.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes72.txt deleted file mode 100644 index 90e6f7471a..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes72.txt +++ /dev/null @@ -1,2 +0,0 @@ -We might want the minimum range to vary based on the magnitude of the winds. Any threshold with the $B!H(BnlValue$B!I(B suffix can be set as a dictionary of non-linear values. Each entry specifies a (lowVal, highVal) range such that if the wind magnitude is greater or equal to the first value AND less than the second value, the threshold will be set to the corresponding dictionary value. The special $B!H(Bdefault$B!I(B entry will be used if the data value in question does not fall into any of the ranges given. It is recommended that you always include a $B!H(Bdefault$B!I(B entry. -It is the responsibility of the code using the non-linear threshold to apply it to the data value. For more examples and a complete description of non-linear thresholds see the Strategy for Non-linear Thresholds section of the Text Product Reference Guide. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes73.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes73.txt deleted file mode 100644 index 3816b4293a..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes73.txt +++ /dev/null @@ -1 +0,0 @@ -The thresholds and variables from the SampleAnalysis class have these arguments from which you can access information upon which to base returned values. For more details see: Arguments to SampleAnalysis Methods section of the Text Product Reference Guide. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes74.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes74.txt deleted file mode 100644 index c4ea286ec1..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes74.txt +++ /dev/null @@ -1,4 +0,0 @@ -The thresholds and variables from the TextRules classes some or all of these arguments from which you can access information upon which to base returned values. -In the Advanced User Guide, you will learn much more about the Narrative $B!H(Btree$B!I(B and $B!H(Bnode$B!I(B arguments. For now, know that there are some simple ways that you can make use of them. - -For example... \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes75.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes75.txt deleted file mode 100644 index fc4105b6a9..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes75.txt +++ /dev/null @@ -1 +0,0 @@ -Here is the gust_wind_difference_threshold. Note that it is expecting the $B!H(Btree$B!I(B and $B!H(Bnode$B!I(B arguments. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes76.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes76.txt deleted file mode 100644 index 477b71b357..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes76.txt +++ /dev/null @@ -1 +0,0 @@ -Using information contained in the tree, we can test for the current edit area and return a value based on the result. We use the special helper method, $B!H(BcurrentAreaContains$B!I(B, which checks to see if the current edit area is equal to any of the listed edit areas OR if the current edit area is a Combination which contains ANY of the edit areas listed. We can then return different values of for gust_wind_difference for different edit areas. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes77.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes77.txt deleted file mode 100644 index a1f47fa8e4..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes77.txt +++ /dev/null @@ -1 +0,0 @@ -We may also check the current component name upon which to base the returned value. We will learn more about product components in the next section. There is more information available about the $B!H(Btree$B!I(B and $B!H(Bnode$B!I(B arguments in the Arguments to TextRules Methods section of the Text Product Reference Guide. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes78.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes78.txt deleted file mode 100644 index 9371549c2c..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes78.txt +++ /dev/null @@ -1 +0,0 @@ -If you want to customize the wording for describing various weather conditions, you can do so by overriding the $B!H(BwxCoverageDescriptors$B!I(B, $B!H(BwxTypeDescriptors$B!I(B, $B!H(BwxIntensityDescriptors$B!I(B, and/or $B!H(BwxAttributeDescriptors$B!I(B In the example, we use pattern-matching syntax so that any weather key with a type of RW will be called $B!H(Bshowers$B!I(B instead of the default, $B!H(Brain showers$B!I(B. This is a very simple case. This mechanism affords you much control over weather descriptors. There is more information and examples at: Customizing Weather Descriptors section of the Text Product Reference Guide. diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes79.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes79.txt deleted file mode 100644 index e92f84736d..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes79.txt +++ /dev/null @@ -1 +0,0 @@ -If you haven$B!G(Bt already, you will need to activate the displayName in the ZFP Site Definition file to work with in these exercises. diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes8.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes8.txt deleted file mode 100644 index 084d1eaaf3..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes8.txt +++ /dev/null @@ -1 +0,0 @@ -When the product is complete, the product tab will turn blue and the editor window of the Formatter Launcher will appear. You may further edit the product and optionally save it and/or transmit it. The Formatter Launcher has many other features which are documented in the online documentation. diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes81.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes81.txt deleted file mode 100644 index 250ccd1931..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes81.txt +++ /dev/null @@ -1,3 +0,0 @@ -If you want to customize the wording for describing various weather conditions, you can do so by overriding the "wxCoverageDescriptors", "wxTypeDescriptors", "wxIntensityDescriptors", and/or "wxAttributeDescriptors" In the example, we use pattern-matching syntax so that any weather key with a type of RW will be called "showers" instead of the default, "rain showers". This is a very simple case. This mechanism affords you much control over weather descriptors. There is more information and examples at: Customizing Weather Descriptors section of the Text Product Reference Guide. - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes82.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes82.txt deleted file mode 100644 index 93a8a52afd..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes82.txt +++ /dev/null @@ -1,3 +0,0 @@ -If you haven't already, you will need to activate the ZFP_Local file to work with in these exercises. - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes86.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes86.txt deleted file mode 100644 index 3420836eb3..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes86.txt +++ /dev/null @@ -1 +0,0 @@ -Here$B!G(Bs the $B!H(BanalysisList$B!I(B showing weather elements and corresponding analysis methods. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes87.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes87.txt deleted file mode 100644 index 15acd62519..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes87.txt +++ /dev/null @@ -1 +0,0 @@ -Here$B!G(Bs the $B!H(BphraseList$B!I(B showing the phrase methods in the order they are to appear in the component. diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes88.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes88.txt deleted file mode 100644 index c9da38ecd2..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes88.txt +++ /dev/null @@ -1 +0,0 @@ -Here$B!G(Bs an example of the resulting output for this component. diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes89.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes89.txt deleted file mode 100644 index 853cf60fcc..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes89.txt +++ /dev/null @@ -1,2 +0,0 @@ -We say that the phrases of the narrative products are $B!H(Banalysis-driven$B!I(B because if we change the analysis method in the product component, the character of the phrase will change. -Here we are asking to have a minimum and maximum value reported for the Wind. diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes9.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes9.txt deleted file mode 100644 index ad475037d1..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes9.txt +++ /dev/null @@ -1 +0,0 @@ -This diagram shows the steps to producing a Text Product using the Infrastructure. First, the grids from the database are $B!H(Bsampled$B!I(B to produce a set of histograms... \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes90.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes90.txt deleted file mode 100644 index aa1c5588b9..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes90.txt +++ /dev/null @@ -1 +0,0 @@ -We can change the analysis for Wind by copying the ENTIRE component definition into ourOverrides file, meaning everything within the rectangle, and... diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes91.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes91.txt deleted file mode 100644 index 106a53f5dd..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes91.txt +++ /dev/null @@ -1 +0,0 @@ -$B!D(Bchanging the definition there. diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes92.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes92.txt deleted file mode 100644 index 938e534193..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes92.txt +++ /dev/null @@ -1 +0,0 @@ -This shows the different phrasing that results when we alter the analysis method. You can control the phrasing in many ways through this mechanism. diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes93.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes93.txt deleted file mode 100644 index 8cfb919a94..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes93.txt +++ /dev/null @@ -1,3 +0,0 @@ -The SampleAnalysis Reference found at: -Sample Analysis Reference section in the Text Product Reference Guide -lists all the analysis methods and describes their result. diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes94.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes94.txt deleted file mode 100644 index 8ae941de7e..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes94.txt +++ /dev/null @@ -1 +0,0 @@ -You can use the Reference to learn about other analysis methods. For example, the $B!H(BvectorModeratedMinMax$B!I(B analysis method filters the min/max values to eliminate outlying high and low values based on information in the $B!H(Bmoderated_dict$B!I(B. diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes95.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes95.txt deleted file mode 100644 index b218a6e88f..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes95.txt +++ /dev/null @@ -1 +0,0 @@ -The Reference also lists the thresholds and variables associated with the analysis methods. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes96.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes96.txt deleted file mode 100644 index 77235d5170..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes96.txt +++ /dev/null @@ -1 +0,0 @@ -Here$B!G(Bs the $B!H(Bmoderated_dict$B!I(B which can be copied from the SampleAnalysis module and overridden in your Overrides file to change the default percentages for filtering the minimum and maximum data values. diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes97.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes97.txt deleted file mode 100644 index bf85931ebf..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes97.txt +++ /dev/null @@ -1 +0,0 @@ -In general, the $B!H(BmoderatedMinMax$B!I(B yields smaller reported ranges as illustrated here. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes98.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes98.txt deleted file mode 100644 index a458c7287b..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes98.txt +++ /dev/null @@ -1 +0,0 @@ -In this set-up, the analysis will be done over the entire time period for the component. For example, if our component is 12 hours long, an average Wind value over the 12 hours will be reported. diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes99.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes99.txt deleted file mode 100644 index 22b30f5b4a..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes99.txt +++ /dev/null @@ -1 +0,0 @@ -In many cases, we would like to increase the temporal resolution reported. To do so, we can add an optional entry to specify the time period over which we want statistics. In this example, we are requesting that a vectorAvg be calculated for every 6-hour period within the component time period. So if our component is 12 hours long, we will get a pair of statistics, one for the first 6 hours and another for the second 6 hours. diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide1.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide1.JPG deleted file mode 100644 index 1c287317ac..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide1.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide1.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide1.html deleted file mode 100644 index 5507d08c44..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide1.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    1. GFESuite Advanced Text Product Narrative User Guide

    -
    -Next Slide

    - - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide10.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide10.JPG deleted file mode 100644 index 5486c4bb13..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide10.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide10.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide10.html deleted file mode 100644 index f3f762b668..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide10.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -
    -

    Text Formatter User Guide for Narrative Products

    -

    10. Forecast Narrative Engine - Infrastructure Engine

    -
    -Previous Slide Next Slide

    -

    In addition to the TextRules and SampleAnalysis libraries, and the Standard and Local files, we have the ForecastNarrative engine which interprets the narrative definition.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide100.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide100.JPG deleted file mode 100644 index eb9ab96ed8..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide100.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide100.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide100.html deleted file mode 100644 index 1d37cc2019..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide100.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    100. Narrative Phrases - Word Method

    -
    -Previous Slide Next Slide

    -

    Here's an example of a wordMethod. It.s job is to set the "words" attribute for one sub-phrase. (It is not concerned with connectors or time descriptors which are dealt with at the phrase level when the sub-phrases are assembled.) A wordMethod must always return using the "self.setWords" method. In this case, the words are produced by the simple_vector_phrase. We'll examine these methods in more detail...


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide101.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide101.JPG deleted file mode 100644 index 703f82614c..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide101.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide101.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide101.html deleted file mode 100644 index 79f2187f8d..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide101.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    101. Narrative Phrases - Word Method

    -
    -Previous Slide Next Slide

    -

    Given a node and a text string of words, the setWords method first sets the "words" attribute for the given sub-phrase node:
         node.set(.words., words)

    Then it returns the "self.DONE()" flag so that the word method will not be called again. IT IS VERY IMPORTANT that a word method always return the "self.DONE()" flag. If it does not, an infinite loop could occur. We will look at this more closely in the Trouble-shooting section.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide102.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide102.JPG deleted file mode 100644 index fd66cea608..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide102.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide102.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide102.html deleted file mode 100644 index 45c9b2fbf8..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide102.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    102. Narrative Phrases - Word Method

    -
    -Previous Slide Next Slide

    -

    There are some helpful infrastructure methods used by wordMethods. First, the "getStatDict" method returns the "statDict" for the node. This is just like the statistics dictionary created for Tabular products and covers the statistics for a sub-phrase timeRange and edit area.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide103.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide103.JPG deleted file mode 100644 index d86d42cc33..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide103.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide103.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide103.html deleted file mode 100644 index 406ba5d966..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide103.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    103. Narrative Phrases - Word Method

    -
    -Previous Slide Next Slide

    -

    Thus, the "getStats" method can be used to access statistics from the dictionary for a particular weather element. "getStats" returns None if there is no entry, so wordMethods should always check for this case.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide104.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide104.JPG deleted file mode 100644 index 959ad64e84..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide104.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide104.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide104.html deleted file mode 100644 index 5b9d4e2c9c..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide104.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    104. Narrative Phrases - Word Method

    -
    -Previous Slide Next Slide

    -

    The "getValue" method facilitates the analysis-driven nature of the phrases. Given a statistic and dataType, it returns a statistic according to the requested method. So in this case, we are requesting a MinMax magnitude tuple with a direction. Since the given statistic is already in the proper format, it simply returns it...


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide105.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide105.JPG deleted file mode 100644 index 60a6e97f8a..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide105.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide105.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide105.html deleted file mode 100644 index 4cfebc9a9c..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide105.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    105. Narrative Phrases - Word Method

    -
    -Previous Slide Next Slide

    -

    In this case, however, the statistic is a single value, so the "getValue" method creates a tuple and returns a minMax where the min==max. Now the wordMethod can work with a range. The "getValue" method can be "Min", "Max", "Average", "MinMax", or "Sum".


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide106.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide106.JPG deleted file mode 100644 index d1a6ac0517..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide106.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide106.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide106.html deleted file mode 100644 index 5f3f166cee..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide106.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    106. Narrative Phrases - Word Method

    -
    -Previous Slide Next Slide

    -

    Here we see these infrastructure methods in use in the "simple_vector_phrase". First, we use the "getStatDict" method to obtain the "statDict". Then we can access the raw statistic using "getStats". Finally, we use "getValue" to guarantee us a range with which to work.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide107.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide107.JPG deleted file mode 100644 index ff8d882aae..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide107.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide107.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide107.html deleted file mode 100644 index 28de7fa547..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide107.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    107. Narrative Phrases - Standard Phrase Methods

    -
    -Previous Slide Next Slide

    -

    Now we will look at the phrase-level methods that work together to build a phrase.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide108.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide108.JPG deleted file mode 100644 index 58f5126ce8..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide108.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide108.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide108.html deleted file mode 100644 index 95cb724350..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide108.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    108. Narrative Phrases - Standard Phrase Methods

    -
    -Previous Slide Next Slide

    -


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide109.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide109.JPG deleted file mode 100644 index 8a6952adfd..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide109.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide109.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide109.html deleted file mode 100644 index f8cd9467cd..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide109.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    109. Narrative Phrases - Sub-Phrase Consolidation

    -
    -Previous Slide Next Slide

    -

    This method separates the primary elements that are constant throughout the phrase from those that are not. In the wind_withGusts_phrase, both Wind and WindGust are primary elements so phrase consolidation will catch both of these cases.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide11.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide11.JPG deleted file mode 100644 index cd4d2a1494..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide11.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide11.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide11.html deleted file mode 100644 index 2fa31b3bc6..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide11.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    11. Forecast Narrative Engine - Forecast Narrative Engine

    -
    -Previous Slide Next Slide

    -

    Given a narrative definition, the ForecastNarrative engine interprets the component and phrase definitions. It reads the analysisList entries, samples the data, and performs the requested analysis to create statistics. From this information, it builds a Narrative Tree data structure which it processes to return a text result. We will examine this entire process in detail.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide110.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide110.JPG deleted file mode 100644 index ae78cd9f26..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide110.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide110.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide110.html deleted file mode 100644 index 758a076bb5..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide110.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    110. Narrative Phrases - Sub-Phrase Consolidation

    -
    -Previous Slide Next Slide

    -

    Phrase consolidation uses the "splitPhrase" method which is given a tree, phrase, and list of elements to "split off". In this example, we end up with the original wind_withGusts_phrase in which WindGust has been diabled. The "getStatDict" method examines the list of disabled elements and removes them from the "statDict". We also spawn a new phrase for WindGust. The "gust_phrase" is given as the "phraseDef" in the elementInfo for WindGust. The new phrase is created as follows:
          newPhrase = tree.addPhraseDef(phrase, elementInfo.phraseDef)


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide111.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide111.JPG deleted file mode 100644 index a3f3c2a5a1..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide111.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide111.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide111.html deleted file mode 100644 index 5ebbf33eb0..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide111.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    111. Narrative Phrases - Standard Phrase Methods

    -
    -Previous Slide Next Slide

    -

    The "combinePhraseStats" method combines sub-phrases that have similar statistics. This will prevent redundant phrasing like "N winds 10 mph becoming N 10 mph in the afternoon".


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide112.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide112.JPG deleted file mode 100644 index 76aacb4999..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide112.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide112.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide112.html deleted file mode 100644 index 3536455696..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide112.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    112. Narrative Phrases - Sub-Phrase Combining

    -
    -Previous Slide Next Slide

    -

    Here is a hierarchy of methods that perform this task. The "combineChildren" method loops through the children of a node (in this case, the sub-phrases) and tries to combine them according to rules supplied by the "combineStats" method. This method, in turn, checks the dataType of the first element of the phrase and uses that as a criteria for combining.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide113.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide113.JPG deleted file mode 100644 index 76eec7a543..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide113.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide113.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide113.html deleted file mode 100644 index bd0671ef87..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide113.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    113. Narrative Phrases - Sub-Phrase Combining

    -
    -Previous Slide Next Slide

    -

    Here's the "combineVectors" method which calls "getVectorData" to obtain statistics for comparison for each of the sub-phrases it is given. It then calls "checkVectorDifference" to determine whether or not the sub-phrases can be combined. If so, it re-applies range adjustments and then creates a new vector value using "vectorAverage".


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide114.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide114.JPG deleted file mode 100644 index 59a8eee3e5..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide114.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide114.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide114.html deleted file mode 100644 index a01eee0a9d..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide114.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    114. Narrative Phrases - Sub-Phrase Combining

    -
    -Previous Slide Next Slide

    -

    "getVectorData" is given a tree, sub-phrase, elementName and access method. It returns statistics for the sub-phrase according to the access method. It also returns a text version of the direction value.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide115.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide115.JPG deleted file mode 100644 index 76aacb4999..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide115.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide115.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide115.html deleted file mode 100644 index 13629344fe..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide115.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    115. Narrative Phrases - Sub-Phrase Combining

    -
    -Previous Slide Next Slide

    -

    Here is a hierarchy of methods that perform this task. The "combineChildren" method loops through the children of a node (in this case, the sub-phrases) and tries to combine them according to rules supplied by the "combineStats" method. This method, in turn, checks the dataType of the first element of the phrase and uses that as a criteria for combining.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide116.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide116.JPG deleted file mode 100644 index 76eec7a543..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide116.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide116.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide116.html deleted file mode 100644 index e1d3cf0316..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide116.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    116. Narrative Phrases - Sub-Phrase Combining

    -
    -Previous Slide Next Slide

    -

    Here's the "combineVectors" method which calls "getVectorData" to obtain statistics for comparison for each of the sub-phrases it is given. It then calls "checkVectorDifference" to determine whether or not the sub-phrases can be combined. If so, it re-applies range adjustments and then creates a new vector value using "vectorAverage".


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide117.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide117.JPG deleted file mode 100644 index 59a8eee3e5..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide117.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide117.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide117.html deleted file mode 100644 index 655bf2b2dc..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide117.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    117. Narrative Phrases - Sub-Phrase Combining

    -
    -Previous Slide Next Slide

    -

    "getVectorData" is given a tree, sub-phrase, elementName and access method. It returns statistics for the sub-phrase according to the access method. It also returns a text version of the direction value.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide118.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide118.JPG deleted file mode 100644 index d9607eabba..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide118.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide118.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide118.html deleted file mode 100644 index 46aa1eb70c..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide118.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    118. Narrative Phrases - Standard Phrase Methods

    -
    -Previous Slide Next Slide

    -


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide119.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide119.JPG deleted file mode 100644 index 5da8e9710c..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide119.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide119.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide119.html deleted file mode 100644 index d391d2576f..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide119.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    119. Narrative Phrases - Consolidate Direction

    -
    -Previous Slide Next Slide

    -

    If a vector direction is progressive and magnitudes are similar, use only the first and last sub-phrases.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide12.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide12.JPG deleted file mode 100644 index a98f5f4092..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide12.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide12.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide12.html deleted file mode 100644 index 680fa5e2a4..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide12.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    12. Forecast Narrative Engine - Narrative

    -
    -Previous Slide Next Slide

    -

    Here is an example of a Narrative product which consists of a set of components (consisting of phrases for various weather elements) over a series of time periods for one edit area.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide120.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide120.JPG deleted file mode 100644 index b2dee5684e..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide120.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide120.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide120.html deleted file mode 100644 index 39c037e8cc..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide120.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    120. Narrative Phrases - Standard Phrase Methods

    -
    -Previous Slide Next Slide

    -


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide121.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide121.JPG deleted file mode 100644 index e88b6f5a8d..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide121.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide121.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide121.html deleted file mode 100644 index 4dbbb761c4..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide121.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    121. Narrative Phrases - Consolidate Trends

    -
    -Previous Slide Next Slide

    -

    If there is a progression in magnitudes with similar directions, use only the first and last sub-phrases with no time descriptor.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide122.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide122.JPG deleted file mode 100644 index e50579779e..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide122.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide122.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide122.html deleted file mode 100644 index d07afafbf6..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide122.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    122. Narrative Phrases - Standard Phrase Methods

    -
    -Previous Slide Next Slide

    -

    It is possible to set up a phrase to report ONLY the most important sub-phrase. This is done by adding entries to the "mostImportant_dict" and the "mostImportant_descriptor" (ConfigVariables). For example, for the WindChill phrase, we only want to report the sub-phrase that has the lowest value. So instead of "Wind chill readings 5 below to 15 below in the early morning then zero to 10 below in the afternoon, " we report "Lowest wind chill readings 5 below to 15 below in the early morning."
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide123.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide123.JPG deleted file mode 100644 index 5eccee7f82..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide123.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide123.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide123.html deleted file mode 100644 index f60b8ee557..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide123.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    123. Narrative Phrases - Standard Phrase Methods

    -
    -Previous Slide Next Slide

    -

    Despite all our efforts to combine sub-phrases based on statistics, we may still end up with identical words. The "combineWords" method checks consecutive sub-phrases and combines any with identical wording.

    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide124.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide124.JPG deleted file mode 100644 index cd58453c12..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide124.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide124.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide124.html deleted file mode 100644 index 139264479a..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide124.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    124. Narrative Phrases - Trigger Condition

    -
    -Previous Slide Next Slide

    -

    All the phraseMethods to this point can be executed immediately. The "combineWords" method, however, must wait until all sub-phrase "words" have been set before it can successfully complete. So it first makes this check. If any sub-phrase is missing a "words" attribute, it returns immediately knowing it will be called again on the next pass through the tree. We say that the Trigger Condition for this method is that all sub-phrases have the "words" attribute set.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide125.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide125.JPG deleted file mode 100644 index b719999694..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide125.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide125.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide125.html deleted file mode 100644 index 48c1a2caf8..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide125.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    125. Narrative Phrases - Sub-Phrase Combining Identical Words

    -
    -Previous Slide Next Slide

    -

    If sub-phrases can be combined, the "combine2Children" method is called. It takes a tree, phrase, and 2 child nodes and combines them into a new child taking the "words" attribute of the first child.

    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide126.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide126.JPG deleted file mode 100644 index 1d8447dd90..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide126.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide126.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide126.html deleted file mode 100644 index 48915ea644..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide126.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    126. Narrative Phrases - Standard Phrase Methods

    -
    -Previous Slide Next Slide

    -

    We have already mentioned the "fillNulls" method as part of the Narrative Strategy for Handling Null Values.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide127.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide127.JPG deleted file mode 100644 index e55ee505ee..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide127.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide127.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide127.html deleted file mode 100644 index 7535f8671f..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide127.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    127. Narrative Phrases - Fill Null Values

    -
    -Previous Slide Next Slide

    -

    It also has the Trigger Condition that all sub-phrases must have the "words" attribute set. Recall that the wordMethods set the "words" attribute to "null" if the values are below the null_nlValue. The job of "fillNulls" is to fill in the appropriate words using the "first_null_phrase" and "null_phrase" values. After doing so, it sets the "null" attribute for the sub-phrase to 1 for subsequent processing. This cannot be done in the wordMethod since, at that point, we cannot be sure whether the sub-phrase will end up being the first. Finally, we must collapse empty word sub-phrases.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide128.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide128.JPG deleted file mode 100644 index 550d2e033d..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide128.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide128.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide128.html deleted file mode 100644 index 09451ecb13..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide128.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    128. Narrative Phrases - Standard Phrase Methods

    -
    -Previous Slide Next Slide

    -

    The timeDescriptorModeration method uses the "null" flags as part of its determination as to which sub-phrases should be qualified with time descriptors. For example, "N winds 10 mph increasing to 20 mph IN THE AFTERNOON". It's Trigger Condition is that all sub-phrases have the "words" attribute set.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide129.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide129.JPG deleted file mode 100644 index 8278f51302..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide129.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide129.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide129.html deleted file mode 100644 index 376b60f920..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide129.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    129. Narrative Phrases - Time Descriptor moderation

    -
    -Previous Slide Next Slide

    -

    Here is the algorithm used for time description. In general, instead of modifying every sub-phrase, we modify every other one. We just need to decide whether to start with even or odd sub-phrases. This method does not add the actual words; it simply flags the sub-phrase for subsequent processing (by "assembleSubPhrases"). As you can see, this algorithm is rather complicated since we have to account for null phrases that could end up as the empty string and should not be modified. Other algorithms could be substituted, but they would also have to take this into consideration. The "TimeDescriptor" module contains the configurable "timePeriod_desciptor_dict" which provides the wording for time desciptors such as "in the morning", "in the afternoon", etc.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide13.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide13.JPG deleted file mode 100644 index 854ec3d7b5..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide13.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide13.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide13.html deleted file mode 100644 index 104aa09926..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide13.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    13. Forecast Narrative Engine - Component

    -
    -Previous Slide Next Slide

    -

    Here is one component of the narrative product representing a set of phrases over one time period for one edit area.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide130.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide130.JPG deleted file mode 100644 index d2b0167630..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide130.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide130.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide130.html deleted file mode 100644 index 161916ca56..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide130.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    130. Narrative Phrases - Standard Phrase Methods

    -
    -Previous Slide Next Slide

    -



    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide131.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide131.JPG deleted file mode 100644 index e0c743a341..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide131.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide131.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide131.html deleted file mode 100644 index ceab433b80..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide131.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    131. Narrative Phrases - Embed Descriptor

    -
    -Previous Slide Next Slide

    -

    The "embedDescriptor" method uses information stored in the first sub-phrase to embed the descriptor after the direction so that we end up with phrases like "N winds 10 mph" instead of "Winds N 10 mph". It's Trigger Condition is that all sub-phrases have the "words" attribute set. When this is the case, "embedDescriptor" checks to see if the "embedded_descriptor_flag" is set. If so, it uses the "dirStr" and "phraseDescriptor" attributes of the first non-empty sub-phrase (set by "vector_words") to switch the order.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide132.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide132.JPG deleted file mode 100644 index c23a81d676..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide132.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide132.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide132.html deleted file mode 100644 index f98af87358..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide132.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    132. Narrative Phrases - Standard Phrase Methods

    -
    -Previous Slide Next Slide

    -

    The "assembleSubPhrases" method marches through the sub-phrases and glues them together with descriptors, connectors and time descriptors into a complete phrase. This is where all the work of our phrase methods is pulled together into a phrase.

    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide133.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide133.JPG deleted file mode 100644 index 18a9b000bd..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide133.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide133.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide133.html deleted file mode 100644 index 3291415af7..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide133.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    133. Narrative Phrases - Assemble Sub-phrases

    -
    -Previous Slide Next Slide

    -

    The Trigger Condition is that all sub-phrases have the "words" attribute set. There is a check to handle "until" phrasing which, if required, is handled by the "assembleUntilSubPhrases" method. Otherwise, we loop through the sub-phrases including a phrase descriptor for the first non-null sub-phrase and a connector for the rest. We also add a time descriptor for flagged sub-phrases. Finally, we set the "words" attribute for the phrase and return self.DONE().

    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide134.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide134.JPG deleted file mode 100644 index 1808bf67c2..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide134.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide134.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide134.html deleted file mode 100644 index addaaa0d26..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide134.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    134. Narrative Phrases - Standard phrase Methods

    -
    -Previous Slide Next Slide

    -

    Finally, we have the "postProcessPhrase" method to clean up loose ends often resorting to brute force string replace commands. It's Trigger Condition is that all sub-phrases have the "words" attribute set.

    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide135.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide135.JPG deleted file mode 100644 index 513db939b7..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide135.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide135.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide135.html deleted file mode 100644 index f8715d7bd0..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide135.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    135. Narrative Phrases - Narrative Tree as a Blackboard

    -
    -Previous Slide Next Slide

    -

    All of these building blocks work together to create a phrase. Note that every method has access to the complete tree plus the current node or position in the tree. This is how we simulate a "holographic" model in which every part is potentially dependent on and consistent with the whole.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide136.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide136.JPG deleted file mode 100644 index d872f586ec..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide136.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide136.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide136.html deleted file mode 100644 index ade03e1643..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide136.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    136. Narrative Phrases - Standard Phrase Methods

    -
    -Previous Slide Next Slide

    -

    Here is the phraseList for the weather_phrase. Note that it is similar to the standard_vector_phrase methods. The main difference is in the consolidation methods. The "preProcessWx" method organizes the weather subkeys according to their time span. It combines weather types with similar coverages. The "separateNonPrecip" method splits off precip-related weather types from non-precip types. If visibility is constant throughout the time period, it is separated out into its own phrase. The weather phrase can also be adjusted if there are too many sub-phrases. In this case, the temporal resolution will be reduced to make a more desirable phrase.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide137.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide137.JPG deleted file mode 100644 index 4fb7031769..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide137.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide137.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide137.html deleted file mode 100644 index 8baab81c26..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide137.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    137. Narrative Phrases - Sub-Phrase Consolidation

    -
    -Previous Slide Next Slide

    -

    The "separateNonPrecip" method uses the helper method "splitWxPhrase" which takes the tree, sub-phrase, and 2 lists. The first lists weather subkeys that should be disabled in the original phrase. The second lists weather subkeys that should be disabled in a new weather phrase. The "getStatDict" method then uses these attribute lists to filter out weather subkeys that are disabled. This works similarly to the "disabledElements" list mentioned previously.

    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide138.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide138.JPG deleted file mode 100644 index 7386431410..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide138.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide138.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide138.html deleted file mode 100644 index 5ea29f9c72..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide138.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    138. Narrative Phrases - Sub-Phrase Consolidation

    -
    -Previous Slide Next Slide

    -

    An example will help us see how this works. Suppose we have rain and fog in the morning then rain, fog and snow in the afternoon. The "preProcessWx" method arranges the sub-phrases according to time span. Next, the "separateNonPrecip" method splits the original phrase into two weather phrases, the original with Rain and Snow disabled, a new one with Fog disabled. Note that the original retains its sub-phrase structure; the disabledSubkeys ensure that the wording reflects Fog only. The new weather_phrase now undergoes the "preProcessWx" method which results in sub-phrases that produce the final words.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide139.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide139.JPG deleted file mode 100644 index 72a48ce759..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide139.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide139.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide139.html deleted file mode 100644 index 012c875645..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide139.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    139. Phrase Exercises

    -
    -Previous Slide Next Slide

    -



    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide14.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide14.JPG deleted file mode 100644 index b354ae4307..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide14.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide14.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide14.html deleted file mode 100644 index ab84f5f826..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide14.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    14. Forecast Narrative Engine - Phrase

    -
    -Previous Slide Next Slide

    -

    Here is a narrative phrase representing information about a weather element in one time period over one edit area.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide140.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide140.JPG deleted file mode 100644 index 405bbda957..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide140.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide140.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide140.html deleted file mode 100644 index 21f743b31d..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide140.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    140. Documentation Overview

    -
    -Previous Slide Next Slide

    -



    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide141.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide141.JPG deleted file mode 100644 index f7e365e33e..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide141.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide141.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide141.html deleted file mode 100644 index e2062e0d8c..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide141.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    141. Documentation Overview

    -
    -Previous Slide Next Slide

    -

    Here are the pieces of documentation composing the Text Product Documentation. The first three are in the form of slides and notes while the Text Product Reference Guide is a simple "html" document.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide142.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide142.JPG deleted file mode 100644 index ca6bb0fc9f..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide142.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide142.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide142.html deleted file mode 100644 index 1a47ad69e0..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide142.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    142. Text Product User Guide

    -
    -Previous Slide Next Slide

    -

    The Text Product User Guide contains the information about core product set-up and customization as well as general help and feedback.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide143.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide143.JPG deleted file mode 100644 index 7133388edf..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide143.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide143.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide143.html deleted file mode 100644 index 35c88f1bc8..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide143.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    143. Tabular Text Product User Guide

    -
    -Previous Slide Next Slide

    -



    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide144.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide144.JPG deleted file mode 100644 index e1294d09f9..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide144.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide144.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide144.html deleted file mode 100644 index dadfd44ee6..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide144.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    144. Advanced Text Product User Guide

    -
    -Previous Slide Next Slide

    -



    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide145.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide145.JPG deleted file mode 100644 index d6a817f057..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide145.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide145.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide145.html deleted file mode 100644 index c04be8f60c..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide145.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    145. Text Product Reference Guide

    -
    -Previous Slide Next Slide

    -



    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide146.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide146.JPG deleted file mode 100644 index 06174c8976..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide146.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide146.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide146.html deleted file mode 100644 index 40a569bece..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide146.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    146. Trouble-Shooting Strategies

    -
    -Previous Slide Next Slide

    -

    The Trouble-shooting section of the Text Product Reference Guide lists error messages and strategies for trouble-shooting. We will summarize this information in this section. First, we must isolate the problem and then we can fix it.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide147.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide147.JPG deleted file mode 100644 index 292f8c162b..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide147.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide147.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide147.html deleted file mode 100644 index e128bb3ed5..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide147.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    147. Trouble-Shooting - Isolate the Problem

    -
    -Previous Slide Next Slide

    -



    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide148.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide148.JPG deleted file mode 100644 index 654cfe02dd..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide148.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide148.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide148.html deleted file mode 100644 index e23bf41728..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide148.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    148. Trouble-Shooting - Fix the Problem

    -
    -Previous Slide Next Slide

    -

    Often at this point, the solution will be obvious. If not, we have several resources available to help us. First, see if you can find documentation describing the feature with which you are having a problem. Make sure that you are following all the set-up instructions. You can also put in print statements to further isolate the problem and give information about data values that may be problematic. Often this will lead to other methods which you can pull from the Infrastructure adding more print statements. When you do this, you'll feel like a detective hot on the trail of the culprit! You will also come to understand the logic of the code. If you still need assistance, formulate a listserver message complete with local file and print statements results.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide149.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide149.JPG deleted file mode 100644 index cbe85501f0..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide149.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide149.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide149.html deleted file mode 100644 index d2705a0160..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide149.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    149. Trouble-Shooting Exercises

    -
    -Previous Slide Next Slide

    -



    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide15.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide15.JPG deleted file mode 100644 index b777df3689..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide15.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide15.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide15.html deleted file mode 100644 index b86b11c6d1..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide15.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    15. Forecast Narrative Engine - Sub-Phrase

    -
    -Previous Slide Next Slide

    -

    Finally, we have a sub-phrase representing information about a weather element during one sub-period over one edit area.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide150.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide150.JPG deleted file mode 100644 index e16a1adab2..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide150.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide150.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide150.html deleted file mode 100644 index 0b84e643bb..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide150.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    150. Additional Features

    -
    -Previous Slide Next Slide

    -



    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide151.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide151.JPG deleted file mode 100644 index 97effb4170..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide151.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide151.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide151.html deleted file mode 100644 index e1a1834aa4..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide151.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    151. Translator

    -
    -Previous Slide Next Slide

    -

    The Translator capability allows you to create Tabular and Narrative products in different languages. The concept is simple in that the product is generated first and then the Translator is called to convert the words from one language to another. This concept works because the phrasing in weather forecasts is relatively simple.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide152.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide152.JPG deleted file mode 100644 index 707f5a4b89..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide152.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide152.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide152.html deleted file mode 100644 index c563657cc9..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide152.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    152. Translator

    -
    -Previous Slide Next Slide

    -

    Here is an example Simple Tabular product.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide153.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide153.JPG deleted file mode 100644 index 25091a6a06..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide153.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide153.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide153.html deleted file mode 100644 index e2190bbba9..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide153.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    153. Translator

    -
    -Previous Slide Next Slide

    -

    It is automatically submitted to the Translator if the "language" in the Definition section is specified as anything other than "english". The Translator has lengthy tables giving corresponding Spanish and French expressions. They are simply substituted for the English expressions in the product. There is additional code in the Translator for handling gender and noun-adjective ordering. You may have to add entries to the Translator tables in order to successfully cover all the expressions in your product.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide154.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide154.JPG deleted file mode 100644 index c00c79ce6f..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide154.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide154.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide154.html deleted file mode 100644 index cf08b89432..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide154.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    154. Translator

    -
    -Previous Slide Next Slide

    -

    Here is the resulting product translated into Spanish.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide155.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide155.JPG deleted file mode 100644 index 7e5d9b4e2e..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide155.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide155.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide155.html deleted file mode 100644 index 7065607a47..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide155.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    155. Creating New Products

    -
    -Previous Slide Next Slide

    -



    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide156.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide156.JPG deleted file mode 100644 index e24e7284af..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide156.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide156.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide156.html deleted file mode 100644 index 79b8b124b1..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide156.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    156. Creating New Products

    -
    -Previous Slide Next Slide

    -



    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide157.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide157.JPG deleted file mode 100644 index 70e2550579..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide157.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide157.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide157.html deleted file mode 100644 index d8d8916359..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide157.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    157. Creating New Products

    -
    -Previous Slide

    -



    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide16.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide16.JPG deleted file mode 100644 index c1fefea69f..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide16.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide16.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide16.html deleted file mode 100644 index 5c320f9f77..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide16.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    16. Forecast Narrative Engine - Narrative Tree

    -
    -Previous Slide Next Slide

    -

    We can represent the narrative product in TREE structure which follows this hierarchy in the computer's memory. This representation allows examination and manipulation of the tree at all levels. Each node can see and/or change the entire tree prior to final output. Words for each node are stored instead of output so they are available for examination and manipulation by other nodes.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide17.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide17.JPG deleted file mode 100644 index ce05cef5e1..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide17.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide17.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide17.html deleted file mode 100644 index 7e2c4cc667..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide17.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    17. Forecast Narrative Engine - Narrative Tree Methods

    -
    -Previous Slide Next Slide

    -

    Each node has a list of methods to execute.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide18.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide18.JPG deleted file mode 100644 index 2ea442a1af..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide18.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide18.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide18.html deleted file mode 100644 index 780ed117ec..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide18.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    18. Forecast Narrative Engine - Narrative Definition

    -
    -Previous Slide Next Slide

    -

    These are given in the "methodList" entry of the definition. Here are methods at the narrative level...


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide19.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide19.JPG deleted file mode 100644 index 97bbcd6a55..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide19.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide19.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide19.html deleted file mode 100644 index 38c8f1f13f..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide19.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    19. Forecast Narrative Engine - Component Definition

    -
    -Previous Slide Next Slide

    -

    ...at the component level...


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide2.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide2.JPG deleted file mode 100644 index 537467695c..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide2.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide2.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide2.html deleted file mode 100644 index 0fd1dd61f0..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide2.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    2. Overview

    -
    -Previous Slide Next Slide

    - - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide20.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide20.JPG deleted file mode 100644 index 706bc20a35..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide20.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide20.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide20.html deleted file mode 100644 index f1156026db..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide20.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -
    -

    Text Formatter User Guide for Narrative Products

    -

    20. Forecast Narrative Engine - Phrase Definition

    -
    -Previous Slide Next Slide

    -

    ...and at the phrase level. Every phrase MUST have a "setUpMethod" called first and a "wordMethod" called last at the sub-phrase level to produce words for one sub-phrase. Optional "phraseMethods" and "subPhraseMethods" are called in between.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide21.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide21.JPG deleted file mode 100644 index 605bf0b71f..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide21.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide21.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide21.html deleted file mode 100644 index 5e2cac0172..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide21.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    21. Forecast Narrative Engine - Word Methods

    -
    -Previous Slide Next Slide

    -

    Here is an example wordMethod for wind at the subPhrase level. Note that the arguments are the tree and the current subPhrase node. The job of this method is to set the words for the subPhrase and return DONE. The special method "setWords" does just this.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide22.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide22.JPG deleted file mode 100644 index d5f171fb5a..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide22.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide22.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide22.html deleted file mode 100644 index 728c0fec57..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide22.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    22. Forecast Narrative Engine - Narrative Tree Attributes

    -
    -Previous Slide Next Slide

    -

    Each node of the tree can have attributes or data values associated with it. There are some standard attributes such as "words" and "areaLabel". In addition, you may create any attribute you like on-the-fly and store it at the node for future reference.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide23.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide23.JPG deleted file mode 100644 index b563b18137..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide23.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide23.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide23.html deleted file mode 100644 index f10e5b42ac..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide23.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    23. Forecast Narrative Engine - Access to Attributes

    -
    -Previous Slide Next Slide

    -

    These methods give you access to the attributes of a node. The "get" command returns the value of the given attribute. If this attribute has not been set, it returns None. The "set" command sets the given attribute (e.g. "descriptor") to the given value (e.g. "winds"). Finally, the "setWords" method sets the words for the given node to the given value (e.g. "2 inches") and returns the special value, self.DONE() indicating that this method has completed processing.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide24.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide24.JPG deleted file mode 100644 index dad11e28fd..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide24.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide24.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide24.html deleted file mode 100644 index c3d29f5324..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide24.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    24. Forecast Narrative Engine - Other Node Methods

    -
    -Previous Slide Next Slide

    -

    There are many other node methods some of which are listed here. These methods reside in the ForecastNarrative engine which cannot be overridden but is available for perusal in the examples/textProducts directory.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide25.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide25.JPG deleted file mode 100644 index 5bc0a15124..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide25.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide25.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide25.html deleted file mode 100644 index b8b6f873a0..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide25.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    25. Forecast Narrative Engine - Other Node Methods

    -
    -Previous Slide Next Slide

    -

    Here are some very handy methods which allow you to easily access the time range, area label and component information about a node. Note that we cannot simply use the "get"command since a particular node may not have a "timeRange" or "component" attribute set. These methods return the value for the first ancestor having the given attribute.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide26.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide26.JPG deleted file mode 100644 index a082fbeac4..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide26.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide26.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide26.html deleted file mode 100644 index 533f9baaa2..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide26.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    26. Forecast Narrative Engine - Statistics Dictionary

    -
    -Previous Slide Next Slide

    -

    In addition to building the narrative tree based on the narrative definition phrase list, the ForecastNarrative engine samples and analyzes the data and creates a statistics dictionary for the entire product.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide27.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide27.JPG deleted file mode 100644 index ac5fe21118..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide27.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide27.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide27.html deleted file mode 100644 index b1431afb84..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide27.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    27. Forecast Narrative Engine - Statistics Dictionary

    -
    -Previous Slide Next Slide

    -

    The statistics dictionary is a dictionary of dictionaries -- one for weather element, area label, time range and statistics label.

    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide28.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide28.JPG deleted file mode 100644 index 504479e58e..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide28.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide28.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide28.html deleted file mode 100644 index 79cdafe956..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide28.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    28. Forecast Narrative Engine - Statistics Dictionary

    -
    -Previous Slide Next Slide

    -

    You can access information in the Statistics Dictionary using the "tree.stats.get" method which takes a weather element, time range, and area label. You can optionally specify a statistics method which will return the analysis for that particular SampleAnalysis method. Sometimes we will request data for a time range which covers multiple time periods. In this case, we can specify a "mergeMethod" to be used in merging the statistics returned. The default method is "List". You may specify "Max", "Min", "MinMax", "Average", or "List". If you specify "List", a set of (statistics, timeRange) tuples will be returned.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide29.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide29.JPG deleted file mode 100644 index 3349ceecd5..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide29.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide29.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide29.html deleted file mode 100644 index 6d94ce9e47..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide29.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    29. Forecast Narrative Engine - Processing Rules

    -
    -Previous Slide Next Slide

    -

    Note that when we structure the narrative product into a tree, the order of processing is not straight-forward. There are dependencies that govern this processing order. For example, we must create the sub-phrase words before we can assemble the sub-phrases. We must assemble the phrases before we can assemble the component. And we must set up the sub-phrases and consolidate them before we create sub-phrase words.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide3.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide3.JPG deleted file mode 100644 index 8fb06dac09..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide3.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide3.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide3.html deleted file mode 100644 index 715be56c80..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide3.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    3. Smart Narrative Products

    -
    -Previous Slide Next Slide

    - - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide30.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide30.JPG deleted file mode 100644 index 6cf4d26beb..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide30.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide30.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide30.html deleted file mode 100644 index 1d5b5b3865..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide30.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -
    -

    Text Formatter User Guide for Narrative Products

    -

    30. Forecast Narrative Engine - Processing Rules

    -
    -Previous Slide Next Slide

    -

    To address this situation, we introduce the concept of "holographic" processing. This simply means that each part potentially embodies the whole, each sub-phrase, phrase, and component is potentially dependent on other nodes of the tree.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide31.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide31.JPG deleted file mode 100644 index 96228d6e5c..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide31.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide31.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide31.html deleted file mode 100644 index 3f151edeea..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide31.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    31. Forecast Narrative Engine - Processing Rules

    -
    -Previous Slide Next Slide

    -

    We can simulate holographic processing by making multiple passes through the tree, traversing it top-down and executing the methods at each node until no changes are made to the tree. Each method may return a "DONE" flag to indicate it's job is done and it should not be executed again. This introduces the potential for infinite loops -- what if methods are not well-coordinated and we continue to make passes which alter the tree? For this, we provide a safety net.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide32.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide32.JPG deleted file mode 100644 index 706ffc6557..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide32.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide32.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide32.html deleted file mode 100644 index d40ea5b89c..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide32.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    32. Forecast Narrative Engine - Processing Rules

    -
    -Previous Slide Next Slide

    -

    We have some simple rules that all tree methods must follow. First, they must check for the necessary data and if it's not available yet, return immediately. If the data is available, the method does its job and returns the special self.DONE() flag.
    For example, the "assembleComponents" method checks to see if the "words" attribute for ALL of the child phrases have been set. If not, it simply returns. If so, it adds a time range label, assembles the component phrases, and returns the special self.DONE() flag so it will not be called again.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide33.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide33.JPG deleted file mode 100644 index d67cb816fc..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide33.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide33.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide33.html deleted file mode 100644 index dc3db83a2e..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide33.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    33. Forecast Narrative Engine - Processing Rules

    -
    -Previous Slide Next Slide

    -

    So now we can see how these rules work to produce the desired result. In Pass 1, the pre-requisites for assembling components and assembling phrases are not met I.e. there are no words set at the component or phrase levels. We CAN set up, combine, and consolidate the sub-phrases, however. We cannot assemble the sub-phrases yet since no sub-phrase words have been set, but we can create the words for each sub-phrase in turn. In Pass 2, we can assemble the sub-phrase words. By Pass 3, we assemble the phrase words and finally in Pass 4, we are ready to assemble the component words.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide34.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide34.JPG deleted file mode 100644 index b1bc1f508f..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide34.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide34.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide34.html deleted file mode 100644 index 7e47327b9d..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide34.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    34. Narrative Strategies

    -
    -Previous Slide Next Slide

    -

    This processing approach requires that methods coordinate with each other and communicate using the data stored in the narrative tree.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide35.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide35.JPG deleted file mode 100644 index d1402844f2..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide35.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide35.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide35.html deleted file mode 100644 index 9523bca30c..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide35.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    35. Narrative Strategies - Narrative Tree as a Blackboard

    -
    -Previous Slide Next Slide

    -

    We can think of the narrative tree as a blackboard upon which we write data for other methods to examine and manipulate. For example, the "wind_summary_words", "temp_words", and "wx_words" methods write their results on the blackboard. The "pop_words" method uses the results to properly word the PoP phrase.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide36.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide36.JPG deleted file mode 100644 index 69fa6d8ea6..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide36.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide36.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide36.html deleted file mode 100644 index 2d82844b95..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide36.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    36. Narrative Strategies - Narrative Tree as a Blackboard

    -
    -Previous Slide Next Slide

    -

    Finally, the "assembleChildWords" method can gather the phrase results to form a component.

    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide37.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide37.JPG deleted file mode 100644 index 4cf97cfd31..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide37.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide37.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide37.html deleted file mode 100644 index 68eb43fb8b..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide37.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    37. Narrative Strategies - Narrative Tree as a Blackboard

    -
    -Previous Slide Next Slide

    -

    The methods not only write on the blackboard; they are part of the narrative tree and, thus, part of the changing data. They can be completed, removed, or altered as necessary.

    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide38.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide38.JPG deleted file mode 100644 index 513db939b7..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide38.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide38.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide38.html deleted file mode 100644 index 2be6a26d7c..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide38.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    38. Narrative Strategies - Narrative Tree as a Blackboard

    -
    -Previous Slide Next Slide

    -

    They are part of the tree and associated with particular nodes. They get and set data attributes such as sub-phrase words and are themselves attributes of the nodes of the tree. This affords us great power in being able to express dependencies and change the product outcome.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide39.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide39.JPG deleted file mode 100644 index 784f7a6ff5..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide39.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide39.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide39.html deleted file mode 100644 index 263bd835e3..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide39.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    39. Narrative Strategies

    -
    -Previous Slide Next Slide

    -

    Narrative methods coordinate to produce desired results. One method is depending on the outcome of another and thus, we need high level descriptions or "strategies" to describe this coordination since it is not obvious from examining the narrative definition or individual methods.

    Now we will look at various Narrative Strategies that are employed in the core products and can be used in new products. These are described in more detail in the Text Product Reference Guide.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide4.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide4.JPG deleted file mode 100644 index 024b96c5ed..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide4.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide4.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide4.html deleted file mode 100644 index ce3be327f0..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide4.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    4. Smart Narrative Products - FWFTable

    -
    -Previous Slide Next Slide

    -

    Recall the FWFTable product from the last section. "Glued" to the bottom of the table is a narrative phrase product describing the extended periods.

    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide40.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide40.JPG deleted file mode 100644 index 7cf9f7338c..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide40.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide40.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide40.html deleted file mode 100644 index 047ddf1c05..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide40.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    40. Narrative Strategies

    -
    -Previous Slide Next Slide

    -

    Here are the Narrative Strategies we will examine.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide41.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide41.JPG deleted file mode 100644 index ec6525dae4..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide41.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide41.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide41.html deleted file mode 100644 index 94a377dc04..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide41.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    41. Narrative Strategies

    -
    -Previous Slide Next Slide

    -


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide42.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide42.JPG deleted file mode 100644 index 5d25d5ac5f..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide42.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide42.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide42.html deleted file mode 100644 index b77ac2a272..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide42.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    42. Narrative Strategies - Non-linear Thresholds

    -
    -Previous Slide Next Slide

    -

    We have seen the non-linear threshold in an earlier session. To review, any threshold with the "nlValue" suffix can be expressed as a simple numeric value, a method for calculating the value, or a dictionary with a (lowVal, highVal) kesy and corresponding threshold values.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide43.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide43.JPG deleted file mode 100644 index 713dc0dd44..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide43.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide43.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide43.html deleted file mode 100644 index bf1a6c0d28..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide43.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    43. Narrative Strategies - Non-linear Thresholds

    -
    -Previous Slide Next Slide

    -

    Here's an example. Notice that the (lowVal, highVal) pairs have no "gaps". The meaning is that any value greater or equal to the first value and less than the second will take on the corresponding value. Notice also the special use of the "default" keyword which applies to any value outside the given key ranges.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide44.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide44.JPG deleted file mode 100644 index 6d3d1d9e3c..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide44.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide44.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide44.html deleted file mode 100644 index c12ad2b428..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide44.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    44. Narrative Strategies - Non-linear Thresholds

    -
    -Previous Slide Next Slide

    -

    It is the responsibility of the method using the threshold to apply it to each value. The library method, "self.nlValue" takes a non-linear value and a weather element value and returns the potentially non-linear result.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide45.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide45.JPG deleted file mode 100644 index b8de89a09b..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide45.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide45.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide45.html deleted file mode 100644 index a480a59896..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide45.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    45. Narrative Strategies - Data Value Extraction

    -
    -Previous Slide Next Slide

    -

    The Infrastructure allows for altering the data values when extracting them from the grids by converting units, rounding and adjusting the ranges according to minimum and maximum range values. The ForecastNarrative engine performs these operations when it creates the Statistics Dictionary. Unit conversion is done automatically according to the "element_inUnits_dict" and "element_outUnits_dict" which are located in the ConfigVariables module and can be overridden in your Local file.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide46.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide46.JPG deleted file mode 100644 index 2b3f5417c7..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide46.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide46.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide46.html deleted file mode 100644 index 594da7ee50..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide46.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    46. Narrative Strategies - Data Value Extraction

    -
    -Previous Slide Next Slide

    -



    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide47.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide47.JPG deleted file mode 100644 index 72d842d02b..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide47.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide47.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide47.html deleted file mode 100644 index 9f7f9e020a..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide47.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    47. Narrative Strategies - Standard Rounding

    -
    -Previous Slide Next Slide

    -

    Standard rounding is specified using the increment_nlValue_dict.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide48.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide48.JPG deleted file mode 100644 index c2c608d0bd..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide48.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide48.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide48.html deleted file mode 100644 index 7999240654..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide48.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    48. Narrative Strategies - Standard Rounding

    -
    -Previous Slide Next Slide

    -

    Note that since this has the suffix, "nlValue", we could specify it as a non-linear value.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide49.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide49.JPG deleted file mode 100644 index 9596389a2f..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide49.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide49.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide49.html deleted file mode 100644 index e9a5310705..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide49.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    49. Narrative Strategies - Non-Standard Rounding

    -
    -Previous Slide Next Slide

    -

    We may want to apply non-standard rounding. To do this, we can specify a rounding method for the weather element in question.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide5.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide5.JPG deleted file mode 100644 index c6be248bda..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide5.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide5.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide5.html deleted file mode 100644 index 486d9627c8..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide5.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    5. Smart Narrative Products - Generating a Product

    -
    -Previous Slide Next Slide

    -

    We can include any product, tabular or narrative, within another product by using the "generateProduct" command. This is analogous to the "callSmartTool" command used in Procedures. It takes a product name corresponding to the product definition, an editArea object and a timeRange object. It returns a text string representing the forecast for that edit area and time range.

    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide50.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide50.JPG deleted file mode 100644 index 4e2a735498..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide50.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide50.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide50.html deleted file mode 100644 index 469d110742..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide50.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    50. Narrative Strategies - Non-Standard Rounding

    -
    -Previous Slide Next Slide

    -

    If such a method is supplied, the system will call it instead of the simple rounding method.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide51.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide51.JPG deleted file mode 100644 index fc2719b36c..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide51.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide51.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide51.html deleted file mode 100644 index d05051197d..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide51.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    51. Narrative Strategies - Data Value Extraction

    -
    -Previous Slide Next Slide

    -


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide52.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide52.JPG deleted file mode 100644 index c90fe4d440..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide52.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide52.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide52.html deleted file mode 100644 index 77f4dc3d49..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide52.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    52. Narrative Strategies - Handling of "null" values

    -
    -Previous Slide Next Slide

    -

    Null values are those that fall below the "null_nlValue" for a given weather element. Word methods set the words to the empty string if there are no grids available and to the special string, "null", if the values are below threshold. In the special case of a range that straddles the "null_nlValue", words are set using the "around" qualifier e.g. "around 10 mph".


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide53.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide53.JPG deleted file mode 100644 index 3bd8e0074c..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide53.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide53.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide53.html deleted file mode 100644 index 691c67ab10..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide53.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    53. Narrative Strategies - Handling of "null" values

    -
    -Previous Slide Next Slide

    -

    The phrase-level method "fillNulls" examines the sub-phrases and fills in the appropriate words according to the "first_null_phrase" and "null_phrase" dictionaries. It then flags the sub-phrase as a "null" phrase for subsequent methods. The phrase-level methods use this attribute information to handle "null" sub-phrases appropriately.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide54.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide54.JPG deleted file mode 100644 index 199f5d747d..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide54.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide54.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide54.html deleted file mode 100644 index 46057a8509..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide54.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    54. Narrative Strategies - Phrase Consolidation

    -
    -Previous Slide Next Slide

    -

    In order to allow temporal resolution AND avoid redundant phrases, we have certain strategies for consolidating the sub-phrases.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide55.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide55.JPG deleted file mode 100644 index 6d5ebee79f..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide55.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide55.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide55.html deleted file mode 100644 index 4f8243cadc..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide55.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    55. Narrative Strategies - Phrase Consolidation

    -
    -Previous Slide Next Slide

    -



    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide56.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide56.JPG deleted file mode 100644 index 790d6bcba4..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide56.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide56.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide56.html deleted file mode 100644 index c2c263f8c9..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide56.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    56. Narrative Strategies - Scalar/Vector Phrase Combining

    -
    -Previous Slide Next Slide

    -

    Now we will look at some consolidation rules and examples of resulting phrases. For a more complete list of rules, see the Text Product Reference Guide.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide57.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide57.JPG deleted file mode 100644 index 9e3b6f10ca..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide57.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide57.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide57.html deleted file mode 100644 index 4890edbb41..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide57.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    57. Narrative Strategies - Scalar/Vector Phrase Combining

    -
    -Previous Slide Next Slide

    -



    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide58.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide58.JPG deleted file mode 100644 index c3b8a24361..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide58.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide58.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide58.html deleted file mode 100644 index 18a93fcf7f..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide58.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    58. Narrative Strategies - Scalar/Vector Phrase Consolidation

    -
    -Previous Slide Next Slide

    -



    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide59.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide59.JPG deleted file mode 100644 index c5835bbf6f..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide59.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide59.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide59.html deleted file mode 100644 index b2c37eac9d..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide59.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    59. Narrative Strategies - Vector Phrase Consolidation

    -
    -Previous Slide Next Slide

    -



    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide6.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide6.JPG deleted file mode 100644 index f414d28435..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide6.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide6.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide6.html deleted file mode 100644 index 88b9a3e9b0..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide6.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    6. Smart Narrative Products - FWFTable:Generate Product Call

    -
    -Previous Slide Next Slide

    -

    Here's the call to "generateProduct" within the FWFTable.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide60.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide60.JPG deleted file mode 100644 index d85ee31c27..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide60.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide60.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide60.html deleted file mode 100644 index 2dd31392d1..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide60.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    60. Narrative Strategies - Weather Phrase Consolidation

    -
    -Previous Slide Next Slide

    -

    Weather phrasing is complex. For a complete explanation of the strategy, see the Text Reference Guide section on Weather Phrasing.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide61.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide61.JPG deleted file mode 100644 index 55832e1037..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide61.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide61.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide61.html deleted file mode 100644 index 4499cdc57c..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide61.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    61. Narrative Strategies - Weather Phrase Consolidation

    -
    -Previous Slide Next Slide

    -



    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide62.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide62.JPG deleted file mode 100644 index 1c13029fe8..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide62.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide62.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide62.html deleted file mode 100644 index ac824194df..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide62.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    62. Narrative Strategies - Period Combining

    -
    -Previous Slide Next Slide

    -

    The period combining feature has undergone refinement by field forecasters. To turn on period combining, you simply set the "periodCombining" flag to 1 in the Definition section of the product. Period combinig methods exist in the baseline for a set of elmeets from which you can choose. The methods for combinig periods are automatically called and periods are combined if they meet the criteria. For more information on altering this criteria, see the Text Product Reference Guide section on Period Combining.

    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide63.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide63.JPG deleted file mode 100644 index f93ea05530..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide63.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide63.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide63.html deleted file mode 100644 index 6aa5fe34a0..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide63.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    63. Narrative Strategies - Phrase Ordering

    -
    -Previous Slide Next Slide

    -

    If you would like to dynamically order your phrases based on significant weather events, you can use the phrase ordering strategy. For example, if there are severe thunderstorms in the forecast, you might want to mention them first. The narrative tree structure allows us to re-order the phrase nodes on-the-fly. The method, "moveAbove" (PhraseBuilder), moves a given phrase above another phrase in the given component list based on logic which you supply. For details, see the Text Product Reference Guide section on phrase ordering.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide64.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide64.JPG deleted file mode 100644 index ec467ba127..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide64.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide64.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide64.html deleted file mode 100644 index cbb8fd7463..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide64.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    64. Narrative Strategies - "Until" Phrasing

    -
    -Previous Slide Next Slide

    -

    If you would like to dynamically order your phrases based on significant weather events, you can use the phrase ordering strategy. For example, if there are severe thunderstorms in the forecast, you might want to mention them first. The narrative tree structure allows us to re-order the phrase nodes on-the-fly. The method, "XXX", provides this functionality.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide65.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide65.JPG deleted file mode 100644 index c15a89eff0..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide65.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide65.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide65.html deleted file mode 100644 index 92fe7c806a..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide65.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    65. Narrative Strategies - Visibility

    -
    -Previous Slide Next Slide

    -



    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide66.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide66.JPG deleted file mode 100644 index 72d602236b..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide66.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide66.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide66.html deleted file mode 100644 index 8652c47f38..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide66.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    66. Narrative Strategies - Local Effects

    -
    -Previous Slide Next Slide

    -

    Recall the set-up of a simple Local Effect from previous sessions.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide67.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide67.JPG deleted file mode 100644 index 087220d0c9..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide67.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide67.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide67.html deleted file mode 100644 index 55941f4956..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide67.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    67. Narrative Strategies - Local Effects

    -
    -Previous Slide Next Slide

    -

    We must specify a Local Effects list and the appropriate "intersectAreas".


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide68.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide68.JPG deleted file mode 100644 index b18a6a7e46..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide68.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide68.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide68.html deleted file mode 100644 index 069928306e..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide68.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    68. Narrative Strategies - Local Effects

    -
    -Previous Slide Next Slide

    -

    Then we include the Local Effects list in the Local file.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide69.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide69.JPG deleted file mode 100644 index 1af042d975..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide69.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide69.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide69.html deleted file mode 100644 index 86f2c41007..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide69.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    69. Narrative Strategies - Embedded Local Effects

    -
    -Previous Slide Next Slide

    -

    Now we will see how the system uses the narrative tree structure to handle Local Effects. First consider the case of an "embedded" local effect i.e. one in which there is only one time period.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide7.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide7.JPG deleted file mode 100644 index 703a2521c5..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide7.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide7.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide7.html deleted file mode 100644 index 23443355a6..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide7.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    7. Smart Narrative Products - FWFTable:Narrative Definition

    -
    -Previous Slide Next Slide

    -

    Here's the ExtendedNarrative definition which refers to the Extended component. You may remember the "narrativeDef" entry from earlier sessions.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide70.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide70.JPG deleted file mode 100644 index e115824c6e..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide70.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide70.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide70.html deleted file mode 100644 index c554c8f8b3..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide70.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    70. Narrative Strategies - Embedded Local Effects

    -
    -Previous Slide Next Slide

    -

    This is initially represented in the tree as shown with a phrase, one sub-phrase, and the associated Local Effects list stored as an attribute for the phrase node. If there is an associated Local Effects list for a phrase, the ForecastNarrative Engine adds "checkLocalEffects" to the methodList for that node. This PhraseBuilder method then checks the Local Effect criteria.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide71.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide71.JPG deleted file mode 100644 index 21ae2679d2..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide71.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide71.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide71.html deleted file mode 100644 index e430779390..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide71.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    71. Narrative Strategies - Embedded Local Effects

    -
    -Previous Slide Next Slide

    -

    If met, it creates a sub-phrase for each Local Effect area (or areas) for which there was a significant difference. It also makes a new attribute for the node and adds the method "assembleEmbeddedLocalEffect" to be executed after the word methods generate words. Notice that after this operation, processing can proceed as for any other phrase.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide72.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide72.JPG deleted file mode 100644 index 71c8cc1a56..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide72.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide72.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide72.html deleted file mode 100644 index a67950a278..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide72.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    72. Narrative Strategies - Conjunctive Local Effects

    -
    -Previous Slide Next Slide

    -

    If we have multiple time periods, we must create a conjunctive Local Effect.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide73.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide73.JPG deleted file mode 100644 index acf1e080b6..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide73.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide73.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide73.html deleted file mode 100644 index 82d34a32f5..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide73.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    73. Narrative Strategies - Conjunctive Local Effects

    -
    -Previous Slide Next Slide

    -

    As before, we initially have the Local Effects list as an attribute and the ForecastNarrative Engine adds "checkLocalEffects" to the method list for the node. A Local Effect is generated if ANY of the sub-phrases meet the Local Effect criteria.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide74.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide74.JPG deleted file mode 100644 index 5788df4a8c..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide74.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide74.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide74.html deleted file mode 100644 index 31a38ac5fc..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide74.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    74. Narrative Strategies - Conjunctive Local Effects

    -
    -Previous Slide Next Slide

    -

    If so, the phrase node is split so that there is a node for each Local Effect area (or areas) that meet the Local Effect criteria. A label is added as an attribute to be used when assembling the final phrase.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide75.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide75.JPG deleted file mode 100644 index 3c88c53623..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide75.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide75.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide75.html deleted file mode 100644 index 8e602e7778..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide75.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    75. Narrative Strategies - Degenerate Local Effect

    -
    -Previous Slide Next Slide

    -

    There is the case of a "degenerate" conjunctive local effect in which we initially had multiple time periods, but in the process of combining sub-phrases, we ended up with only one time period for each local effect area. We must now "glue" these single-period phrases back together to form the embedded Local Effect. The code for this is in the PhraseBuilder method "combineConjunctiveLocalEffects" which is called when we assemble the component phrases..


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide76.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide76.JPG deleted file mode 100644 index 087220d0c9..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide76.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide76.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide76.html deleted file mode 100644 index c635e3567f..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide76.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    76. Narrative Strategies - Local Effects

    -
    -Previous Slide Next Slide

    -

    Here is a simple Local Effect setup...


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide77.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide77.JPG deleted file mode 100644 index b18a6a7e46..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide77.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide77.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide77.html deleted file mode 100644 index 8a352ebef1..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide77.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    77. Narrative Strategies - Local Effects

    -
    -Previous Slide Next Slide

    -

    ...with the associated Local Effect list method.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide78.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide78.JPG deleted file mode 100644 index 59fcfef3fd..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide78.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide78.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide78.html deleted file mode 100644 index a9ad0a5806..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide78.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    78. Narrative Strategies - Local Effects

    -
    -Previous Slide Next Slide

    -

    Notice in this case, we are specifying a Local Effect METHOD instead of the RESULT of a Local Effects list method.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide79.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide79.JPG deleted file mode 100644 index bdd3cdfb8f..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide79.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide79.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide79.html deleted file mode 100644 index 415b060157..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide79.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    79. Narrative Strategies - Local Effects

    -
    -Previous Slide Next Slide

    -

    In this case, the method will be called with the "tree" and "node" arguments at run-time which allows us to create the Local Effect definition on-the-fly and perhaps base it on the current edit area or component.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide8.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide8.JPG deleted file mode 100644 index b26d4affd9..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide8.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide8.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide8.html deleted file mode 100644 index a953813a41..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide8.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    8. Smart Narrative Products - FWFTable:Product Component

    -
    -Previous Slide Next Slide

    -

    Finally, we have the Extended Component definition with entries such as the analysisList and phraseList.

    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide80.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide80.JPG deleted file mode 100644 index 7ba8e83118..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide80.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide80.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide80.html deleted file mode 100644 index 6544a00011..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide80.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    80. Narrative Strategies - Local Effects

    -
    -Previous Slide Next Slide

    -

    The setup of Local Effects for compound phrases is different from other phrases. As usual, we must set up the "intersectAreas" in the Product Component definition.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide81.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide81.JPG deleted file mode 100644 index cb6b7925e9..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide81.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide81.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide81.html deleted file mode 100644 index 1892a41351..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide81.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    81. Narrative Strategies - Local Effects

    -
    -Previous Slide Next Slide

    -

    However, to set up the Local Effect definition, we locate the phrase definition for the compound phrase, override it in our Local File...


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide82.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide82.JPG deleted file mode 100644 index 48bd0ecf15..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide82.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide82.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide82.html deleted file mode 100644 index a9d11d7a01..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide82.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    82. Narrative Strategies - Local Effects

    -
    -Previous Slide Next Slide

    -

    ...and attach the Local Effects definition to the phrase(s) composing the compound phrase.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide83.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide83.JPG deleted file mode 100644 index d7d31f9433..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide83.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide83.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide83.html deleted file mode 100644 index 9273d08e50..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide83.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    83. Narrative Strategies - Local Effects

    -
    -Previous Slide Next Slide

    -

    Virtually any part of the Local Effects definition can be expressed as a method instead of a constant value.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide84.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide84.JPG deleted file mode 100644 index f6418edb76..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide84.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide84.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide84.html deleted file mode 100644 index 3f4477a686..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide84.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    84. Narrative Strategies - Local Effects

    -
    -Previous Slide Next Slide

    -

    Here the threshold criteria for generating a Local Effect is given as a method.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide85.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide85.JPG deleted file mode 100644 index 5af887a284..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide85.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide85.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide85.html deleted file mode 100644 index 353e00f0de..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide85.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    85. Narrative Strategies - Local Effects

    -
    -Previous Slide Next Slide

    -

    Here the descriptor for a Local Effect area is given as a method.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide86.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide86.JPG deleted file mode 100644 index 637eda4aa0..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide86.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide86.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide86.html deleted file mode 100644 index d7c8f4944d..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide86.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    86. Narrative Strategies - Local Effects

    -
    -Previous Slide Next Slide

    -

    And here the connector word is given as a method. The arguments to each of these methods is specified in the Text Product Reference Guide. Using methods and their arguments gives extra flexibility in specifying Local Effects.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide87.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide87.JPG deleted file mode 100644 index da46d792a0..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide87.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide87.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide87.html deleted file mode 100644 index e92fe4c09c..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide87.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    87. Narrative Strategies - Local Effects

    -
    -Previous Slide Next Slide

    -

    There is no limit on the number of Local Effect areas to be compared. The system is able to compare all combinations of multiple areas, group them according to whether they are similar or dissimilar and report accordingly.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide88.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide88.JPG deleted file mode 100644 index 37168d01cd..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide88.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide88.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide88.html deleted file mode 100644 index cf18c54889..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide88.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    88. Narrative Strategies - Local Effects

    -
    -Previous Slide Next Slide

    -

    Instead of specifying "intersectAreas", we can compare the current area to "additionalAreas" which must be listed in the Product Component definition as shown.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide89.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide89.JPG deleted file mode 100644 index 5c8e29b576..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide89.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide89.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide89.html deleted file mode 100644 index a4ec6a6503..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide89.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    89. Narrative Strategies - Local Effects

    -
    -Previous Slide Next Slide

    -

    The special keyword, "__Current__" will compare the current area (not intersected with any other area) to the given Local Effect area. If you want the area to be compared as a whole i.e. not intersected with any other area, use the "intersectFlag=0" setting when you define the LocalEffectArea.

    These and other examples are found in the Text Product Reference Guide section on Local Effects.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide9.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide9.JPG deleted file mode 100644 index 77bdcc015d..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide9.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide9.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide9.html deleted file mode 100644 index 7ad076643e..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide9.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    9. Narrative Products

    -
    -Previous Slide Next Slide

    -

    Now we will learn about Narrative products and how they are constructed. First, we will learn about the Forecast Narrative Engine which interprets the narrative definition, samples and analyzes the data to produce a narrative tree and statistics dictionary. We will examine the processing rules that result in a finished narrative product and various narrative strategies employed to express the many complexities and dependencies inherent in narrative products. Finally, we will tie all of this together as we learn about the steps to construct a narrative phrase.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide90.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide90.JPG deleted file mode 100644 index faeaae910b..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide90.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide90.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide90.html deleted file mode 100644 index e6b4af3fba..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide90.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    90. Narrative Exercises

    -
    -Previous Slide Next Slide

    -



    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide91.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide91.JPG deleted file mode 100644 index 3a89351a16..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide91.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide91.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide91.html deleted file mode 100644 index e751c1b399..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide91.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    91. Narrative Phrases

    -
    -Previous Slide Next Slide

    -

    Narrative Phrases are built by a collection of Python methods which cooperate to piece together the desired words. We have discussed Narrative Strategies which give us some insight into the complexities and dependencies involved in building a phrase. Though we cannot cover all the logic and code used to build the core products, we will find it very instructive to walk through the definition of an example phrase which has an "anatomy" very similar to other phrases.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide92.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide92.JPG deleted file mode 100644 index 9254d90a59..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide92.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide92.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide92.html deleted file mode 100644 index ecef3dac90..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide92.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    92. Narrative Phrases - Phrase Definition

    -
    -Previous Slide Next Slide

    -

    Here is a phrase definition which has a setUpMethod, a wordMethod and optional phrase methods. The setUpMethod is called first at the phrase level. Its job is to create the sub-phrases based on the statistics available. The phraseMethods are called from the phrase level and the wordMethod is called at the sub-phrase level to create the words for each sub-phrase. We will dissect this definition to see how the methods build a phrase and learn about infrastructure helper methods which they employ.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide93.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide93.JPG deleted file mode 100644 index 77759b497d..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide93.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide93.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide93.html deleted file mode 100644 index af3c47270c..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide93.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    93. Narrative Phrases - SetUp Method

    -
    -Previous Slide Next Slide

    -

    Here's an example setUp method for the wind_phrase. We first set up the information about the weather elements included in the phrase. Then we determine a connectorMethod which will create the connecting words between sub-phrases. For example, "North winds 10 mph INCREASING TO 20 mph in the afternoon". Then we call a PhraseBuilder method to set up the sub-phrases according to the temporal resolution of the statistics. Finally, it is important the we return the "self.DONE()" flag so this method is not called again.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide94.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide94.JPG deleted file mode 100644 index d6d71b9188..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide94.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide94.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide94.html deleted file mode 100644 index e2c64f65d7..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide94.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    94. Narrative Phrases - SetUp Method

    -
    -Previous Slide Next Slide

    -

    For each weather element involved in the phrase, we create an ElementInfo entry. This includes the elementName e.g. "Wind", a mergeMethod such as "List", "MinMax", or "Average". For the first element in the ElementInfoList, the mergeMethod should be "List". This is the mechanism by which phrases will be analysis-driven. Other elements involved in the phrase cannot use the "List" mergeMethod and must use "Min", "Max", "MinMax", or "Average". This means that they follow the temporal resolution of the first element. The default dataType is Scalar. We must specify if the element is Vector or Weather. We can do this using the special "self.VECTOR()" and "self.WEATHER()" values. If we want to use a statistics other than the first one listed in the analysisList, we can specify a statLabel. We can specify if the element is primary or secondary with respect to consolidaition rules. Finally, for primary elements other than the first, we need to specify a phrase definition method to be used when splitting off independent phrases.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide95.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide95.JPG deleted file mode 100644 index 62d951dc51..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide95.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide95.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide95.html deleted file mode 100644 index ccbb5af109..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide95.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    95. Narrative Phrases - SetUp Method

    -
    -Previous Slide Next Slide

    -

    For example, for the WindGust weather element, we specify the gust_phrase.

    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide96.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide96.JPG deleted file mode 100644 index 522948696c..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide96.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide96.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide96.html deleted file mode 100644 index f30d578d69..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide96.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    96. Narrative Phrases - SetUp Method

    -
    -Previous Slide Next Slide

    -

    The setPhraseSetUp method takes the information in the elementInfoList and creates the subPhrase nodes, one for each analysis entry for the first element.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide97.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide97.JPG deleted file mode 100644 index f4cca567e1..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide97.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide97.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide97.html deleted file mode 100644 index 563bfb786a..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide97.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    97. Narrative Phrases - SetUp Method

    -
    -Previous Slide Next Slide

    -

    For example, if we have a temporal resolution of [6] in a 12-hour period, we will end up with 2 sub-phrase nodes, one for the first 6 hours and one for the second. The "subPhraseSetUp" method then sets various attributes on the phrase and sub-phrase nodes. The "descriptor" is from the "phrase_descriptor_dict" for the first weather element. The connectorMethod and elementInfoList are stored for subsequent use, as are the elementInfo and elementName for the first element. At the sub-phrase level, we store the elementName, timeRange. In addition, we create and store a statistics dictionary which is specific to this sub-phrase timeRange and areaLabel.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide98.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide98.JPG deleted file mode 100644 index bbe1ea96e6..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide98.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide98.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide98.html deleted file mode 100644 index 1e20da828a..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide98.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    98. Narrative Phrases - SetUp Method

    -
    -Previous Slide Next Slide

    -

    The areaLabel is set at the tree level initially, but any node can re-set it's areaLabel and that area will be used instead. For example, if we want our wind phrase to apply to the ridges of the current area, we can re-set it to the intersection of the current area and Ridges as shown. Of course, we must have set up an "intersectAreas" entry for Wind and Ridges in the product component definition. The ability to change the areaLabel on-the-fly is very powerful allowing us to create not only local effects, but many other area-specific phrases.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide99.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide99.JPG deleted file mode 100644 index 98b5f8ee59..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide99.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide99.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide99.html deleted file mode 100644 index beb1b2a767..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/Slide99.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Narrative Products

    -

    99. Narrative Phrases - SetUp Method

    -
    -Previous Slide Next Slide

    -

    Secondary elements are never split off when consolidating. For example, the "Period" element which appears in the Swell phrase may have a constant value throughout the phrase.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/TOC.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/TOC.txt deleted file mode 100644 index b42f99854b..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/TOC.txt +++ /dev/null @@ -1,157 +0,0 @@ -1: GFESuite Advanced Text Product Narrative User Guide -2: Overview -3: Smart Narrative Products -4: Smart Narrative Products|FWFTable -5: Smart Narrative Products|Generating a Product -6: Smart Narrative Products|FWFTable:Generate Product Call -7: Smart Narrative Products|FWFTable:Narrative Definition -8: Smart Narrative Products|FWFTable:Product Component -9: Narrative Products -10: Forecast Narrative Engine|Infrastructure Engine -11: Forecast Narrative Engine|Forecast Narrative Engine -12: Forecast Narrative Engine|Narrative -13: Forecast Narrative Engine|Component -14: Forecast Narrative Engine|Phrase -15: Forecast Narrative Engine|Sub-Phrase -16: Forecast Narrative Engine|Narrative Tree -17: Forecast Narrative Engine|Narrative Tree Methods -18: Forecast Narrative Engine|Narrative Definition -19: Forecast Narrative Engine|Component Definition -20: Forecast Narrative Engine|Phrase Definition -21: Forecast Narrative Engine|Word Methods -22: Forecast Narrative Engine|Narrative Tree Attributes -23: Forecast Narrative Engine|Access to Attributes -24: Forecast Narrative Engine|Other Node Methods -25: Forecast Narrative Engine|Other Node Methods -26: Forecast Narrative Engine|Statistics Dictionary -27: Forecast Narrative Engine|Statistics Dictionary -28: Forecast Narrative Engine|Statistics Dictionary -29: Forecast Narrative Engine|Processing Rules -30: Forecast Narrative Engine|Processing Rules -31: Forecast Narrative Engine|Processing Rules -32: Forecast Narrative Engine|Processing Rules -33: Forecast Narrative Engine|Processing Rules -34: Narrative Strategies -35: Narrative Strategies|Narrative Tree as a Blackboard -36: Narrative Strategies|Narrative Tree as a Blackboard -37: Narrative Strategies|Narrative Tree as a Blackboard -38: Narrative Strategies|Narrative Tree as a Blackboard -39: Narrative Strategies -40: Narrative Strategies -41: Narrative Strategies -42: Narrative Strategies|Non-linear Thresholds -43: Narrative Strategies|Non-linear Thresholds -44: Narrative Strategies|Non-linear Thresholds -45: Narrative Strategies|Data Value Extraction -46: Narrative Strategies|Data Value Extraction -47: Narrative Strategies|Standard Rounding -48: Narrative Strategies|Standard Rounding -49: Narrative Strategies|Non-Standard Rounding -50: Narrative Strategies|Non-Standard Rounding -51: Narrative Strategies|Data Value Extraction -52: Narrative Strategies|Handling of "null" values -53: Narrative Strategies|Handling of "null" values -54: Narrative Strategies|Phrase Consolidation -55: Narrative Strategies|Phrase Consolidation -56: Narrative Strategies|Scalar/Vector Phrase Combining -57: Narrative Strategies|Scalar/Vector Phrase Combining -58: Narrative Strategies|Scalar/Vector Phrase Consolidation -59: Narrative Strategies|Vector Phrase Consolidation -60: Narrative Strategies|Weather Phrase Consolidation -61: Narrative Strategies|Weather Phrase Consolidation -62: Narrative Strategies|Period Combining -63: Narrative Strategies|Phrase Ordering -64: Narrative Strategies|"Until" Phrasing -65: Narrative Strategies|Visibility -66: Narrative Strategies|Local Effects -67: Narrative Strategies|Local Effects -68: Narrative Strategies|Local Effects -69: Narrative Strategies|Embedded Local Effects -70: Narrative Strategies|Embedded Local Effects -71: Narrative Strategies|Embedded Local Effects -72: Narrative Strategies|Conjunctive Local Effects -73: Narrative Strategies|Conjunctive Local Effects -74: Narrative Strategies|Conjunctive Local Effects -75: Narrative Strategies|Degenerate Local Effect -76: Narrative Strategies|Local Effects -77: Narrative Strategies|Local Effects -78: Narrative Strategies|Local Effects -79: Narrative Strategies|Local Effects -80: Narrative Strategies|Local Effects -81: Narrative Strategies|Local Effects -82: Narrative Strategies|Local Effects -83: Narrative Strategies|Local Effects -84: Narrative Strategies|Local Effects -85: Narrative Strategies|Local Effects -86: Narrative Strategies|Local Effects -87: Narrative Strategies|Local Effects -88: Narrative Strategies|Local Effects -89: Narrative Strategies|Local Effects -90: Narrative Exercises -91: Narrative Phrases -92: Narrative Phrases|Phrase Definition -93: Narrative Phrases|SetUp Method -94: Narrative Phrases|SetUp Method -95: Narrative Phrases|SetUp Method -96: Narrative Phrases|SetUp Method -97: Narrative Phrases|SetUp Method -98: Narrative Phrases|SetUp Method -99: Narrative Phrases|SetUp Method -100: Narrative Phrases|Word Method -101: Narrative Phrases|Word Method -102: Narrative Phrases|Word Method -103: Narrative Phrases|Word Method -104: Narrative Phrases|Word Method -105: Narrative Phrases|Word Method -106: Narrative Phrases|Word Method -107: Narrative Phrases|Standard Phrase Methods -108: Narrative Phrases|Standard Phrase Methods -109: Narrative Phrases|Sub-Phrase Consolidation -110: Narrative Phrases|Sub-Phrase Consolidation -111: Narrative Phrases|Standard Phrase Methods -112: Narrative Phrases|Sub-Phrase Combining -113: Narrative Phrases|Sub-Phrase Combining -114: Narrative Phrases|Sub-Phrase Combining -115: Narrative Phrases|Sub-Phrase Combining -116: Narrative Phrases|Sub-Phrase Combining -117: Narrative Phrases|Sub-Phrase Combining -118: Narrative Phrases|Standard Phrase Methods -119: Narrative Phrases|Consolidate Direction -120: Narrative Phrases|Standard Phrase Methods -121: Narrative Phrases|Consolidate Trends -122: Narrative Phrases|Standard Phrase Methods -123: Narrative Phrases|Standard Phrase Methods -124: Narrative Phrases|Trigger Condition -125: Narrative Phrases|Sub-Phrase Combining Identical Words -126: Narrative Phrases|Standard Phrase Methods -127: Narrative Phrases|Fill Null Values -128: Narrative Phrases|Standard Phrase Methods -129: Narrative Phrases|Time Descriptor moderation -130: Narrative Phrases|Standard Phrase Methods -131: Narrative Phrases|Embed Descriptor -132: Narrative Phrases|Standard Phrase Methods -133: Narrative Phrases|Assemble Sub-phrases -134: Narrative Phrases|Standard phrase Methods -135: Narrative Phrases|Narrative Tree as a Blackboard -136: Narrative Phrases|Standard Phrase Methods -137: Narrative Phrases|Sub-Phrase Consolidation -138: Narrative Phrases|Sub-Phrase Consolidation -139: Phrase Exercises -140: Documentation Overview -141: Documentation Overview -142: Text Product User Guide -143: Tabular Text Product User Guide -144: Advanced Text Product User Guide -145: Text Product Reference Guide -146: Trouble-Shooting Strategies -147: Trouble-Shooting|Isolate the Problem -148: Trouble-Shooting|Fix the Problem -149: Trouble-Shooting Exercises -150: Additional Features -151: Translator -152: Translator -153: Translator -154: Translator -155: Creating New Products -156: Creating New Products -157: Creating New Products diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes10.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes10.txt deleted file mode 100644 index 617e5f189b..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes10.txt +++ /dev/null @@ -1,2 +0,0 @@ -In addition to the TextRules and SampleAnalysis libraries, and the Standard and Local files, we have the ForecastNarrative engine which interprets the narrative definition. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes100.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes100.txt deleted file mode 100644 index 2bd9cd4911..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes100.txt +++ /dev/null @@ -1,2 +0,0 @@ -Here's an example of a wordMethod. It.s job is to set the "words" attribute for one sub-phrase. (It is not concerned with connectors or time descriptors which are dealt with at the phrase level when the sub-phrases are assembled.) A wordMethod must always return using the "self.setWords" method. In this case, the words are produced by the simple_vector_phrase. We'll examine these methods in more detail... - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes101.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes101.txt deleted file mode 100644 index 2b4ed0ad56..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes101.txt +++ /dev/null @@ -1,5 +0,0 @@ -Given a node and a text string of words, the setWords method first sets the "words" attribute for the given sub-phrase node: -     node.set(.words., words) - -Then it returns the "self.DONE()" flag so that the word method will not be called again. IT IS VERY IMPORTANT that a word method always return the "self.DONE()" flag. If it does not, an infinite loop could occur. We will look at this more closely in the Trouble-shooting section. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes102.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes102.txt deleted file mode 100644 index 713d2a2e63..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes102.txt +++ /dev/null @@ -1,2 +0,0 @@ -There are some helpful infrastructure methods used by wordMethods. First, the "getStatDict" method returns the "statDict" for the node. This is just like the statistics dictionary created for Tabular products and covers the statistics for a sub-phrase timeRange and edit area. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes103.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes103.txt deleted file mode 100644 index d63d30d68f..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes103.txt +++ /dev/null @@ -1,2 +0,0 @@ -Thus, the "getStats" method can be used to access statistics from the dictionary for a particular weather element. "getStats" returns None if there is no entry, so wordMethods should always check for this case. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes104.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes104.txt deleted file mode 100644 index f4a334ce1b..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes104.txt +++ /dev/null @@ -1,2 +0,0 @@ -The "getValue" method facilitates the analysis-driven nature of the phrases. Given a statistic and dataType, it returns a statistic according to the requested method. So in this case, we are requesting a MinMax magnitude tuple with a direction. Since the given statistic is already in the proper format, it simply returns it... - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes105.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes105.txt deleted file mode 100644 index e24a9f425b..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes105.txt +++ /dev/null @@ -1,2 +0,0 @@ -In this case, however, the statistic is a single value, so the "getValue" method creates a tuple and returns a minMax where the min==max. Now the wordMethod can work with a range. The "getValue" method can be "Min", "Max", "Average", "MinMax", or "Sum". - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes106.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes106.txt deleted file mode 100644 index 5bc146db1f..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes106.txt +++ /dev/null @@ -1,2 +0,0 @@ -Here we see these infrastructure methods in use in the "simple_vector_phrase". First, we use the "getStatDict" method to obtain the "statDict". Then we can access the raw statistic using "getStats". Finally, we use "getValue" to guarantee us a range with which to work. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes107.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes107.txt deleted file mode 100644 index 3ba5839017..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes107.txt +++ /dev/null @@ -1,2 +0,0 @@ -Now we will look at the phrase-level methods that work together to build a phrase. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes108.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes108.txt deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes109.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes109.txt deleted file mode 100644 index dc6cc2731d..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes109.txt +++ /dev/null @@ -1,2 +0,0 @@ -This method separates the primary elements that are constant throughout the phrase from those that are not. In the wind_withGusts_phrase, both Wind and WindGust are primary elements so phrase consolidation will catch both of these cases. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes11.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes11.txt deleted file mode 100644 index bb1ad60844..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes11.txt +++ /dev/null @@ -1,2 +0,0 @@ -Given a narrative definition, the ForecastNarrative engine interprets the component and phrase definitions. It reads the analysisList entries, samples the data, and performs the requested analysis to create statistics. From this information, it builds a Narrative Tree data structure which it processes to return a text result. We will examine this entire process in detail. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes110.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes110.txt deleted file mode 100644 index 4598ab211c..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes110.txt +++ /dev/null @@ -1,3 +0,0 @@ -Phrase consolidation uses the "splitPhrase" method which is given a tree, phrase, and list of elements to "split off". In this example, we end up with the original wind_withGusts_phrase in which WindGust has been diabled. The "getStatDict" method examines the list of disabled elements and removes them from the "statDict". We also spawn a new phrase for WindGust. The "gust_phrase" is given as the "phraseDef" in the elementInfo for WindGust. The new phrase is created as follows: -       newPhrase = tree.addPhraseDef(phrase, elementInfo.phraseDef) - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes111.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes111.txt deleted file mode 100644 index 65915c5ce1..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes111.txt +++ /dev/null @@ -1,2 +0,0 @@ -The "combinePhraseStats" method combines sub-phrases that have similar statistics. This will prevent redundant phrasing like "N winds 10 mph becoming N 10 mph in the afternoon". - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes112.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes112.txt deleted file mode 100644 index 69c3aaf7fe..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes112.txt +++ /dev/null @@ -1,2 +0,0 @@ -Here is a hierarchy of methods that perform this task. The "combineChildren" method loops through the children of a node (in this case, the sub-phrases) and tries to combine them according to rules supplied by the "combineStats" method. This method, in turn, checks the dataType of the first element of the phrase and uses that as a criteria for combining. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes113.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes113.txt deleted file mode 100644 index 3e442da6f8..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes113.txt +++ /dev/null @@ -1,2 +0,0 @@ -Here's the "combineVectors" method which calls "getVectorData" to obtain statistics for comparison for each of the sub-phrases it is given. It then calls "checkVectorDifference" to determine whether or not the sub-phrases can be combined. If so, it re-applies range adjustments and then creates a new vector value using "vectorAverage". - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes114.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes114.txt deleted file mode 100644 index 4af22be849..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes114.txt +++ /dev/null @@ -1,2 +0,0 @@ -"getVectorData" is given a tree, sub-phrase, elementName and access method. It returns statistics for the sub-phrase according to the access method. It also returns a text version of the direction value. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes115.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes115.txt deleted file mode 100644 index 69c3aaf7fe..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes115.txt +++ /dev/null @@ -1,2 +0,0 @@ -Here is a hierarchy of methods that perform this task. The "combineChildren" method loops through the children of a node (in this case, the sub-phrases) and tries to combine them according to rules supplied by the "combineStats" method. This method, in turn, checks the dataType of the first element of the phrase and uses that as a criteria for combining. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes116.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes116.txt deleted file mode 100644 index 3e442da6f8..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes116.txt +++ /dev/null @@ -1,2 +0,0 @@ -Here's the "combineVectors" method which calls "getVectorData" to obtain statistics for comparison for each of the sub-phrases it is given. It then calls "checkVectorDifference" to determine whether or not the sub-phrases can be combined. If so, it re-applies range adjustments and then creates a new vector value using "vectorAverage". - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes117.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes117.txt deleted file mode 100644 index 4af22be849..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes117.txt +++ /dev/null @@ -1,2 +0,0 @@ -"getVectorData" is given a tree, sub-phrase, elementName and access method. It returns statistics for the sub-phrase according to the access method. It also returns a text version of the direction value. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes118.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes118.txt deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes119.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes119.txt deleted file mode 100644 index 9789ddfc18..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes119.txt +++ /dev/null @@ -1,2 +0,0 @@ -If a vector direction is progressive and magnitudes are similar, use only the first and last sub-phrases. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes12.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes12.txt deleted file mode 100644 index dc854c9b5a..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes12.txt +++ /dev/null @@ -1,2 +0,0 @@ -Here is an example of a Narrative product which consists of a set of components (consisting of phrases for various weather elements) over a series of time periods for one edit area. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes120.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes120.txt deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes121.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes121.txt deleted file mode 100644 index 71748caa90..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes121.txt +++ /dev/null @@ -1,2 +0,0 @@ -If there is a progression in magnitudes with similar directions, use only the first and last sub-phrases with no time descriptor. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes122.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes122.txt deleted file mode 100644 index bc1db273c3..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes122.txt +++ /dev/null @@ -1 +0,0 @@ -It is possible to set up a phrase to report ONLY the most important sub-phrase. This is done by adding entries to the "mostImportant_dict" and the "mostImportant_descriptor" (ConfigVariables). For example, for the WindChill phrase, we only want to report the sub-phrase that has the lowest value. So instead of "Wind chill readings 5 below to 15 below in the early morning then zero to 10 below in the afternoon, " we report "Lowest wind chill readings 5 below to 15 below in the early morning." \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes123.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes123.txt deleted file mode 100644 index 656d1ddf01..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes123.txt +++ /dev/null @@ -1 +0,0 @@ -Despite all our efforts to combine sub-phrases based on statistics, we may still end up with identical words. The "combineWords" method checks consecutive sub-phrases and combines any with identical wording. diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes124.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes124.txt deleted file mode 100644 index b5e8adea57..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes124.txt +++ /dev/null @@ -1,2 +0,0 @@ -All the phraseMethods to this point can be executed immediately. The "combineWords" method, however, must wait until all sub-phrase "words" have been set before it can successfully complete. So it first makes this check. If any sub-phrase is missing a "words" attribute, it returns immediately knowing it will be called again on the next pass through the tree. We say that the Trigger Condition for this method is that all sub-phrases have the "words" attribute set. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes125.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes125.txt deleted file mode 100644 index 9a34863848..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes125.txt +++ /dev/null @@ -1 +0,0 @@ -If sub-phrases can be combined, the "combine2Children" method is called. It takes a tree, phrase, and 2 child nodes and combines them into a new child taking the "words" attribute of the first child. diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes126.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes126.txt deleted file mode 100644 index 9b85bfbcbf..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes126.txt +++ /dev/null @@ -1,2 +0,0 @@ -We have already mentioned the "fillNulls" method as part of the Narrative Strategy for Handling Null Values. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes127.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes127.txt deleted file mode 100644 index a7adfc3283..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes127.txt +++ /dev/null @@ -1,2 +0,0 @@ -It also has the Trigger Condition that all sub-phrases must have the "words" attribute set. Recall that the wordMethods set the "words" attribute to "null" if the values are below the null_nlValue. The job of "fillNulls" is to fill in the appropriate words using the "first_null_phrase" and "null_phrase" values. After doing so, it sets the "null" attribute for the sub-phrase to 1 for subsequent processing. This cannot be done in the wordMethod since, at that point, we cannot be sure whether the sub-phrase will end up being the first. Finally, we must collapse empty word sub-phrases. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes128.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes128.txt deleted file mode 100644 index 1f9c1ff394..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes128.txt +++ /dev/null @@ -1,2 +0,0 @@ -The timeDescriptorModeration method uses the "null" flags as part of its determination as to which sub-phrases should be qualified with time descriptors. For example, "N winds 10 mph increasing to 20 mph IN THE AFTERNOON". It's Trigger Condition is that all sub-phrases have the "words" attribute set. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes129.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes129.txt deleted file mode 100644 index 9d7100ef38..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes129.txt +++ /dev/null @@ -1,2 +0,0 @@ -Here is the algorithm used for time description. In general, instead of modifying every sub-phrase, we modify every other one. We just need to decide whether to start with even or odd sub-phrases. This method does not add the actual words; it simply flags the sub-phrase for subsequent processing (by "assembleSubPhrases"). As you can see, this algorithm is rather complicated since we have to account for null phrases that could end up as the empty string and should not be modified. Other algorithms could be substituted, but they would also have to take this into consideration. The "TimeDescriptor" module contains the configurable "timePeriod_desciptor_dict" which provides the wording for time desciptors such as "in the morning", "in the afternoon", etc. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes13.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes13.txt deleted file mode 100644 index 1b3270abdd..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes13.txt +++ /dev/null @@ -1,2 +0,0 @@ -Here is one component of the narrative product representing a set of phrases over one time period for one edit area. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes130.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes130.txt deleted file mode 100644 index 1a4baf536d..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes130.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes131.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes131.txt deleted file mode 100644 index 5f8d7e9bf6..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes131.txt +++ /dev/null @@ -1,2 +0,0 @@ -The "embedDescriptor" method uses information stored in the first sub-phrase to embed the descriptor after the direction so that we end up with phrases like "N winds 10 mph" instead of "Winds N 10 mph". It's Trigger Condition is that all sub-phrases have the "words" attribute set. When this is the case, "embedDescriptor" checks to see if the "embedded_descriptor_flag" is set. If so, it uses the "dirStr" and "phraseDescriptor" attributes of the first non-empty sub-phrase (set by "vector_words") to switch the order. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes132.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes132.txt deleted file mode 100644 index 0e32ecc4a3..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes132.txt +++ /dev/null @@ -1 +0,0 @@ -The "assembleSubPhrases" method marches through the sub-phrases and glues them together with descriptors, connectors and time descriptors into a complete phrase. This is where all the work of our phrase methods is pulled together into a phrase. diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes133.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes133.txt deleted file mode 100644 index 507131e180..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes133.txt +++ /dev/null @@ -1 +0,0 @@ -The Trigger Condition is that all sub-phrases have the "words" attribute set. There is a check to handle "until" phrasing which, if required, is handled by the "assembleUntilSubPhrases" method. Otherwise, we loop through the sub-phrases including a phrase descriptor for the first non-null sub-phrase and a connector for the rest. We also add a time descriptor for flagged sub-phrases. Finally, we set the "words" attribute for the phrase and return self.DONE(). diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes134.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes134.txt deleted file mode 100644 index 2e9ce4f7af..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes134.txt +++ /dev/null @@ -1 +0,0 @@ -Finally, we have the "postProcessPhrase" method to clean up loose ends often resorting to brute force string replace commands. It's Trigger Condition is that all sub-phrases have the "words" attribute set. diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes135.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes135.txt deleted file mode 100644 index 72a04dd64f..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes135.txt +++ /dev/null @@ -1,2 +0,0 @@ -All of these building blocks work together to create a phrase. Note that every method has access to the complete tree plus the current node or position in the tree. This is how we simulate a "holographic" model in which every part is potentially dependent on and consistent with the whole. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes136.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes136.txt deleted file mode 100644 index b126d99a2a..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes136.txt +++ /dev/null @@ -1 +0,0 @@ -Here is the phraseList for the weather_phrase. Note that it is similar to the standard_vector_phrase methods. The main difference is in the consolidation methods. The "preProcessWx" method organizes the weather subkeys according to their time span. It combines weather types with similar coverages. The "separateNonPrecip" method splits off precip-related weather types from non-precip types. If visibility is constant throughout the time period, it is separated out into its own phrase. The weather phrase can also be adjusted if there are too many sub-phrases. In this case, the temporal resolution will be reduced to make a more desirable phrase. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes137.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes137.txt deleted file mode 100644 index 5400db4355..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes137.txt +++ /dev/null @@ -1 +0,0 @@ -The "separateNonPrecip" method uses the helper method "splitWxPhrase" which takes the tree, sub-phrase, and 2 lists. The first lists weather subkeys that should be disabled in the original phrase. The second lists weather subkeys that should be disabled in a new weather phrase. The "getStatDict" method then uses these attribute lists to filter out weather subkeys that are disabled. This works similarly to the "disabledElements" list mentioned previously. diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes138.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes138.txt deleted file mode 100644 index d628424e89..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes138.txt +++ /dev/null @@ -1 +0,0 @@ -An example will help us see how this works. Suppose we have rain and fog in the morning then rain, fog and snow in the afternoon. The "preProcessWx" method arranges the sub-phrases according to time span. Next, the "separateNonPrecip" method splits the original phrase into two weather phrases, the original with Rain and Snow disabled, a new one with Fog disabled. Note that the original retains its sub-phrase structure; the disabledSubkeys ensure that the wording reflects Fog only. The new weather_phrase now undergoes the "preProcessWx" method which results in sub-phrases that produce the final words. \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes139.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes139.txt deleted file mode 100644 index 1a4baf536d..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes139.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes14.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes14.txt deleted file mode 100644 index 664138bc09..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes14.txt +++ /dev/null @@ -1,2 +0,0 @@ -Here is a narrative phrase representing information about a weather element in one time period over one edit area. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes140.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes140.txt deleted file mode 100644 index 8d1c8b69c3..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes140.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes141.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes141.txt deleted file mode 100644 index 8738f72347..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes141.txt +++ /dev/null @@ -1,2 +0,0 @@ -Here are the pieces of documentation composing the Text Product Documentation. The first three are in the form of slides and notes while the Text Product Reference Guide is a simple "html" document. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes142.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes142.txt deleted file mode 100644 index 077f7f196c..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes142.txt +++ /dev/null @@ -1,2 +0,0 @@ -The Text Product User Guide contains the information about core product set-up and customization as well as general help and feedback. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes143.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes143.txt deleted file mode 100644 index 8d1c8b69c3..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes143.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes144.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes144.txt deleted file mode 100644 index 1a4baf536d..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes144.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes145.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes145.txt deleted file mode 100644 index 8d1c8b69c3..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes145.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes146.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes146.txt deleted file mode 100644 index f550086161..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes146.txt +++ /dev/null @@ -1,2 +0,0 @@ -The Trouble-shooting section of the Text Product Reference Guide lists error messages and strategies for trouble-shooting. We will summarize this information in this section. First, we must isolate the problem and then we can fix it. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes147.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes147.txt deleted file mode 100644 index 8d1c8b69c3..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes147.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes148.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes148.txt deleted file mode 100644 index 77ff40eeb0..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes148.txt +++ /dev/null @@ -1,2 +0,0 @@ -Often at this point, the solution will be obvious. If not, we have several resources available to help us. First, see if you can find documentation describing the feature with which you are having a problem. Make sure that you are following all the set-up instructions. You can also put in print statements to further isolate the problem and give information about data values that may be problematic. Often this will lead to other methods which you can pull from the Infrastructure adding more print statements. When you do this, you'll feel like a detective hot on the trail of the culprit! You will also come to understand the logic of the code. If you still need assistance, formulate a listserver message complete with local file and print statements results. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes149.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes149.txt deleted file mode 100644 index 8d1c8b69c3..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes149.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes15.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes15.txt deleted file mode 100644 index 1a3e2621c9..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes15.txt +++ /dev/null @@ -1,2 +0,0 @@ -Finally, we have a sub-phrase representing information about a weather element during one sub-period over one edit area. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes150.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes150.txt deleted file mode 100644 index 8d1c8b69c3..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes150.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes151.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes151.txt deleted file mode 100644 index 3e3248e081..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes151.txt +++ /dev/null @@ -1,2 +0,0 @@ -The Translator capability allows you to create Tabular and Narrative products in different languages. The concept is simple in that the product is generated first and then the Translator is called to convert the words from one language to another. This concept works because the phrasing in weather forecasts is relatively simple. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes152.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes152.txt deleted file mode 100644 index d8615215a3..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes152.txt +++ /dev/null @@ -1,2 +0,0 @@ -Here is an example Simple Tabular product. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes153.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes153.txt deleted file mode 100644 index aa9ec9c1e1..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes153.txt +++ /dev/null @@ -1,2 +0,0 @@ -It is automatically submitted to the Translator if the "language" in the Definition section is specified as anything other than "english". The Translator has lengthy tables giving corresponding Spanish and French expressions. They are simply substituted for the English expressions in the product. There is additional code in the Translator for handling gender and noun-adjective ordering. You may have to add entries to the Translator tables in order to successfully cover all the expressions in your product. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes154.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes154.txt deleted file mode 100644 index d0de7967d6..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes154.txt +++ /dev/null @@ -1,2 +0,0 @@ -Here is the resulting product translated into Spanish. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes155.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes155.txt deleted file mode 100644 index 8d1c8b69c3..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes155.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes156.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes156.txt deleted file mode 100644 index 8d1c8b69c3..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes156.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes157.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes157.txt deleted file mode 100644 index 8d1c8b69c3..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes157.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes16.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes16.txt deleted file mode 100644 index eb440914cd..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes16.txt +++ /dev/null @@ -1,2 +0,0 @@ -We can represent the narrative product in TREE structure which follows this hierarchy in the computer's memory. This representation allows examination and manipulation of the tree at all levels. Each node can see and/or change the entire tree prior to final output. Words for each node are stored instead of output so they are available for examination and manipulation by other nodes. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes17.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes17.txt deleted file mode 100644 index 3ec0614893..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes17.txt +++ /dev/null @@ -1,2 +0,0 @@ -Each node has a list of methods to execute. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes18.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes18.txt deleted file mode 100644 index 264f713e6b..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes18.txt +++ /dev/null @@ -1,2 +0,0 @@ -These are given in the "methodList" entry of the definition. Here are methods at the narrative level... - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes19.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes19.txt deleted file mode 100644 index 4389e5c81f..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes19.txt +++ /dev/null @@ -1,2 +0,0 @@ -...at the component level... - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes20.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes20.txt deleted file mode 100644 index dfd7d92be8..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes20.txt +++ /dev/null @@ -1,2 +0,0 @@ -...and at the phrase level. Every phrase MUST have a "setUpMethod" called first and a "wordMethod" called last at the sub-phrase level to produce words for one sub-phrase. Optional "phraseMethods" and "subPhraseMethods" are called in between. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes21.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes21.txt deleted file mode 100644 index 9c04d22251..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes21.txt +++ /dev/null @@ -1,2 +0,0 @@ -Here is an example wordMethod for wind at the subPhrase level. Note that the arguments are the tree and the current subPhrase node. The job of this method is to set the words for the subPhrase and return DONE. The special method "setWords" does just this. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes22.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes22.txt deleted file mode 100644 index 01e9478017..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes22.txt +++ /dev/null @@ -1,2 +0,0 @@ -Each node of the tree can have attributes or data values associated with it. There are some standard attributes such as "words" and "areaLabel". In addition, you may create any attribute you like on-the-fly and store it at the node for future reference. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes23.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes23.txt deleted file mode 100644 index a013a1244b..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes23.txt +++ /dev/null @@ -1,2 +0,0 @@ -These methods give you access to the attributes of a node. The "get" command returns the value of the given attribute. If this attribute has not been set, it returns None. The "set" command sets the given attribute (e.g. "descriptor") to the given value (e.g. "winds"). Finally, the "setWords" method sets the words for the given node to the given value (e.g. "2 inches") and returns the special value, self.DONE() indicating that this method has completed processing. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes24.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes24.txt deleted file mode 100644 index 7e9e34018b..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes24.txt +++ /dev/null @@ -1,2 +0,0 @@ -There are many other node methods some of which are listed here. These methods reside in the ForecastNarrative engine which cannot be overridden but is available for perusal in the examples/textProducts directory. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes25.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes25.txt deleted file mode 100644 index 0261568ab8..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes25.txt +++ /dev/null @@ -1,2 +0,0 @@ -Here are some very handy methods which allow you to easily access the time range, area label and component information about a node. Note that we cannot simply use the "get"command since a particular node may not have a "timeRange" or "component" attribute set. These methods return the value for the first ancestor having the given attribute. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes26.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes26.txt deleted file mode 100644 index 49369c81f4..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes26.txt +++ /dev/null @@ -1,2 +0,0 @@ -In addition to building the narrative tree based on the narrative definition phrase list, the ForecastNarrative engine samples and analyzes the data and creates a statistics dictionary for the entire product. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes27.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes27.txt deleted file mode 100644 index 3486288d4d..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes27.txt +++ /dev/null @@ -1 +0,0 @@ -The statistics dictionary is a dictionary of dictionaries -- one for weather element, area label, time range and statistics label. diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes28.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes28.txt deleted file mode 100644 index de16842f33..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes28.txt +++ /dev/null @@ -1,2 +0,0 @@ -You can access information in the Statistics Dictionary using the "tree.stats.get" method which takes a weather element, time range, and area label. You can optionally specify a statistics method which will return the analysis for that particular SampleAnalysis method. Sometimes we will request data for a time range which covers multiple time periods. In this case, we can specify a "mergeMethod" to be used in merging the statistics returned. The default method is "List". You may specify "Max", "Min", "MinMax", "Average", or "List". If you specify "List", a set of (statistics, timeRange) tuples will be returned. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes29.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes29.txt deleted file mode 100644 index ab6cd732d6..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes29.txt +++ /dev/null @@ -1,2 +0,0 @@ -Note that when we structure the narrative product into a tree, the order of processing is not straight-forward. There are dependencies that govern this processing order. For example, we must create the sub-phrase words before we can assemble the sub-phrases. We must assemble the phrases before we can assemble the component. And we must set up the sub-phrases and consolidate them before we create sub-phrase words. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes30.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes30.txt deleted file mode 100644 index 8f9c2d3da6..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes30.txt +++ /dev/null @@ -1,2 +0,0 @@ -To address this situation, we introduce the concept of "holographic" processing. This simply means that each part potentially embodies the whole, each sub-phrase, phrase, and component is potentially dependent on other nodes of the tree. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes31.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes31.txt deleted file mode 100644 index e4de9f9534..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes31.txt +++ /dev/null @@ -1,2 +0,0 @@ -We can simulate holographic processing by making multiple passes through the tree, traversing it top-down and executing the methods at each node until no changes are made to the tree. Each method may return a "DONE" flag to indicate it's job is done and it should not be executed again. This introduces the potential for infinite loops -- what if methods are not well-coordinated and we continue to make passes which alter the tree? For this, we provide a safety net. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes32.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes32.txt deleted file mode 100644 index d66b682026..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes32.txt +++ /dev/null @@ -1,3 +0,0 @@ -We have some simple rules that all tree methods must follow. First, they must check for the necessary data and if it's not available yet, return immediately. If the data is available, the method does its job and returns the special self.DONE() flag. - For example, the "assembleComponents" method checks to see if the "words" attribute for ALL of the child phrases have been set. If not, it simply returns. If so, it adds a time range label, assembles the component phrases, and returns the special self.DONE() flag so it will not be called again. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes33.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes33.txt deleted file mode 100644 index 7b3722eb82..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes33.txt +++ /dev/null @@ -1,2 +0,0 @@ -So now we can see how these rules work to produce the desired result. In Pass 1, the pre-requisites for assembling components and assembling phrases are not met I.e. there are no words set at the component or phrase levels. We CAN set up, combine, and consolidate the sub-phrases, however. We cannot assemble the sub-phrases yet since no sub-phrase words have been set, but we can create the words for each sub-phrase in turn. In Pass 2, we can assemble the sub-phrase words. By Pass 3, we assemble the phrase words and finally in Pass 4, we are ready to assemble the component words. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes34.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes34.txt deleted file mode 100644 index 91154548b7..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes34.txt +++ /dev/null @@ -1,2 +0,0 @@ -This processing approach requires that methods coordinate with each other and communicate using the data stored in the narrative tree. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes35.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes35.txt deleted file mode 100644 index 6048e6d7c3..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes35.txt +++ /dev/null @@ -1,2 +0,0 @@ -We can think of the narrative tree as a blackboard upon which we write data for other methods to examine and manipulate. For example, the "wind_summary_words", "temp_words", and "wx_words" methods write their results on the blackboard. The "pop_words" method uses the results to properly word the PoP phrase. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes36.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes36.txt deleted file mode 100644 index cea361eb40..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes36.txt +++ /dev/null @@ -1 +0,0 @@ -Finally, the "assembleChildWords" method can gather the phrase results to form a component. diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes37.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes37.txt deleted file mode 100644 index 4dfe9a3589..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes37.txt +++ /dev/null @@ -1 +0,0 @@ -The methods not only write on the blackboard; they are part of the narrative tree and, thus, part of the changing data. They can be completed, removed, or altered as necessary. diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes38.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes38.txt deleted file mode 100644 index 11d60c1506..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes38.txt +++ /dev/null @@ -1,2 +0,0 @@ -They are part of the tree and associated with particular nodes. They get and set data attributes such as sub-phrase words and are themselves attributes of the nodes of the tree. This affords us great power in being able to express dependencies and change the product outcome. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes39.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes39.txt deleted file mode 100644 index 5b35497118..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes39.txt +++ /dev/null @@ -1,4 +0,0 @@ -Narrative methods coordinate to produce desired results. One method is depending on the outcome of another and thus, we need high level descriptions or "strategies" to describe this coordination since it is not obvious from examining the narrative definition or individual methods. - -Now we will look at various Narrative Strategies that are employed in the core products and can be used in new products. These are described in more detail in the Text Product Reference Guide. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes4.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes4.txt deleted file mode 100644 index 96dd3650d2..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes4.txt +++ /dev/null @@ -1 +0,0 @@ -Recall the FWFTable product from the last section. "Glued" to the bottom of the table is a narrative phrase product describing the extended periods. diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes40.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes40.txt deleted file mode 100644 index d6b11c73c2..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes40.txt +++ /dev/null @@ -1,2 +0,0 @@ -Here are the Narrative Strategies we will examine. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes41.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes41.txt deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes42.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes42.txt deleted file mode 100644 index c804cc552e..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes42.txt +++ /dev/null @@ -1,2 +0,0 @@ -We have seen the non-linear threshold in an earlier session. To review, any threshold with the "nlValue" suffix can be expressed as a simple numeric value, a method for calculating the value, or a dictionary with a (lowVal, highVal) kesy and corresponding threshold values. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes43.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes43.txt deleted file mode 100644 index fbfd08511e..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes43.txt +++ /dev/null @@ -1,2 +0,0 @@ -Here's an example. Notice that the (lowVal, highVal) pairs have no "gaps". The meaning is that any value greater or equal to the first value and less than the second will take on the corresponding value. Notice also the special use of the "default" keyword which applies to any value outside the given key ranges. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes44.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes44.txt deleted file mode 100644 index 5f72385242..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes44.txt +++ /dev/null @@ -1,2 +0,0 @@ -It is the responsibility of the method using the threshold to apply it to each value. The library method, "self.nlValue" takes a non-linear value and a weather element value and returns the potentially non-linear result. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes45.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes45.txt deleted file mode 100644 index 5df9ed143a..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes45.txt +++ /dev/null @@ -1,2 +0,0 @@ -The Infrastructure allows for altering the data values when extracting them from the grids by converting units, rounding and adjusting the ranges according to minimum and maximum range values. The ForecastNarrative engine performs these operations when it creates the Statistics Dictionary. Unit conversion is done automatically according to the "element_inUnits_dict" and "element_outUnits_dict" which are located in the ConfigVariables module and can be overridden in your Local file. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes46.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes46.txt deleted file mode 100644 index 8b13789179..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes46.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes47.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes47.txt deleted file mode 100644 index 30dc3db94e..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes47.txt +++ /dev/null @@ -1,2 +0,0 @@ -Standard rounding is specified using the increment_nlValue_dict. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes48.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes48.txt deleted file mode 100644 index f2a97b1822..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes48.txt +++ /dev/null @@ -1,2 +0,0 @@ -Note that since this has the suffix, "nlValue", we could specify it as a non-linear value. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes49.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes49.txt deleted file mode 100644 index 6bdc1adccc..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes49.txt +++ /dev/null @@ -1,2 +0,0 @@ -We may want to apply non-standard rounding. To do this, we can specify a rounding method for the weather element in question. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes5.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes5.txt deleted file mode 100644 index 7cf10d188a..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes5.txt +++ /dev/null @@ -1 +0,0 @@ -We can include any product, tabular or narrative, within another product by using the "generateProduct" command. This is analogous to the "callSmartTool" command used in Procedures. It takes a product name corresponding to the product definition, an editArea object and a timeRange object. It returns a text string representing the forecast for that edit area and time range. diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes50.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes50.txt deleted file mode 100644 index 22c8466877..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes50.txt +++ /dev/null @@ -1,2 +0,0 @@ -If such a method is supplied, the system will call it instead of the simple rounding method. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes51.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes51.txt deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes52.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes52.txt deleted file mode 100644 index 2dbca50da1..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes52.txt +++ /dev/null @@ -1,2 +0,0 @@ -Null values are those that fall below the "null_nlValue" for a given weather element. Word methods set the words to the empty string if there are no grids available and to the special string, "null", if the values are below threshold. In the special case of a range that straddles the "null_nlValue", words are set using the "around" qualifier e.g. "around 10 mph". - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes53.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes53.txt deleted file mode 100644 index 5a1a665f0f..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes53.txt +++ /dev/null @@ -1,2 +0,0 @@ -The phrase-level method "fillNulls" examines the sub-phrases and fills in the appropriate words according to the "first_null_phrase" and "null_phrase" dictionaries. It then flags the sub-phrase as a "null" phrase for subsequent methods. The phrase-level methods use this attribute information to handle "null" sub-phrases appropriately. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes54.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes54.txt deleted file mode 100644 index de23824bcb..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes54.txt +++ /dev/null @@ -1,2 +0,0 @@ -In order to allow temporal resolution AND avoid redundant phrases, we have certain strategies for consolidating the sub-phrases. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes55.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes55.txt deleted file mode 100644 index 8b13789179..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes55.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes56.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes56.txt deleted file mode 100644 index cfe8668c99..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes56.txt +++ /dev/null @@ -1,2 +0,0 @@ -Now we will look at some consolidation rules and examples of resulting phrases. For a more complete list of rules, see the Text Product Reference Guide. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes57.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes57.txt deleted file mode 100644 index 8d1c8b69c3..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes57.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes58.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes58.txt deleted file mode 100644 index 8d1c8b69c3..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes58.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes59.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes59.txt deleted file mode 100644 index 8d1c8b69c3..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes59.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes6.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes6.txt deleted file mode 100644 index e0c289f45f..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes6.txt +++ /dev/null @@ -1,2 +0,0 @@ -Here's the call to "generateProduct" within the FWFTable. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes60.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes60.txt deleted file mode 100644 index ac13db6450..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes60.txt +++ /dev/null @@ -1,2 +0,0 @@ - Weather phrasing is complex. For a complete explanation of the strategy, see the Text Reference Guide section on Weather Phrasing. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes61.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes61.txt deleted file mode 100644 index 8d1c8b69c3..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes61.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes62.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes62.txt deleted file mode 100644 index 536db2d0ce..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes62.txt +++ /dev/null @@ -1 +0,0 @@ -The period combining feature has undergone refinement by field forecasters. To turn on period combining, you simply set the "periodCombining" flag to 1 in the Definition section of the product. Period combinig methods exist in the baseline for a set of elmeets from which you can choose. The methods for combinig periods are automatically called and periods are combined if they meet the criteria. For more information on altering this criteria, see the Text Product Reference Guide section on Period Combining. diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes63.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes63.txt deleted file mode 100644 index 6d0649612a..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes63.txt +++ /dev/null @@ -1,2 +0,0 @@ -If you would like to dynamically order your phrases based on significant weather events, you can use the phrase ordering strategy. For example, if there are severe thunderstorms in the forecast, you might want to mention them first. The narrative tree structure allows us to re-order the phrase nodes on-the-fly. The method, "moveAbove" (PhraseBuilder), moves a given phrase above another phrase in the given component list based on logic which you supply. For details, see the Text Product Reference Guide section on phrase ordering. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes64.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes64.txt deleted file mode 100644 index 5d84a54d20..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes64.txt +++ /dev/null @@ -1,2 +0,0 @@ -If you would like to dynamically order your phrases based on significant weather events, you can use the phrase ordering strategy. For example, if there are severe thunderstorms in the forecast, you might want to mention them first. The narrative tree structure allows us to re-order the phrase nodes on-the-fly. The method, "XXX", provides this functionality. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes65.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes65.txt deleted file mode 100644 index bac9c714d4..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes65.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes66.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes66.txt deleted file mode 100644 index 9af34ad3f8..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes66.txt +++ /dev/null @@ -1,2 +0,0 @@ -Recall the set-up of a simple Local Effect from previous sessions. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes67.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes67.txt deleted file mode 100644 index b399f34f38..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes67.txt +++ /dev/null @@ -1,2 +0,0 @@ -We must specify a Local Effects list and the appropriate "intersectAreas". - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes68.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes68.txt deleted file mode 100644 index 10f2c9b811..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes68.txt +++ /dev/null @@ -1,2 +0,0 @@ -Then we include the Local Effects list in the Local file. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes69.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes69.txt deleted file mode 100644 index 631bb44ebf..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes69.txt +++ /dev/null @@ -1,2 +0,0 @@ -Now we will see how the system uses the narrative tree structure to handle Local Effects. First consider the case of an "embedded" local effect i.e. one in which there is only one time period. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes7.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes7.txt deleted file mode 100644 index 72056c7f47..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes7.txt +++ /dev/null @@ -1,2 +0,0 @@ -Here's the ExtendedNarrative definition which refers to the Extended component. You may remember the "narrativeDef" entry from earlier sessions. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes70.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes70.txt deleted file mode 100644 index fd4068852d..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes70.txt +++ /dev/null @@ -1,2 +0,0 @@ -This is initially represented in the tree as shown with a phrase, one sub-phrase, and the associated Local Effects list stored as an attribute for the phrase node. If there is an associated Local Effects list for a phrase, the ForecastNarrative Engine adds "checkLocalEffects" to the methodList for that node. This PhraseBuilder method then checks the Local Effect criteria. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes71.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes71.txt deleted file mode 100644 index edbf19912f..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes71.txt +++ /dev/null @@ -1,2 +0,0 @@ -If met, it creates a sub-phrase for each Local Effect area (or areas) for which there was a significant difference. It also makes a new attribute for the node and adds the method "assembleEmbeddedLocalEffect" to be executed after the word methods generate words. Notice that after this operation, processing can proceed as for any other phrase. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes72.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes72.txt deleted file mode 100644 index f73ec3d2af..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes72.txt +++ /dev/null @@ -1,2 +0,0 @@ -If we have multiple time periods, we must create a conjunctive Local Effect. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes73.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes73.txt deleted file mode 100644 index 3f88caab94..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes73.txt +++ /dev/null @@ -1,2 +0,0 @@ -As before, we initially have the Local Effects list as an attribute and the ForecastNarrative Engine adds "checkLocalEffects" to the method list for the node. A Local Effect is generated if ANY of the sub-phrases meet the Local Effect criteria. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes74.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes74.txt deleted file mode 100644 index 4d1dc153e6..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes74.txt +++ /dev/null @@ -1,2 +0,0 @@ -If so, the phrase node is split so that there is a node for each Local Effect area (or areas) that meet the Local Effect criteria. A label is added as an attribute to be used when assembling the final phrase. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes75.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes75.txt deleted file mode 100644 index 3310b09fa0..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes75.txt +++ /dev/null @@ -1,2 +0,0 @@ -There is the case of a "degenerate" conjunctive local effect in which we initially had multiple time periods, but in the process of combining sub-phrases, we ended up with only one time period for each local effect area. We must now "glue" these single-period phrases back together to form the embedded Local Effect. The code for this is in the PhraseBuilder method "combineConjunctiveLocalEffects" which is called when we assemble the component phrases.. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes76.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes76.txt deleted file mode 100644 index 1fd4337847..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes76.txt +++ /dev/null @@ -1,2 +0,0 @@ -Here is a simple Local Effect setup... - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes77.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes77.txt deleted file mode 100644 index e36bd8a637..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes77.txt +++ /dev/null @@ -1,2 +0,0 @@ -...with the associated Local Effect list method. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes78.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes78.txt deleted file mode 100644 index bc8235b1e6..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes78.txt +++ /dev/null @@ -1,2 +0,0 @@ -Notice in this case, we are specifying a Local Effect METHOD instead of the RESULT of a Local Effects list method. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes79.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes79.txt deleted file mode 100644 index 20423219e7..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes79.txt +++ /dev/null @@ -1,2 +0,0 @@ -In this case, the method will be called with the "tree" and "node" arguments at run-time which allows us to create the Local Effect definition on-the-fly and perhaps base it on the current edit area or component. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes8.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes8.txt deleted file mode 100644 index 0672e50be0..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes8.txt +++ /dev/null @@ -1 +0,0 @@ -Finally, we have the Extended Component definition with entries such as the analysisList and phraseList. diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes80.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes80.txt deleted file mode 100644 index 1baf345a74..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes80.txt +++ /dev/null @@ -1,2 +0,0 @@ -The setup of Local Effects for compound phrases is different from other phrases. As usual, we must set up the "intersectAreas" in the Product Component definition. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes81.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes81.txt deleted file mode 100644 index bd5d87f5f0..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes81.txt +++ /dev/null @@ -1,2 +0,0 @@ -However, to set up the Local Effect definition, we locate the phrase definition for the compound phrase, override it in our Local File... - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes82.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes82.txt deleted file mode 100644 index de9c066b54..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes82.txt +++ /dev/null @@ -1,2 +0,0 @@ -...and attach the Local Effects definition to the phrase(s) composing the compound phrase. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes83.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes83.txt deleted file mode 100644 index 95e2f2ee46..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes83.txt +++ /dev/null @@ -1,2 +0,0 @@ -Virtually any part of the Local Effects definition can be expressed as a method instead of a constant value. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes84.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes84.txt deleted file mode 100644 index df9e027453..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes84.txt +++ /dev/null @@ -1,2 +0,0 @@ -Here the threshold criteria for generating a Local Effect is given as a method. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes85.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes85.txt deleted file mode 100644 index 30a72d2b47..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes85.txt +++ /dev/null @@ -1,2 +0,0 @@ -Here the descriptor for a Local Effect area is given as a method. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes86.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes86.txt deleted file mode 100644 index 7ce9c11d7f..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes86.txt +++ /dev/null @@ -1,2 +0,0 @@ -And here the connector word is given as a method. The arguments to each of these methods is specified in the Text Product Reference Guide. Using methods and their arguments gives extra flexibility in specifying Local Effects. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes87.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes87.txt deleted file mode 100644 index 1f099b7914..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes87.txt +++ /dev/null @@ -1,2 +0,0 @@ -There is no limit on the number of Local Effect areas to be compared. The system is able to compare all combinations of multiple areas, group them according to whether they are similar or dissimilar and report accordingly. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes88.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes88.txt deleted file mode 100644 index 27acd1beb9..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes88.txt +++ /dev/null @@ -1,2 +0,0 @@ -Instead of specifying "intersectAreas", we can compare the current area to "additionalAreas" which must be listed in the Product Component definition as shown. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes89.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes89.txt deleted file mode 100644 index 4d1db80b3c..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes89.txt +++ /dev/null @@ -1,4 +0,0 @@ -The special keyword, "__Current__" will compare the current area (not intersected with any other area) to the given Local Effect area. If you want the area to be compared as a whole i.e. not intersected with any other area, use the "intersectFlag=0" setting when you define the LocalEffectArea. - -These and other examples are found in the Text Product Reference Guide section on Local Effects. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes9.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes9.txt deleted file mode 100644 index bd8e81b691..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes9.txt +++ /dev/null @@ -1,2 +0,0 @@ -Now we will learn about Narrative products and how they are constructed. First, we will learn about the Forecast Narrative Engine which interprets the narrative definition, samples and analyzes the data to produce a narrative tree and statistics dictionary. We will examine the processing rules that result in a finished narrative product and various narrative strategies employed to express the many complexities and dependencies inherent in narrative products. Finally, we will tie all of this together as we learn about the steps to construct a narrative phrase. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes90.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes90.txt deleted file mode 100644 index 8d1c8b69c3..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes90.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes91.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes91.txt deleted file mode 100644 index 282c1ca5ef..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes91.txt +++ /dev/null @@ -1,2 +0,0 @@ -Narrative Phrases are built by a collection of Python methods which cooperate to piece together the desired words. We have discussed Narrative Strategies which give us some insight into the complexities and dependencies involved in building a phrase. Though we cannot cover all the logic and code used to build the core products, we will find it very instructive to walk through the definition of an example phrase which has an "anatomy" very similar to other phrases. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes92.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes92.txt deleted file mode 100644 index e82da78e92..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes92.txt +++ /dev/null @@ -1,2 +0,0 @@ -Here is a phrase definition which has a setUpMethod, a wordMethod and optional phrase methods. The setUpMethod is called first at the phrase level. Its job is to create the sub-phrases based on the statistics available. The phraseMethods are called from the phrase level and the wordMethod is called at the sub-phrase level to create the words for each sub-phrase. We will dissect this definition to see how the methods build a phrase and learn about infrastructure helper methods which they employ. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes93.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes93.txt deleted file mode 100644 index 72ee5a7464..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes93.txt +++ /dev/null @@ -1,2 +0,0 @@ -Here's an example setUp method for the wind_phrase. We first set up the information about the weather elements included in the phrase. Then we determine a connectorMethod which will create the connecting words between sub-phrases. For example, "North winds 10 mph INCREASING TO 20 mph in the afternoon". Then we call a PhraseBuilder method to set up the sub-phrases according to the temporal resolution of the statistics. Finally, it is important the we return the "self.DONE()" flag so this method is not called again. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes94.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes94.txt deleted file mode 100644 index 3902d15c24..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes94.txt +++ /dev/null @@ -1,2 +0,0 @@ -For each weather element involved in the phrase, we create an ElementInfo entry. This includes the elementName e.g. "Wind", a mergeMethod such as "List", "MinMax", or "Average". For the first element in the ElementInfoList, the mergeMethod should be "List". This is the mechanism by which phrases will be analysis-driven. Other elements involved in the phrase cannot use the "List" mergeMethod and must use "Min", "Max", "MinMax", or "Average". This means that they follow the temporal resolution of the first element. The default dataType is Scalar. We must specify if the element is Vector or Weather. We can do this using the special "self.VECTOR()" and "self.WEATHER()" values. If we want to use a statistics other than the first one listed in the analysisList, we can specify a statLabel. We can specify if the element is primary or secondary with respect to consolidaition rules. Finally, for primary elements other than the first, we need to specify a phrase definition method to be used when splitting off independent phrases. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes95.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes95.txt deleted file mode 100644 index 9ef9b6fbc6..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes95.txt +++ /dev/null @@ -1 +0,0 @@ -For example, for the WindGust weather element, we specify the gust_phrase. diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes96.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes96.txt deleted file mode 100644 index e1f2634e8f..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes96.txt +++ /dev/null @@ -1,2 +0,0 @@ -The setPhraseSetUp method takes the information in the elementInfoList and creates the subPhrase nodes, one for each analysis entry for the first element. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes97.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes97.txt deleted file mode 100644 index cfcc5fe1d2..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes97.txt +++ /dev/null @@ -1,2 +0,0 @@ -For example, if we have a temporal resolution of [6] in a 12-hour period, we will end up with 2 sub-phrase nodes, one for the first 6 hours and one for the second. The "subPhraseSetUp" method then sets various attributes on the phrase and sub-phrase nodes. The "descriptor" is from the "phrase_descriptor_dict" for the first weather element. The connectorMethod and elementInfoList are stored for subsequent use, as are the elementInfo and elementName for the first element. At the sub-phrase level, we store the elementName, timeRange. In addition, we create and store a statistics dictionary which is specific to this sub-phrase timeRange and areaLabel. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes98.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes98.txt deleted file mode 100644 index de8e2d1f5e..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes98.txt +++ /dev/null @@ -1,2 +0,0 @@ -The areaLabel is set at the tree level initially, but any node can re-set it's areaLabel and that area will be used instead. For example, if we want our wind phrase to apply to the ridges of the current area, we can re-set it to the intersection of the current area and Ridges as shown. Of course, we must have set up an "intersectAreas" entry for Wind and Ridges in the product component definition. The ability to change the areaLabel on-the-fly is very powerful allowing us to create not only local effects, but many other area-specific phrases. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes99.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes99.txt deleted file mode 100644 index e637aaf1e6..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideNarrative/notes99.txt +++ /dev/null @@ -1,2 +0,0 @@ -Secondary elements are never split off when consolidating. For example, the "Period" element which appears in the Swell phrase may have a constant value throughout the phrase. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide1.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide1.JPG deleted file mode 100644 index 624694f1c3..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide1.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide1.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide1.html deleted file mode 100644 index 2cc01e2760..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide1.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Tabular Products

    -

    1. GFESuite Advanced Text Product User Guide for Tabular Products

    -
    -Next Slide

    - - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide10.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide10.JPG deleted file mode 100644 index f4bcf24e8d..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide10.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide10.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide10.html deleted file mode 100644 index 4a5bce95ec..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide10.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -
    -

    Text Formatter User Guide for Tabular Products

    -

    10. Simple Tabular Product - Definition

    -
    -Previous Slide Next Slide

    -

    Finally, we specify information for the weather element(s). We must give the weather element name, a label, an analysis method, a reporting method, the weather element data type, an optional rounding value, and an optional conversion method. Since the Simple Table does not inherit from the Text Product libaries, we include methods in quotes to signal the ForecastNarrative module to use the library methods. If you supply your own method, put it at the beginning of the Simple Table file and name it without the quotes.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide11.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide11.JPG deleted file mode 100644 index bfd98444e0..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide11.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide11.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide11.html deleted file mode 100644 index 44df3befca..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide11.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Tabular Products

    -

    11. Simple Tabular Product - Exercises

    -
    -Previous Slide Next Slide

    - - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide12.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide12.JPG deleted file mode 100644 index 3b7e59282a..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide12.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide12.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide12.html deleted file mode 100644 index a5bc3a95a2..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide12.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -
    -

    Text Formatter User Guide for Tabular Products

    -

    12. Smart Text Products

    -
    -Previous Slide Next Slide

    -

    Simple Table products offer a lot of flexibility, but are restricted to tables with homogeneous rows and columns and certain formats. For more sophisitcated products, tabular and narrative, we have the Smart Text Product framework.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide13.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide13.JPG deleted file mode 100644 index a446ea71ab..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide13.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide13.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide13.html deleted file mode 100644 index f1fdd6e041..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide13.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Tabular Products

    -

    13. Smart Text Products - Naming Conventions

    -
    -Previous Slide Next Slide

    -

    Smart Text Products inherit from the TextRules and SampleAnalysis libraries. Within the libraries, variables, in general, start with lower case letters and can use capitals and underscores to delineate words. We opt in favor of longer names to for clarity and readability of the code. It it imperative that when you create new variables or methods in the Standard or Local Text Product files, you begin their names with an underscore. This will ensure that you are not inadvertently overriding a variable or method from the Infrastructure which could break your product or produce undesirable results.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide14.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide14.JPG deleted file mode 100644 index e7adb0ca48..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide14.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide14.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide14.html deleted file mode 100644 index 668ab3f66b..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide14.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Tabular Products

    -

    14. Smart Text Products - Standard Product Main Method

    -
    -Previous Slide Next Slide

    -

    Every Smart Text Product follows the template format presented in Part 1 of the Text Product User Guide. As such, it follows the steps of getting variables, setting up edit areas and time ranges, sampling the data, producing headers and footers and formatting the product. We will be looking at helper methods in the Infrastructure which allow the product to perform these steps.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide15.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide15.JPG deleted file mode 100644 index 7ff1e70dc1..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide15.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide15.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide15.html deleted file mode 100644 index 3f7becbede..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide15.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Tabular Products

    -

    15. Smart Text Products - Setting Variables

    -
    -Previous Slide Next Slide

    -

    Smart Text products access the variables from the VariableList using a "varDict" similar to that in SmartTools. The "varDict" can be accessed as an entry in the "argDict" dictionary which contains useful information about the product. The "_getVariables" method also sets up the variables from the Definition section of the product. We can call these "Magic" variables because all you have to do is add an entry to the Definition section and it will automatically be available to you as a variable within the product.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide16.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide16.JPG deleted file mode 100644 index 8602e97a6f..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide16.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide16.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide16.html deleted file mode 100644 index eee861e851..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide16.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Tabular Products

    -

    16. Smart Text Products - Python "exec" statement

    -
    -Previous Slide Next Slide

    -

    To do this, we use the special "exec" Python command. This is a very handy command which you will see in use throughout the text products. You build a text string of the Python code you would like to execute and then submit it to the "exec" command. So in this case, we loop through the entries of the Definition section creating variables. For example, if we have a Definition entry of "type", we build an exec string that sets the variable, "self._type" to its Definition value.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide17.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide17.JPG deleted file mode 100644 index 0878efe5c1..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide17.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide17.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide17.html deleted file mode 100644 index f5baece94b..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide17.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Tabular Products

    -

    17. Smart Text Products - Class Objects and Data Structures

    -
    -Previous Slide Next Slide

    -

    The Smart Text Products create and manipulate these objects. Having familiarity with them will help you understand the "language" of the text products. Edit Areas are Python class objects which have attribute methods such as the edit area name and data points. The AreaList is a list of (edit area object, label) tuples. We'll look more closely at Time Ranges in a moment. The AnalysisList specifies weather elements and analysis methods. The HistoSampler is complicated structure containing the raw histograms from sampling the data. You will not need to access information inside the HistoSampler, but will pass it on to helper methods to perform the analysis. Finally, the StatDict and StatList contain the results of the analysis for each weather element. We'll see them in more detail later.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide18.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide18.JPG deleted file mode 100644 index a8ae11942d..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide18.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide18.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide18.html deleted file mode 100644 index d7d3e817a6..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide18.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Tabular Products

    -

    18. Smart Text Products - TimeRange Object

    -
    -Previous Slide Next Slide

    -

    A Time Range is a Python class with methods for the startTime and endTime. These in turn are Python AbsTime classes which have their own methods. The duration of a time range can be accessed as the number of seconds it covers.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide19.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide19.JPG deleted file mode 100644 index 257790ee8c..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide19.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide19.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide19.html deleted file mode 100644 index 375e9ce24d..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide19.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Tabular Products

    -

    19. Smart Text Products - Set Up Edit Areas

    -
    -Previous Slide Next Slide

    -

    The "getAreaList" method accesses the list of (edit area object, label) pairs over which the product will be run. This list is created by the TextFormatter infrastructure BEFORE the Smart Text Product is called. It is created from the "defaultEditAreas" list or the Combinations file for the product. The Infrastructure does the work of interpreting the text edit area names and fetching the edit area information from the server to create the edit area object which subsequent steps require.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide2.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide2.JPG deleted file mode 100644 index 355417d2c0..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide2.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide2.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide2.html deleted file mode 100644 index 9898d1ccae..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide2.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Tabular Products

    -

    2. Overview

    -
    -Previous Slide Next Slide

    -

    In this presentation we will first discuss Simple Tabular Products which can be used to set up tables with relatively simple requirements. For more complex products, we can use Smart Text Products. We will learn about Smart Tabular Products and the helper methods in the Infrastructure for creating them.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide20.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide20.JPG deleted file mode 100644 index 883fe65bef..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide20.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide20.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide20.html deleted file mode 100644 index 4e679281c7..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide20.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Tabular Products

    -

    20. Smart Tabular Products

    -
    -Previous Slide Next Slide

    - - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide21.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide21.JPG deleted file mode 100644 index 25dbdf1357..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide21.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide21.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide21.html deleted file mode 100644 index 9cfdff5914..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide21.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -
    -

    Text Formatter User Guide for Tabular Products

    -

    21. Smart Tabular Products - SmartElementTable

    -
    -Previous Slide Next Slide

    -

    Here is a table listing edit areas down the rows and weather elements across the columns. However, there is no constantVariable as three time periods are reported for each weather element. Thus, this table cannot be created using the Simple Tabular definition. Using a Smart Text Product, we gain the flexibility to format the product in any way we wish.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide22.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide22.JPG deleted file mode 100644 index 2bd0ce4091..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide22.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide22.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide22.html deleted file mode 100644 index a8819fbe96..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide22.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Tabular Products

    -

    22. Smart Tabular Products - SmartElementTable

    -
    -Previous Slide Next Slide

    -

    The SimpleElementTable uses an "elementList" to specify which elements to list across the columns and in which order. We can specify any combination of Temp, PoP, and Humidity.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide23.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide23.JPG deleted file mode 100644 index d38baab5c3..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide23.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide23.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide23.html deleted file mode 100644 index 8b6d6ec095..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide23.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Tabular Products

    -

    23. Smart Tabular Products - Infrastructure Engine

    -
    -Previous Slide Next Slide

    -

    Smart Tabular Products, like all Smart Text Products, inherit from the SampleAnalysis and TextRules libraries and call helper methods directly to perform the steps of creating a text product and format the table as desired. We will look at some of these helper methods and then we will see how they act together.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide24.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide24.JPG deleted file mode 100644 index dd2ada4a89..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide24.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide24.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide24.html deleted file mode 100644 index 0ad68c7b1f..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide24.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Tabular Products

    -

    24. Smart Tabular Products - Determine Time Ranges

    -
    -Previous Slide Next Slide

    -

    The first set of methods help us to determine the time ranges over which the product will run. Here is a helper method that converts a named Selection Time Range into a Time Range object.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide25.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide25.JPG deleted file mode 100644 index c6ade6f344..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide25.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide25.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide25.html deleted file mode 100644 index db1c2b52d3..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide25.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Tabular Products

    -

    25. Smart Tabular Products - Determine Time Ranges

    -
    -Previous Slide Next Slide

    -

    The "createTimeRange" method takes a "startHour", "endHour" and mode to create a time range object relative to the current day.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide26.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide26.JPG deleted file mode 100644 index e03263ebbc..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide26.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide26.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide26.html deleted file mode 100644 index 48767958d3..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide26.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Tabular Products

    -

    26. Smart Tabular Products - Determine Time Ranges

    -
    -Previous Slide Next Slide

    -

    Many tabular products report weather element values for multiple time periods. The "getPeriods" method creates a list of Time Range objects and associated labels. We can specify the number of hours between periods, the duration of each period, and the total number of periods starting with a beginning tme range.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide27.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide27.JPG deleted file mode 100644 index 7d0bf53a13..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide27.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide27.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide27.html deleted file mode 100644 index 5029017a51..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide27.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Tabular Products

    -

    27. Smart Tabular Products - Sample the Data

    -
    -Previous Slide Next Slide

    -

    The "_getAnalysisMethod" is specific to each Tabular Product and specifies the weather elements and corresponding analysis methods that will needed to produce the table.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide28.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide28.JPG deleted file mode 100644 index b0ade3e223..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide28.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide28.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide28.html deleted file mode 100644 index 9c34a37fc5..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide28.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Tabular Products

    -

    28. Smart Tabular Products - Sample the Data

    -
    -Previous Slide Next Slide

    -

    The "getSampler" method takes a list of tuples each of which has an analysisList of weather elements, a time range list, and an area list. It samples the data for all of these combinations. The HistoSampler object returned contains the raw histogram data for each edit area, time range, and weather element. You will not need to access information from this object directly, but you will need to pass it on to other methods to create summary statistics.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide29.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide29.JPG deleted file mode 100644 index 81a99c2cd6..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide29.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide29.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide29.html deleted file mode 100644 index 362ee4f50e..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide29.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Tabular Products

    -

    29. Smart Tabular Products - Set Edit Areas, Determine Time Ranges, Sample the Data

    -
    -Previous Slide Next Slide

    -

    Now we can see how these methods might be "glued" together in a Smart Tabular Product to:
    -- Get the Edit Areas for the product,
    -- Create the time ranges and labels for the product, and
    -- Sample the data.

    The SmartElementTable uses these methods to produce the histogram data.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide3.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide3.JPG deleted file mode 100644 index 5b04cf0c29..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide3.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide3.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide3.html deleted file mode 100644 index d127241eba..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide3.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Tabular Products

    -

    3. Simple Tabular Products

    -
    -Previous Slide Next Slide

    - - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide30.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide30.JPG deleted file mode 100644 index 2735fa9da0..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide30.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide30.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide30.html deleted file mode 100644 index f27457ce3b..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide30.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -
    -

    Text Formatter User Guide for Tabular Products

    -

    30. Smart Tabular Products - SmartElementTable

    -
    -Previous Slide Next Slide

    -

    Once this work is done, a product header is produced. Following that, we loop through the edit areas, first producing an area label and then the row for that area. In this product, the "_makeProduct" method creates the row entry for one edit area.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide31.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide31.JPG deleted file mode 100644 index bff5e61a05..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide31.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide31.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide31.html deleted file mode 100644 index 4ab6f8d5ef..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide31.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Tabular Products

    -

    31. Smart Tabular Products - Analyzing the Data

    -
    -Previous Slide Next Slide

    -

    The first thing we must do is create the summary statistics for this edit area given the information in the HistoSampler. The "getStatDict" helper method is a building block to help with this task. It takes the HistoSampler information and the analysis list, which tells it the weather elements and corresponding analysis methods. Then, for a particular time range and edit area, it returns a statistics dictionary. This is simply a Python dictionary with an entry for each weather element and its corresponding statistics.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide32.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide32.JPG deleted file mode 100644 index e3c30d4256..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide32.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide32.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide32.html deleted file mode 100644 index 6ebc5092f8..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide32.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Tabular Products

    -

    32. Smart Tabular Products - Analyzing the Data

    -
    -Previous Slide Next Slide

    -

    Recall that in the SmartElementTable, our row consists of weather element entries for multiple peirods. For example, we list the Temperature for three consecutive periods. The "getStatList" method returns a list of statistics dictionaries, one for each of a list of time ranges. So we, again, provide the HistoSampler information, an edit area, and analysis list. For this method, instead of one time range, we give it a list and it returns a list of statistics dictionaries, one for each time range.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide33.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide33.JPG deleted file mode 100644 index 5bfff5d228..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide33.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide33.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide33.html deleted file mode 100644 index 9aa2feeaf1..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide33.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Tabular Products

    -

    33. Smart Tabular Products - SmartElementTable

    -
    -Previous Slide Next Slide

    -

    As we prepare to create a row entry for an edit area in the SmartElementTable, we use the "getStatList" method to provide us with a list of statistics dictionaries, one for each time period. This information can then be passed to sub-methods that format each weather element in turn. Again we take advantage of the "exec" statement to report the variable weather elements listed in the elementList.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide34.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide34.JPG deleted file mode 100644 index 14db824e70..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide34.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide34.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide34.html deleted file mode 100644 index e14ee8b180..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide34.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Tabular Products

    -

    34. Smart Tabular Products - SmartElementTable

    -
    -Previous Slide Next Slide

    -

    Here's the method that constructs the entries for temperature. Notice that it uses another helper method to format the column entry for the temperature...


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide35.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide35.JPG deleted file mode 100644 index 2bfce59707..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide35.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide35.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide35.html deleted file mode 100644 index 661385f24d..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide35.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Tabular Products

    -

    35. Smart Tabular Products - String Utility Methods

    -
    -Previous Slide Next Slide

    -

    The "getScalarValue" method takes a numerical value and returns a text string equivalent. The "getVectorValue" method can be used for Vector weather elements.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide36.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide36.JPG deleted file mode 100644 index 28741d3a86..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide36.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide36.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide36.html deleted file mode 100644 index c8c9d63e45..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide36.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Tabular Products

    -

    36. Smart Text Products - SmartElementTable Local

    -
    -Previous Slide Next Slide

    -

    Here's the Local file for the SmartElementTable. Notice that it, like all Local files, imports and inherits from the Standard file. It can override the Definition section. In this case, that means the "elementList" can be changed to produce different table configurations.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide37.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide37.JPG deleted file mode 100644 index 968d79114c..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide37.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide37.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide37.html deleted file mode 100644 index ab13625cbc..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide37.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Tabular Products

    -

    37. Smart Text Products - Exercises

    -
    -Previous Slide Next Slide

    -

    These exercises will help you become familiar with the SmartElementTable. You will see how it uses the helper methods and learn how to extend it to provide additional functionality.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide38.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide38.JPG deleted file mode 100644 index a8876cf047..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide38.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide38.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide38.html deleted file mode 100644 index b4689018ca..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide38.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Tabular Products

    -

    38. Smart Tabular Products - FWFTable

    -
    -Previous Slide Next Slide

    -

    Now we'll look at a Smart Tabular product that lists weather elements down the rows and time periods across the columns for one edit area. At first glance, this would seem to meet the criteria for a Simple Table. However, it requires special headers, a narrative product extension, and additional information about weather elements that require the flexibility of Smart Text Products. We will examine some of the helper methods used in the FWFTable product. We will look first at the time periods reported for each weather element.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide39.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide39.JPG deleted file mode 100644 index db1ace4ce4..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide39.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide39.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide39.html deleted file mode 100644 index ba2814d2b3..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide39.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Tabular Products

    -

    39. Smart Tabular Products - Getting Time Ranges

    -
    -Previous Slide Next Slide

    -

    The "getTimeRangeList" method creates a list of time ranges and associated labels. The labels can be created by a method specified by the user. This helps us create the labels for the time ranges reported for each weather element in the FWFTable.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide4.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide4.JPG deleted file mode 100644 index d8dceb0eff..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide4.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide4.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide4.html deleted file mode 100644 index bd84b74a7f..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide4.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Tabular Products

    -

    4. Simple Tabular Products - Infrastructure Engine

    -
    -Previous Slide Next Slide

    -

    Unlike Smart Text Products, the Simple Tabular Products do not use the inheritance hierarchy and do not have a Local or Overrides Files. They are composed instead of a single file in which there is a Definition Python dictionary that specifies the format and contents of the table. This Definition is interpreted by the ForecastTable Python module which cannot be overridden.

    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide40.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide40.JPG deleted file mode 100644 index cdd436f95f..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide40.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide40.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide40.html deleted file mode 100644 index 127e33cc72..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide40.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Tabular Products

    -

    40. Smart Tabular Products - Creating Time Range Labels

    -
    -Previous Slide Next Slide

    -

    The "getWeekday" method can be used to create labels for a given time range taking into account weekday names and holidays.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide41.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide41.JPG deleted file mode 100644 index 82b9f8098a..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide41.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide41.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide41.html deleted file mode 100644 index e514566ae9..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide41.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Tabular Products

    -

    41. Smart Tabular Products - Creating Time Ranges

    -
    -Previous Slide Next Slide

    -

    The special "self.IFP()" qualifier gives us the ability to create time range objects "from scratch". To do this, specify a start and end time which must be AbsTime objects obtained from an existing time range object..


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide42.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide42.JPG deleted file mode 100644 index ca0d5e141a..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide42.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide42.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide42.html deleted file mode 100644 index 333a08f299..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide42.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Tabular Products

    -

    42. Smart Tabular Products - FWFTable Sub-Methods

    -
    -Previous Slide Next Slide

    -

    The FWFTable uses both of these time range methods. First we create a list of time ranges to produce the columns of the table. Then we create a time range "from scratch" to begin the extended portion of the product.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide43.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide43.JPG deleted file mode 100644 index d8bb5cec63..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide43.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide43.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide43.html deleted file mode 100644 index 8abf3182a1..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide43.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Tabular Products

    -

    43. Smart Tabular Products FWFTable

    -
    -Previous Slide Next Slide

    -

    Now let's examine the issuance time reported in the area header of the product.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide44.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide44.JPG deleted file mode 100644 index ec392ae6a5..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide44.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide44.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide44.html deleted file mode 100644 index 9f65284d54..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide44.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Tabular Products

    -

    44. Smart Tabular Products - Displaying Dates and Times

    -
    -Previous Slide Next Slide

    -

    Here we see the "getCurrentTime" method which produces the current time formatted according to the given format string. See the Time Display section of the Text Product Reference Guide for specifying the format string. The "timeDisplay" method allows you to format any TimeRange object into a display string. See its description in the TimeRangeUtils module.

    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide45.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide45.JPG deleted file mode 100644 index a0ac8d6529..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide45.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide45.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide45.html deleted file mode 100644 index ca8016e804..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide45.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Tabular Products

    -

    45. Smart Tabular Products - FWFTable Sub-Methods

    -
    -Previous Slide Next Slide

    -

    The FWFTable uses the "getCurrentTime" method to format the time labels for the product and area headers.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide46.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide46.JPG deleted file mode 100644 index e40f489261..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide46.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide46.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide46.html deleted file mode 100644 index 0e35a0c08c..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide46.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Tabular Products

    -

    46. Smart Text Products - FWFTable

    -
    -Previous Slide Next Slide

    -

    Now we will focus on the rows of table which list values for weather elements over a series of time periods.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide47.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide47.JPG deleted file mode 100644 index 4832b510ad..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide47.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide47.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide47.html deleted file mode 100644 index 403dd19886..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide47.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Tabular Products

    -

    47. Smart Tabular Products - Making Rows of a Table

    -
    -Previous Slide Next Slide

    -

    The "makeRow" method constructs the row of a table given a title, a column width, a series of time ranges over which to report values, a corresponding statistics list -- a statDict for each time range -- and a user-supplied method for producing one column entry. The result is text string representing a row of the table. There are additional optional arguments to the "makeRow" method which are found in its description in the TableBuilder module.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide48.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide48.JPG deleted file mode 100644 index fbea627e5b..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide48.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide48.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide48.html deleted file mode 100644 index 95a3d76f59..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide48.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Tabular Products

    -

    48. Smart Tabular Products - FWFTable Sub-Methods

    -
    -Previous Slide Next Slide

    -

    The FWFTable contains a "rowList" which has an entry for each row of the table in order in which they are to appear. Each entry includes a row label and a method to call to produce the data values for the row.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide49.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide49.JPG deleted file mode 100644 index 26721556c2..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide49.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide49.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide49.html deleted file mode 100644 index 3840c31449..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide49.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Tabular Products

    -

    49. Smart Tabular Products - FWFTable Sub-Methods

    -
    -Previous Slide Next Slide

    -

    Here is the row method for Cloud Cover. Notice that it calls "makeRow" to produce a row of entries for the given time ranges. It has access to the statistics list containing weather element values for those time ranges.
    The call to "makeRow" includes the user-supplied method, "_sky". This method produces one entry for sky cover given an edit area, one time range and its associated statistics dictionary.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide5.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide5.JPG deleted file mode 100644 index 222521740f..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide5.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide5.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide5.html deleted file mode 100644 index f96349865b..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide5.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Tabular Products

    -

    5. Simple Tabular Products - QPF Table

    -
    -Previous Slide Next Slide

    -

    Here is an example of a Simple Table with Edit Areas listed down the rows and one weather element, QPF listed in the column. The table is produced for one time period.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide50.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide50.JPG deleted file mode 100644 index b4804fe157..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide50.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide50.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide50.html deleted file mode 100644 index 4a0153dd76..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide50.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Tabular Products

    -

    50. Smart Tabular Products - Accessing Statistics

    -
    -Previous Slide Next Slide

    -

    It is handy to access information in a statistics dictionary using the "getStats" method which returns the summary statistic given an element name. This method will return None if no grid values were present...


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide51.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide51.JPG deleted file mode 100644 index 28ea9de889..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide51.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide51.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide51.html deleted file mode 100644 index c051eaff7e..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide51.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Tabular Products

    -

    51. Smart Tabular Products - FWFTable Sub-Methods

    -
    -Previous Slide Next Slide

    -

    so it is important to check for this whenever you call "getStats".


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide52.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide52.JPG deleted file mode 100644 index 02eb180828..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide52.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide52.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide52.html deleted file mode 100644 index fb14a0fda1..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide52.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Tabular Products

    -

    52. Smart Tabular Products - FWFTable Sub-Methods

    -
    -Previous Slide Next Slide

    -

    At a higher level, the FWFTable "makeProduct" method creates the table header using the time range labels. It then uses the "getStatList" method to gather the statistics for the current edit area over the various time ranges. Then, it calls each row method in turn to create the weather element rows.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide53.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide53.JPG deleted file mode 100644 index 2ed3cbc790..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide53.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide53.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide53.html deleted file mode 100644 index c10ced578a..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide53.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Tabular Products

    -

    53. Smart Tabular Products - Exercises

    -
    -Previous Slide

    -

    The FWFTable exercises will help you become more familiar with a Smart Tabular Product and how the helper methods fit together to produce the desired result. You will also learn how to use the "makeRow" capability to extend the product capability.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide6.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide6.JPG deleted file mode 100644 index b84219cd3e..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide6.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide6.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide6.html deleted file mode 100644 index b1f0f24ded..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide6.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Tabular Products

    -

    6. Simple Tabular Products - Simple Tabular Product

    -
    -Previous Slide Next Slide

    -

    In the General Set-up section, we have the "type" which must be "table", the "displayName" to appear in the Local Formatter dialog, and the "outputFile". Simple Tables involve Time Periods, Edit Areas, and Weather Elements. The Table Layout specifies which will be listed down the rows, which across the columns and which will be constant for each instance of the table. In this example, the table is produced for one time period so it is the constantVariable. We can also specify text strings to be included before and after the product. These strings can have special keywords which are described in the template documentation.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide7.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide7.JPG deleted file mode 100644 index 2df5e3f253..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide7.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide7.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide7.html deleted file mode 100644 index 78a5e89a59..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide7.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Tabular Products

    -

    7. Simple Tabular Products - Definition

    -
    -Previous Slide Next Slide

    -

    The Definition has several sections. General set-up contains general information such as the displayName, outputFile. Next, the Table Layout is specified to indicate the contents of the rows and columns. Then we specify the Edit Areas, Time Ranges, and Weather Elements involved in the product.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide8.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide8.JPG deleted file mode 100644 index 269d307958..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide8.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide8.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide8.html deleted file mode 100644 index a3e143b997..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide8.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Tabular Products

    -

    8. Simple Tabular Product - Definition

    -
    -Previous Slide Next Slide

    -

    In the General Set-up section, we have the "type" which must be "table", the "displayName" to appear in the Local Formatter dialog, and the "outputFile". Simple Tables involve Time Periods, Edit Areas, and Weather Elements. The Table Layout specifies which will be listed down the rows, which across the columns and which will be constant for each instance of the table. In this example, the table is produced for one time period so it is the constantVariable. We can also specify text strings to be included before and after the product. These strings can have special keywords which are described in the template documentation.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide9.JPG b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide9.JPG deleted file mode 100644 index 43e937b228..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide9.JPG and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide9.html b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide9.html deleted file mode 100644 index c53daf08e8..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/Slide9.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

    -

    Text Formatter User Guide for Tabular Products

    -

    9. Simple Tabular Product - Definition

    -
    -Previous Slide Next Slide

    -

    Next, we specify the Edit Areas over which the product will run using the "defaultEditAreas" entry which is a list of (edit area name, label) tuples. If we set "runTimeEditAreas" to "yes", a dialog will appear when the product is run and the user can choose from the set of "defaultEditAreas"" We also specify a label "areaType" for the Edit Area rows. Next, we specify the time periods over which to run the product. In this case, it runs over the "Today" selection time range as defined in the GFE.


    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/TOC.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/TOC.txt deleted file mode 100644 index d3629e4c8d..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/TOC.txt +++ /dev/null @@ -1,54 +0,0 @@ -1: GFESuite Advanced Text Product User Guide for Tabular Products -2: Overview -3: Simple Tabular Products -4: Simple Tabular Products|Infrastructure Engine -5: Simple Tabular Products|QPF Table -6: Simple Tabular Products|Simple Tabular Product -7: Simple Tabular Products|Definition -8: Simple Tabular Product|Definition -9: Simple Tabular Product|Definition -10: Simple Tabular Product|Definition -11: Simple Tabular Product|Exercises -12: Smart Text Products -13: Smart Text Products|Naming Conventions -14: Smart Text Products|Standard Product Main Method -15: Smart Text Products|Setting Variables -16: Smart Text Products|Python "exec" statement -17: Smart Text Products|Class Objects and Data Structures -18: Smart Text Products|TimeRange Object -19: Smart Text Products|Set Up Edit Areas -20: Smart Tabular Products -21: Smart Tabular Products|SmartElementTable -22: Smart Tabular Products|SmartElementTable -23: Smart Tabular Products|Infrastructure Engine -24: Smart Tabular Products|Determine Time Ranges -25: Smart Tabular Products|Determine Time Ranges -26: Smart Tabular Products|Determine Time Ranges -27: Smart Tabular Products|Sample the Data -28: Smart Tabular Products|Sample the Data -29: Smart Tabular Products|Set Edit Areas, Determine Time Ranges, Sample the Data -30: Smart Tabular Products|SmartElementTable -31: Smart Tabular Products|Analyzing the Data -32: Smart Tabular Products|Analyzing the Data -33: Smart Tabular Products|SmartElementTable -34: Smart Tabular Products|SmartElementTable -35: Smart Tabular Products|String Utility Methods -36: Smart Text Products|SmartElementTable Local -37: Smart Text Products|Exercises -38: Smart Tabular Products|FWFTable -39: Smart Tabular Products|Getting Time Ranges -40: Smart Tabular Products|Creating Time Range Labels -41: Smart Tabular Products|Creating Time Ranges -42: Smart Tabular Products|FWFTable Sub-Methods -43: Smart Tabular Products FWFTable -44: Smart Tabular Products|Displaying Dates and Times -45: Smart Tabular Products|FWFTable Sub-Methods -46: Smart Text Products|FWFTable -47: Smart Tabular Products|Making Rows of a Table -48: Smart Tabular Products|FWFTable Sub-Methods -49: Smart Tabular Products|FWFTable Sub-Methods -50: Smart Tabular Products|Accessing Statistics -51: Smart Tabular Products|FWFTable Sub-Methods -52: Smart Tabular Products|FWFTable Sub-Methods -53: Smart Tabular Products|Exercises - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes10.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes10.txt deleted file mode 100644 index 695708ced2..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes10.txt +++ /dev/null @@ -1,2 +0,0 @@ -Finally, we specify information for the weather element(s). We must give the weather element name, a label, an analysis method, a reporting method, the weather element data type, an optional rounding value, and an optional conversion method. Since the Simple Table does not inherit from the Text Product libaries, we include methods in quotes to signal the ForecastNarrative module to use the library methods. If you supply your own method, put it at the beginning of the Simple Table file and name it without the quotes. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes12.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes12.txt deleted file mode 100644 index e738eb64e4..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes12.txt +++ /dev/null @@ -1,2 +0,0 @@ -Simple Table products offer a lot of flexibility, but are restricted to tables with homogeneous rows and columns and certain formats. For more sophisitcated products, tabular and narrative, we have the Smart Text Product framework. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes13.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes13.txt deleted file mode 100644 index 92da8464d9..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes13.txt +++ /dev/null @@ -1,2 +0,0 @@ -Smart Text Products inherit from the TextRules and SampleAnalysis libraries. Within the libraries, variables, in general, start with lower case letters and can use capitals and underscores to delineate words. We opt in favor of longer names to for clarity and readability of the code. It it imperative that when you create new variables or methods in the Standard or Local Text Product files, you begin their names with an underscore. This will ensure that you are not inadvertently overriding a variable or method from the Infrastructure which could break your product or produce undesirable results. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes14.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes14.txt deleted file mode 100644 index 1d9863937b..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes14.txt +++ /dev/null @@ -1,2 +0,0 @@ -Every Smart Text Product follows the template format presented in Part 1 of the Text Product User Guide. As such, it follows the steps of getting variables, setting up edit areas and time ranges, sampling the data, producing headers and footers and formatting the product. We will be looking at helper methods in the Infrastructure which allow the product to perform these steps. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes15.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes15.txt deleted file mode 100644 index 86b620f7eb..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes15.txt +++ /dev/null @@ -1,2 +0,0 @@ -Smart Text products access the variables from the VariableList using a "varDict" similar to that in SmartTools. The "varDict" can be accessed as an entry in the "argDict" dictionary which contains useful information about the product. The "_getVariables" method also sets up the variables from the Definition section of the product. We can call these "Magic" variables because all you have to do is add an entry to the Definition section and it will automatically be available to you as a variable within the product. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes16.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes16.txt deleted file mode 100644 index f961e4d58e..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes16.txt +++ /dev/null @@ -1,2 +0,0 @@ -To do this, we use the special "exec" Python command. This is a very handy command which you will see in use throughout the text products. You build a text string of the Python code you would like to execute and then submit it to the "exec" command. So in this case, we loop through the entries of the Definition section creating variables. For example, if we have a Definition entry of "type", we build an exec string that sets the variable, "self._type" to its Definition value. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes17.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes17.txt deleted file mode 100644 index 0865f769b0..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes17.txt +++ /dev/null @@ -1,2 +0,0 @@ -The Smart Text Products create and manipulate these objects. Having familiarity with them will help you understand the "language" of the text products. Edit Areas are Python class objects which have attribute methods such as the edit area name and data points. The AreaList is a list of (edit area object, label) tuples. We'll look more closely at Time Ranges in a moment. The AnalysisList specifies weather elements and analysis methods. The HistoSampler is complicated structure containing the raw histograms from sampling the data. You will not need to access information inside the HistoSampler, but will pass it on to helper methods to perform the analysis. Finally, the StatDict and StatList contain the results of the analysis for each weather element. We'll see them in more detail later. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes18.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes18.txt deleted file mode 100644 index a4b8c783db..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes18.txt +++ /dev/null @@ -1,2 +0,0 @@ -A Time Range is a Python class with methods for the startTime and endTime. These in turn are Python AbsTime classes which have their own methods. The duration of a time range can be accessed as the number of seconds it covers. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes19.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes19.txt deleted file mode 100644 index ffca1fa720..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes19.txt +++ /dev/null @@ -1,2 +0,0 @@ -The "getAreaList" method accesses the list of (edit area object, label) pairs over which the product will be run. This list is created by the TextFormatter infrastructure BEFORE the Smart Text Product is called. It is created from the "defaultEditAreas" list or the Combinations file for the product. The Infrastructure does the work of interpreting the text edit area names and fetching the edit area information from the server to create the edit area object which subsequent steps require. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes2.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes2.txt deleted file mode 100644 index 31383e1e85..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes2.txt +++ /dev/null @@ -1,2 +0,0 @@ -In this presentation we will first discuss Simple Tabular Products which can be used to set up tables with relatively simple requirements. For more complex products, we can use Smart Text Products. We will learn about Smart Tabular Products and the helper methods in the Infrastructure for creating them. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes21.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes21.txt deleted file mode 100644 index 55d8af876c..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes21.txt +++ /dev/null @@ -1,2 +0,0 @@ -Here is a table listing edit areas down the rows and weather elements across the columns. However, there is no constantVariable as three time periods are reported for each weather element. Thus, this table cannot be created using the Simple Tabular definition. Using a Smart Text Product, we gain the flexibility to format the product in any way we wish. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes22.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes22.txt deleted file mode 100644 index 750b09c877..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes22.txt +++ /dev/null @@ -1,2 +0,0 @@ -The SimpleElementTable uses an "elementList" to specify which elements to list across the columns and in which order. We can specify any combination of Temp, PoP, and Humidity. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes23.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes23.txt deleted file mode 100644 index e8cfa27763..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes23.txt +++ /dev/null @@ -1,2 +0,0 @@ -Smart Tabular Products, like all Smart Text Products, inherit from the SampleAnalysis and TextRules libraries and call helper methods directly to perform the steps of creating a text product and format the table as desired. We will look at some of these helper methods and then we will see how they act together. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes24.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes24.txt deleted file mode 100644 index dc427016e9..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes24.txt +++ /dev/null @@ -1,2 +0,0 @@ -The first set of methods help us to determine the time ranges over which the product will run. Here is a helper method that converts a named Selection Time Range into a Time Range object. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes25.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes25.txt deleted file mode 100644 index 54fc2b1138..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes25.txt +++ /dev/null @@ -1,2 +0,0 @@ -The "createTimeRange" method takes a "startHour", "endHour" and mode to create a time range object relative to the current day. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes26.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes26.txt deleted file mode 100644 index c0b3cc4c6d..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes26.txt +++ /dev/null @@ -1,2 +0,0 @@ -Many tabular products report weather element values for multiple time periods. The "getPeriods" method creates a list of Time Range objects and associated labels. We can specify the number of hours between periods, the duration of each period, and the total number of periods starting with a beginning tme range. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes27.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes27.txt deleted file mode 100644 index 2698fd5c8d..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes27.txt +++ /dev/null @@ -1,2 +0,0 @@ -The "_getAnalysisMethod" is specific to each Tabular Product and specifies the weather elements and corresponding analysis methods that will needed to produce the table. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes28.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes28.txt deleted file mode 100644 index 3584458002..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes28.txt +++ /dev/null @@ -1,2 +0,0 @@ -The "getSampler" method takes a list of tuples each of which has an analysisList of weather elements, a time range list, and an area list. It samples the data for all of these combinations. The HistoSampler object returned contains the raw histogram data for each edit area, time range, and weather element. You will not need to access information from this object directly, but you will need to pass it on to other methods to create summary statistics. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes29.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes29.txt deleted file mode 100644 index 36996035de..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes29.txt +++ /dev/null @@ -1,7 +0,0 @@ -Now we can see how these methods might be "glued" together in a Smart Tabular Product to: - -- Get the Edit Areas for the product, - -- Create the time ranges and labels for the product, and - -- Sample the data. - -The SmartElementTable uses these methods to produce the histogram data. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes30.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes30.txt deleted file mode 100644 index 0a261b9327..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes30.txt +++ /dev/null @@ -1,2 +0,0 @@ -Once this work is done, a product header is produced. Following that, we loop through the edit areas, first producing an area label and then the row for that area. In this product, the "_makeProduct" method creates the row entry for one edit area. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes31.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes31.txt deleted file mode 100644 index 0a9bdbf783..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes31.txt +++ /dev/null @@ -1,2 +0,0 @@ -The first thing we must do is create the summary statistics for this edit area given the information in the HistoSampler. The "getStatDict" helper method is a building block to help with this task. It takes the HistoSampler information and the analysis list, which tells it the weather elements and corresponding analysis methods. Then, for a particular time range and edit area, it returns a statistics dictionary. This is simply a Python dictionary with an entry for each weather element and its corresponding statistics. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes32.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes32.txt deleted file mode 100644 index c10d75b7f1..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes32.txt +++ /dev/null @@ -1,2 +0,0 @@ -Recall that in the SmartElementTable, our row consists of weather element entries for multiple peirods. For example, we list the Temperature for three consecutive periods. The "getStatList" method returns a list of statistics dictionaries, one for each of a list of time ranges. So we, again, provide the HistoSampler information, an edit area, and analysis list. For this method, instead of one time range, we give it a list and it returns a list of statistics dictionaries, one for each time range. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes33.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes33.txt deleted file mode 100644 index 5c15b3fd8f..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes33.txt +++ /dev/null @@ -1,2 +0,0 @@ -As we prepare to create a row entry for an edit area in the SmartElementTable, we use the "getStatList" method to provide us with a list of statistics dictionaries, one for each time period. This information can then be passed to sub-methods that format each weather element in turn. Again we take advantage of the "exec" statement to report the variable weather elements listed in the elementList. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes34.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes34.txt deleted file mode 100644 index d95027c6c7..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes34.txt +++ /dev/null @@ -1,2 +0,0 @@ -Here's the method that constructs the entries for temperature. Notice that it uses another helper method to format the column entry for the temperature... - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes35.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes35.txt deleted file mode 100644 index 362dcd88a4..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes35.txt +++ /dev/null @@ -1,2 +0,0 @@ -The "getScalarValue" method takes a numerical value and returns a text string equivalent. The "getVectorValue" method can be used for Vector weather elements. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes36.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes36.txt deleted file mode 100644 index 00f2b1d800..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes36.txt +++ /dev/null @@ -1,2 +0,0 @@ -Here's the Local file for the SmartElementTable. Notice that it, like all Local files, imports and inherits from the Standard file. It can override the Definition section. In this case, that means the "elementList" can be changed to produce different table configurations. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes37.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes37.txt deleted file mode 100644 index 96d2ecf7f3..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes37.txt +++ /dev/null @@ -1,2 +0,0 @@ -These exercises will help you become familiar with the SmartElementTable. You will see how it uses the helper methods and learn how to extend it to provide additional functionality. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes38.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes38.txt deleted file mode 100644 index b3b39d8729..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes38.txt +++ /dev/null @@ -1,2 +0,0 @@ -Now we'll look at a Smart Tabular product that lists weather elements down the rows and time periods across the columns for one edit area. At first glance, this would seem to meet the criteria for a Simple Table. However, it requires special headers, a narrative product extension, and additional information about weather elements that require the flexibility of Smart Text Products. We will examine some of the helper methods used in the FWFTable product. We will look first at the time periods reported for each weather element. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes39.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes39.txt deleted file mode 100644 index f35b2e1919..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes39.txt +++ /dev/null @@ -1,2 +0,0 @@ -The "getTimeRangeList" method creates a list of time ranges and associated labels. The labels can be created by a method specified by the user. This helps us create the labels for the time ranges reported for each weather element in the FWFTable. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes4.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes4.txt deleted file mode 100644 index fc6c508078..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes4.txt +++ /dev/null @@ -1 +0,0 @@ -Unlike Smart Text Products, the Simple Tabular Products do not use the inheritance hierarchy and do not have a Local or Overrides Files. They are composed instead of a single file in which there is a Definition Python dictionary that specifies the format and contents of the table. This Definition is interpreted by the ForecastTable Python module which cannot be overridden. diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes40.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes40.txt deleted file mode 100644 index 10acd28470..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes40.txt +++ /dev/null @@ -1,2 +0,0 @@ -The "getWeekday" method can be used to create labels for a given time range taking into account weekday names and holidays. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes41.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes41.txt deleted file mode 100644 index 9749bb2eec..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes41.txt +++ /dev/null @@ -1,2 +0,0 @@ -The special "self.IFP()" qualifier gives us the ability to create time range objects "from scratch". To do this, specify a start and end time which must be AbsTime objects obtained from an existing time range object.. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes42.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes42.txt deleted file mode 100644 index 7cbfd7d1a6..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes42.txt +++ /dev/null @@ -1,2 +0,0 @@ -The FWFTable uses both of these time range methods. First we create a list of time ranges to produce the columns of the table. Then we create a time range "from scratch" to begin the extended portion of the product. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes43.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes43.txt deleted file mode 100644 index 2d0f28a207..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes43.txt +++ /dev/null @@ -1,2 +0,0 @@ -Now let's examine the issuance time reported in the area header of the product. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes44.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes44.txt deleted file mode 100644 index 98b5ca2e0c..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes44.txt +++ /dev/null @@ -1 +0,0 @@ -Here we see the "getCurrentTime" method which produces the current time formatted according to the given format string. See the Time Display section of the Text Product Reference Guide for specifying the format string. The "timeDisplay" method allows you to format any TimeRange object into a display string. See its description in the TimeRangeUtils module. diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes45.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes45.txt deleted file mode 100644 index 3f351bab9e..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes45.txt +++ /dev/null @@ -1,2 +0,0 @@ -The FWFTable uses the "getCurrentTime" method to format the time labels for the product and area headers. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes46.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes46.txt deleted file mode 100644 index 94c7e85e90..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes46.txt +++ /dev/null @@ -1,2 +0,0 @@ -Now we will focus on the rows of table which list values for weather elements over a series of time periods. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes47.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes47.txt deleted file mode 100644 index 55c751a205..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes47.txt +++ /dev/null @@ -1,2 +0,0 @@ -The "makeRow" method constructs the row of a table given a title, a column width, a series of time ranges over which to report values, a corresponding statistics list -- a statDict for each time range -- and a user-supplied method for producing one column entry. The result is text string representing a row of the table. There are additional optional arguments to the "makeRow" method which are found in its description in the TableBuilder module. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes48.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes48.txt deleted file mode 100644 index afc6fbd873..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes48.txt +++ /dev/null @@ -1,2 +0,0 @@ -The FWFTable contains a "rowList" which has an entry for each row of the table in order in which they are to appear. Each entry includes a row label and a method to call to produce the data values for the row. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes49.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes49.txt deleted file mode 100644 index 86d3dba237..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes49.txt +++ /dev/null @@ -1,3 +0,0 @@ -Here is the row method for Cloud Cover. Notice that it calls "makeRow" to produce a row of entries for the given time ranges. It has access to the statistics list containing weather element values for those time ranges. -The call to "makeRow" includes the user-supplied method, "_sky". This method produces one entry for sky cover given an edit area, one time range and its associated statistics dictionary. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes5.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes5.txt deleted file mode 100644 index 86bd5492bf..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes5.txt +++ /dev/null @@ -1,2 +0,0 @@ -Here is an example of a Simple Table with Edit Areas listed down the rows and one weather element, QPF listed in the column. The table is produced for one time period. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes50.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes50.txt deleted file mode 100644 index b7c283b94a..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes50.txt +++ /dev/null @@ -1,2 +0,0 @@ -It is handy to access information in a statistics dictionary using the "getStats" method which returns the summary statistic given an element name. This method will return None if no grid values were present... - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes51.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes51.txt deleted file mode 100644 index b769da926b..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes51.txt +++ /dev/null @@ -1,2 +0,0 @@ -so it is important to check for this whenever you call "getStats". - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes52.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes52.txt deleted file mode 100644 index e85a7356d7..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes52.txt +++ /dev/null @@ -1,2 +0,0 @@ -At a higher level, the FWFTable "makeProduct" method creates the table header using the time range labels. It then uses the "getStatList" method to gather the statistics for the current edit area over the various time ranges. Then, it calls each row method in turn to create the weather element rows. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes53.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes53.txt deleted file mode 100644 index 926458cb36..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes53.txt +++ /dev/null @@ -1,2 +0,0 @@ -The FWFTable exercises will help you become more familiar with a Smart Tabular Product and how the helper methods fit together to produce the desired result. You will also learn how to use the "makeRow" capability to extend the product capability. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes6.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes6.txt deleted file mode 100644 index 6af46e38f9..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes6.txt +++ /dev/null @@ -1,2 +0,0 @@ -In the General Set-up section, we have the "type" which must be "table", the "displayName" to appear in the Local Formatter dialog, and the "outputFile". Simple Tables involve Time Periods, Edit Areas, and Weather Elements. The Table Layout specifies which will be listed down the rows, which across the columns and which will be constant for each instance of the table. In this example, the table is produced for one time period so it is the constantVariable. We can also specify text strings to be included before and after the product. These strings can have special keywords which are described in the template documentation. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes7.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes7.txt deleted file mode 100644 index b54702e8b9..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes7.txt +++ /dev/null @@ -1,2 +0,0 @@ -The Definition has several sections. General set-up contains general information such as the displayName, outputFile. Next, the Table Layout is specified to indicate the contents of the rows and columns. Then we specify the Edit Areas, Time Ranges, and Weather Elements involved in the product. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes8.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes8.txt deleted file mode 100644 index 6af46e38f9..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes8.txt +++ /dev/null @@ -1,2 +0,0 @@ -In the General Set-up section, we have the "type" which must be "table", the "displayName" to appear in the Local Formatter dialog, and the "outputFile". Simple Tables involve Time Periods, Edit Areas, and Weather Elements. The Table Layout specifies which will be listed down the rows, which across the columns and which will be constant for each instance of the table. In this example, the table is produced for one time period so it is the constantVariable. We can also specify text strings to be included before and after the product. These strings can have special keywords which are described in the template documentation. - diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes9.txt b/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes9.txt deleted file mode 100644 index 1b15acb1f5..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextProductUserGuideTabular/notes9.txt +++ /dev/null @@ -1,2 +0,0 @@ -Next, we specify the Edit Areas over which the product will run using the "defaultEditAreas" entry which is a list of (edit area name, label) tuples. If we set "runTimeEditAreas" to "yes", a dialog will appear when the product is run and the user can choose from the set of "defaultEditAreas"" We also specify a label "areaType" for the Edit Area rows. Next, we specify the time periods over which to run the product. In this case, it runs over the "Today" selection time range as defined in the GFE. - diff --git a/cave/com.raytheon.viz.gfe/help/TextReference.html b/cave/com.raytheon.viz.gfe/help/TextReference.html deleted file mode 100644 index d541da4dc0..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextReference.html +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - Text Products Reference - - - -

    - -

    Text Products Reference Guide

    -
    -

    Table of Contents

    -Introduction
    -Product Set-up and Customization
    -Infrastructure Reference
    -FAQ's
    -Text Product Creation User's Guide
    -Running Text Products from the Command Line -- runIFPText
    -TroubleShooting
    -Quiz Questions
    -Exercises
    -Answers to Quiz Questions
    -Answers to Exercises
    -

    \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/TextReferenceAnswers_to_Exercises.html b/cave/com.raytheon.viz.gfe/help/TextReferenceAnswers_to_Exercises.html deleted file mode 100644 index 5e889e8672..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextReferenceAnswers_to_Exercises.html +++ /dev/null @@ -1,1395 +0,0 @@ - - - - - - Text Products Reference - - - -

    Answers to Exercises

    -
    - -

    Answer to Simple -Tabular Product Exercise 1

    -########################################################################
    -# Table Definition
    -#
    -########################################################################
    -## EXAMPLE OUTPUT -

    ##    Exercise1 for Apr 02 02 13:00:00 GMT - Apr 03 -02 01:00:00 GMT.
    -##
    -##    Edit Area    QPF    -Precip (%)  Wind (mph)
    -##
    -##    Area -1             -0             -6                 -NW  0
    -##    Area -2             -0            -11                -NE  5
    -##    Area -3             -0             -4                 -W 10

    -

    Definition = {
    -     ## General Set-Up
    -     "type": "table",
    -     "displayName": "TextEx1", # for Product -Generation Menu
    -     "outputFile": "./Exercise1.txt", # default -output file

    -

         ## Table Layout
    -     "constantVariable": "TimePeriod",
    -     "rowVariable": "EditArea",
    -     "columnVariable": "WeatherElement",
    -     "beginningText": "Exercise1 for %TimePeriod. -\n\n",
    -     "endingText": " ",

    -

         ## Edit Areas
    -     "defaultEditAreas": [
    -                    -("area1", "Area 1"),
    -                    -("area2", "Area 2"),
    -                    -("area3", "Area 3"),
    -                 -],
    -     "runTimeEditAreas" : "no", # if yes, ask user -at run time
    -     "areaType" : "Edit Area", # E.g. City, County, -Basin, etc.

    -

          ## Time Ranges
    -     "defaultRanges": ["Today"],
    -     "runTimeRanges" : "no", # if yes, ask user at -run time
    -     ## Weather Elements
    -     # Name , Label , Analysis Method , ReportAs -Method ,
    -     # DataType , Rounding , Conversion

    -

         "elementList": [
    -             -("QPF", "QPF", "avg", "singleValue",
    -             -"Scalar", .01, None),

    -

                 -("PoP", "Precip (%)", "avg", "singleValue",
    -             -"Scalar", 1, None),

    -

                 -("Wind","Wind (mph)", "vectorRange", "avgValue",
    -             -"Vector", 5,  None),
    -             -],
    -}

    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -

    Answer to Simple -Tabular Products Exercise 2

    -
    ########################################################################
    -# Table Definition
    -#
    -########################################################################
    -## EXAMPLE OUTPUT -

    ##    Experimental Surface Temperature Guidance -Product
    -##
    -##    Edit Area   13Z/2   -16Z/2   19Z/2   22Z/2
    -##
    -##    Area -1            -28          -28          -28          25
    -##    Area -2            -30          -31          -31          27
    -##    Area -3            -32          -33          -34          27

    -

    Definition = {
    -     ## General Set-up
    -    "type": "table",
    -     "displayName": "TextEx2", # for Product -Generation Menu
    -     "outputFile": "./SurfaceTemp.txt", # default -output file

    -

         ## Table Layout
    -     "constantVariable": "WeatherElement",
    -     "rowVariable": "EditArea",
    -     "columnVariable": "TimePeriod",
    -     "beginningText": "Experimental Surface -Temperature Guidance Product \n\n",
    -     "endingText": "",

    -

         ## Edit Areas
    -     "defaultEditAreas" : [
    -            -("area1", "Area 1"),
    -            -("area2", "Area 2"),
    -            -("area3", "Area 3"),
    -        ],
    -     "runTimeEditAreas" : "yes", # if yes, ask user -at run time
    -     "areaType" : "Edit Area", # E.g. City, County, -Basin, etc.

    -

           ## Time Ranges
    -     "defaultRanges": ["Today"],
    -     "runTimeRanges" : "no", # if yes, ask user at -run time

    -

         ## Weather Elements
    -             -"elementList": [
    -            -("T","Temp", "avg", "singleValue",
    -             -"Scalar", 1,  None),
    -             -],

    -

         ## Time Period
    -     "timePeriod": 3,
    -     "runTimePeriod": "yes", # If yes, ask user at -run time for period
    -     }
    -

    -


    -Answer to Smart Tabular -Exercise 2
    -

    -

    ########################################################################
    -# SmartElementTable_Local
    -#
    -#   Type: smart
    -#   Local product:
    -#     SmartElementTable_Local(type: smart)
    -#   To customize this product for your site:
    -#      Set up SmartElementTable_Local (see -template below)
    -#      to override variables, definitions, -thresholds, and methods
    -##
    -##########################################################################
    -import SmartElementTable
    -import string, time, re, os, types, copy
    -import TimeRange
    -class TextProduct(SmartElementTable.TextProduct):
    -    Definition = -copy.deepcopy(SmartElementTable.TextProduct.Definition)
    -
    -    Definition["displayName"] = "SmartElementTable"
    -    #Definition["outputFile"] = -"{prddir}/TEXT/SmartElementTable.txt"
    -    #Definition["regionList"] = [
    -    #        -("area1","AREA 1"),
    -    #        -("area2","AREA 2"),
    -    #        -("area3","AREA 3"),
    -    #        ],
    -    #Definition["regionList"] = [
    -    #        -("/33",["AREA 1","AREA 2"]),
    -    #        -("/19",["AREA 3"])
    -    #        ],
    -
    -    Definition["elementList"] = ["Temp", "PoP", -"Wind"] 
    -    #Definition["elementList"] = ["Temp", "PoP"] # -Default
    -    #Definition["elementList"] = ["Temp", "Humidity"]
    -    #Definition["elementList"] = ["Temp", "Humidity", -"PoP"]
    -    #Definition["elementList"] = ["Temp", "PoP", -"Humidity"]
    -    #Definition["elementList"] = ["PoP", "Humidity", -"Temp"]
    -    #Definition["introLetters"] = ".<"
    -
    -    def __init__(self):
    -        -SmartElementTable.TextProduct.__init__(self)
    -
    -    def _getAnalysisList(self):
    -      return [
    -          ("MinT", -self.avg),
    -          ("MaxT", -self.avg),
    -          ("MinRH", -self.avg),
    -          ("MaxRH", -self.avg),
    -          ("PoP", -self.stdDevMaxAvg),
    -          ("Wind", -self.vectorAvg),
    -          ]
    -
    -    def _titleDict(self):
    -        return {
    -            -"Temp":    "TEMPERATURE",
    -            -"PoP":     "PRECIPITATION",
    -            -"Humidity":"HUMIDITY",
    -            -"Wind":    "WIND",
    -            }
    -
    -    def _getWindValues(self, statList, argDict):
    -       # Return a string of PoP values in -the statList
    -       wind = []
    -       windStr = " "
    -       index = 0
    -       for stats in statList:
    -           val = -self._getWindValue(stats)
    -           if index -< len(statList)-1:
    -               -windStr = windStr  + val + " "
    -           else:
    -               -windStr = windStr + val
    -           index += 1
    -       windStr = windStr + " "
    -       return windStr
    -
    -    def _getWindValue(self, stats):
    -       wind = self.getStats(stats,"Wind")
    -       if wind is None:
    -           val = -"    "
    -       else:
    -           mag, dir = -wind
    -           mag = -self.round(mag, "Nearest", 5)
    -           val = -self.getVectorVal((mag,dir))
    -       return val
    -
    -

    -

    Answer to Smart -Tabular Exercise 3

    -

    # ----------------------------------------------------------------------
    -# This software is in the public domain, furnished "as is", without
    -# technical  support, and with no warranty, express or implied, as -to
    -# its usefulness for any purpose.
    -#
    -# FWFTable_BOU_Overrides.TextUtility
    -#
    -#  This file is used for WFO specific overrides of the FWFTable
    -#  formatter. 
    -#
    -#
    -# Methods:
    -#   Overrides:
    -#
    -#   Additions:
    -#
    -# ---------------------------------------------------------------------
    -
    -import string, time, re, os, types, copy
    -import TimeRange
    -import TextRules
    -
    -#**********************************************************************
    -# MAKE NO CHANGES HERE
    -# The minimum contents of this file are the following class definition
    -# and the __init__ method with only "pass" line in it.
    -
    -class FWFTable_BOU_Overrides:
    -    def __init__(self):
    -        pass
    -
    -# End MAKE NO CHANGES HERE
    -#**********************************************************************
    -    # Make sure to indent methods inside the class -statement.
    -    #----- WFO BOU FWFTable Overrides -----
    -
    -    # It is helpful to put a debug statement at the -beginning of each
    -    # method to help with trouble-shooting.
    -    #def _method(self):
    -        #self.debug_print("Debug: -_method in FWFTable_CR_Overrides")
    -
    -    # Example of Overriding a dictionary from TextRules
    -    #def phrase_descriptor_dict(self, tree, node):
    -        #dict = -TextRules.TextRules.phrase_descriptor_dict(self, tree, node)
    -        #dict["PoP"] = "chance of"
    -        #return dict
    -
    -    def _rowList(self):
    -        # The rowList is controls -what parameters go into the table.
    -        # The list is a set of -(label:method) pairs.
    -        # You may change the label -if you like.
    -        # The order of the list -determines the order of the rows in the table
    -        # so you may re-arrange the -order if you like.
    -        return [
    -            # -Directive requirements
    -
    -            # -MODIFICATION: Changing order of Precip and Cloud cover
    -            -#("CLOUD COVER", self._cloudCover_row),
    -            -#("PRECIP TYPE", self._precipType_row),
    -            -("PRECIP TYPE", self._precipType_row),
    -            -("CLOUD COVER", self._cloudCover_row),
    -           
    -            -("CHANCE PRECIP (%)", self._chancePrecip_row),
    -            -("TEMP (24H TREND)", self._tempWithTrend_row),
    -            ("RH -% (24H TREND)",self._rhWithTrend_row),
    -            # -Use these if you do not want trends
    -            -#("TEMP", self._temp_row),
    -            -#("RH %", self._rh_row),
    -            -("20FTWND-VAL/AM(MPH)", self._windValleyMph_row),
    -            -("20FTWND-RDG/PM(MPH)", self._windRidgeMph_row),
    -            # -Directive optional products
    -##            -("PRECIP AMOUNT", self._precipAmount_row),
    -##            -("PRECIP DURATION", self._precipDuration_row),
    -##            -("PRECIP BEGIN", self._precipBegin_row),
    -##            -("PRECIP END", self._precipEnd_row),
    -##            -("MIXING HGT(M-AGL/MSL)", self._mixHgtM_row),
    -##            -("MIXING HGT(FT-AGL/MSL)", self._mixHgtFt_row),
    -##            -("TRANSPORT WND (KTS)", self._transWindKts_row),
    -##            -("TRANSPORT WND (M/S)", self._transWindMS_row),
    -##            -("TRANSPORT WND (MPH)", self._transWindMph_row),
    -##            -("VENT RATE (KT-FT)", self._ventRateKtFt_row),
    -##            -("VENT RATE (M/S-M)", self._ventRate_row),
    -##            -("DISPERSION", self._dispersion_row),
    -##            -("DSI", self._dsi_row),
    -##            -("SUNSHINE HOURS", self._sunHours_row),
    -##            # -If you need Ceiling, uncomment the Ceiling line in _getAnalysisList
    -##            -("CEILING", self._ceiling_row),
    -##            -("CWR", self._cwr_row),
    -##            -("LAL", self._lal_row),
    -##            -("HAINES INDEX", self._haines_row),
    -##            -("RH RECOVERY", self._rhRecovery_row),
    -##            # -If you need 500m Mix Hgt Temp, uncomment the MixHgt500
    -##            # -line in _getAnalysisList
    -##            -("MIX HGT 500", self._mixHgt500_row),
    -##            -("STABILITY CLASS", self._stability_row),
    -            ]
    -  -
    -    def _getVariables(self, argDict):
    -        # Make argDict accessible
    -        self.__argDict = argDict
    -
    -        # Get variables from -VariableList
    -        self._definition = -argDict["forecastDef"]
    -        for key in -self._definition.keys():
    -            exec -"self._" + key + "= self._definition[key]"
    -
    -        varDict = argDict["varDict"]
    -        self._issuanceType = -varDict["Issuance Type"]
    -        self._productType = -varDict["Forecast Product"]
    -       
    -        # Determine issue time
    -        self._issueTime = -self.IFP().AbsTime.current()
    -       
    -        # Determine expiration time
    -        self._expirationTimeOffset = -12
    -        self._expireTime = -self._issueTime + self._expirationTimeOffset*3600
    -        #self._expireTime = -time.strftime("%d%H%M",time.gmtime(expireTime))
    -       
    -        # Set up product-specific -variables
    -        self._colWidth = 13
    -        if self._columnJustification -== "l":
    -            -self._rowLabelWidth = 22
    -        else:
    -            -self._rowLabelWidth = 24
    -        self._fixedValueWidth = 13
    -        self._analysisList = -self._getAnalysisList()
    -
    -        # Calculate current times
    -
    -        self._ddhhmmTime = -self.getCurrentTime(
    -            -argDict, "%d%H%M", shiftToLocal=0, stripLeading=0)
    -       
    -        # MODIFICATION: Changing -format of current time
    -        #self._timeLabel = -self.getCurrentTime(
    -        #    argDict, -"%l%M %p %Z %a %b %e %Y", stripLeading=1)
    -        self._timeLabel = -self.getCurrentTime(
    -            -argDict, "%b %e %Y %l%M %p %Z %a", stripLeading=1)
    -       
    -        return None

    -    def _sky(self, statDict, timeRange, argList):
    -        # Return a sky value
    -        sky = -self.getStats(statDict, "Sky")
    -        print "USING OVERRIDDEN SKY -THRESHOLDS"
    -        # MODIFICATION -- Changing -sky thresholds
    -##        if sky is None:
    -##            -value = ""
    -##        elif  sky < 10:
    -##            -value = "CLEAR"
    -##        elif sky < 30:
    -##            -value = "MCLEAR"
    -##        elif sky <= 60:
    -##            -value = "PCLDY"
    -##        elif sky <= 80:
    -##            -value = "MCLDY"
    -##        else:
    -##            -value = "CLOUDY"
    -        if sky is None:
    -            -value = ""
    -        elif  sky < 15:
    -            -value = "CLEAR"
    -        elif sky < 40:
    -            -value = "MCLEAR"
    -        elif sky <= 70:
    -            -value = "PCLDY"
    -        elif sky <= 85:
    -            -value = "MCLDY"
    -        else:
    -            -value = "CLOUDY"
    -        return value

    -

    -

    Answer to Smart -Tabular Exercise 4

    -# ---------------------------------------------------------------------
    -# This software is in the public domain, furnished "as is", without
    -# technical  support, and with no warranty, express or implied, as -to
    -# its usefulness for any purpose.
    -#
    -# FWFTable_BOU_Definition.TextUtility
    -#
    -#  This file sets up all the Product Definition overrides for the
    -#  FWFTable formatter for a site.
    -#
    -# ---------------------------------------------------------------------
    -
    -#**********************************************************************
    -# MAKE NO CHANGES HERE
    -# The minimum content of this file is the following Definition statement
    -
    -Definition = {}
    -
    -# End MAKE NO CHANGES HERE
    -#**********************************************************************
    -#####################################################
    -# Override VariableList if desired
    -#
    -#VariableList = []
    -
    -#----- WFO BOU FWFTable Definition -----
    -# Definition Statements must start in column 1.
    -
    -# REQUIRED CONFIGURATION ITEMS
    -Definition['displayName'] = None
    -#Definition['displayName'] = "FWF_Tabular"
    -
    -Definition["defaultEditAreas"] = "Combinations_FWFTable_BOU"
    -Definition["mapNameForCombinations"] = "FireWxZones_BOU" # Map -background for creating Combinations
    -
    -# MODIFICATION -- Added gustWindDifferenceThreshold
    -Definition["gustWindDifferenceThreshold"] = 15
    -
    -
    -# ---------------------------------------------------------------------
    -# This software is in the public domain, furnished "as is", without
    -# technical  support, and with no warranty, express or implied, as -to
    -# its usefulness for any purpose.
    -#
    -# FWFTable_BOU_Overrides.TextUtility
    -#
    -#  This file is used for WFO specific overrides of the FWFTable
    -#  formatter. 
    -#
    -#
    -# Methods:
    -#   Overrides:
    -#
    -#   Additions:
    -#
    -# ---------------------------------------------------------------------
    -
    -import string, time, re, os, types, copy
    -import TimeRange
    -import TextRules
    -
    -#**********************************************************************
    -# MAKE NO CHANGES HERE
    -# The minimum contents of this file are the following class definition
    -# and the __init__ method with only "pass" line in it.
    -
    -class FWFTable_BOU_Overrides:
    -    def __init__(self):
    -        pass
    -
    -# End MAKE NO CHANGES HERE
    -#**********************************************************************
    -    # Make sure to indent methods inside the class -statement.
    -    #----- WFO BOU FWFTable Overrides -----
    -
    -    # It is helpful to put a debug statement at the -beginning of each
    -    # method to help with trouble-shooting.
    -    #def _method(self):
    -        #self.debug_print("Debug: -_method in FWFTable_CR_Overrides")
    -
    -    # Example of Overriding a dictionary from TextRules
    -    #def phrase_descriptor_dict(self, tree, node):
    -        #dict = -TextRules.TextRules.phrase_descriptor_dict(self, tree, node)
    -        #dict["PoP"] = "chance of"
    -        #return dict
    -  
    -    def _rowList(self):
    -        # The rowList is controls -what parameters go into the table.
    -        # The list is a set of -(label:method) pairs.
    -        # You may change the label -if you like.
    -        # The order of the list -determines the order of the rows in the table
    -        # so you may re-arrange the -order if you like.
    -        return [
    -            # -Directive requirements
    -
    -            -("CLOUD COVER", self._cloudCover_row),
    -            -("PRECIP TYPE", -self._precipType_row),            -
    -            -("CHANCE PRECIP (%)", self._chancePrecip_row),
    -            -("TEMP (24H TREND)", self._tempWithTrend_row),
    -            ("RH -% (24H TREND)",self._rhWithTrend_row),
    -            # -Use these if you do not want trends
    -            -#("TEMP", self._temp_row),
    -            -#("RH %", self._rh_row),
    -            -("20FTWND-VAL/AM(MPH)", self._windValleyMph_row),
    -            -("20FTWND-RDG/PM(MPH)", self._windRidgeMph_row),
    -            # -Directive optional products
    -           
    -            # -MODIFICATION -- Added Wind Gust row
    -            -("WIND -GUST",           -self._windGust_row),
    -           
    -##            -("PRECIP AMOUNT", self._precipAmount_row),
    -##            -("PRECIP DURATION", self._precipDuration_row),
    -##            -("PRECIP BEGIN", self._precipBegin_row),
    -##            -("PRECIP END", self._precipEnd_row),
    -##            -("MIXING HGT(M-AGL/MSL)", self._mixHgtM_row),
    -##            -("MIXING HGT(FT-AGL/MSL)", self._mixHgtFt_row),
    -##            -("TRANSPORT WND (KTS)", self._transWindKts_row),
    -##            -("TRANSPORT WND (M/S)", self._transWindMS_row),
    -##            -("TRANSPORT WND (MPH)", self._transWindMph_row),
    -##            -("VENT RATE (KT-FT)", self._ventRateKtFt_row),
    -##            -("VENT RATE (M/S-M)", self._ventRate_row),
    -##            -("DISPERSION", self._dispersion_row),
    -##            -("DSI", self._dsi_row),
    -##            -("SUNSHINE HOURS", self._sunHours_row),
    -##            # -If you need Ceiling, uncomment the Ceiling line in _getAnalysisList
    -##            -("CEILING", self._ceiling_row),
    -##            -("CWR", self._cwr_row),
    -##            -("LAL", self._lal_row),
    -##            -("HAINES INDEX", self._haines_row),
    -##            -("RH RECOVERY", self._rhRecovery_row),
    -##            # -If you need 500m Mix Hgt Temp, uncomment the MixHgt500
    -##            # -line in _getAnalysisList
    -##            -("MIX HGT 500", self._mixHgt500_row),
    -##            -("STABILITY CLASS", self._stability_row),
    -            ]
    -
    -    def _getAnalysisList(self):
    -        return[
    -          ("Sky", -self.avg),
    -          ("PoP", -self.stdDevMaxAvg),
    -          ("Wx", -self.dominantWx, [12]),
    -          ("Wx", -self.dominantWx, [0]),
    -          ("MaxT", -self.minMax),
    -          ("MinT", -self.minMax),
    -          ("T", -self.minMax),
    -          ("Wind", -self.vectorAvg, [6]),
    -          ("Wind20ft", -self.vectorAvg, [6]),
    -          ("QPF", -self.minMaxSum),
    -          ("MaxRH", -self.minMax),
    -          ("MinRH", -self.minMax),
    -          ("RH", -self.minMax),
    -          ("MixHgt", -self.minMax, [0]),
    -          ("TransWind", -self.vectorAvg, [0]),
    -          ("VentRate", -self.minMax, [0]), # aka "Dispersion" prior to RPP20
    -          ("DSI", -self.avg),
    -          ("HrsOfSun", -self.avg),
    -          # Uncomment the -next line if you're carrying Cig Height
    -          #("Ceiling", -self.minMax),
    -          ("CWR", -self.stdDevMaxAvg),
    -          ("Haines", -self.minMaxAvg),
    -          ("LAL", -self.maximum),
    -          ("Ttrend", -self.minMax),
    -          ("RHtrend", -self.minMax),
    -          ("Stability", -self.avg),
    -          # Uncomment the -next line if you're carrying 500m mix height temp
    -          #("MixHgt500", -self.avg),
    -
    -          # MODIFICATION --- Added entries for Wind Gust
    -          ("WindGust", -self.minMax),
    -          ("Wind", -self.vectorMinMax),
    -          ("Wind20ft", -self.vectorMinMax),
    -          ]
    -
    -    def _windGust_row(self, fcst, label, statList, -priorStatDict):
    -        fcst = fcst + self.makeRow(
    -            -label, self._colWidth, self._timeRangeList, statList,
    -            -self._windGust, None, self._rowLabelWidth, self._fixedValueWidth,
    -            -self._columnJustification)
    -        return fcst
    -
    -    def _windGust(self, statDict, timeRange, argList):
    -        # Use Wind20ft if available, -otherwise adjust Wind
    -        # Stats vectorAvg
    -
    -        # See if there is any -WindGust data
    -        windGust = -self.getStats(statDict, "WindGust")
    -        if windGust is None:
    -            -return ""
    -
    -        # Get the wind information -and adjust if using Wind instead
    -        # of Wind20ft
    -        windStats = -self.getStats(statDict,"Wind20ft__vectorMinMax")
    -        if windStats is None:
    -            -windStats = self.getStats(statDict,"Wind__vectorMinMax")
    -            if -windStats is None:
    -                -return ""
    -            mag, -dir = windStats
    -            -maxWind = self.getValue(mag, "Max")
    -            -maxWind = maxWind * self._windAdjustmentFactor
    -            -windStats = (maxWind, dir)
    -
    -        # Check the -gustWindDifferenceThreshold
    -        mag, dir = windStats
    -        maxWind = self.getValue(mag, -"Max")
    -        maxGust = -self.getValue(windGust, "Max")
    -        if maxGust - maxWind <= -self._gustWindDifferenceThreshold:
    -            -return ""
    -        else:
    -            -return self.getScalarVal(maxGust)
    -
    -
    -Answer to Phrase Exercise 1
    -
    -# ---------------------------------------------------------------------
    -# This software is in the public domain, furnished "as is", without
    -# technical  support, and with no warranty, express or implied, as -to
    -# its usefulness for any purpose.
    -#
    -# ZFP_BOU_Overrides.TextUtility
    -#
    -#  This file is used for WFO specific overrides of the ZFP
    -#  formatter. 
    -#
    -#
    -# Methods:
    -#   Overrides:
    -#
    -#   Additions:
    -#
    -# ---------------------------------------------------------------------
    -
    -import string, time, re, os, types, copy
    -import TimeRange
    -import TextRules
    -
    -#**********************************************************************
    -# MAKE NO CHANGES HERE
    -# The minimum contents of this file are the following class definition
    -# and the __init__ method with only "pass" line in it.
    -
    -class ZFP_BOU_Overrides:
    -    def __init__(self):
    -        pass
    -
    -# End MAKE NO CHANGES HERE
    -#**********************************************************************
    -    # Make sure to indent methods inside the class -statement.
    -    #----- WFO BOU ZFP Overrides -----
    -
    -    # It is helpful to put a debug statement at the -beginning of each
    -    # method to help with trouble-shooting.
    -    #def _method(self):
    -        #self.debug_print("Debug: -_method in ZFP_CR_Overrides")
    -
    -    # Example of Overriding a dictionary from TextRules
    -    #def phrase_descriptor_dict(self, tree, node):
    -        #dict = -TextRules.TextRules.phrase_descriptor_dict(self, tree, node)
    -        #dict["PoP"] = "chance of"
    -        #return dict
    -   
    -    def snow_words(self, tree, node):
    -        "Create phrase for snow -accumulation"
    -
    -        # First check if the pop -threshold has been met.
    -        # If not, then do not -generate phrase.
    -        threshold = -self.pop_snow_lower_threshold(tree, node)
    -        lowPopFlag = -self.lowPop_flag(tree, node, threshold)
    -        if lowPopFlag == 1:
    -            -return self.setWords(node, "")
    -
    -        # Second, check to see if it -is snowing based on a configurable
    -        # list called -accumulatingWx. If not, then do not generate phrase.
    -        timeRange = -node.getTimeRange()
    -        areaLabel = -node.getAreaLabel()
    -        wxStats =  -tree.stats.get("Wx", timeRange, areaLabel, mergeMethod="List")
    -        if wxStats is None:
    -            -return self.setWords(node, "")
    -        accumulatingWx = ['S', 'SW', -'IP', 'IC']
    -        accumulatingWxFlag = 0
    -        for rankList, tr in wxStats:
    -            -subkeys = self.getSubkeys(rankList)
    -            for -subkey in subkeys:
    -                -if subkey.wxType() in accumulatingWx:
    -                    -accumulatingWxFlag = 1
    -        if accumulatingWxFlag == 0:
    -            -return self.setWords(node, "")
    -
    -        # Third, load in the SnowAmt -statistics.
    -        threshold = 1
    -        statDict = node.getStatDict()
    -        stats = -self.getStats(statDict, "SnowAmt")
    -        if stats is None:
    -            -return self.setWords(node, "")
    -        min, max = -self.getValue(stats, "MinMax")
    -           
    -        # Fourth, round accumulation -and create accumulation strings.
    -        if min%1 == 0:
    -            min -= int(min)
    -            -minStr = `min`
    -        else:
    -            -minStr = `int(min+0.5)`
    -        if max%1 == 0:
    -            max -= int(max)
    -            -maxStr = `max`
    -        else:
    -            -maxStr = `int(max+0.5)`
    -
    -        #print "min, max", min, max, -node.getTimeRange(), node.getAreaLabel()
    -
    -        # Finally, generate the snow -accumulation phrase.   
    -        if min == 0 and max == 0:
    -            -return self.setWords(node,"no")
    -        elif min < 0.5 and max -< 0.5:
    -            -return self.setWords(node,"little or no")
    -
    -        outUnits = -self.element_outUnits(tree, node, "SnowAmt", "SnowAmt")
    -        unit = -self.units_descriptor(tree, node,"unit", outUnits)
    -        units = -self.units_descriptor(tree, node,"units", outUnits)
    -        min = int(min+0.5)
    -        max = int(max+0.5)
    -                        -
    -        # Single Value input
    -        if  min == max:
    -            # -Handle case of 1 inch
    -            if -min == 1:
    -                -units = unit
    -            -value = "around " + minStr
    -
    -        # Range
    -        else:
    -            -value = "of " + minStr + "-" + maxStr
    -            # -Handle case when lower value is 0
    -            if -min == 0:
    -                -value = "up to " + maxStr
    -            if -max == 1:
    -                -units = unit
    -                -
    -        snowPhrase = value + " " + -units       
    -        return self.setWords(node, -snowPhrase)
    -
    -Answer to Phrase Exercise 4
    -
    -# ---------------------------------------------------------------------
    -# This software is in the public domain, furnished "as is", without
    -# technical  support, and with no warranty, express or implied, as -to
    -# its usefulness for any purpose.
    -#
    -# ZFP_BOU_Overrides.TextUtility
    -#
    -#  This file is used for WFO specific overrides of the ZFP
    -#  formatter. 
    -#
    -#
    -# Methods:
    -#   Overrides:
    -#
    -#   Additions:
    -#
    -# ---------------------------------------------------------------------
    -
    -import string, time, re, os, types, copy
    -import TimeRange
    -import TextRules
    -
    -#**********************************************************************
    -# MAKE NO CHANGES HERE
    -# The minimum contents of this file are the following class definition
    -# and the __init__ method with only "pass" line in it.
    -
    -class ZFP_BOU_Overrides:
    -    def __init__(self):
    -        pass
    -
    -# End MAKE NO CHANGES HERE
    -#**********************************************************************
    -    # Make sure to indent methods inside the class -statement.
    -    #----- WFO BOU ZFP Overrides -----
    -
    -    # It is helpful to put a debug statement at the -beginning of each
    -    # method to help with trouble-shooting.
    -    #def _method(self):
    -        #self.debug_print("Debug: -_method in ZFP_CR_Overrides")
    -
    -    # Example of Overriding a dictionary from TextRules
    -    #def phrase_descriptor_dict(self, tree, node):
    -        #dict = -TextRules.TextRules.phrase_descriptor_dict(self, tree, node)
    -        #dict["PoP"] = "chance of"
    -        #return dict
    -   
    -    def phrase_descriptor_dict(self, tree, node):
    -        # Descriptors for phrases
    -        dict = -TextRules.TextRules.phrase_descriptor_dict(self, tree, node)
    -        # This is the default. -Triggers if ALL coverage terms are areal
    -        #dict["PoP"] = -self.allAreal_or_chance_pop_descriptor,
    -        # Uncomment this line for -invoking areal or chance pop descriptor
    -        #    Triggers -if ANY coverage terms are areal
    -        #dict["PoP"] = -self.areal_or_chance_pop_descriptor,
    -        # Uncomment this line to use -"chance" descriptor in all cases
    -        #dict["PoP"] = "chance of"
    -        dict["QPF"] = "qualitative -precipitation"
    -        return dict
    -
    -
    -    def qpf_phrase(self):
    -        return {
    -            -"setUpMethod": self.qpf_setUp,
    -            -"wordMethod": self.qpf_words,
    -            -"phraseMethods": self.standard_phraseMethods() 
    -            -}   
    -    def qpf_setUp(self, tree, node):
    -        elementInfoList = -[self.ElementInfo("QPF", "List")]
    -        self.subPhraseSetUp(tree, -node, elementInfoList, -self.scalarConnector)     
    -        return self.DONE()
    -   
    -    def qpf_words(self, tree, node) :
    -        "Create phrase for QPF"
    -        # Wait for weather phrase to -complete
    -        statDict = node.getStatDict()
    -        qpf = -self.getStats(statDict, "QPF")
    -        if qpf is None:
    -            -return self.setWords(node, "")
    -
    -        # Analysis-driven
    -        min, max = -self.getValue(qpf, "MinMax")
    -        units = -self.units_descriptor(tree, node, "units", "in")
    -        min = int(min)
    -        max = int(max)
    -        minStr = self.fformat(min, -.01)
    -        maxStr = self.fformat(max, -.01)
    -        #print "min, max", min, max
    -        if min==max:
    -            -words = minStr + " " + units
    -        else:
    -            -words =minStr + "-" + maxStr + " " + units
    -       
    -        return self.setWords(node, -words)
    -
    -    def Period_1(self):
    -        component =  {
    -            -"type": "component",
    -            -"methodList": [
    -                          -self.orderPhrases,
    -                          -self.assemblePhrases,  
    -                          -self.wordWrap,         
    -                          -],
    -            -"analysisList": [
    -                       -#("MinT", self.avg),
    -                       -#("MaxT", self.avg),
    -                       -("MinT", self.stdDevMinMax),
    -                       -("MaxT", self.stdDevMinMax),
    -                       -("T", self.hourlyTemp),
    -                       -("T", self.minMax),
    -                       -("Sky", self.median, [3]),
    -                       -("PoP", self._PoP_analysisMethod("Period_1"), [3]),
    -                       -("PoP", self.binnedPercent, [3]),
    -                       -("SnowAmt", self.accumMinMax),
    -                       -("StormTotalSnow", self.accumMinMax),
    -                       -("IceAccum", self.accumMinMax),
    -                       -("SnowLevel", self.avg),
    -                       -("Wind", self.vectorMedianRange, [6]),
    -                       -("Wind", self.vectorMinMax, [6]),
    -                       -("WindGust", self.maximum, [6]),
    -                       -("Wx", self.rankedWx, [3]),
    -                       -("WindChill", self.minMax, [6]),
    -                       -("HeatIndex", self.minMax, [6]),
    -                       -("QPF", self.accumMinMax, [6]),
    -                       -],
    -            -"phraseList":[
    -                   -self.sky_phrase,
    -                   -self.skyPopWx_phrase,
    -                   -self.wind_summary,
    -                   -self.reportTrends,
    -                   -self.weather_phrase,
    -                   -self.severeWeather_phrase,
    -                   -self.heavyPrecip_phrase,
    -                   -self.visibility_phrase,
    -                   -self.snow_phrase,
    -                   -self.total_snow_phrase,
    -                   -self.snowLevel_phrase,
    -                   -self.iceAccumulation_phrase,
    -                   -self.highs_phrase,
    -                   -self.lows_phrase,
    -                   -#self.highs_range_phrase,
    -                   -#self.lows_range_phrase,
    -                   -self.temp_trends,
    -                   -self.wind_withGusts_phrase,
    -                   -self.lake_wind_phrase,
    -                   -self.popMax_phrase,
    -                   -self.windChill_phrase,
    -                   -# Alternative
    -                   -#self.windBased_windChill_phrase,
    -                   -self.heatIndex_phrase,
    -                   -self.qpf_phrase,
    -                   -],
    -##            -"additionalAreas": [
    -##                   -# Areas listed by weather element that will be
    -##                   -# sampled and analysed.
    -##                   -# E.g. used for reporting population centers for temperatures.
    -##                   -("MaxT", ["City1", "City2"]),
    -##                   -("MinT", ["City1", "City2"]),
    -##                   -],
    -##            -"intersectAreas": [
    -##                   -# Areas listed by weather element that will be
    -##                   -# intersected with the current area then
    -##                   -# sampled and analysed. 
    -##                   -# E.g. used in local effects methods.
    -##                   -("MaxT", ["Mountains"]),
    -##                   -("MinT", ["Valleys"]),
    -##             -],
    -        }
    -        if self._arealSkyAnalysis:
    -            -component["analysisList"].append(("Sky", self.binnedPercent, [6]))
    -        if self._useStormTotalSnow:
    -            -phraseList = component["phraseList"]
    -            -index = phraseList.index(self.total_snow_phrase)
    -            -phraseList[index] = self.stormTotalSnow_phrase
    -            -component["phraseList"] = phraseList
    -        return -component          
    -

    diff --git a/cave/com.raytheon.viz.gfe/help/TextReferenceAnswerstoQuizQuestions.html b/cave/com.raytheon.viz.gfe/help/TextReferenceAnswerstoQuizQuestions.html deleted file mode 100644 index 51dbecddc0..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextReferenceAnswerstoQuizQuestions.html +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - Text Products Reference - - - -

    Answers to Quiz Questions

    - -
    -

    Text Product User Guide -- PART 1

    -
      -
    1. What are the three main steps that the system performs to produce -a test product? Sampling the data, Analyzing the -data, -creating text from Text Rules.
    2. -
    3. Where do you find a list of available text products? Quick Start Product Setup.
    4. -
    5. Where do I find information about a text product such as a -description, weather elements needed, edit areas required? In the -Documentation section of the Standard file for the product.
    6. -
    7. What do you need to do to get a product to show up in the -Formatter Launcher Dialog? Set its "displayName" in the Site Definition -file for -the product.
    8. -
    9. What do you do if you try to run your product and nothing -happens? Look for error messages in the Process Monitor. If you find an -error message, you may find it listed in the TroubleShooting -section.  Whenever you get stuck, you can post a help message to -the listserver.
    10. -
    11. Where can I find information about simple settings and options -available for a text product? In the Documentation section of the -Standard file for the product.
    12. -
    13. Given that the Infrastructure classes are read-only, how can I -make my product behave differently from the baseline? By overriding -thresholds and variables in your Overrides file.
    14. -
    -

    Text Product User Guide -- PART 2

    -
      -
    1. How are the weather elements and phrases for a narrative product -defined? Where can I find this information? Through Product -Component Definitions found in the Standard file for each product.
    2. -
    3. What do we mean when we say the narrative phrases are -"Analysis-Driven"? By changing the analysis in the Product Component -Definition, we can change the character of the narrative phrases.
    4. -
    5. What are the two ways I can change the analysis for a particular -weather element to affect the phrasing? Change the analysis method and -change the temporal resolution of the analysis.
    6. -
    7. Where can learn about the various analysis methods available? In -the Sample Analysis -Reference section.
    8. -
    9. How would you change the text of the ZFP so weather would appear -after sky and before the max/min temp? Change the order of -the phrase methods in the "phraseList" of the Product Component.
    10. -
    11. How do I locate the thresholds and variables that I will need to -customize my product? Find the phrase in the Product Component -"phraseList" and look it up in the Narrative -Phrases -Reference. The thresholds and variables that affect that -phrase will be listed there with an indication of the module(s) to -search to find them.
    12. -
    13. Where do I find information about setting up Local Effects? In -the Local -Effects section.
    14. -
    15. Suppose I want to learn more about the phrases in the first -period of my ZFP product. How do I locate the Product Component -definition for that period? Find the "_issuance_list" in the Standard -file for your product. Study the Narrative Definition to see the -layout of Product Components for different issuances.
    16. -
    17. What do I do if my Headlines are not showing up in the product? -Check the "allowedHazards" list in the -Standard file for your product -and make sure it is listed there. If not, override the -"allowedHazards" list in your Overrides -file and add it.
    18. -
    19. Where can I find information regarding trouble-shooting tips and -strategies?  In the Trouble-shooting -section.
    20. -
    21. What information should I include when submitting a help request -to the listserver? AWIPS Build Version -number, Product, Description of problem, entire error message(s), -Overrides file.
    22. -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextReferenceBackward.html b/cave/com.raytheon.viz.gfe/help/TextReferenceBackward.html deleted file mode 100644 index 64b53dd555..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextReferenceBackward.html +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - Text Products Reference - - - -

    Upgrades and Backward Compatibility

    -Transitioning from IFPS15 to IFPS16:
    -
    There are major structural changes in the formatters from IFPS15 -to IFPS16.  Information on transitioning your formatters can be -found in the Power Point presentation at:    http://www-md.fsl.noaa.gov/IFPS/16/ChangesIFPS16.ppt
    -
    -
    Transitioning from IFPS13/RPP20 to -IFPS14/RPP21:
    -Products that ran in IFPS13  will NOT run in the current -infrastructure.  You must delete (or rename) all your existing -Local files and customize the core products delivered with the -release.   It may be helpful to simply re-name your Local -files so you can refer to them when customizing the new core products. -Be aware that most of the methods have changed, so the actual -customization code cannot be copied from the old Local file to the -new.  However, you will have a record of the kinds of -customizations you may need to make to the new products.  Make -sure -that you delete infrastructure overrides such as the "Holidays" file -which changed in this version. -

    Products from IFPS14/RPP21 and beyond: -
    -Products that run in IFPS14/RPP21  and beyond should be -compatible  with the current release.  The few exceptions are -highlighted in the Release Notes.

    -

    Products Created in RPP17 or Prior:
    -If your site is running existing products using the infrastructure from -RPP17 or before,  they will continue to work for a few more -releases.  However, after reading the Advanced Text Product -Documentation (to be supplied), you should convert these products to -the -new infrastructure as the old infrastructure will eventually be -discontinued.

    diff --git a/cave/com.raytheon.viz.gfe/help/TextReferenceEvolution.html b/cave/com.raytheon.viz.gfe/help/TextReferenceEvolution.html deleted file mode 100644 index 0515fa5b92..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextReferenceEvolution.html +++ /dev/null @@ -1,162 +0,0 @@ - - - - - - Text Products Reference - - - -

    Evolution of GFESuite Text Products : -Policy and Project Overview


    - - -The staff of the Forecast Systems Laboratory (FSL), working closely -with National Weather Service (NWS) field forecast offices, develops -the -grid-editing component of the Interactive Forecast Preparation System -(IFPS).  This component called the Graphical Forecast Editor Suite -(GFESuite) allows forecasters to define a weather forecast in gridded -digital form. Once defined, the majority of NWS products are then -derived from this digital forecast database. -

    Textual forecasts are among the most widely known products of the -National Weather Service.  With the advent of digital forecasting -it is possible to produce these products automatically, allowing -forecasters to focus on meteorology rather than typing, and giving -consistency to the products.  There is an established set of text -formatters included in the IFPS system. The FSL development team is -developing an alternative set of text formatters which produce standard -text products directly from the digital forecast database.

    -

    The GFESuite text formatters are being developed within the Rapid -Prototype Process (RPP), which delivers software in a rapid fashion and -incorporates forecaster feedback to quickly improve the system.  -This section examines the phased development of the formatters and how -the feedback process works in each development phase.

    -


    -

    Exploration Phase

    -The GFESuite text formatter infrastructure was introduced by FSL as a -prototype at the National Weather Service Modernized Product Workshop -in -September of 1998. The infrastructure was written using C++ and Python, -which made it easy to extend and customize.  During the next four -years, field forecasters explored the capabilities of the -infrastructure -to develop text products.  During this Exploration Phase, the -infrastructure was enhanced to meet field needs.  The system was -also kept backward-compatible as new functionality was added. -

    By July of 2002, many local offices were successfully running -GFESuite formatters. However, the nature of this Exploration Phase led -to multiple versions of products, and support for these local versions -became a challenge. At this time, OS&T developed the Local -Formatter -Infusion Plan which tasked the NWS, in concert with FSL, to develop a -core set of GFESuite text formatters as an alternative approach to the -established IFPS text product generation providing potential risk -reduction for the September 2003 IOC.  By providing a core set of -standardized local formatters, the number of versions in the field will -be minimized while still allowing local customization. A Local Text -Formatter Team was formed consisting of forecasters representing all -regions and the FSL development team.

    -

    Consolidation Phase

    -With the adoption of this plan, we entered a new phase of local -formatter development, a Consolidation Phase.  Instead of creating -multiple versions of products, we are consolidating and integrating the -products that were developed during the Exploration Phase. The -infrastructure is being enhanced and transformed to better meet the -needs of the local products.  Backward compatibility during this -phase is not desirable since it requires 25-50% of the time available -for local formatter development.  Even if time permitted, we would -not want to maintain old code; we want a system that is easy to -understand and maintain and not cluttered with older versions. -

    Thus, we created a new set of infrastructure modules to replace the -older ones from the Exploration Phase.  The older modules will -continue to be included in the GFESuite until the new products are -mature so that existing versions of products will still run.  This -will ease the transition to the new products.

    -

    In October 2002, an initial set of new products was released for -testing and field feedback.  The products were of varying maturity -levels. In general, products in a tabular format had higher levels of -maturity than the narrative-type products, which are more complex. As -the field becomes comfortable with each product, they may choose to use -them operationally.

    -


    -

    Feedback Process in the Exploration Phase

    -How does this all-important feedback process work?  First, let's -look at the feedback process used during the Exploration phase.  A -site would create or install a product and set up local -customizations.  When a bug or desired enhancement was identified, -the focal point would make modifications writing new methods and code -to -override the existing ones. The focal point used an electronic bulletin -board, called the "listserver", for help with trouble-shooting from FSL -or from other forecasters.  This resulted in a solution for each -site. The local sites were satisfied, and FSL enhanced the -infrastructure to meet their needs.  However, this process -resulted -in multiple solutions to the same problem, and the solutions were not -available to all. -

    Feedback Process in the Consolidation Phase

    -In the Consolidation phase, we are integrating the existing versions of -products, and the infrastructure is changing dramatically.  If we -used the same feedback process as we did for the Exploration phase, a -new release containing a changing infrastructure would cause the -modified new products to break.  Depending on how much development -had been done, it could take days to weeks to recover.  If the -product team and FSL continued to provide support for local sites -making -modifications to the code, the effort toward new products would be -reduced by 25-50%. In the end, each site would have a different -solution -to the same problem, and the enhancements may not be available to all -in -the standard product. -

    The feedback process in the Consolidation Phase works differently, -as follows: A site installs the new product and makes local -customizations according to established "customization points" -documented for that product. When a bug or desired enhancement is -identified, instead of modifying the code at the local site, the focal -point submits a report to the listserver. The GFESuite Local Formatter -team responds to the problem or request. Often, due to the flexible -nature of Python, an interim solution can be given to the site.  -This solution would then be available to all AND can be integrated back -into the standard product and infrastructure.  As a result, the -individual sites are satisfied and the Local Formatter Team has -spent  time on new product development.  There is one -solution -to the same problem, which makes the products easier to understand and -maintain.

    -

    Using this feedback process, which minimizes local versions, a new -release is less likely to break the products. If there are -infrastructure changes that will effect products, they can be -identified. The time to adapt the products would be more on the order -of -hours rather than days or weeks.  In this scenario, progress on -the -new products has been increased and the feedback process has served the -purpose of developing mature products for the benefit of all.  -During the Consolidation Phase, there might be some cases where the -field offices are asked to settle for less functionality in the short -term in order to help build fully featured and maintainable products in -the long term.

    -

    -

    Conclusion

    -

    The target date for operational GFESuite Local Text Formatters is -June 2003.  The goal is to have a set of fully featured and -customizable products.  At this time, the infrastructure will be -stable and mature.  As a result of supporting the needs of a -diverse set of core products, the revised infrastructure will contain -excellent tools for field forecasters to begin a new Exploration Phase, -creating Modernized Products, the original goal and intention of the -GFESuite text formatters.


    -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextReferenceExercises.html b/cave/com.raytheon.viz.gfe/help/TextReferenceExercises.html deleted file mode 100644 index 27396e8846..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextReferenceExercises.html +++ /dev/null @@ -1,946 +0,0 @@ - - - - - - Text Products Reference - - - -

    Exercises

    - - -  Thresholds -and Variables Exercises
    -     Thresholds -Exercise 1: "Modifying a Pre-existing Override"
    -     Thresholds -Exercise 2: "Working with the temporalCoverage_percentage" -
    -     Thresholds -Exercise 3: "Working with a Non-linear Threshold"
    -     Thresholds -Exercise 4: "Basing a Threshold on the Current Edit Area"
    -   Product -Component Exercises
    -     Component -Exercise 1: "Working with Analysis-Driven Wind Phrasing"
    -     Component -Exercise 2: "Working with Analysis-Driven Weather Phrasing"
    -     Component -Exercise 3: "Choosing an Alternate Phrase"
    -     Component -Exercise 4: "Customizing a Phrase"
    -     Component -Exercise 5: "Working with Basic Local Effects"
    Configurable -Issuance Exercises
    -     Configurable -Issuance Exercise 1: "Working with Configurable Issuance"
    Headline Exercises
    -     Headline -Exercise 1: "Generating Headlines"
    -     Headline -Exercise 2: "Altering the allowedHazards"
    Simple Tabular Product -Exercises
    -      Simple Tabular Product -Exercise 1:  "Create a Weather Element by Area Table Product"
    -      Simple Tabular Product -Exercise 2:  "Create an Area by Period Table Product"
    Smart Tabular Product -Exercises
    -      -Smart -Tabular Exercise 1 : "Working with the SmartElementTable"
    -      Smart -Tabular Exercise 2 : "Extending the SmartElementTable"
    -      -Smart -Tabular Exercise 3 : "Working with the FWFTable"
    -      Smart -Tabular Exercise 4 : "Extending the FWFTable"
    Narrative Product -Exercises
    -      Narrative -Exercise 1: "Accessing the Statistics Dictionary"
    -      Narrative -Exercise 2: "Narrative Tree Processing Rules"
    -      Narrative -Exercise 3: "Working with Phrase_Test_Local"
    -      Narrative -Exercise 4: "Working with Local_Effects_Test_Local"
    -   Phrase Exercises
    -      Phrase -Exercise 1: "Overriding a Word -Method"
    -      -Phrase Exercise 2: "Inter-phrase -Dependency"
    -      Phrase -Exercise 3: "Phrase Anatomy"
    -      Phrase -Exercise 4: "Creating a New -Narrative Product"
    -


    - -NOTE: For these exercises, you will be working with the -ZFP_<site>_Overrides file. For these Exercises, use the Fcst database instead of Official. -

    Thresholds and -Variables Exercises

    -Thresholds -Exercise 1: "Modifying a Pre-existing Override" -
      -
    1. In the first period over which the ZFP will run, set up "RW" in -the Wx grid and a 10 percent PoP value.  Be sure and Save your -grids to the Fcst database.
    2. -
    3. Run the ZFP using the Fcst database and notice that no weather is -reported.
    4. -
    5. Open the ZFP_<site>_Overrides file using the Localization perspective to - modify Text Products.
    6. -
    7. Open the WxPhrases class in the Text Utilities Window of the -Define Text Products Dialog using MB3-->New on the Text Products folder. Locate the "pop_wx_lower_threshold" -method and copy and paste it into your Overrides file. Now change -the default value of 20 -percent to 10.
    8. -
    9. Re-run the ZFP and verify that rain showers are now reported.
    10. -
    -Thresholds -Exercise 2: "Working with the temporalCoverage_percentage" -
      -
    1. Open the SampleAnalysis class using Localization perspective and browsing to the Text -Utilities folder.
    2. -
    3. Find the "temporalCoverage_percentage" method. Copy it into the -ZFP_<site>_Overrides file at the end.
    4. -
    5. Create a HeatIndex grid that covers the first 2 hours of the -first period over which the ZFP will run. Set the value for this -grid to 110 degrees.
    6. -
    7. Create a HeatIndex grid that covers the last 10 hours of the -first period over which the ZFP will run. Copy the MaxT -grid -into this HeatIndex grid.
    8. -
    9. Save your data and run the ZFP. Note inclusion of the -HeatIndex phrase. Even though the HeatIndex grid does not cover 20 -percent of the 12-hour time period, it is included since the ENTIRE -grid falls within the 12-hour time period.
    10. -
    11. Now extend the first HeatIndex grid into the prior period by 2 -hours and run the ZFP again. Note that HeatIndex is not reported since -the first HeatIndex grid does not cover 20 percent of the 12-hour time -period.
    12. -
    13. Change the "temporalCoverage_percentage" from 20 percent to 10 in -your ZFP_<site>_Overrides file and Save.
    14. -
    15. Run the ZFP again and note the inclusion of the HeatIndex phrase -since we lowered the threshold for grid inclusion.
    16. -
    -Thresholds -Exercise 3: "Working with a Non-linear Threshold" -
      -
    1. Locate the "minimum_range_nlValue_dict" method -within the ZFP_<site>_Overrides file.
    2. -
    3. Set-up a non-linear dictionary for the minimum range so that -values below 40 mph will have a range of 5 mph and those above will have -a range of 10 mph.
    4. -
    5. Set up a Wind grid with values between 45 and 65 mph and verify -that the phrasing is in 10 mph ranges when you run the ZFP.
    6. -
    7. Set up a Wind grid with values between 15 and 35 mph and verify -that the phrasing is in 5 mph ranges when you run the ZFP.
    8. -
    -

    Thresholds -Exercise 4: "Basing a Threshold on the Current Edit Area"

    -
      -
    1. Use the "currentAreaContains" method to return different "pop_wx_lower_threshold" values -depending on the current edit area.
    2. -
    3. Run the ZFP to verify that your override works as intended.
    4. -
    -

    Product Component -Exercises

    -Component -Exercise 1: "Working with Analysis-Driven Wind Phrasing" -
      -
    1. Copy the entire"Period_1" Product Component method from the -AreaFcst standard file into the ZFP_<site>_Overrides file.
    2. -
    3. Make sure you have significant and variable Winds in the first -period for the edit areas over which the ZFP will run. They -should -be above 5 knots and include minimum and maximum values that range over -at least 25 knots. They should also vary every 3 hours.
    4. -
    5. Run the ZFP and make note of the Wind phrase that results for the -first period of each edit area.
    6. -
    7. Change the "Wind" analysis method from "vectorMedianRange" to -"vectorAvg" and run the product again. Did the phrases change?
    8. -
    9. Change the "Wind" analysis method to "vectorModeratedMinMax" and -run the product again. Did the phrases change?
    10. -
    11. Override the "moderated_dict" (from the SampleAnalysis class) in -your ZFP_<site>_Overrides file. Modify its values for Wind, -re-run the product and notice any phrase changes that result.
    12. -
    13. Change the temporal resolution for the Wind analysis from 6 hours -to 3 hours and run the product again. To do this, change the [6] -specification to [3] in the "Wind" analysisList entry. How did -the phrases change?
    14. -
    -Component -Exercise 2: "Working with Analysis-Driven Weather Phrasing" -
      -
    1. Copy the "Period_1" product Component Method into the -ZFP_<site>_Overrides -file (if it is not already there).
    2. -
    3. Make sure you have significant weather in the Wx grids for the -first period for the edit areas over which the ZFP will run. Make -at least 3 grids with varying weather conditions. Make at least -one grid which does not end on a 3-hour boundary e.g. ending at 2 pm -local time.
    4. -
    5. Make sure the PoP for the first period is above 20.
    6. -
    7. Run the ZFP and make note of the Weather phrase that results for -the first period of each edit area.
    8. -
    9. Change the temporal resolution for the Wx analysis from 6 hours -to "[0]" (by grid). Did the phrases change?
    10. -
    11. Change the temporal resolution for the Wx analysis to 12 hours -and notice the resulting phrase changes.
    12. -
    -Component -Exercise 3: "Choosing an Alternate Phrase" -
      -
    1. Copy the "Period_1" product Component Method into the -ZFP_<site>_Overrides -file (if it is not already there).
    2. -
    3. Run the ZFP and make note of the temperature phrases that result -for the first period of each edit area.
    4. -
    5. Look up the "highs_range_phrase" and "lows_range_phrase" in the SCALAR WEATHER ELEMENT -phrase table.
    6. -
    7. Comment out the "highs_phrase" and "lows_phrase" in the -"Period_1" component and un-comment the "highs_range_phrase" and -"lows_range_phrase".
    8. -
    9. Re-run the ZFP and notice the difference in the temperature -phrases.
    10. -
    -Component -Exercise 4: "Customizing a Phrase" -
      -
    1. Copy the "Period_1" product Component Method into the -ZFP_<site>_Overrides -file (if it is not already there).
    2. -
    3. Choose a phrase and look up its entry in the Narrative Phrases tables -under the appropriate Weather Element(s).
    4. -
    5. Examine the list of Thresholds and Variables that apply to this -phrase.
    6. -
    7. Select several to override. For each,
    8. -
        -
      • Find it in infrastructure class and copy it into your Overrides -file,
      • -
      • Read any documentation comments included with the threshold or -variable method,
      • -
      • Modify its value,
      • -
      • Re-run the ZFP and notice any resulting phrase changes.
      • -
      -
    -

    Component -Exercise 5: "Working with Basic Local Effects"

    -
      -
    1. Copy the "Period_1" product Component Method into the -ZFP_<site>_Overrides -file (if it is not already there).
    2. -
    3. Set up a basic local effect for the wind_withGusts_phrase. -
    4. -
    -

    Configurable -Issuance Exercises

    -

    Configurable -Issuance Exercise 1: "Working with Configurable Issuance"

    -
      -
    1. Locate the "_10_503_issuance_list" in the AreaFcst standard -file. Copy it into the ZFP_<site>_Overrides file (be sure -to copy the ENTIRE -method!)
    2. -
    3. Locate the "narrativeDefAM" list of components and comment out -all except the "Period_1" entry.
    4. -
    5. Run the ZFP for the "Morning" issuance and notice that you will -see only a Period 1 narrative. This is a handy way limit the -product output when you are trouble-shooting or developing an -enhancement.
    6. -
    7. Locate the "Morning" label in the "return" statement list. -Alter it and re-run the ZFP. Notice the dialog that appears has a -new default label.
    8. -
    9. For more information on the "issuance list" and it's entries, see -the section: Narrative -Definition and Configurable Issuance -- "def issuance_list"
    10. -
    -

    Headline Exercises

    -

    Headline -Exercise 1: "Generating Headlines"

    -
      -
    1. Create a Hazards grid with a duration within the first -period to be covered by the ZFP.
    2. -
    3. Set its value to "FL.W".
    4. -
    5. Run the ZFP and note the headline that appears.
    6. -
    7. Create Hazard grids of various durations over the 7-day -forecast period.
    8. -
    9. Run the ZFP and note the resulting headlines.
    10. -
    -

    Headline -Exercise 2: "Altering the allowedHazards"

    -
      -
    1. Find the "allowedHazards" list in the AreaFcst standard file.
    2. -
    3. Copy the entire list into the ZFP_<site>_Overrides file and -remove the entry -for "FL.W".
    4. -
    5. Create a Hazard grid with a value of "FL.W."
    6. -
    7. Run the ZFP and note that the Flood Warning headline was not -included.
    8. -
    -

    Simple Tabular Products -Exercises

    -

    Simple -Tabular Products Exercise 1: "Creating a Weather Element by Area Table -Product"

    -Create a new Table Product. Your table should show QPF, PoP and Wind -across the columns and a set of default Edit Areas down the rows. Do -not ask the user to specify the Edit Areas at run time. Instead, set them -up in the table definition. -

    Answer -to Simple Tabular Product Exercise 1

    -

    Simple -Tabular Products Exercise 2: "Creating an Area By Period Table -Product"

    -Create an "Area By Period" table to show Temperature for a set of Edit -Areas at time period intervals. Let the user specify the Edit Areas and -the time period interval at run time. Have the table generated -beginning -with the "Today" time range. -

    Answer -to Simple Tabular Product Exercise 2

    -

    Smart Tabular Product -Exercises

    -

    Smart Tabular Exercise 1: -"Working with the SmartElementTable"

    -To see an example of a Smart Table Product which follows the Smart Text -Product Template, we will study the SmartElementTable which can be -found -in the Define Text Products dialog IF you log on to the GFE as user -GFETEST.  It consists of two files: SmartElementTable.py and -SmartElementTable_Local.py. To activate the product, modify -the Overrides file and un-comment the "displayName". Make sure you have -defined edit areas named "area1", "area2", and "area3". Run the -product so see the results. -

    Note the following in the standard SmartElementTable file:

    -
  • VariableList: This allows the user to choose -options at run-time. In this case, the user will specifiy whether -a morning or afternoon product is desired.
  • -
  • Definition: This specifies the product type (smart), output -file, edit areas and a product-specific regionList. The -regionList -maps the edit areas to regions by which the product results are -grouped. Note that the "displayName" is set to None. This -is -because this file serves only as a base. The derived Overrides -file -will specify the "displayName."
  • -
  • TextProduct Class: This inherits from TextRules and -SampleAnalysis classes.
  • -
  • generateForecast: This part of the code is identical to the -Smart Text Product Template, following the same basic steps.
  • -
  • _getAnalysisList: This method (called by _getVariables) returns -an analysisList that specifies the statistics desired for each weather -element.
  • -
  • _getTimeRange: This method (called by _determineTimeRanges) is in -the TimeRangeUtils module. Given the name of Time Range (defined -in the GFE by Select Time Range), it returns a TimeRange object.
  • -
  • _getPeriods: This method (called by _determineTimeRanges) is in -the TimeRangeUtils module. It returns a list of (timeRange, -label) -tuples given a timeRange, period, span, and optional labelMethod or -labelFormat.
  • -
  • _getSampler: This method (called by _sampleData) is in the -Interfaces module. It returns a HistoSampler object representing -histograms from sampled data. The method is given an analysisList: -(weather element, method) tuples, a timeRange list: (timeRange, -label) tuples, and an editArea list: (editArea, label) tuples.
  • -
  • _getStatList: This method (called by _makeProduct) is in the -Interfaces module. For each timeRange, it creates a statistics -dictionary for a given list of weather elements and an edit area. -The dictionaries are returned in a list which can then be used by the -formatting methods to create the appropriate text strings.
  • -
  • _getTempValues and _getPopValues: These methods (called by -_makeProduct) access the statList to create text string values. They -use -a TableBuilder method, _getScalarValue, which, given a numeric value, -returns a text string
  • -
    -Note the following about the local SmartElementTable_Local file: -
  • import SmartElementTable: This is necessary to -have access to the standard class file.
  • -
  • Definition: The Definition section is copied from the -standard file so that entries can be overriden to allow site-specific -information such as output file and edit areas.
  • -
  • VariableList: This is not repeated here, but could be if -the local site wanted something different from the one in the standard -file.
  • -
  • TextProduct Class: Note that the local class inherits from -the standard class (SmartElementTable) thus having access to all its -methods as well as those in TextRules and SampleAnalysis. -Therefore, to override any inherited method, the local class simply -provides its own "def" method.
  • -
    -Make the following modifications in the SmartElementTable_Local file -and test each as you go along: -
  • Modify "outputFile" in the Definition
  • -
  • Modify the "defaultEditAreas" and "regionList" in the Definition
  • -
  • Copy the preProcessProduct method from the standard file and -provide a product header.
  • -
  • Make note of the modifications you made and show an example of -the revised output.
  • -
  • Change the "elementList" to include different combinations of -Temp, PoP, and Humidity in various orders.
  • -
    -

    Smart Tabular Exercise 2: -"Extending the SmartElementTable"

    -Extend the SmartElementTable to have the capability of reporting -Wind. You will have to: -
      -
    • Override and add to "_getAnalysisList"
    • -
    • Override and add to "_getTitleDict"
    • -
    • Add a method "_getWindValues" similar to "_getPoPValues"
    • -
    • Add a method "_getWindValue" similar to "_getPoPValue" which uses -"getVectorVal" instead of "getScalarVal"
    • -
    • Test your modifications by changing the "elementList" to include -Wind.
    • -
    -Answer to Smart Tabular -Exercise 2 -

    Smart Tabular Exercise 3: -"Working with the FWFTable"

    -To see a more sophisticated example of a Smart Table Product, we will -study the FWFTable. The Standard andOverrides files are FWFTable, -FWFTable_<site>_Definition, and -FWFTable_<site>_Overrides, respectively. Activate the -FWFTable by setting it's "displayName" and Run the product. -

    Note the use of the following inherited methods in the base FWFTable -standard file:

    -
  • getCurrentTime: This method (called by -_preProcessProduct) is in the TimeDescriptor module. It will -format the current time and return a text string.
  • -
  • getWeekDay: This method (called by _getLabel) is in the -TimeDescriptor module. It is an all-purpose weekday labeling -method which takes a time range as input and returns a text string -label (e.g. Today, Tonight, Monday, etc). It can handle various -combinations of upper and lower case, punctuation and holidays.
  • -
  • makeRow: This method (called by _makeProduct) is in the -TableBuilder module. It is a general-purpose method for adding a row to -a table. Arguments include: a row label, a column width, a -statList and a formatting method with optional arguments.
  • -
  • getStats: This method (called by the text formatting methods) is -in the Interfaces module. Given a statDict and a weather element -name, it returns the corresponding statistics. If no data -is available for the element, getStats returns "None". This -should be tested in the text formatting method.
  • -
  • generateProduct: This method (called by _makeProduct) is in the -Interfaces module. It can be used to "glue" another text product -onto the current one. (It is similar to the "callSmartTool" -command for Procedures.) In this case, we are generating and -Extended Narrative product onto the tabular portion of the -product. Notice the the Narrative Definition and Product -Component Definitions for the Extended Narrative are included in the FWFTable -standard file.
  • -
    -Make the following modifications to the FWFTable_<site>_Overrides -file. -Override portions of the FWFTable standard file if necessary. Make sure -to comment changes that you make. Test each change as you go along: -
  • Rearrange the order of the rows of the table by -changing the order of the entries in the "_rowList."
  • -
  • Change the format of the current time reported in the product -header.
  • -
  • Change the threshold values in the "_sky" method.  Insert a -print statement in your method to verify that it has successfully -overridden the one in the Standard file.
  • -
  • Notice that there is a "windAdjustmentFactor" in the Definition -section. Wind reporting works as follows: If there is a -Wind20ft grid available, that is used. If not, the Wind grid -values are used after multiplying by the "windAdjustmentFactor" which -has a default of .80. First, remove any Wind20ft grids that -might be in the Today period. Run the product so that the Wind -grid values are reported. Note the Wind values for the Today -period. Now change the "windAdjustmentFactor" and run the product -again. Note the change in the reported Wind values. -Finally, create a Wind20ft grid in the Today period and assign values distinct -from that in the Wind grid. Run the product again and verify that -the Wind20ft values are now being reported.
  • -
    -Answer to Smart Tabular -Exercise 3 -

    Smart Tabular Exercise 4: -"Extending the FWFTable"

    -Add a new row to the FWFTable for WindGust. Report a WindGust -value only if the difference between the maximum WindGust and the -maximum Wind value is greater than some configurable -threshold. Use the "Wind20ft" weather element -for Wind if available, otherwise, use and adjusted "Wind" weather -element value. The adjusted value will simply be the Wind -magnitude multiplied by the "windAdjustmentFactor". See if you -can solve this problem without reading any further. If you get -stuck, you can read on for some hints. -
      -
    • Add a new Definition entry, for example, -"gustWindDifferenceThreshold" and set it to a default value. -Remember that simply by adding this entry to the Definition, the -variable, "self._gustWindDifferenceThreshold" will be available to be -used in your product.
    • -
    • Override the "_getAnalysisList" method and add an entry for -"WindGust." You will also have to add a entries for "Wind" and -"Wind20ft" to check the maximum wind for comparison.
    • -
    • Add a new method, for example, "_windGust" that tests the -difference between maximum Wind and maximum WindGust against the -"GustWindDifferenceThreshold" and returns an appropriate string for the -WindGust row entry. You will want to refer to the "_wind" method -for help in dealing with the Wind and Wind20ft grids.
    • -
    • Add a new method, for example, "_windGust_row", which calls -"makeRow" to create the WindGust row. The call to "makeRow" -will use your "_windGustEntry" method.
    • -
    • Add an entry for WindGust to the "_rowList" that refers to your -"_windGust" method
    • -
    - Answer to Smart Tabular -Exercise 4
    -

    Narrative Product -Exercises

    -

    Narrative Exercise 1: -"Accessing the Statistics Dictionary"

    -In this exercise, you will practice accessing the Statistics Dictionary -using the "tree.stats.get" command.
    -
      -
    1. Put the following code in your ZFP_<site>_Overrides -file:
      -
      - def sky_setUp(self, tree, node):    
      -        if node.getComponentName() -== "Period_1":
      -            -print "\n\nFrom Statistics Dictionary:"
      -            tr = -node.getTimeRange()
      -            -areaLabel = node.getAreaLabel()
      -            -stats = tree.stats.get("Wind", tr, areaLabel)
      -            -print "Wind List for ", tr,  areaLabel, stats
      -            -stats = tree.stats.get("Wind",  tr, areaLabel, mergeMethod = -"MinMax")
      -            -print "Wind MinMax", stats
      -            -stats = tree.stats.get("Wind",  tr, areaLabel, mergeMethod = "Max")
      -            -print "Wind Max", stats
      -            -stats = tree.stats.get("Wind",  tr, areaLabel, -statLabel="vectorMinMax")
      -            -print "Wind vectorMinMax", stats
      -            -print "\n\n"
      -        sky = -self.ElementInfo("Sky", "List")
      -        elementInfoList = [sky]
      -        self.subPhraseSetUp(tree, -node, elementInfoList, -self.scalarConnector)                         - 
      -        return self.DONE()
      -   
      -
      -
    2. -
    3. Run the ZFP with the default settings and examine the printed -results in the terminal window. Examine the data to verify -that the results are correct.
      -
    4. -
    5. Alter the "tree.stats.get" commands using various arguments and -re-run the product. Satisfy yourself that that the results are -correct.
    6. -
    -

    Narrative Exercise 2: "Narrative -Tree Processing Rules"

    -This exercise will illustrate the multiple-pass processing of the -narrative tree by printing a trace of the methods executed and their -return status.
    -
      -
    1. Bring up the GFE under userID GFETEST.  There you will find -a Overrides file called "Phrase_Test_Local". Bring up the -Formatter Launcher Dialog and run this product.
    2. -
    3. Now we would like to turn on a trace for a phrase and follow it's -progress. In the "phraseList" for Period_1, comment out all -except -the "weather_phrase". Now set the Wx grid for the first 12-hour -period to Sct RW- and set the PoP to 60. Save your data to the -Fcst database. Finally, uncomment the 'Definition["trace"] = 1' in the -Definition section.  Now run the product using the Fcst database.
    4. -
    5. You will see a trace in the terminal window similar to the -following which has been annotated and bolded to help you read it:
    6. -
    -Local Formatter executed script:   runIFPText -t -Phrase_Test_Local -g Phrase_Test -h dx3 -p 9581 -d -BOU_GRID__Fcst_00000000_0000 -u GFETEST &
    -Finding  Phrase_Test_Local
    -Finding  Period_1
    -Progress: 24% Sampling Data -- please wait...
    -Time to Sample Data 3.3896099329
    -Progress: 72% Analyzing Data -- please wait...
    -Time to Get Statistics 1.95773291588
    -Progress: 50% Making Product for Area 1
    -Finding  Headlines
    -Finding  Headlines
    -Progress: 24% Sampling Data -- please wait... -

    Time to Sample Data 0.956331014633
    -Progress: 72% Analyzing Data -- please wait...
    -Time to Get Statistics 0.00587105751038
    -Time for phrase generation for  Area 1 : 0.00755608081818 Passes 5 -

    -

    Pass -1:
    -Traversing node: None Area 1 (
    Sep 25 03 12:00:00 GMT, Sep 26 03 -00:00:00 GMT)
    -Method assembleChildWords  -6.29425048828e-05       Words None
    -Traversing node: Period_1 Area 1 (Sep -25 03 12:00:00 GMT, Sep 26 03 00:00:00 GMT)
    -Method assemblePhrases  -5.49554824829e-05       Words None
    -Method wordWrap  -0.000158905982971       Words None
    -Traversing node: weather_phrase Area 1 -(Sep 25 03 12:00:00 GMT, Sep 26 03 00:00:00 GMT)
    -Method weather_setUp DONE -0.00276303291321       Words None
    -Method combinePhraseStats DONE -7.09295272827e-05       Words None
    -Method consolidateWx DONE -0.000249028205872       Words None
    -Method separateNonPrecip DONE -0.000325083732605       Words None
    -Method recallCombinePhraseStats DONE -6.30617141724e-05       Words None
    -Method consolidateVisibility DONE -7.89165496826e-05       Words None
    -Method combineWords DONE -5.00679016113e-05       Words None
    -Method fillNulls  -0.000177979469299       Words None
    -Method timeDescriptorModeration  -6.79492950439e-05       Words None
    -Method assembleSubPhrases  -6.40153884888e-05       Words None
    -Method postProcessPhrase  -5.10215759277e-05       Words None
    -Traversing node: None Area 1 -(Sep 25 03 12:00:00 GMT, Sep 26 03 00:00:00 GMT)
    -Method weather_words DONE -0.00634896755219       Words scattered -rain showers

    -

    Pass -2:
    -
    Traversing node: None Area 1 
    (Sep 25 03 12:00:00 -GMT, Sep 26 03 00:00:00 GMT)
    -Method assembleChildWords  -5.69820404053e-05       Words None
    -Traversing node: Period_1 Area 1 (Sep -25 03 12:00:00 GMT, Sep 26 03 00:00:00 GMT)
    -Method assemblePhrases  -5.69820404053e-05       Words None
    -Method wordWrap  -4.39882278442e-05       Words None
    -Traversing node: weather_phrase Area 1(Sep -25 03 12:00:00 GMT, Sep 26 03 00:00:00 GMT)
    -Method fillNulls DONE -0.000213980674744       Words None
    -Method timeDescriptorModeration DONE -0.0001380443573       Words None
    -Method assembleSubPhrases DONE -0.000234007835388       Words scattered -rain showers
    -Method postProcessPhrase DONE -0.000167012214661       Words scattered -rain showers
    -Traversing node: None Area 1 (Sep -25 03 12:00:00 GMT, Sep 26 03 00:00:00 GMT)

    -

    Pass -3:
    -
    Traversing node: None Area 1 
    (Sep 25 03 12:00:00 -GMT, Sep 26 03 00:00:00 GMT)
    -Method assembleChildWords  -5.49554824829e-05       Words None
    -Traversing node: Period_1 Area 1 (Sep -25 03 12:00:00 GMT, Sep 26 03 00:00:00 GMT)
    -Method assemblePhrases DONE -0.000898003578186       Words -.TODAY...Scattered rain showers.
    -Method wordWrap DONE -0.000109076499939       Words -.TODAY...Scattered rain showers.

    -

    Traversing node: weather_phrase -Area 1 (Sep 25 03 12:00:00 GMT, Sep 26 03 00:00:00 GMT)
    -Traversing node: None Area 1 (Sep -25 03 12:00:00 GMT, Sep 26 03 00:00:00 GMT)

    -

    Pass -4:
    -
    Traversing node: None Area 1
    (Sep 25 03 12:00:00 GMT, Sep -26 03 00:00:00 GMT)
    -Method assembleChildWords DONE -0.000106930732727       Words -.TODAY...Scattered rain showers.

    -

    Traversing node: Period_1 Area -1 (Sep 25 03 12:00:00 GMT, Sep 26 03 00:00:00 GMT)
    -Traversing node: weather_phrase Area 1 -(Sep 25 03 12:00:00 GMT, Sep 26 03 00:00:00 GMT)
    -Traversing node: None Area 1 (Sep -25 03 12:00:00 GMT, Sep 26 03 00:00:00 GMT)

    -

    Pass -5:
    -
    Traversing node: None Area 1 
    (Sep 25 03 12:00:00 -GMT, Sep 26 03 00:00:00 GMT)
    -Traversing node: Period_1 Area 1 (Sep -25 03 12:00:00 GMT, Sep 26 03 00:00:00 GMT)
    -Traversing node: weather_phrase Area 1 -(Sep 25 03 12:00:00 GMT, Sep 26 03 00:00:00 GMT)
    -Traversing node: None Area 1 -(Sep 25 03 12:00:00 GMT, Sep 26 03 00:00:00 GMT)
    -Time for phrase generation for  Area 1 : 0.0191469192505 Passes 5
    -Progress: 100% Phrase_Test Complete

    -
    There are five passes through the tree -to construct the weather phrase. -
      -
    • Can you see the levels of the tree i.e. tree level, component -level, phrase level and sub-phrase level? The tree and sub-phrase -levels are labeled as "None" since they have no node name.
    • -
    • Can you follow the progress from the top of the tree to each of -the nodes? Notice at each level how different methods -return a DONE status. After returning DONE, they are not called -again when traversing the node.
    • -
    • Notice the methods at each level. A the top level, we have -"assembleChildWords". Look this up in the Phrase Builder -module. What is the trigger condition upon which this method can -execute? At the Component level, we have "assemblePhrases" and -"wordWrap". What trigger condition do these have? We -will learn more about the Phrase level methods in a later -session. -For now, notice that some execute immediately while others trigger only -after the words are complete.
    • -
    • When you are done examining the trace, reverse the changes you -made to restore the "Phrase_Test_Local" file to its original state.
    • -
    -
    -

    Narrative Exercise 3: "Working -with 'Phrase_Test_Local'"

    -In this exercise, you will work -with Phrase_Test_Local to understand the Narrative Phrases and -Strategies. From the GFE Help menu, select "Test Cases" and find -"tp003: Narrative Phrases Test Cases and Tutorial". Follow -the instructions for setting up and testing the Phrase_Test_Local file -located under the GFETEST userID.
    -
    -

    Narrative Exercise 4: "Working -with 'Local_Effects_Test_Local'"

    -In this exercise, you will learn about different ways to set up local -effects. From the GFE Help menu, select "Test Cases" and find -"tp004: Local Effects Test Cases and Tutorial". Follow the -instructions for setting up and testing the the -Local_Effects_Test_Local -file located under the GFETEST userID.
    -
    -

    Phrase Exercises

    -

    Phrase Exercise 1: -"Overriding a Word Method"

    -In this exercise, you will see how to override a Word Method in order -to alter the wording a phrase. You will see that although the na
    -
      -
    1. In the ZFP_<site>_Overrides file, override the "snow_words" -method -(ScalarPhrases).
    2. -
    3. Change the wording to use a dash instead of the word, "to".  -For example, "1 to 2 inches" will come out as "1-2" inches.
    4. -
    -Answer to Phrase Exercise 1
    -

    Phrase Builder Exercise 2: -"Inter-phrase Dependency"

    -In this exercise, you will learn how to use the resulting words from -one phrase to affect the words of another phrase. For example, -the -PoP phrase wording will depend on the type of weather occuring in the -period.
    -
      -
    1. Examine the "popMax_words" method from ScalarPhrases. -Notice the "findWords" method that finds the words for the -weather_phrase. Since the popMax_phrase is dependent on the -weather_phrase, it does not execute until the weather_phrase words have -been set.
      -
    2. -
    3. In the Phrase_Test_Local file, override the "popMax_words" and -insert a print statement as -follows:        
      -          
      -        wxWords = ""
      -        if -self.wxQualifiedPoP_flag(tree, node) == 1:
      -            -wxWords = self.findWords(tree, node, "Wx", node.getAreaLabel())
      -            print "wxWords", wxWords
      -            if -wxWords is None:
      -                -return
      -            if -wxWords == "":
      -                -return self.setWords(node, "null")
      -           
    4. -
    5. Run the product and examine the results in the terminal -window. Can you explain them?
    6. -
    -

    Phrase Exercise 3: "Phrase -Anatomy"

    -In this exercise, you will gain an understanding of each phrase method -and see how they all work together to form the resulting phrase.
    -
      -
    1. In the Phrase_Test_Local file,  comment out all phrases -EXCEPT the wind_withGusts_phrase in the Period_1 product component.
    2. -
    3. Override the "standard_vector_phraseMethods" from -VectorRelatedPhrases.
      -
    4. -
    5. Set up one Wind grid and no WindGust grid for the first period.
    6. -
    7. For each phraseMethod in turn (including the setUp and -wordMethods), comment it out and run the product. Can you -explain the results?
    8. -
    9. Set up two differing 6-hour Wind grids and repeat Step 4.
    10. -
    11. Set up one WindGust grid with a non-null value and repeat Step 4.
    12. -
    13. Finally, set up two differing 6-hour WindGust grids and repeat -Step 4.
    14. -
    15. At each step, see if you can understand the phrase and/or error -message results.
    16. -
    17. Continue to experiment with different data values and -phraseMethod combinations to gain insight into phrase building..
    18. -
    19. Comment out all phrases EXCEPT the weather_phrase in the Period_1 -product component.
    20. -
    21. Override the "standard_weather_phraseMethods" from WxPhrases.
    22. -
    23. Set up one Wx grid with significant weather for the first -period. Make sure the corresponding PoP grid is set to at least -20.
      -
    24. -
    25. For each phraseMethod in turn (including the setUp and -wordMethods), comment it out and run the product. Can you -explain the results?
    26. -
    27. Set up two differing 6-hour Wx grids and repeat Step 4.
    28. -
    29. Continue to experiment with different data values and -phraseMethod combinations to gain insight into phrase building.
      -
    30. -
    -

    Phrase Exercise 4: "Adding -a New Phrase"

    -In this exercise, you will add a QPF  phrase to Period_1 for the -ZFP product. 
    -
      -
    1. Create a new phrase for QPF and add it to the ZFP product.  -Use the popMax_phrase as a starting point. For simplicity, report -the QPF value as an integer.
      -
    2. -
    -Try this exercise without reading further. If you need some more -hints, read on.
    -
      -
    1. Use the "accumSum" or "accumMinMax" analysis method. Make sure -your phrase can handle either.
    2. -
    3. Add the phrase name to the Period_1 component definition.
    4. -
    5. Make sure you have included an entry for QPF in the -phrase_descriptor_dict.
      -
    6. -
    -Answer to Phrase Exercise 4
    -

    Trouble-shooting Exercises

    -

    Trouble Exercise 1: "Simple -Error Message"

    -In this exercise, you will look up an error message in the -Trouble-shooting section to isolate the problem.
    -
      -
    1. Open the Combinations file in the Define Text Products -dialog. Replace "area1" with "area15".
    2. -
    3. Run the ZFP product.
    4. -
    5. Check the terminal window for error messages. You should -see a stack trace. -
    6. -
    7. Look in the Trouble-shooting page -and find the description for this error.
      -
    8. -
    9. Make the correction and run the product again.
      -
    10. -
    -

    Trouble Exercise 2: "Revert to -Baseline"

    -In this exercise, you will follow the Trouble-shooting Strategy to -isolate and fix a problem with a formatter.
    -
      -
    1. Run the product with displayName appearing as "TroubleEx2".
    2. -
    3. Use the Trouble-shooting -Strategy 3 to isolate and fix the problem.
      -
    4. -
    -

    Trouble Exercise 3: "Scavenger -Hunt"

    -In this exercise, you will follow the Trouble-shooting Strategy to -isolate an infinite loop in processing the narrative tree.
    -
      -
    1. Ask a buddy to set up this exercise by doing steps 2-7. -Then do step 8.
    2. -
    3. In the Text Utilities Window, create a file named -"TroubleEx3". Remove the template code and create a new -class:
      -class TextProduct:
      -
    4. -
    5. Choose a wordMethod from one of the phrase definitions in -Period_1 of the AreaFcst product.
    6. -
    7. Change the last "setWords" call to a simple "return" statement. -Copy it into the TextProduct class in the TroubleEx3 file. Save and -close the file.
    8. -
    9. Open the ZFP_<site>_Overrides. Comment out the -"class" declaration and -replace it with the following:
      -
      - import TroubleEx3
      - class TextProduct(TroubleEx3.TextProduct, AreaFcst.TextProduct):
      -    Definition = -copy.deepcopy(AreaFcst.TextProduct.Definition)

      -
    10. -
    11. Run the ZFP and make sure that the product returns an error -message instead of text. If not, change the data or the TroubleEx3 file -to make sure an error occurs.
    12. -
    13. Save and close the file and return to your seat.
    14. -
    15. Run the ZFP.  Use Trouble-shooting -Strategy 4 to isolate the problem. See how far you can -get WITHOUT looking at TroubleEx3!
    16. -
    diff --git a/cave/com.raytheon.viz.gfe/help/TextReferenceFAQs.html b/cave/com.raytheon.viz.gfe/help/TextReferenceFAQs.html deleted file mode 100644 index 70fb271b29..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextReferenceFAQs.html +++ /dev/null @@ -1,406 +0,0 @@ - - - - - - Text Products Reference - - - -
    -

    FAQ's

    -
    -

        Using -a Different Area for Some Phrases
    -    Range -Adjustment Questions/Answers
    -Using Lat/Lon Edit Areas in a Product
    -

    -
    -

    USING A -DIFFERENT EDIT AREA FOR SOME PHRASES

    -
    Question: -For the ZFP, I want -to -use a smaller edit area in each zone for temperature to capture the -populated areas, but use the entire edit area for all other elements. I -heard it can be done with "intersectAreas" but all references that I've -found in the Text Formatter Reference Guide tie intersectAreas with -local effects. I want to make it clear, I don't want local effects. I -just want the text to say, "HIGHS IN THE MID 50S" and not "HIGHS IN THE -MID 40S EXCEPT MID 50S IN THE POPULATED AREAS"
    -
    -Answer:
    -There are several ways to -accomplish this -- you can use -"intersectAreas" or  "additionalAreas".  Perhaps the simplest -is using "intersectAreas".
    -
    -1) Define an edit area, say PopulatedAreas, that is the union of all -your populated smaller areas.
    -2) Make this an "intersectArea" for MaxT and MinT in the product -component definition.
    -3) Override the "highs_setUp" and "lows_setUp" methods from -ScalarPhrases with the following additional code:
    -
    I would like to set up a varDict to allow the user to enter in a given latitude and longitude and have a given product run off that lat/lon pair as the default edit area. 
    -
    -    def highs_setUp(self, tree, node):
    -
    -        # This code re-sets the -node's areaLabel to that for the
    -        # intersection of the -current area and the smaller populated areas
    -        # After this is set, the -phrase will work with the smaller area
    -        areaLabel = -node.getAreaLabel()
    -        intersectName = -self.getIntersectName(areaLabel, "PopulatedAreas")
    -        node.set("areaLabel", -intersectName)
    -
    -        elementInfoList = -[self.ElementInfo("MaxT", "List")]
    -        self.subPhraseSetUp(tree, -node, elementInfoList, self.scalarConnector)
    -        return self.DONE()
    -
    -

    RANGE ADJUSTMENT -QUESTIONS/ANSWERS
    -

    -
    The following is a condensation of a -listserver discussion involving Range -Adjustment:
    -
    -Kyle: In our grids for today, -we have no wind speeds greater than 13 knots, but our formatters went -with 15 to 25 mph during the afternoon. Same wording problem for the -evening with the same wind speeds. Is there something in the set-up -that I have incorrect?  The Overrides file is attached.
    -
    -Tracy: The range for your winds -is set to have a minimum of 10. I suspect this is why you are getting -the 15-25 mph range. -
    -
    -    def minimum_range_nlValue_dict(self, tree, node): -
    -        # This threshold is the -"smallest" min/max difference allowed between values reported. -
    -        # For example, if threshold -is set to 5 for "MaxT", and the min value is 45 -
    -        # and the max value is 46, -the range will be adjusted to at least a 5 degree -
    -
    I would like to set up a varDict to allow the user to enter in a given latitude and longitude and have a given product run off that lat/lon pair as the default edit area. 
    -        # range e.g. 43-48.  -These are the values that are then submitted for phrasing -
    -        # such as: -
    -        #   HIGHS IN THE -MID 40S -
    -        dict = -TextRules.TextRules.minimum_range_nlValue_dict(self, tree, node) -
    -        dict["MaxT"] = 1 #defualt 5 -
    -        dict["MinT"] = 1 #default 5 -
    -        dict["Wind"] = { -
    -            -(0,5):0, -
    -            -(5,15):5, -
    -            -(15,40):10, -
    -            -"default":15, -
    -            } -
    -        return dict -
    -
    -Kyle:   I -changed it to 5 and it mostly worked. Instead of 15 to 25 it gave me 15 -to 20. The only problem is we do not have a single grid over 15 -mph...so it is kind of ignoring the fact that we have some winds less -than 15 mph...and no winds above 15 mph.
    -Does it just take the -highest wind at any one time, and use that -as the lower end of the range? That's what it seems like it is doing, -at least today.
    -This may be easier said -than done, but would it be better to -basically go +- 5 mph from the average wind? That way, if you average -wind is 15 mph, you would be given 10-20. Maybe like this...
    -
    -0 to 3 mph - light or -variable or calm
    -4 to 7 mph could be around -5
    -8 to 12 = 5 to 15 or 10 to -15
    -13 to 17 = 10 to 20
    -18 to 23 = 15 to 25
    -24 to 27 = 20 to 30
    -28 to 33 = 25 to 35
    -34 to 37 = 30 to 40
    -38+ could have a range of -15, like 35 to 50.
    -
    -Dave: -Ahhhhhhh, we are now seeing the "Catch 22" when -forcing ranges(wind, temperature, etc). When we try to stick with the -standard(oldtime) NWS "ranges", you will end up with text forecasts -that don't match what is in the grids.
    -
    -Jay: -In your local file, try changing the Wind entry in -the -maximum_range_bias_nlValue_dict from "Min" to "Max". I think you'll want to do the same thing for -the minimum_range_bias_nlValue_dict, as well. I think this will solve -your problem and give you wind text of 10 to 15 mph instead of 15 to -20 mph.
    -
    -Dave: -Once again, it is about rounding and ranges in the -BASE level infrastructure. If you truly want accuracy, then there first -should be no rounding and return literal values(i.e. 13 mph, 11 mph, -etc). So, if you have 13kts, then you will get 15 mph. Add a 5 mph -range, and you will get 15 to 20 mph. The infrastructure is nearly -wide open, so you can change what you like.
    -
    -Kyle: -Thanks Jay, Was -wondering, by doing this what, what would happen if my average wind was -17 mph? Would it round to 15 mph, then go 10 to 15 mph? I'm mainly curious about the -logic of how these winds are calculated for each time block to see if -there is a problem.
    -
    -Wade: Here in PDT, we have -primarily eliminated this problem by -using the overrides below. As Dave mentioned, this is mainly a problem -due to rounding. It's not only the round of the internal grid values, -but it's also the rounding of ranges too, especially if you use -Average. For example, let's say I have defined wind values between 5 -and 15 mph as having a 5 mph range as a minimum and maximum range. -Let's say all my values within a zone are 10 mph. Since 5 mph can't be -divided evenly, the resulting range ends up being 10-15 mph (i.e., 10 -minus 2.5 rounds to 10, and 10 plus 2.5 rounds to 15). This is probably -why you are getting maximum values that don't exist in your grids. An -excellent way to avoid this particular rounding problem is to use only -even values in the maximum and minumum range value dictionaries.
    -
    -          def -maximum_range_nlValue_dict(self, tree, node):
    -
    -
    -
    # Maximum range to be reported within -a phrase
    -
    I would like to set up a varDict to allow the user to enter in a given latitude and longitude and have a given product run off that lat/lon pair as the default edit area. 
    -# e.g. 5 to 10 mph
    -# Units depend on the product
    -dict = TextRules.TextRules.maximum_range_nlValue_dict(self, tree, node)
    -dict["MaxT"] = 15
    -dict["MinT"] = 15
    -dict["WindChill"] = 15
    -dict["HeatIndex"] = 15
    -dict["Wind"] = {
    -(0, 5) : 0,
    -(5, 100) : 10,
    -'default': 10,
    -}
    -return dict
    -
    -
    -def minimum_range_nlValue_dict(self, tree, node):
    -
    # This threshold is the "smallest" -min/max difference allowed between values reported.
    -# For example, if threshold is set to 5 for "MaxT", and the min value -is 45
    -# and the max value is 46, the range will be adjusted to at least a 5 -degree
    -# range e.g. 43-48. These are the values that are then submitted for -phrasing
    -# such as:
    -# HIGHS IN THE MID 40S
    -dict = TextRules.TextRules.minimum_range_nlValue_dict(self, tree, node)
    -dict["MaxT"] = 5
    -dict["MinT"] = 5
    -dict["WindChill"] = 10
    -dict["HeatIndex"] = 10
    -dict["Wind"] = {
    -(0, 5) : 0,
    -(5,100) : 10,
    -'default': 10,
    -}
    -return dict
    -
    -
    -def maximum_range_bias_nlValue_dict(self, tree, node):
    -
    # "Min", "Average", "Max"
    -# Should the maximum_range be taken from the "min" "average" or "max"
    -# value of the current range?
    -return {
    -# changed Max to Average
    -"MaxT": "Min",
    -"MinT": "Min",
    -"Wind": "Average",
    -"otherwise": "Average",
    -}
    -
    -
    -def minimum_range_bias_nlValue_dict(self, tree, node):
    -
    # "Min", "Average", "Max"
    -# Should the minimum_range be taken from the "min" "average" or "max"
    -# value of the current range?
    -return {
    -# changed Max to Average
    -"MaxT": "Min",
    -"MinT": "Min",
    -"Wind": "Average",
    -"otherwise": "Average",
    -}
    -
    -
    -
    -
    -
    Jay:  -Every time I deal -with this, my head spins. There's a lot going on behind the scenes with -the rounding and the ranges.
    -
    -It's been my experience that the vast majority of unexpected words -comes when values are rounded to some value other than the unit value, -e.g., 5 mph instead of 1 mph. The other key points are that rounding -and ranges are applied essentially any time the data are needed. This -means there's a lot of rounding and range application happening in the -background.
    -
    -There is a hierarchy of methods for determining ranges. Each range type -as two configuration methods: an nlValue_dict and a bias_nlValue_dict. -In the order they are applied, these are: range_nlValue_dict and -range_bias_nlValue_dict minimum_range_nlValue_dict and -minimum_range_bias_nlValue_dict maximum_range_nlValue_dict and -maximum_range_bias_nlValue_dict
    -
    -The range logic is used to force single value phrasing with the word -"around". For example, if you set "Wind" to 5 in the -range_nlValue_dict, then any wind range in the grids of less than 5 mph -will generate a phrase like "AROUND 10 MPH". The bias value determines -what part of the range is used for the value. If the range logic -"fires", then neither the minimum_range nor the maximum_range logic -"fires".
    -
    -If the range logic does not "fire", then both the minimum_range and -maximum range logic, in that order, runs. The minimum range ensures the -range is a least the value in the nlValue_dict while the maximum range -ensures the range is no more than the value in the nlValue_dict. The -bias_nlValue_dict entries set which part of the existing range is used -to create the new range. It's worth re-emphasizing that the minumum -range and maximum range logic only applies if the range logic does not -"fire". The only way to always guarantee a minimum range and a maximum -range is to set the range_nlValue_dict entry to a value that will never -trigger the range logic.
    -
    -Let's use the winds you listed below and walk through the logic. The -minimum wind is 12 and the maximum wind is 15. Before the range logic -is applied, the values are rounded. So, this gives a range of 10 to 15 -mph. I think the range_nlValue_dict entry for "Wind" defaults to 0. -Since our range is not less than 0 mph, the range logic does not "fire".
    -
    -The minimum range logic runs. Since the minimum range for "Wind" is 5 -mph, nothing further happens because the existing range is not less
    -than 5 mph.
    -
    -The maximum range logic runs. Since the maximum range is 10 mph, -nothing further happens because the existing range is not more that 10 -mph.
    -
    -For the sake of argument, let's say you have a wind range from the -grids of 12 to 28 mph. Rounding is applied and the range becomes 10 to -30 mph. This is more than the range_nlValue_dict threshold, so the -range logic does not "fire", allowing the minimum and maximum range -logic to run. The range is also more the the mimimum_range_nlValue_dict -threshold, so the minimum range logic does not "fire". At this point, I -have to admit I don't know which entry in the -maximum_range_nlValue_dict applies in this case, which is why I made -the range 20. Let's say it's 15 mph. Anyway, the existing range exceeds -the maximum range. Now, here's where the bias comes into play. If the -bias were "Min", the new range would be 10 to 25 mph. The minimum of -the existing range becomes the minimum of the new range and the desired -spread is added to get the new max. If the bias were "Max", the new -range would be 15 to 30 mph. The max of the existing range becomes the -max of the new range and the desired spread is subtracted to get the -new min. Note: the desired range value was rounded before being used to -create the new range. Since it was already a multiple of 5, nothing -unexpected happened. If the bias were "Average", the new range becomes -15 to 30 mph. Very interesting. The average of the existing range -becomes the center point of the new range. Then half the desired range -value is subtracted from/added to that average to get the new min and -max (12.5 and 27.5). Finally, the new min and max are rounded. In this -case, the rounding gave us values we might not have expected.
    -
    -Your question of what would happen if the average of the wind range was -17 mph has no meaning unless the corresponding bias is "Average".
    -
    -My guess for what happened to you originally is as follows. The minimum -and maximum values passed to the formatter were in the range 12.5 mph -<= Wind < 17.5 mph. Keep in mind that what the GFE displays for a -value may not be exactly what the value is in the database. Plus, as -data come into the formatters from the grids, they are both converted -and rounded. I think your formatter got a wind range tuple of (15, 15). -With the range_bias value 0, the range logic doesn't fire because 0 is -not less than 0. Then we get to the minimum range logic. You originally -had the value as 10 mph and the bias as minimum. The existing mimimum -was 15, add 10 to get 25, and you end up with text of 15 to 25 mph, -even though that's not in the grids. However, the formatter did exactly -what it was told to do, even if it wasn't what you expected/wanted.
    -
    -If you want to look at the range code yourself, look at the -applyRangeValues and applyBias methods in TextUtils.
    -
    -

    Using Lat/Lon Edit Areas in a Product

    -Question: I would like to set up a -varDict to allow the user to enter in a given latitude and longitude -and have a given product run off that lat/lon pair as the default edit -area.
    -
    -Answer:
    -
    -
    1. Set up the VariableList so the suer can enter lat/lon values.  For
    example:

    VariableList = [
    (("forecast point latitude", "lat"), 20.0, "alphaNumeric"),
    (("forecast point longitude", "lon"), -160.0, "alphaNumeric"),
    ]

    2. You can set the Definition["defaultEditAreas"] = [] since it will not
    be used at all.

    3. In your formatter "generateForecast" method, replace this:

    self._areaList = self.getAreaList(argDict)

    with something this:

    self._areaList = self._getLatLonAreaList(argDict)

    4. Finally, include the following method:

    def _getLatLonAreaList(self, argDict):

    area = self.createLatLonArea(float(self._lat), float(self._lon), 10)

    # OPTIONAL SET UP IF YOU WANT THIS AREA SAMPLED FOR HAZARDS
    # Save to server
    self.saveEditAreas([area])
    # Create Hazards Table for this area
    hazards = HazardsTable.HazardsTable(
    argDict["ifpClient"], [[area.id().name()]], "FWS",
    self.filterMethod, argDict["databaseID"],
    self._fullStationID)
    argDict["hazards"] = hazards
    # Remove from server
    self.deleteEditAreas([area])

    return [(area, "areaName")]
    -            
    -
    -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextReferenceInfrastructureReference.html b/cave/com.raytheon.viz.gfe/help/TextReferenceInfrastructureReference.html deleted file mode 100644 index e62c22df12..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextReferenceInfrastructureReference.html +++ /dev/null @@ -1,5915 +0,0 @@ - - - - - - Text Products Reference - - - -
    -

    Infrastructure Reference

    -
    -

       Arguments -in -the Standard File
    -   Naming Conventions
    -   Sample Analysis
    -        Statistics By Time Range
    -        Arguments to SampleAnalysis methods -
    -       Checking for Edit Areas
    -        Global Thresholds and Variables
    -        Scalar Analysis methods
    -        Vector Analysis methods
    -        DiscreteAnalysis -methods
    -        Weather -Analysis methods
    -           Algorithm for rankedWx and dominantWx
    -   Text Rules Libraries for Narrative -Products
    -        Setting Day and Night Times -
    -        Analysis-Driven Phrases
    -        Arguments to Narrative methods
    -        Checking -for Edit Areas
    -        Global -Thresholds and Variables
    -        Narrative -Phrases
    -           Scalar Weather Element Phrases
    -           Vector-Related Phrases (Wind and WindGust) -
    -           Sea Breeze Identification
    -           Weather Phrases
    -           Weather Subkey Attributes -"Primary" and "Mention"
    -           Customizing Weather Phrases
    -           Pop/Wx Consistency
    -           Combined Element Phrases
    -           Marine Phrases
    -         Algorithm for WaveHeight -and WindWaveHgt Reporting
    -           Fire Weather Phrases
    -           Discrete Phrases (Headlines)
    -        Narrative Strategies
    -           Non-Linear Thresholds -
    -           DataValue -Extraction from the Grids
    -            Unit Conversion
    -            Standard and -Non-Standard Rounding
    -            Range  Adjustment -
    -           Null Values
    -           Local -Effects
    -            Local Effects and -Compound Phrases
    -            Consolidation -Rules for Local Effects
    -            Local Effect Examples
    -              Null Values and Local -Effects
    -             "Except" vs. "Otherwise" -wording
    -             More -Local Effect Area Features
    -             Local -Effects for Snow Accumulation and Total Snow Accumulation -- Using a -Method for Checking the Local Effect Threshold
    -             Local -Effects for the Combined SkyPopWx Phrase
    -           Period Combining
    -           Phrase Consolidation -
    -           Phrase Ordering
    -           "Until" Phrasing
    -           Visibility
    -           Weather Phrasing
    -   Appendix A:  Local Effects -Design
    -

    -
    -

    Arguments in -the Standard Product File

    -  -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    ARGUMENTACCESSING INFORMATION
    argDict Dictionary containing system information about the -product being created. In most cases, you will not need to access -information within argDict, but it must be passed for internal system -use.
    fcstThe text string representing the product. It will -be in a partially completed state as it is passed to each method in -turn. Be sure to "return fcst" at the end of a method that -is passed the fcst.
    editAreaContains the name and polygon points that define an edit -area. 
    -      editAreaName = editArea.id().name()
    areaLabelThe label given to the current edit area (or current -combination of areas).   This label is defined via the -"defaultEditAreas" entries OR within the Combinations file entries.
    timeRangeTime Range over which statistics are being generated.  -This is always in GMT. 
    -    timeRange.startTime() 
    -    timeRange.startTime().day(),   -timeRange.startTime().month(),  timeRange.startTime().hour()  -
    -    timeRange.endTime()
    -
    -

    Naming conventions

    -Throughout the infrastructure, thresholds, variables, and methods are -named with suffixes that indicate the return value -expected.   -For example,  the method, pop_lower_threshold,returns -a weather element value for PoP.   The table below lists the -suffixes and their meaning (in alphabetical order):

    -  -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    METHOD SUFFIXESMETHOD RETURN VALUE
    _dictPython dictionary
    _differencea difference in weather values e.g. vector_mag_differenceis -used to determine if wind magnitudes are significantly different
    _elementweather element name e.g. "WindWaveHgt" returned as the  - seasWindWave_element
    _flag0 or 1
    _listPython list
    _percentagenumber between 0 and 100
    _phrasetext string phrase
    _phrase_connectortext string for connecting phrases e.g. " then " as in -"Mostly cloudy in the morning then clearing."
    _thresholdweather element value
    _weightnumber between 0 and 1
    _valueStrstring representing a weather element value
    _valueListlist of thresholds corresponding to value strings for weather -element values
    _value_connectortext string for connecting values e.g. " to " as in "25 to 35 -mph"
    _nlValueThis suffix indicates that the method can return either a -single value, a method, OR a dictionary of (lowValue, highValue) : -returnValue  entries.  See the section on "Non-linear -Thresholds" for more information.
    -
    -

    Sample Analysis

    -The Python methods described in this section can be found in the -SampleAnalysis module which appears in the Utilities window of the -Define Text Products Dialog.  Each method is listed with the value -it returns.  All methods return "None" if there is no data -available. -

    Statistics By Time Range

    - Methods that are starred (**) below  (e.g. **avg) can be -listed in the analysisList with an optional argument list  -indicating how the time range is to be divided in reporting -statistics.  A typical analysisList entry might look like this: -

           "analysisList" : [
    -                                   -("MaxT", self.avg),
    -                                    -]

    -

    The result of the analysis will be a simple average value for the -entire time range being examined.   Using the optional -"divide" argument, the analysisList might look like this:

    -

           "analysisList" : [
    -                                   -("MaxT", self.avg, [6]),
    -                                    -]

    -

    In this instance, the time range will be divided into 6-hour -sub-ranges and an average value for MaxT will be reported for each -sub-range. This information will be reported as a list of tuples. For -example, a 12-hour time range would produce:

    -

                    -[ (avg1, subRange1), (avg2, subRange2)]

    -

    The time range is divided from the endtime backward so that "odd" -sub-ranges occur at the beginning of the time range.  For example, -suppose we are dividing an 8 hour time range into 6-hour -sub-ranges.  This will result in a 2-hour sub-range followed by a -6-hour sub-range.

    -

    The Text Rules methods are built to handle varying types of Sample -Analyis return values.

    -

    If the time-divide argument is zero,  the statistics will be -reported "byTimeRange" returning a list of (statistics, subRange) -tuples,  one for each grid overlapping timeRange being examined.

    -

    In summary, the following table shows analysisList methods and their -corresponding results:

    -

    - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    ANALYSIS LIST SPECIFICATIONRESULT
    ("MinT", self.avg)Average scalar value over the entire time range
    ("MinT", self.avg, [0]) List of (avg, subRange) tuples, one for each grid overlapping -timeRange
    ("MinT", self.avg, [3]) TimeRange is divided into 3-hour sub-ranges and -returns: 
    - List of (avg, subRange) tuples, one for each sub-range
    ("MinT", self.avg, [6]) TimeRange is split into 6-hour sub-ranges and returns: 
    - List of (avg, subRange) tuples, one for each sub-range
    -
    -

    NOTE that if there is no data for ANY ONE  of the -subRanges,  None is returned for the entire time range.

    -

    Arguments to Sample -Analysis Methods

    -The SampleAnalysis thresholds and variables take several arguments -which contain useful information allowing you to return values based on -product type, edit area, weather element or time range.  The -following table lists the arguments and shows how to access the -information they contain.

    -  -

    - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    ARGUMENTACCESSING INFORMATION
    parmHistoWeather Element:    elementName = -parmHisto.parmID().parmName() 
    -Edit -Area:                   -editAreaName = parmHisto.area().id().name()
    timeRangeTime Range over which statistics are being generated.  -This is always in GMT. 
    -    timeRange.startTime() 
    -    timeRange.startTime().day(),   -timeRange.startTime().month(),  timeRange.startTime().hour()  -
    -    timeRange.endTime()
    componentNameCurrent Text Product component being analyzed
    -

    -
    -

    Checking for Edit Areas

    -Sometimes you might want to check to see if you are processing a -particular edit area or set of edit areas.  For example, you might -want to base the analysisMethod on the current Edit Area.  To do -this,  set up an analysis method in the "analysisList" as follows:
    -
    -           ("Wind", -self._wind_analysisMethod),
    -
    -Then include this analysis method in your override file:
    -
    -     def _wind_analysisMethod(self, parmHisto, -timeRange, componentName):
    -            -ChannelZone = ["PHZ130"]
    -            -argDict = self._argDict
    -            -argDict["editArea"] = (parmHisto.area(), "")
    -            if -self.currentAreaContains(argDict, ChannelZone):
    -                 -return self.vectorModeratedMax(parmHisto, timeRange, componentName)
    -            else:
    -              -   return self.vectorModeratedMinMax(parmHisto, timeRange, -componentName)      
    -

    GLOBAL THRESHOLDS AND VARIABLES -

    -

    There are four categories of analysis methods: absolute, cumulative, -standard deviation (stdDev) and moderated (percentage).  The -absolute and cumulative categories do not filter the sampled data. All -statistics are based on the entire  sampled data set.  The -standard deviation (stdDev) and moderated methods do filter the sampled -data set, however.  The stdDev methods ignore values that lie -outside a configurable number of standard deviations from the -mean.  Low and high thresholds are defined independently. The -moderated methods work exactly the same way as stdDev methods, except -that they filter data based on a ranked percentage.  Values are -ranked, low to high, and outliers are excluded from the data set (e.g., -the upper 10%).

    -

    Most analysis methods screen grids for temporal coverage of the -given time range before including their data values in the -analysis.    The exceptions to this are the methods that -work with accumulative elements. The following table describes the -temporal coverage thresholds you can override for this screening -process.  To override a threshold, simply copy the method from the -SampleAnalysis utility into your _Overrides file and change desired -values.  Most methods weight grids temporally as well. Each grid -will contribute -proportional to its time duration for the sampled period.
    -

    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    temporalCoverage_percentageThis is the -percentage -of the given time range COVERED by the grid in order to include it in -the analysis.  This is the value used IF a value is not found in -the -temporalCoverage_dict (see below) 
    -NOTE: The temporalCoverage_hours (see below) must also be met by the -grid for it to be included.
    -In addition, if a grid is completely contained -within the time range, it will automatically be included. 
    -Default is 20 percent.
    temporalCoverage_dictTemporal Coverage percentage specified by Weather Element.
    temporalCoverage_hoursThis is the -hours of the given time range COVERED by the grid in order to include -it in -the analysis.  This is the value used IF a value is not found in -the -temporalCoverage_hours_dict (see below) 
    -NOTE: The temporalCoverage_percentage (see above) must also be met by -the grid for it to be included.
    -In addition, if a grid is completely contained -within the time range, it will automatically be included. 
    -Default is 0 percent.
    temporalCoverage_hours_dictTemporal Coverage hours -specified by Weather Element.
    moderatedDefaultThe value used by all "moderated" methods by default if the -weather element does not appear in the moderated_dict. The -moderated_dict value always overrides this default value.  This -value is used for the min and max values.
    moderated_dictReturns a dictionary that defines the min and max filter -values for all "moderated" methods. For each weather element, a tuple -defines the minimum threshold and the maximum threshold -respectively.  All moderated methods rank all sampled values from -lowest to highest and then exclude values that are below the minimum -threshold and above the maximum threshold.
    stdDevDefaultThe value used by all "stdDev" methods by default if the -weather element does not appear in the stdDev_dict. The stdDev_dict -value always overrides this default value.  This value is used for -the min and max values.
    stdDev_dictReturns a dictionary that defines the low and high limit at -which outliers will be removed when calculating stdDev stats. These -tuples represent the (low, high) number of standard 
    -deviations.  Any values falling outside this range will not be -included in the calculated statistic. 
    bin_dictReturns a dictionary that defines the bin values for -"binnedPercent". Bin tuples represent (low, high) values for each bin. -Bin values are inclusive.
    maxMode_increment_dictReturns the increment to be used -for "maxMode" when "binning" values before computing mode.  For -example, the default "maxMode_increment" for "PoP" is 10. 
    -
    -

    Here is how the standard deviation SampleAnalysis methods work:
    -1) compute the standard deviation of all grid values
    -2) the stdDev_dict contains a -threshold, i.e., number of sigmas for each the min and the max
    -3) the routine calculates the min and max from the std deviation and -the sigmas
    -4) in some cases, the result may fall outside of the actual data -range.  In this case, the returned values will be the min or max -of -the actual data points.

    -

    Here is how the moderated SampleAnalysis methods work:
    -1) compute the "histogram" of the data values
    -2) the moderated_dict gives a -percentage for min, and a percentage for max
    -3) we return values that are % percent from the min and % percent from -the max, not numerically, but from a sorted list.  Thus if the -histogram is
    -4,4,5,6,7,8,9,10,15,19, and your percent is 20% for the min and 10% for -the max, you will pick out the 20% of the number and the 90% of the -number in the
    -sequence.  Since there are exactly 10 samples in my exmaple, the -20% point will be 5, and the 90% point will be 15.  It isn't -numerical.

    -

    Here is some further explanation (from Bill Schneider) on the -moderated methods:

    -

    The moderated methods look at all the points in the grid, then they -throw away highest (for max) or lowest (for min) percentage you have -specified in the moderated dictionary. Then it uses the max or min of -the remaining gridpoints.

    -

    So for example if you use moderatedMaximum for temperature and have -defined the moderated percentages fore temperature as (10,15) in the -dictionary, the method will take the grid points that have the highest -values and throw away the top 15 percent of them. The remaining maximum -value will be reported. For moderatedMinimum, the method will take the -grid points that have the lowest values and throw away 15 % of the -lowest values before reporting the minimum.

    -

    SCALAR WEATHER ELEMENTS
    -

    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    METHOD RETURN VALUE:
    **avg average value
    **minMax (min, max)
    **minimumminimum value
    **maximummaximum value
    **median median value for given time range
    **medianRange 2-value range around the -median value for given time range
    **mode mode value for given time range
    **modeRange 2-value range around the mode -value for given time range
    firstAvg average value for first grid only
    firstMinMaxminmax value for the first grid only
    minMaxAvg  (min, max, avg)
    minMaxSum  ( min, max, sum)
    - Time-weighted min/max/ave of  the -multiple grids overlapping the time range. This is used for -rate-dependent weather elements such as QPF.
    accumMinMax (min, max,  sum)
    - Returns the min, max, and sum for -rate-dependent weather elements such as QPF.
    accumSumsum
    - Returns the sum for rate-dependent weather -elements such as QPF.
    **maxAvg average value.
    - Calculates the average value  in each -of the overlapping grids, and then returns the maximum of the averages.
    **maxModeCalculates the mode value in -each of the overlapping grids, and thern returns the maximum of the -modes.  Before calculating the mode, the values are rounded to the -nearest increment as given in the maxMode_increment_dict
    **stdDevMaxAvgaverage value. 
    -Calculates the average value after filtering by standard deviation and -then returns the maximum of the averages.
    **moderatedMaxAvgaverage value. 
    -Calculates the average value after filtering by moderated (percentage) -and then returns the maximum of the averages.
    **stdDevAvgaverage value after filtering based on stdDev
    stdDevFirstAvgaverage value for the first grid only
    **stdDevMinMax (min, max)
    - min, max set at standard deviations around -the mean.
    - The stdDev_dict, defines the number -of standard deviations to compute min, max around the mean. Default is -1.0 standard deviations. Both min and max can be defined independently -per weather element.
    **stdDevMinsame as stdDevMinMax except just returns the minimum value
    **stdDevMaxsame as stdDevMinMax except just returns the maximum value
    stdDevFirstMinMax(min,max) 
    - stdDevMinMax (see above) for the first grid -only
    **moderatedAvgReturns the average value after filtering based on percentage -defined in moderated_dict
    **moderatedMinMax(min, max) 
    -Returns the min and max values after filtering based on the percentage -defined in moderated_dict.
    **moderatedMinsame as moderatedMinMax except just returns the minimum
    **moderatedMaxsame as moderatedMinMax except just returns the maximum
    moderatedFirstAvgsame as moderatedAvg except only the first grid is sampled
    moderatedFirstMinMaxsame as moderatedMinMax except only the first grid is sampled.
    hourlyTemp return hourly T values in tuples;  returns a list of -tuples:    (avgValue, startHour)
    binnedPercentreturn a list of tuples representing bins and corresponding -percentages of values in each bin. The bins are defined in the bins_dict.NOTE: When using this method, make sure you have grids -covering the entire time range of interest so that the percentages -which -are time-weighted will add up to 100.
    -
    -
    -  -

    VECTOR WEATHER ELEMENTS

    -

    Note: all vector directions are returned as numeric.   You -can set the vectorDirection_algorithm to -be "Average" or "MostFrequent".  It will then apply to all vector -analysis methods.  -

    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    **vectorAvg (mag, dir) 
    **vectorMinMax((minMag, maxMag), dir) 
    **vectorMin (minMag, dir)
    **vectorMax(maxMag, dir)
    vectorMagMinMax (minMag, maxMag) 
    vectorMagMinminMag 
    vectorMagMaxmaxMag 
    **vectorMode (mag, dir)
    **vectorMedian (mag, dir) 
    **vectorModeRange ((minMag, maxMag), dir) 
    **vectorMedianRange((minMag, maxMag), dir) 
    **vectorStdDevAvg(mag, dir) 
    **vectorStdDevMinMax((minMag, maxMag), dir) 
    **vectorStdDevMin (minMag, dir)
    **vectorStdDevMax (maxMag, dir)
    **vectorModeratedAvg(mag, dir) 
    **vectorModeratedMinMax((minMag, maxMag), dir) 
    **vectorModeratedMin (minMag, dir)
    **vectorModeratedMax (maxMag, dir)
    vectorRange(mag1, mag2, dir1, dir2) 
    -returns mag and dir for two specified periods
    vectorBinnedPercentreturn a list of tuples representing bins and corresponding -percentages of magnitude values in each bin. The bins are defined in -the bins_dict.NOTE: When using this -method, make sure you have grids -covering the entire time range of interest so that the percentages -which -are time-weighted will add up to 100.
    -
    -

    DISCRETE ELEMENTS
    -

    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    METHODRETURN VALUETHRESHOLDS AND VARIABLES 
    -(To override, find in SampleAnalysis and copy to Overrides file)
    discreteTimeRangesByKey List of (discreteKey, timeRange) pairs ordered in ascending -order by timeRange and then by priority of discrete keys as defined in -the serverConfig files.discreteKey_coverage_percentage-- required  coverage by discete key
    -
    discreteTimeRangesByKey_withAuxSame as above, but including the -auxiliary field
    -

    -
    **dominantDiscreteValueList of most common discrete keys ranked from most frequent -to least frequent.  discreteKey_coverage_percentage--  required coverage by discete key
    - dominantDiscreteKeys_threshold-- maximum number of discrete keys to be returned from -dominantDiscreteValue
    -
    cleanOutEmptyValues -- whether or not to leave <None> -values out of list of keys
    -
    **dominantDiscreteValue_withAuxSame as above, but including the -auxiliary field
    -
    **rankedDiscreteValueList of most common (discrete -keys, rank) pairs listed from most frequent -to least frequent.  discreteKey_coverage_percentage--  required coverage by discete key
    - dominantDiscreteKeys_threshold-- maximum number of discrete keys to be returned from -dominantDiscreteValue
    -
    cleanOutEmptyValues -- whether or not to leave <None> -values out of list of keys (default 0)
    -
    **rankedDiscreteValue_withAuxSame as above, but including the -auxiliary field
    -

    -
    discrete_percentageslist of (discrete key, percentage) pairs.  Time-weighted -/ areal-weighted percentage is calculated for all overlapping gridsNone
    discrete_percentages_withAuxSame as above, but including the -auxiliary field
    -
    -
    -
    -  -

    WX  ELEMENT  
    -

    -
    - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    METHODRETURN VALUETHRESHOLDS 
    -AND VARIABLES 
    -(To override, find in SampleAnalysis and copy to Overrides file)
    **rankedWx
    -
    list of (subkey, rank) pairs -found for a given time range.  rank is based on temporal and areal -coverage of the subkey in the time range
    -
    coverage_weights_dict - weights per coverage term
    - wxkey_coverage_percentage-- areal coverage over the time period by weather key -
    - attribute_coverage_percentage-- areal coverage over the time period for attributes
    - dominantKeys_threshold-- maximum number of weather keys to be returned from -dominantWx
    -
    aggregateCov_algorithm - can use highest ranked coverage or a weighted scheme
    -
    cleanOutEmptyValues -- whether or not to leave <NoWx> -values out of list of keys (default 0)
    -
    **dominantWx list of subkeys found for the given time rangesame as rankedWx
    -
    -

    Algorithm for rankedWx and dominantWx

    -The rankedWx and dominantWx algorithms use configurable thresholds and -weights to give you control over the weather that you choose to submit -to Text Rules for phrase generation.  The only difference between -rankedWx and dominantWx is that the rankedWx method returns tuples of -(subkey, rank) pairs while the dominantWx method simply returns the -list of subkeys.  The algorithm is as follows: -
      -
    • Throw out any grids that do not cover the temporalCoverage_percentage of the given -time range.
    • -
    • For each weather type in the grids, determine:
    • -
        -
      • an aggregate subkey
      • -
          -
        • coverage -- aggregate coverage algorithm can be chosen by -overriding "aggregateCov_algorithm" (SampleAnalysis). There are 2 -choices:
        • -
            -
          • "getAggregateCov" chooses the highest ranked coverage -(default)
            -
          • -
          • "getWeightedAggregateCov" favors stronger coverage -terms.
            -
          • -
          -
        • intensity -- highest ranking OR if ranks are close, dominant
        • -
        • visibility -- lowest visibility
        • -
        • attributes -- aggregate of all occurrences
        • -
        -
      • a rank i.e. the percentage of areal coverage over the time -period.  This raw rank is then weighted by the coverage term.
        -
      • -
      -
    • Throw out any weather type that does not meet the wxkey_coverage_percentage except:
    • -
        -
      • If a weather subkey is designated "Primary" it will be the -aggregate subkey and will automatically be the highest ranked.
      • -
      -
        -
      • If a weather subkey is designated as "Mention", it will be the -aggregate subkey and will not be eliminated.
        -
      • -
      -
    • Return the dominantKeys threshold -number of weather subkeys sorted by rank, wxType, and coverage
      -
    • -
    • For rankedWx, the computed rank is returned with each -subkey  -       
      -
    • -
    - We use the rank when -combining subkeys and in weather phrasing and wording as follows:
    -
    -
        def -rankFuzzFactor(self):
    -        # Used when combining -weather subkeys.
    -        # If the difference between -the subkey rankings is
    -        # less than this amount, the -subkeys will be combined and
    -        # the dominant coverage or -intensity will be chosen
    -        #
    -        # Also used in weather -wording to determine if
    -        # subkeys have significantly -different ranks.
    -        # If so, then wording such -as "possibly mixed with" or
    -        # "with pockets of" could be -used.
    -        #
    -        return 10  
    -

    -
    -
    -For more information, see the section on Weather -Phrasing.
    -

    Text -Rules Libraries for Simple Table Products

    -(To be supplied) -

    Text -Rules Libraries for Smart Tabular Products

    -(To be supplied) -

    Text Rules Libraries for Narrative Products

    -

    Narrative -Tree and Phrase Builder Infrastructure

    -(to be supplied)
    -  -

    The Text Rules and all of it's inherited libraries can be found in -the Utilities window of the Define Text Products Dialog.   -This section describes the threshold, variable and phrase methods in -the -TextRules libraries to support Narrative Products.  This -information will help you customize your narrative product by looking -up -the phrases that are being generated in the "phraseList" of your -product -components.  For each weather element (or combinations of weather -elements), we list Example Phrases, corresponding SampleAnalysis -methods, and Thresholds and variables you can set to customize the -phrase.

    -

    Setting DAY and NIGHT -times

    -Most formatters work on the assumption that "daytime" is from 6 am to 6 -pm local time and "nighttime" is 6 pm to 6 am the next day local -time.  If you want to change that assumption, you can override the -following variables simply by including them in your local file: -

                -def DAY(self):
    -                -return 6
    -            def -NIGHT(self):
    -                -return 18

    -

    Analysis-Driven Phrases

    -Most phrase methods accept results from any SampleAnalysis method for -the appropriate data type (Scalar, Vector, Wx), and will report with an -appropriate temporal resolution.  Some phrase methods are -expecting -certain statistics.  In the tables below, if the statistics method -is starred, any temporal resolution is accepted  -- otherwise only -what's shown. -

    If a threshold or variable appears in bold, -then -it MUST be set in order for the phrase to appear.

    -

    Arguments to Narrative -Methods

    -The TextRules thresholds, variables, and methods take arguments which -contain useful information allowing you to return values based on -product type, edit area, weather element or time range.  The -following table lists the arguments and shows how to access the -information they contain.

    -  -

    - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    ARGUMENTDESCRIPTIONACCESSING INFORMATION
    treeNarrative tree contains the structure and information for the -entire narrative producttree.stats.get(elementName, timeRange, areaLabel, statLabel, -mergeMethod) -- allows you to get statistics  e.g.  -

    stats = tree.stats.get("Wind", timeRange, "CO_Boulder", -"vectorMinMax", "List")

    -

    productTimeRange = tree.getTimeRange()
    -productStartTime = productTimeRange.startTime()

    -
    nodeThe node of the tree at which we are currently executing -methods. The current time range: 
    -           -nodeTimeRange = node.getTimeRange()
    -           -nodeStartTime = nodeTimeRange.startTime() -

    The current edit area: 
    -           -node.getAreaLabel() 

    -

    The current product component,  name, definition, or -position: 
    -           component -= node.getComponent() 
    -           -componentName = node.getComponentName() 
    -           -componentDef = component.get("definition")
    -           -componentPosition = node.getComponentPosition()
    -                       -# tells it's position (1,2,3...) in the Narrative Definition

    -

    To see if the current edit area (which could be a Combination) -contains any of a list of edit areas: 
    -         inlandWaters = -["TampaBayWaters"] 
    -         if -self.currentAreaContains(tree, inlandWaters): 
    -               -#  do special case for TampaBayWaters 

    -

    The current phrase: 
    -         -node.getAncestor("name") 
    -Note: This will only work for a node within a "phrase" method. 

    -

    The "getAncestor" method finds the first ancestor with the -given attribute and returns the attribute's value.

    -
    elementNameWeather element name -- useful information for returning -threshold or variable values based on weather element
    -
    -
    -

    Checking for Edit Areas

    -Sometimes you might want to check to see if you are processing a -particular edit area or set of edit areas.  For example, if you -running a CWF product and setting a threshold for WindWaveHgt, you -might -want to know if you processing an "inland waters area" or -not.   There is an EditAreaUtils library method to help you -do -this which is illustrated through the following example: -

                                    -inlandWatersAreas = ["TampaBayWaters", "InlandWaters"]
    -                                -if self.currentAreaContains(tree, inlandWatersAreas):
    -                                         -# Return a value for the inland waters areas
    -                                -else:
    -                                        -# Return a value for the  other areas

    -

    GLOBAL THRESHOLDS AND VARIABLES

    -To override these thresholds and variables, find them in the designated -library module and copy them into the Overrides product file.
    -NOTE:  There are many more thresholds and variables in the -ConfigVariables module which, to avoid redundancy, are not listed -here.  Please refer to that module directly to learn of the many -ways you can customize the formatters.
    -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    THRESHOLD OR VARIABLEDESCRIPTIONLIBRARY
    phrase_descriptor_dictDescriptor words for weather elements in phrases e.g. "North winds -5-10 mph."ConfigVariables
    phrase_connector_dictConnecting words in phrases e.g. "North winds 5-10 mph becoming20-25 -mph.ConfigVariables
    value_connector_dictConnectors for ranges of values e.g. "North winds 5 to -10 mph."ConfigVariables
    units_descriptor_dictWords for units used in reporting data values e.g. "North -winds 5-10 knots."ConfigVariables
    timePeriod_descriptor_listPhrases for sub-ranges of a time period e.g. "Partly cloudy in -the afternoon."TimeDescriptor
    scalar_difference_nlValue_dictIf the difference between scalar -values for 2 sub-periods is greater than or equal to this value, the -different values will be noted in the phrase.
    -
    ConfigVariables
    -
    vector_mag_difference_nlValue_dict
    -vector_dir_difference_nlValue_dict
    -
    If the difference between vector -values for 2 sub-periods is greater -than or equal to these values, the different values will be noted in -the -phrase.ConfigVariables
    -
    -
    -

    NARRATIVE PHRASES

    -The following tables list the various phrases definitions found in Text -Rules library modules and used by the standard text narrative text -products. -

    SCALAR WEATHER ELEMENT PHRASES --- ScalarPhrases module

    -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    ELEMENTTEXT RULES 
    -METHOD
    EXAMPLE PHRASESSAMPLE 
    -ANALYSIS
    THRESHOLDS AND VARIABLES 
    -(To override, find in ScalarPhrases or ConfigVariables and copy to -Overrides file)
    ADD'L 
    -INFO
    HazardsmakeHeadlinesPhrases.WINTER STORM WARNING IN EFFECT
    -
    No sampling by SampleAnalysis
    -
     allowedHazardsFound in DiscretePhrases module
    Skysky_phrase"Partly cloudy in the 
    -morning, then clearing."
    Sky: 
    -**Scalar  Stats 
    -**binnedPercent  -

    PoP: (optional) 
    -**Scalar Stats 

    -
    pop_sky_lower_threshold
    - clearing_threshold
    - sky_valueList
    - sky_value
    - areal_sky_flag
    - areal_sky_value
    -areal_skyPercentage
    -areal_skyRelatedWx
    -
    similarSkyWords_list -
    - reportIncreasingDecreasingSky_flag -
    - reportClearSkyForExtendedPeriod_flag

    -
    PoPpopMax_phrase"Chance of 
    -snow 40 percent."
    PoP: **maxAvgphrase_descriptor_dict for -"PoP" 
    -May use this method in the phrase_descriptor_dict: 
    -  areal_or_chance_pop_descriptor -
    - units_descriptor_dict for -"percent" 
    - pop_lower_threshold
    - pop_upper_threshold
    - wxQualifiedPoP_flag
    -matchToWxInfo_dict
    -

    -
    MaxT 
    -MinT
    reportTrends"Warmer." 
    -"Much colder."
    MaxT, MinT 
    -avg, minMax, 
    -stdDevMinMax
    reportTrends_valueStr to set up thresholds for trend phrases
    - Phrases are based on 24 hour prior -statistics

    -
    MaxT 
    -MinT 
    -HeatIndex 
    -WindChill
    extremeTemps_phrase"Very hot." 
    -"Hot." 
    -"Bitterly cold."
    MaxT, MinT, HeatIndex, WindChill: **ScalarStatsheatIndex_threshold
    - windChill_threshold
    This phrase may be used in place of "reportTrends"
    MinTlows_phrase"Lows in the lower 40s to lower 50s."MinT: 
    -minmax  stdDevMinMax
    phrase_descriptor_dict for -"lows" 
    - minimum_range_nlValue_dict
    - maximum_range_nlValue_dict
    - range_nlValue_dict
    - tempPhrase_exceptions
    - tempPhrase_boundary_dict
    Only generated if Night time
    MaxThighs_phrase"Highs in the upper 70s to lower 80s."MaxT: 
    -minMax  stdDevMinMax
    phrase_descriptor_dict for -"highs" 
    - minimum_range_nlValue_dict
    - maximum_range_nlValue_dict
    - range_nlValue_dict
    - tempPhrase_exceptions
    - tempPhrase_boundary_dict
    Only generated if Day time
    MinTlows_range_phrase"Lows 45 to 50."MinT: 
    -minMax  stdDevMinMax
    phrase_descriptor_dict for "lows"
    - minimum_range_nlValue_dict
    - maximum_range_nlValue_dict
    - range_nlValue_dict
    - value_connector_dict
    Only generated if Night time
    MaxThighs_ range_phrase"Highs 70 to 75."MaxT: 
    -minmax  stdDevMinMax
    phrase_descriptor_dict for "highs"
    - minimum_range_nlValue_dict
    - maximum_range_nlValue_dict
    - range_nlValue_dict 
    - value_connector_dict
    Only generated if Day time
    MinTextended_lows 
    -_phrase
    "Lows in the 40s." 
    -"Lows 55 to 65."
    MinT: 
    -firstAvg
    extended _temp_rangeC11 only
    MaxTextended_highs 
    -_phrase
    "Highs in the 70s." 
    -"Highs 55 to 65."
    MaxT: 
    -avg
    extended _temp_rangeC11 only

    -MinT 
    -MaxT
    temp_trends"Temperatures 
    -falling overnight."
    T: hourlyTemp 
    -MinT and MaxT: 
    -avg, minMax, stdDevMinMax
    temp_trend_thresholdNOTE: There is an alternate method for "temp_trends_words" in -the ScalarPhrases module.
    SnowAmt 
    -
    snow_phrase"Snow accumulation 2 inches."  -

     

    -
    SnowAmt: accumMinMax
    phrase_descriptor_dict for -"SnowAmt" 
    - units_descriptor_dict  for -"inches" and "inch" 
    - pop_snow_lower_threshold
    - increment_dict for "SnowAmt" 
    -

    -
    SnowAmtdescriptive_snow 
    -_phrase
    "Moderate snow accumulations."SnowAmt: accumMinMax
    -

    -
    StormTotalSnow
    -
    stormTotalSnow_phrase
    -
    "Storm total snow accumulation -around 9 inches."
    -
    StormTotalSnow:
    -accumMinMax
    -
    phrase_descriptor_dictfor -"TotalSnow" 
    - units_descriptor_dict  for -"inches" and "inch" 
    - pop_snow_lower_threshold
    - increment_dict for "SnowAmt" 

    -
    SnowAmt
    -
    total_snow_phrase
    -
    "Total snow accumulation 6 -inches."
    -
    SnowAmt:
    -accumMinMax
    -
    phrase_descriptor_dictfor -"SnowAmt" 
    - units_descriptor_dict  for -"inches" and "inch" 
    - pop_snow_lower_threshold
    - getSnowReportEndDay
    - increment_dict for "SnowAmt" 

    -
    SnowLevelsnowLevel_phrase"Snow level 7600 feet."SnowLevel: **ScalarStatsphrase_descriptor_dict for -"SnowLevel" 
    - units_descriptor_dict  for -"feet" 
    - pop_snowLevel_upper_threshold -
    - snowLevel_maximum_phrase
    - snowLevel_upper_topo_percentage -
    - snowLevel_lower_topo_percentage -
    - increment_dict  for "SnowLevel"
    Be sure and set the  snowLevel_maximum_phrasefor -your local area
    IceAccum
    -
    iceAccumulation_phrase
    -
    "Ice accumulation of  up to -one half inch."
    -
    IceAccum: accumMinMax
    -
    ice_accumulation_threshold
    -phrase_descriptor_dict
    for "IceAccum"
    - increment_dict for "IceAccum"
    -

    -
    WindChillwindChill_phrase"Wind chill readings 5 to 10."WindChill: 
    -**ScalarStats 
    -T:minMax
    phrase_descriptor_dict for -"WindChill" 
    - windChill_threshold
    - windChillTemp_difference
    - windChill_range

    -
    WindChillwindBased_windChill_phrase"Wind chill readings 5 to 10."WindChill:**ScalarStats 
    -Wind: **VectorStats
    phrase_descriptor_dict for -"WindChill" 
    - windChill_threshold
    - windChill_wind_threshold
    - minimum_range_threshold_dict
    - range_threshold_dict
    - value_connector_dict
    - windChill_range
    Checks against Wind instead of T
    HeatIndexheatIndex_phrase"Heat index readings 10 to 15."HeatIndex: 
    -**ScalarStats 
    -T: minMax
    phrase_descriptor_dict for -"HeatIndex" 
    - heatIndex_threshold
    - heatIndexTemp_difference
    - minimum_range_threshold_dict
    - range_threshold_dict
    - value_connector_dict
    -

    -
    MinRH
    -
    rh_phrase
    -
    "Minimum RH 30 percent."
    -
    **ScalarStats MinRH
    -
    rh_threshold
    -
    -
    -

    WIND AND WINDGUST PHRASES -- -VectorRelatedPhrases module

    -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    ELEMENTTEXT RULES 
    -METHOD
    EXAMPLE 
    -PHRASES
    SAMPLE 
    -ANALYSIS
    THRESHOLDS AND VARIABLES 
    -(To override, find in VectorRelatedPhrases or ConfigVariables and copy -to Overrides file)
    ADD'L 
    -INFO
    Windwind_phrase"Northeast winds 5 to 15 mph in the afternoon."  -

    "Southwest winds 5-15 mph." 

    -

     

    -
    Wind: **Vector Statsphrase_descriptor_dict for -"Wind" 
    - units_descriptor_dict for -"mph" 
    - value_connector_dict for -"Wind" e.g. 5 to 10 mph 
    - increment for "Wind" e.g. -round wind magnitudes to nearest 5 
    - null_nlValue_dict
    - first_null_phrase_dict
    - null_phrase_dict -

    maximum_range_nlValuefor -"Wind" e.g. do not report winds with more than a 5 mph range e.g. 5 to -10 mph 
    - minimum_range_nlValue for -"Wind" e.g. report winds with at least this range e.g. 5 to 10 -mph 

    -

    Differences used for reporting Wind in different time -periods: 
    -"Wind NE 20 to 35 mph in the morning becoming S 10 to 15 mph in the -afternoon." 
    - vector_mag_difference_nlValue_dict -e.g. 10 mph 
    - vector_dir_difference_nlValue_dict e.g. -60 degrees 

    -

    phrase_connector_dict for -"becoming", "increasing to", "decreasing to", "shifting to the" 

    -

    embedded_vector_descriptor_flag_dict -- default is 1 -- if 0, descriptor is first e.g. "Winds -east 5 to 10 mph."

    -

    include_timePeriod_descriptor_flag  -- moderates the time qualification on the phrase -e.g. -"in the afternoon"
    - marine_wind_flag

    -
    mph
    Windwind_withGust_phrase"East winds 10 to 20 mph with gusts to around 70 mph in the -night becoming southwest 5 to 10 mph in the early morning."Wind: **Vector  Stats  for Wind 
    -Wind: **Vector MinMax (must be there as a secondary analysis method for -comparison in the gust_phrase) 
    -WindGust: 
    -**Scalar Stats 
    Same as above PLUS: 
    - phrase_descriptor_dict  -for "WindGust" 
    - gust_threshold -- gusts reported if above this threshold
    - gust_wind_difference_threshold -- gust reported if difference between max Wind and -WindGust is greater than this threshold
    - useWindsForGusts_flag -- if a WindGust grid is not found, the absolute max -wind will be used for gusts
    mph
    Windmarine_wind_phrase"West winds 10 to 20 knots in the morning shifting to the -southwest in the afternoon."**Vector  StatsSame as for public_windRange_phrase except units_descriptor_dict for "kt" 
    - marine_wind_flag set to 1 -for -marine descriptors e.g. gales, storm force winds 
    - seaBreeze_thresholds and local effects areas (see below)
    - marine_wind_descriptor for -"Wind" 
    - phrase_connector_dict  for -"becoming", "rising  to", "easing to", "veering", "backing", -"becoming onshore" 
    - useWindsForGusts_flag -- if a WindGust grid is not found, the absolute max -wind will be used for gusts
    knots  -

    See description for SeaBreeze below

    -
    Windmarine_wind 
    -_withGusts_phrase
    "East winds 10 to 20 knots with gusts to around 70 knots in -the night veering southwest 5 to 10 knots in the early morning."Wind: **Vector  Stats 
    -Wind: **Vector MinMax (must be there for comparision in the Gust -phrase) 
    -WindGust: 
    -**ScalarStats 
    Same as above PLUS 
    - phrase_descriptor_dict  for -"WindGust" 
    - gust_threshold -- gust reported if above this threshold
    - gust_wind_difference_threshold-- gust reported if difference between max Wind and -WindGust is greater than this threshold
    knots
    Windlake_wind_phrase"Caution advised on area lakes."Wind: **Vector  Statslake_wind_areaNames -
    - phrase_descriptor _dict for -"lakeWinds" 
    - lake_wind_thresholds

    -
    Windwind_summary"Breezy"  "Windy"Wind: **Vector  Statsvector_summary_valueStr
    -
    WindGustgust_phrase"Gusts up to 70 mph."WindGust: **Scalar Statsphrase_descriptor_dict  for -"WindGust" 
    - gust_threshold
    - null_nlValue_dict
    - first_null_phrase_dict
    - null_phrase_dict -

    gust_wind_difference_nlValue -- gust reported if difference between max Wind and -WindGust is greater than this threshold
    - scalar_difference_nlValue_dict -- for "WindGust": if gusts for 2 consecutive -sub-ranges differ by more than this amount, they will be reported -separately.
    - include_timePeriod_descriptor_flag  -- moderates the time qualification on the phrase -e.g. -"in the afternoon"

    -

    -
    -
    -

    Sea Breeze Identification

    -Sea breezes can be identified to produce phrases such as the following: -

             NW winds 15 to 25 -knots becoming onshore 10 to 15 knots.

    -

    To set up sea breeze indentification, you need to:

    -
      -
    • Create the following named edit areas from the GFE GUI:
    • -
        -
      • OffShoreArea -- offshore area
      • -
      • OnShoreArea -- onshore area
      • -  -
      -
    •  Override the product component definition to include the -"intersectAreas" for Wind.   For example:
    • -
             -def CWFPeriod(self): -
      -         -return {
      -             -"type": "component",
      -             -"methodList": [
      -                           -self.assemblePhrases,
      -                           -self.wordWrap,
      -                           -],
      -             -"analysisList": [
      -                           -# Split time range in quarters for Wind and WindGust
      -                           -("Wind", self.vectorModeratedMinMax, [3]),
      -                           -("Wind", self.vectorMinMax, [12]),
      -                           -("WindGust", self.maximum, [3]),
      -                           -("WaveHeight", self.minMax, [6]),
      -                           -("WindWaveHgt", self.minMax, [6]),
      -                           -# Split time range in half for Wx and Swell
      -                           -("Wx", self.rankedWx, [6]),
      -                           -("Swell", self.vectorMinMax, [6]),
      -                           -("Swell2", self.vectorMinMax, [6]),
      -                           -("Period", self.avg, [6]),
      -                           -("Period2", self.avg, [6]),
      -                         -], -

                   -"phraseList":[
      -                            -# WINDS
      -                            -self.marine_wind_withGusts_phrase,
      -                            -# Alternative:
      -                            -#self.marine_wind_phrase,
      -                            -#self.gust_phrase,
      -                            -# WAVES
      -                            -self.wave_withPeriods_phrase,
      -                            -# Alternative:
      -                            -#self.wave_phrase,
      -                            -# Optional:
      -                            -self.chop_phrase,
      -                            -# WEATHER
      -                            -self.weather_phrase,
      -                            -# SWELLS AND PERIODS
      -                            -self.swell_withPeriods_phrase,
      -                            -# Alternative:
      -                            -#self.swell_phrase,
      -                            -#self.period_phrase,
      -                            -],

      -

                  -"intersectAreas" :[
      -                   -("Wind", ["OffShoreArea", "OnShoreArea"]),
      -                   -],

      -

                  }

      -
    • Override the seaBreeze_thresholds  -(found in ConfigVariables) appropriately for your areas to identify the -offshore and onshore wind directions that indicate a sea breeze.  -If the magnitude is constant throughout the period AND if the offshore -winds are between offshoreDirection1 and -offshoreDirection2 during the first part of the period AND the onshore -winds are between onshoreDirection1 and onshoreDirection2 during the -next part of the period, the becoming onshore wording is used. -For example, if you set OffShoreArea for Hours 1-6 to 1020 and -OnShoreArea for Hours 7-12 to 2420, you will get the desired wording.
      -
    • -
    -

    WEATHER PHRASES -- WxPhrases module

    -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    ELEMENTTEXT RULES 
    -METHOD
    EXAMPLE 
    -PHRASES
    SAMPLE 
    -ANALYSIS
    THRESHOLDS AND VARIABLES 
    -(To override, find in WxPhrases, PhraseBuilder,  or -ConfigVariables and copy to -Overrides -file)
    ADD'L 
    -INFO
    Wxweather_phrase
    -
    Wx: **rankedWxPop/Wx Consistency
    - coveragePoP_value
    -
    pop_related_flag
    - pop_wx_lower_threshold pop-related -Wx types are not reported if PoP is below this threshold 
    -
    -Combining and consolidating
    -

    filter_subkeys_flag set to filter subkeys by combining duplicates and -similar Wx types as specified in:
    - wxCombinations Wx types -WITHIN sub-phrases can -be combined to prevent redundant reporting e.g. combine "R" and "RW" to -prevent:   "Scattered rain showers and rain." 
    - similarWxTypes, similarIntensities, -similarCoverages, similarCoverageLists - Used when combining weather subkeys ACROSS sub-phrases for -weather phrases and for -determining local effects.
    - wxHierarchies  Used -when sorting weather subkeys into dominant coverage or weather type -order.

    -

    Wording
    -
    useSimple
    -subPhrase_limit
    -

    -

    rankFuzzFactor  (CommonUtils)
    - precip_related_flag
    - wxTypeDescriptors
    - wxIntensityDescriptors
    -wxAttributeDescriptors
    -

    -

    rankWordingFuzzFactor
    -possiblyMixedWith
    -mixedWith
    -withPocketsOf
    -wxConjunction
    -

    -Visibility
    - null_nlValue for "Visibility"
    - embedded_visibility_flag
    - visibility_weather_phrase_nlValue -
    - element_outUnits_dict for "Visibility"
    - visibility_wx_threshold
    - significant_wx_visibility_subkeys -

    -

    include_timePeriod_descriptor_flag  -- moderates the time qualification on the phrase -e.g. -"in the afternoon"

    -
    See section below on the meaning of Weather Subkey Attributes -"Primary" and "Mention."
    -
    -See section below on Customizing -Weather Phrases -

    See the section on Handling -Visibility

    -
    WxsevereWeather_phrase"Some thunderstorms may be severe."
    -"Some storms could be severe with damaging hail."
    -"Some storms could be severe with large hail and damaging winds -possible."
    -
    -
    Wx:**rankedWx
    -
    Reports if there is T+ in the time period.
    -Also reports large hail and damaging winds.
    -
    WxheavyPrecip_phrase"Rain may be heavy at times." 
    -"Locally heavy rainfall possible." 
    -"Snow may be heavy at times."
    Wx: **rankedWxphrase_descriptor_dict  for -"heavyRainfall", "heavyRain", "heavySnow", "heavyPrecip"
    - heavySnowTypes
    -heavyOtherTypes

    -
    Reports if intensity is + for R, RW, S, SW,
    -IP, ZR, ZL, L
    -
    Wx
    -
    heavyRain_phrase
    -
    "Locally heavy rain possible."
    -
    Wx: **rankedWxphrase_descriptor_dict for -"heavyRains"Reports if T has attribute HvyRn
    -
    Wxvisibility_phrase"Visibility less than 1 nautical mile."Wx: **rankedWxnull_nlValue for "Visibility" below which visibility is not reported -
    - phrase_descriptor for "Visibility"
    - increment_nlValue for "Visibility"
    - visibility_phrase_nlValue
    - element_outUnits_dict for "Visibility"
    See the section on Handling -Visibility
    -
    -
    -

    Weather Subkey -Attributes "Primary" and "Mention"

    -Many weather subkeys can have attributes of "Primary" and "Mention" -which allow the forecaster to influence the resulting words as follows:
    -
      -
    • "Primary":  If a subkey is marked as "Primary," it will -appear as the dominant weather subkey in the weather wording.
    • -
    • "Mention":  If a subkey is marked as "Mention," it will -appear in the weather wording regardless of its temporal/areal -coverage.  Otherwise, subkeys that do not meet the coverage -requirements (as defined by the "wxkey_coverage_percent") are -eliminated from the wording.  So, for example, the -wxkey_coverage_percent for IP is 15% so that if we have just 1 hour of -IP in a 12-hour period, it will not be mentioned in the wording.  -However, if this subkey is given an attribute of "Mention," it will not -be eliminated and will appear in the wording. This gives the forecaster -the ability to supercede the coverage thresholds.
    • -
    -

    Customizing Weather -Phrases -

    -You can override the "wxCoverageDescriptors", "wxTypeDescriptors" , -"wxIntensityDescriptors" , and "wxAttributeDescriptors" in your -Overrides -file to customize the wording for weather types, coverages,  -intensities, and attributes.  For example, the following default -settings express very light rain and snow showers as "sprinkles" and -"flurries", respectively. -

        def wxTypeDescriptors(self): -
    -        # This -is the list of coverages, wxTypes, intensities, attributes for which -special
    -        # -weather type wording is desired.  Wildcards (*) can be used to -match any value.
    -        # If a -weather subkey is not found in this list, default wording
    -        # will -be used from the Weather Definition in the server.
    -        # The -format of each tuple is:
    -        -#    (coverage, wxType, intensity, attribute, -weatherType -descriptor)
    -        return -[
    -                -("*", "RW", "--", "*", "sprinkles"),
    -                -("*", "SW", "--", "*", "flurries"),
    -            -]

    -

    In many cases, more than one of these methods will have to be -overridden to accomplish the desired result.  We might have to -"turn on" one kind of wording and "turn off" other default wording. In -the above example, we have to "turn off" the default descriptor for -"very light" using the wxIntensityDescriptors:

    -

        def -wxIntensityDescriptors(self):
    -        # This -is the list of coverages, wxTypes, intensities, attribute for which -special
    -        # -weather intensity wording is desired.  Wildcards (*) can be used -to -match any value.
    -        # If a -weather subkey is not found in this list, default wording
    -        # will -be used from the Weather Definition in the server.
    -        # The -format of each tuple is:
    -        -#    (coverage, wxType, intensity, attribute, intensity -descriptor)
    -        return -[
    -                -("*", "RW", "--", "*", ""),
    -                -("*", "RW", "-", "*", ""),
    -                -("*", "R", "--", "*", "very light"),
    -                -("*", "R", "-", "*", "light"),
    -                -("*", "R", "+", "*", "heavy"),
    -                -("*", "RW", "+", "*", "heavy"),
    -                -("*", "SW", "--", "*", ""),
    -                -("*", "SW", "-", "*", ""),
    -                -("*", "SW", "+", "*", "heavy"),
    -                -("*", "S", "--", "*", "very light"),
    -                -("*", "S", "-", "*", "light"),
    -                -("*", "S", "+", "*", "heavy"),
    -                -("*", "ZR", "--", "*", "light"),
    -                -("*", "ZR", "+", "*", "heavy"),
    -                -("*", "L", "*", "*", ""),
    -                -("*", "F", "+", "*", "dense"),
    -            -]

    -

    Suppose we want to report "heavy snow" as "snow...heavy at times", -we would include the following in our Overrides file:

    -

        def wxTypeDescriptors(self): -
    -         -list = TextRules.TextRules.wxTypeDescriptors(self)
    -         -list.append( ("*", "S", "+", "*", -"snow...heavy at times") )
    -         -return list

    -

        def -wxIntensityDescriptors(self):
    -         -list = TextRules.TextRules.wxIntensityDescriptors(self)
    -         -list.append( ("*", "S", "+", "")
    -         -return list

    -

    As another example, suppose we want to describe thunderstorms with -an attribute of "dry" as "dry thunderstorms."  Including the -following in our Overrides file could accomplish this:

    -

        def wxTypeDescriptors(self): -
    -         -list = TextRules.TextRules.wxTypeDescriptors(self)
    -         -list.append( ("*", "T", "*", "Dry", "dry -thunderstorms") )
    -         -return list

    -

        def -wxAttributeDescriptors(self):
    -         -list = TextRules.TextRules.wxAttributeDescriptors(self)
    -         -list.append( ("*", "T", "*", "Dry", "") )
    -         -return list

    -

    It is possible to specify a method instead of text string for the -descriptor.  For example, the default wxTypeDescriptor for rain -showers uses a method as follows:

    -

        def wxTypeDescriptors(self): -
    -        return -[
    -                -("*", "SW", "--", "*", "flurries"),
    -                -("*", "RW", "*", "*", self.rainShowersDescriptor),
    -            -]

    -

        def -rainShowersDescriptor(self, tree, node, subkey):
    -        if -subkey.intensity() == "--":
    -            -return "sprinkles"
    -        if -tree is None:
    -            -return "showers"
    -        t = -tree.stats.get(
    -              -"T", node.getTimeRange(),
    -              -node.getAreaLabel(), statLabel="minMax",
    -              -mergeMethod="Min")
    -        if t -is None:
    -            -return "showers"
    -        if t -< 40:
    -            -return "rain showers"
    -        else: -
    -            -return "showers"

    -

    These methods are  used in Table products as well as -Narratives.  NOTE:  IF you are working with a narrative -product, you can include the "tree, node" arguments and use them to -qualify your customizations.  For example, we could check the node -time range and qualify fog as "morning fog" as in the example below:

    -

        def wxTypeDescriptors(self, -tree, node):
    -         -list = TextRules.TextRules.wxTypeDescriptors(self)
    -         -# Find out what time range we are working with
    -         -timeRange = node.getTimeRange()
    -         -# See if this time range is for the Morning
    -         -# First, shift to Local time from GMT
    -         -timeRange = self.shiftedTimeRange(timeRange)
    -         -startHour = timeRange.startTime().hour()
    -         -endHour = timeRange.endTime().hour()
    -         -if startHour >= 6 and endHour <= 12:
    -                -list.append( ("*", "F", "*", "*", "morning fog") )
    -         -return list

    -

    For more information on customizing Weather Phrases, see the -sections on Weather -Phrasing  and -Phrase -Consolidation.
    -

    - -

    Pop/Wx Consistency

    -By default, PoP (as well as LAL) is matched to the highest ranking -weather subkey.  The default algorithm ensures that the reported -PoP matches -the reported Wx.  This algorithm assumes that the grids have been -made consistent between PoP and Wx, perhaps via a Smart Tool. Thus, for -each weather subkey, there is a corresponding PoP in the grid.  -The -algorithm reports the PoP that matches the highest ranked -weather.  -So you might have a large area of SChc T with PoP of 20 and a very -small area of Lkly T with a PoP of 60.  This will get reported as
    -
    -    SLIGHT CHANCE OF THUNDERSTORMS.  CHANCE OF -THUNDERSTORMS 20 PERCENT.
    -
    -since SChc T is computed to be the highest ranking subkey. The -algorithm -does not report values that are not in the grids.  Instead, the -PoP -value in the grids that gives the closest match to the Wx coverage is -used.  The configurable coveragePoP_table -(CommonUtils) -defines the PoP ranges associated with each weather coverage.
    -
    -
    The algorithm and matching can be controlled by adjusting the -"matchToWxInfo_dict" (ConfigVariables) in various ways shown and -described below:
    -
    -    def matchToWxInfo_dict(self, tree, node):
    -        # The system will -automatically match the following elements to
    -        # the highest ranking -weather subkey coverage.
    -        # Each entry is a tuple of -(increment, algorithm, noPrecipValue, percentThreshold, wxTypes filter) -where
    -       
    -        #  increment: This is -the increment from the low "bin" value
    -        #    to be -added.  For example, PoP has a bin of 55-65, so
    -        #    its -increment is 5 to end up with values as multiples of 10.
    -       
    -        #  algorithm: Can be
    -        #    -Max:  The MAXIMUM value that falls within the coverage range
    -        -#          for the highest -ranking subkey will be chosen.
    -        #    Mode: -The MOST FREQUENT (over space and time) value that
    -        -#          falls within -the coverage range for the highest ranking
    -        -#          subkey will be -chosen.
    -        #    MaxMode: -This is the MAXIMUM value over time of the MOST
    -        -#         FREQUENT values over -area for each of the grids in the timeRange.
    -        -#         In other words, for -each grid, we find the Mode i.e. MOST FREQUENT
    -        -#         value that falls -within the coverage range for the highest
    -        -#         ranking subkey.  -Then we find the MAXIMUM of these values
    -        -#         over the grids again -falling within the coverage values.
    -        #    -AnalysisMethod: This will simply use whatever analysis method
    -        -#         is specified as the -first entry in the product component
    -        -#         for the element. For -example, if you have
    -        #
    -        -#         ("PoP", -self.stdDevMaxAvg, [3]),
    -        -#         ("PoP", -self.binnedPercent, [3]),
    -        #
    -        -#         the "stdDevMaxAvg" -method will be used.
    -        #
    -        #  noPrecipValue: The -value that should be returned if there is
    -        -#         no precipitating -weather.  Can be:
    -        #     -None
    -        #     an -actual data value
    -        #     -"Max": The maximum value found that has a greater > 0% occurrence.
    -        #     -"AnalysisMethod": As above, will return the result of the product
    -        -#         component analysis -method e.g. stdDevMaxAvg or maximum.
    -        #
    -        #  percentThreshold: -(optional) Percent of areal coverage a value must have in
    -        #     -order to be considered for the element value returned.
    -        #     -Default is 0.
    -        #
    -        #  wxTypes filter: -(optional) Match only to weather keys of these wxTypes e.g.
    -        #     -match LAL only to "T"
    -        #
    -        #  EXAMPLE 1:  -Suppose we have:
    -
    -        -#       Wx  Hours 1-12:  Chc -R  (coverage range is 30-60)
    -        -#       PoP Hours 1-3:   40% -(over 70% of area), 50% (over 30% of area)
    -        -#           Hours -4-12:  30
    -
    -        # For the 12-hour PoP,
    -        #    If set -to Max, we will get PoP:      50
    -        #    If set -to Mode, we will get PoP:     30
    -        #    If set -to MaxMode, we will get PoP:  40
    -       
    -        # For the Hours 1-3 PoP:
    -        #    If set -to Max, we will get PoP:      50
    -        #    If set -to Mode, we will get PoP:     40
    -        #    If set -to MaxMode, we will get PoP:  40
    -     
    -        #  NOTE: IF you add a -new element to this list, you MUST include
    -        #  a coverage table -named "coverage<elementName>_value".  Follow
    -        #  the example for -"coveragePoP_value" in CommonUtils.  You can
    -        #  then access the -element value by calling "matchToWx" (WxPhrases).
    -        #
    -        return {
    -            -"PoP": (5, "Max", None, 0),
    -            # If -there's no precipitating weather, return LAL 1
    -            -"LAL": (0, "Max", 1, 0, ["T"]),
    -            }
    -
    -

    COMBINED ELEMENT PHRASES -- -CombinedPhrases module
    -

    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    ELEMENTTEXT RULES 
    -METHOD
    EXAMPLE 
    -PHRASES
    SAMPLE 
    -ANALYSIS
    THRESHOLDS AND VARIABLES 
    -(To override, find in ConfigVariables, WxPhrases, or CombinedPhrases -and copy to Overrides file)
    ADD'L 
    -INFO
    Sky, PoP, WxskyPopWx_phrase"Partly cloudy with a 20 percent chance of showers and -thunderstorms."
    -
    -"Sunny in the morning then partly cloudy with a 20 percent chance of -rain showers in -the afternoon."
    Wx:**rankedWx 
    -(See add'l info). 
    -Sky: **median 
    -PoP: **binnedPercent, 
    The same thresholds and variables described for the weather_phrase apply to this combined phrase.
    -
    -In addition:
    - useCombinedSkyPopWx
    -useSkyPopWx_consolidation
    -

    - sky_valueList
    - matchToWxInfo_dict
    -
    -
    NOTE: You should also include the -sky_phrase, weather_phrase, and popMax_phrase in your phraseList when -you are using the skyPopWx_phrase. -

    For more information on the algorithm -used and examples, see the documentation in the CombinedPhrases module.

    -
    Wx, Skyweather_orSky_phraseIf no weather, then return sky phraseSky: **median 
    -Wx: **rankedWx
    same as for weather_phrase and sky_phrase
    -
    -
    -
    -  -

    MARINE PHRASES -- MarinePhrases module
    -

    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    ELEMENTTEXT RULES 
    -METHOD
    EXAMPLE 
    -PHRASES
    SAMPLE 
    -ANALYSIS
    THRESHOLDS AND VARIABLES 
    -(To override, find in ConfigVariables or MarinePhrases and copy to -Overrides file)
    ADD'L 
    -INFO
    WaveHeight 
    -WindWaveHgt
    wave_phrase"Combined seas 15 to 25 feet." 
    -"Wind waves 5 feet."
    WaveHeight or WindWaveHeight: 
    -** Scalar Stats

    - maximum_range_nlValue
    - inlandWatersAreas
    - inlandWatersWave_element
    - waveHeight_wind_threshold
    - combinedSeas_threshold
    - seasWaveHeight_element 
    - seasWindWave_element 
    - noWaveHeight_phrase
    - null_nlValue_dict
    - first_null_phrase_dict
    - null_phrase_dict
    - include_timePeriod_descriptor_flag  -- moderates the time qualification on the phrase -e.g. -"in the afternoon"
    See algorithm 
    -below 
    WaveHeight 
    -WindWaveHgt
    wave_withPeriod 
    -_phrase
    "Combined seas 15 to 25 feet dominant period 11 seconds."Same as above PLUS: 
    -Period: **Scalar Stats 
    -Period2: **Scalar Stats
    same as above PLUS 
    - phrase_descriptor_dict  for -"dominant period" 
    - units_descriptor_dict for -"ft"
    See algorithm 
    -below
    Windsee Wind and WindGust Phrases -above
    -

    -

    -

    -
    Windchop_phrase"Bay and inland waters a light chop."Wind: **Vector  Statsphrase_descriptor_dict  for -"chop" 
    - include_timePeriod_descriptor_flag  -- moderates the time qualification on the phrase -e.g. -"in the afternoon"

    -
    Swellswell_phrase"Northeast swells 5 to 10 feet and 10 to 15 feet."Swell: **Vector Stats 
    -Swell2: **Vector Stats 
    -Wind: **Vector Stats
    phrase_descriptor_dict for -"Swell" 
    - units_descriptor_dict for -"ft" 
    - units_descriptor_dict for -"foot" 
    - value_connector_dict for -"Swell" e.g. 5 to 10 feet 
    - increment for "Swell" e.g. -round swell magnitudes to nearest 1  -

    null_nlValue_dict
    - first_null_phrase_dict
    - null_phrase_dict

    -

    maximum_range_nlValue_dict -
    - minimum_range_nlValue_dict

    -

    waveHeight_wind_threshold
    - combinedSeas_threshold

    -

    vector_mag_difference_nlValue_dict -e.g. 2 feet 
    - vector_dir_difference_nlValue_dict e.g. -60 degrees 

    -

    phrase_connector_dict for -"becoming", "increasing to", "decreasing to", "shifting to the" 

    -

    embedded_vector_descriptor_flag_dict -- default is 1 -- if 0, descriptor is first e.g. "Swells -east 5 to 10 feet."

    -

    include_timePeriod_descriptor_flag  -- moderates the time qualification on the phrase -e.g. -"in the afternoon"

    -
    Note: The Swell phrase will not be produced for InlandWaters -areas OR if a "seas" wave phrase is produced (See algorithm below.)
    Swellswell_withPeriod 
    -_phrase
    "Northeast swells 5 to 10 feet at 9 seconds and 10 to 15 feet -at 12 seconds."Swell: **Vector Stats 
    -Swell2: **Vector Stats 
    -Period: **Scalar Stats 
    -Period2: **Scalar Stats 
    -Wind: **Vector  Stats
    Same as above PLUS: 
    - phrase_descriptor_dict  -for "Period" 
    - units_descriptor  for "seconds" 

    -
    Periodperiod_phrase"Period 15 seconds."Period: **Scalar Statsphrase_descriptor_dict  -for "Period" 
    - units_descriptor  for "seconds"
    - include_timePeriod_descriptor_flag  -- moderates the time qualification on the phrase -e.g. -"in the afternoon"

    -
    -
    -

    Algorithm for -WaveHeight and/or WindWaveHgt Reporting

    -
      -
    • If the edit area is in the inlandWatersAreas -list, report from the  inlandWatersWave_element(default -"WaveHeight".  If not available, report on second choice (default -WindWaveHgt).  For this phrase, use the phrase_descriptor_dict  -entry for "inland waters".
    • -
    • If the edit area is not inland waters:
    • -
        -
          -
        • If maximum Wind > waveHeight_wind_threshold  -OR if maximum WindWaveHgt and maximum Swell > combinedSeas_threshold:
        • -
            -
              -
            • report from seasWaveHeight_element(default -WaveHeight).
            • -
            • if "_withPeriod" report average of Period and -Period2  embedded in phrase.
            • -
            -
          • For this phrase, use the phrase_descriptor entry for "seas".
          • -
          -
        • Otherwise, report seasWindWave_element(default -WindWaveHgt).  For this phrase, use the phrase_descriptor_dictfor -"waves".
        • -
        -
      -
    • If no data available, return the noWaveHeight_phrase.
    • -
    -NOTE:  The Swell phrase will not be produced for inland waters OR -if a "seas" phrase is reported. -

    FIRE WEATHER PHRASES
    -

    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    ELEMENTTEXT RULES 
    -METHOD
    EXAMPLE 
    -PHRASES
    SAMPLE 
    -ANALYSIS
    THRESHOLDS AND VARIABLES 
    -(To override, find in ConfigVariables orFirePhrases and copy to -Overrides -file)
    ADD'L 
    -INFO
    CWRcwr_phraseCHC OF WETTING RAIN....20 percentCWR: **ScalarStats phrase_descriptor_dict
    -
    DispersionsmokeDispersal_phraseSMOKE DISPERSAL....Dispersion: **ScalarStatsphrase_descriptor_dict
    - smokeDispersal_valueStr

    -
    Haineshaines_phraseHAINES INDEX...3 Very low potential for large plume dominated -fire growth.Haines: **ScalarStatsphrase_descriptor_dict
    - hainesDict

    -
    LALlal_phraseLAL...2.LAL:  avg [0] phrase_descriptor_dict
    -
    MaxRHhumidity_recovery_phraseHUMIDITY RECOVERY...POORMaxRH: modephrase_descriptor_dict
    - humidityRecovery_percentage
    - humidityRecovery_valueList

    -
    MixHgtmixingHgt_phrase    MIXING HEIGHT...600-1000 FT AGLMixHgt: **ScalarStatsphrase_descriptor_dict
    -
    Sky/WxskyWeather_byTimeRange_compoundPhraseSKY/WEATHER...Mostly sunny until 1100...then partly -cloudy.  Chance of showers.Sky: **Scalar Stats 
    -Wx:  **dominantWx
    phrase_descriptor_dict
    - includeSkyRanges_flag
    - All the thresholds and varables from the -weather_phrase and the fireSky_phrase apply
    To change the format of the sky ranges, override the addSkyRange method from FirePhrases
    TransWindtransportWind_phrase   TRANSPORT WINDS...West 3-10 mph.TransWind: **Vector Statsphrase_descriptor_dict
    -
    WindfireWind_compoundPhrase20-FT WINDS...Winds northeast around 10 mph in the evening -becoming light after midnight.Wind20ft OR Wind: **VectorStatsphrase_descriptor_dict
    - All the threhsolds and variables from the -wind_summary and wind_phrase apply.
    If the Wind20ft grid is available, it is reported. Otherwise, -the Wind grid values are multiplied by the windAdjustmentFactor(set -in the Overrides file) and reported.
    Variabletrend_DayOrNight_phrase"24-HOUR TREND...2 degrees warmer." 
    -"24-HOUR TREND...10 percent wetter."
    MinT, MaxT: mode 
    -MinRH, MaxRH: mode  -

    Optional: 
    -Ttrend: self.avg 
    -RHtrend: self.avg 

    -

    IF the trend grids are present, they are used, otherwise, the -MinT or MaxRH (nighttime) or MaxT or MinRH (daytime) grids are used.

    -
    phrase_descriptor for -"higher", "lower", "missing", "unchanged" 
    - trend_threshold_dict
    - units_descriptor
    Arguments: dayElement, nightElement, 
    -trendElement, 
    -indent_flag, 
    -endWithPeriod_flag 
    -The flags are set to 1 for FWF-type phrases.
    VariabledayOrNight_phrase"MAX TEMPERATURE....45-55." 
    -"MIN HUMIDITY...........20-25."
    avg, minmax, stdDevMinMax, median, modeminimum_range_threshold_dict -
    - range_threshold_dict
    - value_connector_dict
    Arguments: dayElement, nightElement, indent_flag, -endWithPeriod_flag 
    -These flags are set to 1 for FWF-type phrases.
    -
    -

    Ridge versus Valley Winds

    -For some edit areas, you may want to break out  the 20-foot winds -into Ridges and Valleys. To do so, in the FWF_<site>_Overrides -file, set up the -names of areas for which you want this break-out: -

        def ridgeValleyAreas(self, tree, node):
    -        # List of edit area names -for which we want
    -        # ridge/valley winds -reported:
    -        #
    -        # 20-FOOT WINDS...
    -        #     -VALLEYS/LWR SLOPES...
    -        #     -RIDGES/UPR SLOPES....
    -        #
    -        # e.g.
    -        # return ["Area1"]
    -        return []

    -

    Next, make sure you have edit areas defined for "Ridges" and -"Valleys" to intersect with the current area.  If you want to use -different edit area names, you can include the following override (from -the FirePhrases module) in your Overrides file:

    -

        def valleyRidgeAreaNames(self, tree, node):
    -        # These are the areas for -valleys and ridges, respectively,
    -        # to be intersected with the -current edit area for
    -        # reporting valley winds and -ridge winds, respectively.
    -        # NOTE: If you change these -area names, you will also
    -        # need to change the names -in the FirePeriod "intersectAreas"
    -        # section.
    -        return "Valleys", "Ridges"

    -

     DISCRETE PHRASES -(DiscretePhrases module)
    -

    -
    - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    ELEMENTTEXT RULES 
    -METHOD
    EXAMPLE PHRASESSAMPLE 
    -ANALYSIS
    THRESHOLDS AND VARIABLES 
    -(To override, find in designated module and copy to Overrides file)
    ADD'L 
    -INFO
    HazardsmakeHeadlinePhrases
    -
    .WINTER STORM WARNING IN EFFECT
    -
    Not sampled by SampleAnalysis allowedHazards
    -
    Found in DiscretePhrases module
    -
    -

    NARRATIVE STRATEGIES

    -Narrative Tree methods coordinate to produce a desired result.  -The strategy behind this coordination is not obvious from looking at -the -individual methods, so we provide documentation for this coordination -in -the following "Strategy" sections.
    -  -

    NON-LINEAR -THRESHOLDS

    -We support non-linear thresholds and variables by allowing a method to -return a dictionary of ranges and values. The code applying the -threshold is responsible for applying it to each value using the -nlValue method:
    -

         threshold = -self.nlValue(threshold, value)

    -

    Any variable that is named with the suffix _nlValue -can operate in this way returning EITHER a single value or a dictionary -of values.  If a dictionary is returned, it is of the form:

    -

          {
    -      'default': -<default value>,
    -      (lowVal, highVal) -:  <value>,
    -      }
    -where lowVal and highVal consitute a range for applying the given -value.  The lowVal is inclusive while the highVal is exclusive. - For example:

    -

        def -scalar_difference_nlValue_dict(self, tree, node):
    -        # -Scalar difference.  If the difference between scalar values -
    -        # for -2 sub-periods is greater than this value,
    -        # the -different values will be noted in the phrase.
    -        return -{
    -            -"WindGust": {
    -                        -'default': 10,
    -                        -(0, 30):   10,
    -                        -(30, 50):  15,
    -                        -(50, 200): 20,
    -                        -},
    -             -}

    -

    In this case, if the WindGust is greater or equal to 0 and less than -30, the scalar_difference will be 10; if WindGust is greater or equal -to -30  and less that 50, the scalar_difference will be 15; etc.

    -

    You always have the additional option of basing the return value on -the current edit area.  For example:

    -

        def -scalar_difference_nlValue_dict(self, tree, node):
    -        # -Scalar difference.  If the difference between scalar values -
    -        # for -2 sub-periods is greater than this value,
    -        # the -different values will be noted in the phrase.
    -        return -{
    -            -"WindGust": self.windGust_scalar_nlValue_difference,
    -            -}

    -

         def -windGust_scalar_nlValue_difference(self, tree, node):
    -         -mountains = ["Area1", "Area2"]
    -         -if self.currentAreaContains(tree, mountains):
    -            -return 15
    -         -else:
    -            -return {
    -                        -'default': 10,
    -                        -(0, 30):   10,
    -                        -(31, 50):  15,
    -                        -(51, 200): 20,
    -                        -}

    -

    The method applying the threshold must do the following before using -it:

    -

       threshold = -self.scalar_difference_threshold(
    -                    -tree, node, element, element)
    -   for each value to check:
    -        -curThreshold = self.nlValue(threshold, value)
    -        # Use -curThreshold for the given value

    -

    DATA VALUE -EXTRACTION FROM THE GRIDS

    -The following steps are taken to extract the raw -data values from the grids for reporting in narrative products: -
      -
    • Sampling -- simple histogram of raw data
    • -
    • Sample Analysis -- statistical methods -specified in the product component definition (e.g. avg, mininum, -maximum, vectorModeratedMinMax)
    • -
    • Unit Conversion
    • -
    • Standard and Non-Standard Rounding
    • -
    • Range Adjustment
    • -
    -All of this is done prior to generating -phrases.  In addition, if sub-phrases or components are combined, -Range Adjustment is re-done if necessary.  There are -user-configurable thresholds and variables to control this processing, -and it is very important to understand the relationships between them -to -produce acceptable results. -

    Unit Conversion

    -The input and output units are specified in the -following dictionaries.  Unit conversion is done automatically -

        -def element_inUnits_dict(self, tree, node):
    -        # -Dictionary of descriptors for various units

    -

        def -element_outUnits_dict(self, tree, node):
    -        # -Dictionary of descriptors for various units

    -

     Standard -and -Non-Standard rounding

    -The system does automatic unit conversion and rounding when statistics -are generated for the narrative product.  Rounding is normally -done -using a simple increment value (which can be non-linear as described -above).  In lieu of that, a non-standard rounding method may be -specified per weather element. -

    Example of standard rounding increment (from -ZFP_<site>_Overrides file, -overriding increment_nlValue_dict in ConfigVariables module):

    -

        def -increment_nlValue_dict(self, tree, node):
    -        # -Increment for rounding values
    -        # -Units depend on the product
    -        dict = -TextRules.TextRules.increment_nlValue_dict(self, tree, node)
    -        -dict["Wind"] = 5
    -        return -dict

    -

    Example of non-standard rounding method (found in ConfigVariables -module):

    -

        def -rounding_method_dict(self, tree, node):
    -        # -Special rounding methods
    -        # -
    -        return -{
    -            -"Wind": self.marineRounding,
    -            -}

    -

        def marineRounding(self, -value, mode, increment, maxFlag):
    -        # -Rounding for marine winds
    -        mode = -"Nearest"
    -        if -maxFlag:
    -            -if value > 30 and value < 34:
    -                -mode = "RoundDown"
    -            -elif value > 45 and value < 48:
    -                -mode = "RoundDown"
    -            -else:
    -                -mode = "Nearest"
    -        return -self.round(value, mode, increment)

    -

    Range Adjustment

    -Range adjustment is a feature that allows you to -set required ranges on data values coming from the grids.  For -example, if you would always like to see at least a 5 mph range in the -wind phrases, you can set the "minimum_range_nlValue_dict" for "Wind" -to -5.  Then you will see phrases such as "Winds 5 to 10 mph" instead -of "Winds 10 mph." Range adjustment is rather complicated logically and -this leads to some confusion.  Purists would argue against using -range adjustment as it is not 100% true to the grids -- however, with -the current suite of zone-based products, it is sometimes -desirable.  For a discussion, see the FAQ Range Adjustment -Questions/Answers section. -

    The basic premise of range adjustment is that -you have to commit to the ranges you choose (and rounding increments as -well) from the beginning of processing.  In other words, we can't -just slap on a range at the very end when we are building the phrase; -ranges need to be applied from the moment the grids are analyzed so -that -phrase combining and period combining are comparing pre-adjusted -values.  Then, if we do combine two sub-phrases or two periods, we -have to combine their statistics and, then re-apply the range -adjustments to the new values. The system is set up to recognize these -cases when you set the range values listed below.

    -

    The following variables are used to adjust the -range reported for the data value:

    -

        def -range_nlValue_dict(self, tree, node):
    -        # If -the range of values less than this amount, return as a single value -

    -

        def -minimum_range_nlValue_dict(self, tree, node):
    -        # This -threshold is the "smallest" min/max difference allowed between values -reported.
    -        # For -example, if threshold is set to 5 for "MaxT", and the min value is 45 -
    -        # and -the max value is 46, the range will be adjusted to at least a 5 degree -
    -        # -range e.g. 43-48.  These are the values that are then submitted -for -phrasing
    -        # such -as:
    -        -#   HIGHS IN THE MID 40S

    -

        def -maximum_range_nlValue_dict(self, tree, node):
    -        # -Maximum range to be reported within a phrase
    -        -#   e.g. 5 to 10 mph
    -        # -Units depend on the product

    -

        def -range_bias_nlValue_dict(self, tree, node):
    -        # -"Min", "Average", "Max"
    -        -#  Should the range be taken from the "min" "average" or "max" -value of the current range?
    -        return -{'default': "Average"}

    -

        def -maximum_range_bias_nlValue_dict(self, tree, node):
    -        # -"Min", "Average", "Max"
    -        -#  Should the maximum_range be taken from the "min" "average" or -"max" value of the current range?
    -        return -{
    -                      -"default": "Average",
    -                      -"Wind": "Max"
    -                     -}

    -

         def -minimum_range_bias_nlValue_dict(self, tree, node):
    -        # -"Min", "Average", "Max"
    -        -#  Should the minimum_range be taken from the "min" "average" or -"max" value of the current range?
    -        return -{
    -                      -"default": "Average",
    -                      -"Wind": "Max"
    -                     -}

    -

    NOTE: -The range_nlValue -is  applied first and thus supercedes range adjustments -(minimum/maximum ranges).  So if your minimum or maximum ranges -are -not taking effect, check to make sure there is not a range_nlValue set -for the weather element in question.
    -

    -

    Ranges are adjusted at several points in the -processing of phrases:

    -
      -
    • When statistics are initially calculated -and entered into the StatisticsDictionary by the ForecastNarrative -module.
    • -
    • When statistics are gathered over -multiple -time ranges from the StatisticsDictionary by the "tree.stats.get" -command.
    • -
    • When statistics are combined (e.g. -combining sub-phrases)
    • -
    -

    Example: Using Maximum Range and Bias

    -Fire weather users are most concerned with the -minimum RH/maximum Temp during the day, and the maximum RH/minimum Temp -at night. So, rather than give them the full range of values for a -particular zone, we'd like to be able to weight the output range of -values to the lower end of MinRH and MinT, and the higher end of MaxRH -and MaxT.  Sampling could be manipulated to do this through the -moderated_dict, but then we would want those results turned into a 5 -degree range (rounded to the nearest 5, if possible) returned for -non-mountain zones and a 10 degree range (rounded to the nearest 5) for -mountain zones. -

    To accomplish this, include the following in -the  Overrides file:

    -

        -def maximum_range_nlValue_dict(self, tree, node):
    -        # -Maximum range to be reported within a vector phrase
    -        -#   e.g. 5 to 10 mph
    -        # -Units depend on the product
    -        dict = -TextRules.TextRules.maximum_range_nlValue_dict(self, tree, node) -
    -        -mountainZones = ["area3"]
    -        if -self.currentAreaContains(tree, mountainZones):
    -            -range = 10
    -        else: -
    -            -range = 5
    -        -dict["MaxT"] = range
    -        -dict["MinT"] = range
    -        -dict["MaxRH"] = range
    -        -dict["MinRH"] = range
    -        return -dict

    -

        def -maximum_range_bias_nlValue_dict(self, tree, node):
    -        # -"Min", "Average", "Max"
    -        -#  Should the maximum_range be taken from the "min" "average" or -"max"
    -        -#  value of the current range?
    -        dict = -TextRules.TextRules.maximum_range_bias_nlValue_dict(self, tree, node) -
    -        -dict["MaxT"] = "Max"
    -        -dict["MinT"] = "Min"
    -        -dict["MaxRH"] = "Max"
    -        -dict["MinRH"] = "Min"
    -        return -dict

    -

        def -increment_nlValue_dict(self, tree, node):
    -        # -Increment for rounding values
    -        # -Units depend on the product
    -        dict = -TextRules.TextRules.increment_nlValue_dict(self, tree, node)
    -        -dict["MaxT"] = 5
    -        -dict["MinT"] = 5
    -        -dict["MaxRH"] = 5
    -        -dict["MinRH"] = 5
    -        return -dict

    -

    Data -Value Extraction and Combining

    -It is very important that the combining criteria -be consistent with the data value extraction thresholds and -variables.  Combining for scalar and vector magnitudes is based -upon the following thresholds: -

        def -scalar_difference_nlValue_dict(self, tree, node):
    -        # -Scalar difference.  If the difference between scalar values -
    -        # for -2 sub-periods is greater than this value,
    -        # the -different values will be noted in the phrase.

    -

        def -vector_mag_difference_nlValue_dict(self, tree, node):
    -        # -Replaces WIND_THRESHOLD
    -        # -Magnitude difference.  If the difference between magnitudes -
    -        # for -sub-ranges is greater than this value,
    -        # the -different magnitudes will be noted in the phrase.
    -        # -Units can vary depending on the element and product

    -

    Data -Value Extraction Consistency

    -Certain relationships must hold among the -thresholds and variables used for Data Extraction. In particular: -
      -
    • the minimum_range and maximum_range must -be multiples of the increment
    • -
    • minimum_range must be less or equal to -the -maximum_range
    • -
    -If this is not the case, the system will -automatically set the differences accordingly. -

    NULL VALUES

    -"Null" values are those that are below the  "null_nlValue" or, in -the case of Wx, <"NoWx">.  Here area the default thresholds -from the ConfigVariables module: -

        def null_nlValue_dict(self, -tree, node):
    -        # -Magnitude threshold below which values are considered "null" and  -not reported.
    -        return -{
    -            -"Wind": 5,  # mph
    -            -"TransWind": 0,  # mph
    -            -"FreeWind": 0,  # mph
    -            -"Swell": 5,  # ft
    -            -"Swell2": 5,  # ft
    -            -"WaveHeight": 3,  # ft
    -            -}

    -

    You may specify the phrases that will be used -to report Null values.  These phrases may be the empty phrase, -"".   You may want to specify a different phrase if the the -null value occurs for the entire time period or the for the first -sub-phrase versus in subsequent sub-phrases.  Here are the default -null phrase dictionaries from the ConfigVariables module:

    -

        def -first_null_phrase_dict(self, tree, node):
    -        # -Phrase to use if values THROUGHOUT the period or
    -        # in -the first period are Null (i.e. below threshold OR NoWx)
    -        # -E.g.  LIGHT WINDS.    or    LIGHT -WINDS BECOMING N 5 MPH.
    -        return -{
    -            -"Wind": "light winds",
    -            -"TransWind": "",
    -            -"FreeWind": "",
    -            -"Swell": "light swells",
    -            -"Swell2": "",
    -           -"Wx": "",
    -            -"WindGust": "",
    -            -"Wave": "2 feet or less",
    -            -}

    -

        def null_phrase_dict(self, -tree, node):
    -        # -Phrase to use for null values in subPhrases other than the first -
    -        # Can -be an empty string
    -        -#  E.g.  "NORTH WINDS 20 to 25 KNOTS BECOMING LIGHT"
    -        return -{
    -            -"Wind": "light",
    -            -"TransWind": "light",
    -            -"FreeWind": "light",
    -            -"Swell": "light",
    -            -"Swell2": "",
    -            -"Wx":"",
    -            -"WindGust": "",
    -            -"Wave": "2 feet or less",
    -            -}

    -

    LOCAL -EFFECTS

    -Local effects are set up on a per-Product Component, per-phrase basis. -When you set up a phrase to look for local effects, the system checks -for significant differences in weather element values between -contrasting edit areas. If differences are found, they will be reported -in the phrase.  For example, through the GFE GUI we can define -contrasting edit areas, "AboveElev" e.g. above 6000 feet and -"BelowElev" -e.g. below 6000 feet.  Then we can set up local effects for a -particular phrase within our Component Product definition by doing the -following: -
      -
    • Define contrasting edit areas. Determine what areas -might -exhibit results that are significantly different.  Create edit -areas for them through the GFESuite GUI.  For example, we might -expect that elevations above 10,000 feet will have temperatures -significantly different from those below 10,000 feet so we create an -edit area through the GFE for each.
    • -
    • Specify the areas that need to be intersected with the -current area to examine for local effects.  List these by -weather element in the "intersectAreas"  of the Component Product -definition.
    • -
    • Specify the areas that do not need to be intersected with -the -current area to examine for local effects.  You might want to -list areas for local effect comparison "as is" i.e. without -intersecting -them with the current area.  If so, list these in the -"additionalAreas" section of the Product Component definition.
    • -
    • Set up a "localEffectsList" for the phrase(s) for -which you want local effects to be generated.  The local effects -list consists of 1 or more LocalEffects.  If  you have more than one -LocalEffect, each is examined in order. The first local effect to fire -will be reported.  NOTE: The List of -Local Effects may be specified as a Python method which will be given -arguments (tree, node) and should return a list of Local Effects.A Local Effect consists of the following information:
    • -
        -
      • List of Local Effect Areas.  You may list 2 or more areas -for comparison.  When there are more than 2 areas, the system -determines "groupings" of areas with similar statistics and reports -them -together.  NOTE: The List of Local Effects -may be specified as a Python method which will be given arguments -(tree, -node) and should return a list of Local Effect Areas.  Each -Local Effect Area consists of the following:
      • -
          -
        • Edit Area Name.   This can be a special string -"__Current__" to denote the current edit area.
        • -
        • Description String: This is the string to be used in the -resulting phrase e.g. "in the mountains", "on the coast".  NOTE: the Description String can be specified as a -Python method which will be given arguments (tree, node, leArea) and -should return a description string.  In this way, you can -determine -the description string on-the-fly perhaps dependent on the current edit -area.
        • -
        -
      • Difference Threshold: This is a scalar difference value to be -used in comparing the local effect areas.   NOTE: the Difference Threshold can be specified as a -Python method which will be given arguments (tree, node, localEffect, -leArea1Label, leArea2Label) and should return 1 if there is a local -effect difference detected between the two areas.   This will -allow more flexibility in drawing comparisons between local effect -areas.
      • -
      • Local Effect Connecting Words:  This is a word string to -connect local effects that are reported within one phrase.  -E.g.  "Highs 45-55...except35-45 above -timberline."
      • -
      -
    -The following Component definition sets up local effects for the -highs_phrase, lows_phrase, and wind_withGusts_phrase: -

       def -Period_1(self):
    -        return -{
    -            -"type": "component",
    -            -"methodList": [
    -                          -self.orderPhrases,
    -                          -self.assemblePhrases,

    -                          -self.wordWrap,
    -                          -],
    -            -"analysisList": [
    -                       -("MinT", self.stdDevMinMax),
    -                       -("MaxT", self.stdDevMinMax),
    -                       -("T", self.hourlyTemp),
    -                       -("Wind", self.vectorMedianRange, [6]),
    -                       -("Wind", self.vectorMinMax, [6]),
    -                       -("WindGust", self.avg, [6]),
    -                       -],
    -            -"phraseList":[
    -                   -self.wind_summary,
    -                   -self.reportTrends,
    -                   -#self.highs_phrase,
    -                   -#self.lows_phrase,
    -                   -(self.highs_phrase, self._tempLocalEffects_list()),
    -                   -(self.lows_phrase, self._tempLocalEffects_list()),
    -                   -#self.highs_range_phrase,
    -                   -#self.lows_range_phrase,
    -                   -#self.wind_withGusts_phrase,
    -                   (self.wind_withGusts_phrase, -self._windLocalEffects_list()),
    -                   -],
    -            -"intersectAreas": [
    -                   -# Areas listed by weather element that will be
    -                   -# intersected with the current area then
    -                   -# sampled and analysed.
    -                   -# E.g. used in local effects methods.
    -                   -("MaxT", ["Mountains", "Valleys"]),
    -                   -("MinT", ["Mountains", "Valleys"]),
    -                   -("Wind", ["Coast", "Inland"]),
    -                   -("WindGust", ["Coast", "Inland"]),
    - ]

    -

        def -_windLocalEffects_list(self):
    -        -leArea1 = self.LocalEffectArea("Coast", "near the coast")
    -        -leArea2 = self.LocalEffectArea("Inland", "inland")
    -       return -[self.LocalEffect([leArea1, leArea2], 10, " and ")]

    -

        def -_tempLocalEffects_list(self):
    -        -leArea1 = self.LocalEffectArea("Valleys", "")
    -        -leArea2 = self.LocalEffectArea("Mountains", "in the mountains")
    -        return -[self.LocalEffect([leArea1, leArea2], 8, "...except ")]

    -

    As a result,   the system will automatically calculate the -intersection of the Mountains, Valleys, (for MaxT, MinT) and Coast, -Inland (for Wind and WindGust) areas with each edit area as it -processes -it.   Sampling and Analysis statistics will be calculated for -both intersection areas for the appropriate weather elements. Then, the -local effects phrase can examine the statistics for differences and -report according to the methods and words given in the local effects -definition. For example, the following phrases could be generated -depending on the data:

    -

        "Highs 45-55."
    -    "Highs 45-55...except 35-45 -above timberline."
    -    "North winds 20 mph."
    -    "North winds 20 mph near the -coast and  west winds 10 mph inland."
    -    "Near the coast...North winds -20 mph becoming 10 mph in the afternoon. Inland...North winds 10 mph -becoming light in the afternoon."

    -

    Local -Effects and Compound Phrases

    -Some phrases are "compound" i.e. they are -composed of other phrases. In this case, you must specify the Local -Effect per phrase within the compound phrase definition as in the -following example: -

        def -skyWeather_byTimeRange_compoundPhrase(self):
    -        return -{
    -            -"phraseList": [
    -                -self.fireSky_phrase
    -                -#self.weather_phrase,
    -                -(self.weather_phrase, self._generalLocalEffects_list()),
    -                -],
    -            -"phraseMethods": [
    -                -self.assembleSentences,
    -                -self.skyWeather_finishUp,
    -            -],
    -            -}

    -

         def -_generalLocalEffects_list(self):
    -        -leArea1 = self.LocalEffectArea("Coast",  "on the coast")
    -        -leArea2 = self.LocalEffectArea("Inland", "inland")
    -        -leArea3 = self.LocalEffectArea("City", "in the city")
    -        return -[self.LocalEffect([leArea1, leArea2, leArea3], 5, " ")]

    -

    Remember, as always, to include the local -effect areas in the "intersectAreas" list within the component -definition:

    -

         def -getFirePeriod_intersectAreas(self):
    -        return -[
    -            -("MinT", ["BelowElev", "AboveElev"]),
    -            -("MaxT", ["BelowElev", "AboveElev"]),
    -            -("MinRH", ["BelowElev", "AboveElev"]),
    -            -("MaxRH", ["BelowElev", "AboveElev"]),
    -            -("RH", ["BelowElev", "AboveElev"]),
    -            -("Wx", ["BelowElev", "AboveElev"]),
    -            -]

    -

    Consolidation -Rules for Local Effects

    -Local effect phrases with multiple weather elements and time periods -could become complicated and unduly wordy.  To avoid this, we -implement the following consolidation rules for local effect phrases: -
      -
    • Embedded Local Effects for the simple case of no -sub-phrases simply use the words supplied in the Local Effect -definition:
    • -
        -
      • "Highs 45 except 25 above timberline."
      • -
      • "North winds 20 to 25 mph near the -coast -and west winds 10 mph inland."
      • -
      -
    -
      -
    • Conjunctive Local Effects for multiple sub-phrases: If -any sub-phrase has a local effect, separate into two phrases, one for -each local effect area.  Qualify each phrase with the descriptive -words for the local effect area.
    • -
        -
      • Instead of: "North winds 20 to 25 mph -near the coast and west winds 10 mph inland becoming 10 mph near the -coast and light inland in the afternoon."
      • -
        -Produce: "Near the coast...North winds 20 to 25 -mph becoming 10 mph in the afternoon.  Inland...North winds 20 to -25 mph becoming light in the
      • afternoon."
      • -
      • Instead of: "North winds 20 to 25 mph -except west winds 10 mph in the valleys becoming 10 mph except light in -the valleys in the afternoon."
      • -
        - Produce: "North -winds 20 to 25 mph becoming 10 mph. In the valleys...west winds 10 mph -becoming light in the afternoon." -
      -
    -NOTE: If you are -setting up a local effect for a multiple-element phrase, you MUST -include all the weather elements in the "intersectAreas" and/or -"additionalAreas" lists. -

    Local Effect Examples

    -

    Null Values and -Local Effects

    -Below area local Effect phrases where one area has a null (below -threshold) value so that only one local effect area is mentioned. -

    Set Up:

    -

        def -_windLocalEffects_list(self):
    -        -srnInland = self.LocalEffectArea("Inland","")
    -        -srnBeaches = self.LocalEffectArea("Beaches","at the beaches")
    -        return -[self.LocalEffect([srnInland, srnBeaches], 5, "...except ")]

    -

    The local effect descriptor will appear at the end of the sentence -IF there is only one subphrase.

    -

    SOUTHWEST WINDS 25 TO 35 MPH -AT THE BEACHES.

    -

    Otherwise, the sentence would be  ambiguous:

    -

    SOUTHWEST WINDS 25 TO 35 MPH -INCREASING TO 40 TO 50
    -MPH IN THE AFTERNOON AT THE -BEACHES.

    -

    So the system  produces:

    -

    AT THE BEACHES...SOUTHWEST -WINDS 25 TO 35 MPH INCREASING TO 40 TO 50
    -MPH IN THE AFTERNOON.

    -

    Null values and Wx: For -periods in which you have Local Effects for Wx, you might want to -specify afirst_null_nlValue -and null_nlValue -of "dry" so that the local effect can be correctly reported.  For -example:

    -

    def null_nlValue_dict(self, -tree, node):
    -        -# Descriptors for phrases
    -        -dict = TextRules.TextRules.null_nlValue_dict(self, tree, node)
    -        -componentName = node.getComponentName()
    -        -if componentName == "Period_1":
    -             -dict[Wx"] = "dry"
    -        -return dict

    -

    Then you will get phrases like:

    -

    SCATTERED SHOWERS...EXCEPT DRY IN -THE BLUE MOUNTAINS.

    -

    instead of just:

    -

    SCATTERED SHOWERS.

    -

    "Except" versus -"Otherwise" Wording

    -Below area examples of how to set up "except" types wording versus -"otherwise" wording in a local effect phrase.
    -Set-up: -

        def -_windLocalEffects_list(self):
    -        -srnInland = self.LocalEffectArea("BelowElev","")
    -        -srnBeaches = self.LocalEffectArea("AboveElev","at the beaches")
    -        return -[self.LocalEffect([srnInland, srnBeaches], 5, "...except ")]

    -

    SOUTHWEST WINDS 5 TO 15 MPH...EXCEPT SOUTHWEST 25 TO 35 MPH AT THE -BEACHES.

    -

    SOUTHWEST WINDS 5 TO 15 MPH. AT THE BEACHES...SOUTHWEST WINDS 25 TO
    -35 MPH INCREASING TO 40 TO 50 MPH IN THE AFTERNOON.

    -

    Set-up:

    -

        def -_windLocalEffects_list(self):
    -        -srnInland = self.LocalEffectArea("BelowElev","", "inland" )
    -        -srnBeaches = self.LocalEffectArea("AboveElev","at the beaches")
    -        return -[self.LocalEffect([srnBeaches, srnInland,], 5, "...otherwise ")] -

    -

    SOUTHWEST WINDS 25 TO 35 MPH AT THE BEACHES...OTHERWISE SOUTHWEST 5 -TO
    -15 MPH.

    -

    AT THE BEACHES...SOUTHWEST WINDS 25 TO 35 MPH INCREASING TO 40 TO 50 -
    -MPH IN THE AFTERNOON. INLAND...SOUTHWEST WINDS 5 TO 15 MPH.

    -

    More -Local Effect Features

    -The following example shows several features of the Local Effects -capability: -
      -
    • using "additional" (not "intersect") areas for Local Effects
    • -
    • using a method for defining the LocalEffect list based on the -current edit area
    • -
    • using the __Current__ area for comparison
    • -
    • checking for multiple Local Effects in order of precedence
    • -
    -In the following set-up, we have a small area (area1) which is a subset -of the larger zone.  This area is used instead of the larger zone -for phrase reporting.  However, in the case of temperature, we -want -to identify if certain regions (the Rush Valley or the Benches) within -the zone exhibit temperatures significantly different from the small -area.   This applies to only one area (area1) .  For -other areas in the product , we do not want to identify any Local -Effects.  Since the comparison areas (Rush_Valley and Benches) do -not intersect area1, we specify them in the product component as -"additionalAreas" instead of "intersectAreas" AND we set the -"intersectFlag" to zero when defining them as LocalEffectAreas. -

    Set-up:

    -

    In the product component definition, we specify the local effects -list as a method rather returning a list.  This is necessary since -we want to define the list "on-the-fly" based on the current edit area: -

    -

                (self.highs_phrase, self._tempLocalEffects_list), -
    -                -(self.lows_phrase, self._tempLocalEffects_list),

    -

    Then we add in the additonal areas to be -sampled and analyzed:

    -

                -"additionalAreas": [
    -                   -# Areas listed by weather element that will be
    -                   -# intersected with the current area then
    -                   -# sampled and analyzed.
    -                   -# E.g. used in local effects methods.
    -                   -("MaxT", ["Benches", "Rush_Valley"]),
    -                   -("MinT", ["Benches", "Rush_Valley"]),
    -             -],

    -

    Finally, we provide the method for defining -the local effects list "on-the-fly."

    -

        def -_tempLocalEffects_list(self, tree, node):
    -        if -self.currentAreaContains(tree, ["area1"]):
    -           -leArea1 = self.LocalEffectArea(
    -                    -"__Current__","",intersectFlag=0)
    -           -leArea2 = self.LocalEffectArea("Rush_Valley",
    -                    -"in the rush valley", intersectFlag=0)
    -           -leArea3 = self.LocalEffectArea(
    -                    -"Benches", "in the benches",intersectFlag=0)
    -           -return [
    -               -self.LocalEffect([leArea1,leArea2],5,"...except "),
    -               -self.LocalEffect([leArea1,leArea3],5,"...except "),
    -               -]
    -        else: -
    -           -return []

    -

    Note that the Rush Valley will be checked -first.  If a local effect is found, it will be reported:

    -

    HIGHS IN THE UPPER 50S...EXCEPT IN THE UPPER -20S TO UPPER 40S IN THE RUSH VALLEY.

    -

    If not, the Benches will be checked and if a -local effect is found, it will be reported:

    -

    HIGHS IN THE UPPER 50S...EXCEPT IN THE UPPER -20S TO UPPER 40S IN THE BENCHES.

    -

    Finally, if neither area triggers a local -effect, a simple phrase will be reported:

    -

    HIGHS IN THE UPPER 50S.

    -

    Local -Effects for Snow Accumulation and Total Snow Accumulation -- Using a -Method for the Checking the Local Effect Threshold

    -This section outlines how to produce local effect phrases such as the -following: -

    SNOW ACCUMULATION 4 INCHES...EXCEPT 7 INCHES -ABOVE
    -TIMBERLINE. TOTAL SNOW ACCUMULATION 9 -INCHES...EXCEPT 18 INCHES
    -ABOVE TIMBERLINE.

    -

    In your overrides file, you must override the product component(s) -for -which you want to report local effects for the snow_phrase and/or -total_snow_phrase. In these component definitions, specify the local -effect as follows:

    -

                       -(self.snow_phrase,self._snowAmtLocalEffects_list()),
    -                   -(self.total_snow_phrase,self._totalSnowAmtLocalEffects_list()),

    -

    Next, add the "intersectAreas" to these components for SnowAmt and -IceAmt (note that IceAmt is handled by the SnowAmt phrase):

    -

                -"intersectAreas": [
    -                   -# Areas listed by weather element that will be
    -                   -# intersected with the current area then
    -                   -# sampled and analysed.
    -                   -# E.g. used in local effects methods.
    -                   -("SnowAmt", ["BelowElev", "AboveElev"]),
    -                   -("IceAmt", ["BelowElev", "AboveElev"]),
    -                   -],

    -

    IMPORTANT NOTE:  The total_snow_phrase -looks AHEAD one period for information about snow ending (SnowAmt = 0). -Therefore, you must include the "intersectAreas" in the component -FOLLOWING the ones in which you are specifying a local effect for the -total_snow_phrase. For example, in the ZFP_<site>_Overrides file -using the 10-503 -directive, if I set up a total_snow_phrase local effect for Period_1 -and -Period_2_3, I must also include the "intersectAreas" for Period_4_5. -

    -

    Finally,  include the following local -effect lists in your Overrides file:

    -

        def -_snowAmtLocalEffects_list(self):
    -        -leArea1 = self.LocalEffectArea("BelowElev", "")
    -        -leArea2 = self.LocalEffectArea("AboveElev", "above timberline")
    -        return -[self.LocalEffect([leArea1, leArea2], 2, "...except ")]

    -

        def -_totalSnowAmtLocalEffects_list(self):
    -        -leArea1 = self.LocalEffectArea("BelowElev", "")
    -        -leArea2 = self.LocalEffectArea("AboveElev", "above timberline")
    -        return -[self.LocalEffect(
    -            -[leArea1, leArea2], self._checkTotalSnow, "...except ")]

    -

        def _checkTotalSnow(self, -tree, node, localEffect, leArea1Label, leArea2Label):
    -        -totalSnow1 = self.getTotalSnow(tree, node, leArea1Label)
    -        -totalSnow2 = self.getTotalSnow(tree, node, leArea2Label)
    -        if -totalSnow1 is None or totalSnow2 is None:
    -            -return 0
    -        if -abs(totalSnow1 - totalSnow2) > 3:
    -            -return 1
    -        return -0

    -

    Local -Effects for the Combined SkyPopWx Phrase

    -You can set up Local Effects for the combined skyPopWx_phrase just like -any other phrase.  This phrase has  primary element of Wx -with -Sky and PoP as secondary elements.  So local effects (as well as -sub-phrase combining) is based upon Wx.  If  you are -using the skyPopWx_phrase, you must also include the independent Sky, -PoP, and Wx phrases in your phraseList and then -include local effects for these phrases as well.  It is -recommended that you use the following Local Effect -Lists.    So, you would have:
    -  -

         "phraseList":[ -
    -                   -(self.sky_phrase, self._skyLocalEffects_list()),
    -
                       -(self.skyPopWx_phrase, self._skyPopWxLocalEffects_list()),
    -
                       -(self.weather_phrase,self._wxLocalEffects_list()),
    -
    -                   -(self.popMax_phrase, self._popLocalEffects_list()),
    -
                      -...
    -                   -],                  -
                    -
    -

    -

    And also within the product component definition:

    -

                -"intersectAreas": [
    -                   -("Sky", ["AboveElev", "BelowElev"]),
    -                   -("Wx",  ["AboveElev", "BelowElev"]),
    -                   -("PoP", ["AboveElev", "BelowElev"]),
    -
                       -], 

    -Set up the Local Effects lists as follows:
    -
    -    def -_skyLocalEffects_list(self):
    -        -leArea1 = self.LocalEffectArea("AboveElev", "windward")
    -        -leArea2 = self.LocalEffectArea("BelowElev", "leeward")
    -        -return [self.LocalEffect([leArea1, leArea2], self.checkSkyDifference, -"...")]
    - 
    -    def -_wxLocalEffects_list(self):
    -        -leArea1 = self.LocalEffectArea("AboveElev", "windward")
    -        -leArea2 = self.LocalEffectArea("BelowElev", "leeward")
    -        -return [self.LocalEffect([leArea1, leArea2], 0, "...")]
    -
    -    def -_popLocalEffects_list(self):
    -        -leArea1 = self.LocalEffectArea("AboveElev", "windward")
    -        -leArea2 = self.LocalEffectArea("BelowElev", "leeward")
    -        -return [self.LocalEffect([leArea1, leArea2], 20, "...")]
    -
    -    def -_skyPopWxLocalEffects_list(self):
    -        -leArea1 = self.LocalEffectArea("AboveElev", "windward")
    -        -leArea2 = self.LocalEffectArea("BelowElev", "leeward")
    -        -# Set threshold to be used by checkSkyWxDifference
    -        -self._skyLocalEffectThreshold = 38
    -        -return [self.LocalEffect([leArea1, leArea2],
    -                                 -self.checkSkyWxDifference, "...")]
    -
    -

     PERIOD COMBINING

    -Narrative products include a period combining capability that attempts -to combine periods with similar weather forecast values. To activate -period combining uncomment the following line in your Overrides file. -

        Definition["periodCombining"] -= 1     # If 1, do period combining

    -

    Period combining is set up by methods found in the PhraseBuilder -module:

    -

    1) If the periodCombining flag is set to 1 in the product, we add a -method to the product narrative tree top level node called  -"combineComponents" (in PhraseBuilder module).
    -2) The "combineComponents" method is called at the top of the tree and -compares all consecutive components for similarity.  Also, we are -only combining components that begin 36 hours after the issuance time -of the product.
    -3) If two components are deemed similar (according to the "periodCombining_elementList" (in -ConfigVariables)), then the component nodes are collapsed into one -node with the time range spanning the original nodes.
    -4) From here all phrases and processing pretty much the same as it -would have been for the original nodes.  To simplify combined -period -phrasing, there is a threshold "collapsedSubPhrase_hours" -(in ConfigVariables) which is set to 12 hours as the default. If the -period is longer than these hours, subphrases will automatically be -collapsed.  
    -

    -

    Periods can be combined providing the differences between the -adjacent periods are small.  There is one method per weather -element that determines whether two periods should be combined or -not.  These methods are found in the PhraseBuilder module.  -Each of them begin with "similar" followed by the weather element -name.  The table below shows the methods that have been -implemented -thus far and their thresholds.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -
      Element Name as listed in the periodCombining_elementList  Method Name (in PhraseBuilder module)  Thresholds
      Sky  similarSky  Sky words are similar
    -
      Wind  similarWind  mag within 10 knots 
    -  dir within 45 degrees
      Wx  similarWx  Identical wx keys per each analyzed sub-range
    -
     PoP
    -
      similarPoP
    -
    PoPs are equal or both below pop_lower_threshold or both above pop_upper_threshold
    -
     MaxT
    -
    similarMaxTMaxT within 5 degrees
    -
     MinTsimilarMinTMinT within 5 degrees
    -
    WaveHeight
    -
    similarWaveHeightWaveHeights within 4 feet
    -
    DiurnalSkyWxsimilarDiurnalSkyWxDiurnalSkyWx will combine if -there is a diurnal pattern of sky and wx. For example,  "CLOUDY IN -THE NIGHT AND MORNING...OTHERWISE CLEAR." or "LOW CLOUDS AND FOG IN THE -NIGHT AND MORNING...OTHERWISE CLEAR."
    -Note that it will also combine if the sky and wx are similar without a -diurnal pattern. 
    -
    -

    -

    Each of these methods can be overridden in your Overrides -file.  In -general, the threshold values are defined near the top of the method, -so -you won't need to hunt for them or change them in several places.  -If you desire to change the thresholds, copy the method into your -Overrides -file and modify the threshold value.  You can also modify the -algorithm, if you like.  The default method retrieves the -statistics and examines them to see if the values between each -component -are close enough to combine.  You will likely want to leave the -code that retrieves the statistics unmodified.  But you can choose -to change the logic that decides if the values are "similar".

    -

    When components are collapsed, we do not want phrases to have -detailed sub-phrases as we would in a normal 12-hour period.  -Sub-phrases are then automatically collapsed if the combined period -exceeds the collapsedSubPhrase_hours  found in the ConfigVariables module.   When -sub-phrases are collapsed, the data is summarized according to the mergeMethod for the -weather element being collapsed.  These settings can be overridden -in your Overrides file.

    -

        def -collapseSubPhrase_hours_dict(self, tree, node):
    -        # If -the period is longer than these hours, subphrases will automatically -
    -        # be -collapsed.
    -        return -{
    -            -"otherwise": 24,
    -            -#"Wx": 24,
    -            -}

    -

        def mergeMethod_dict(self, -tree, node):
    -        # -Designates the mergeMethod to use when sub-phrases are automatically -collapsed.
    -        return -{
    -            -"otherwise": "Average",
    -            -"MinT": "Min",
    -            -"MaxT": "Max",
    -            -"PoP": "Max",
    -            -"Wx": "List",  # Still want Wx to be broken out
    -            -}

    -

     PHRASE -CONSOLIDATION

    -Phrases with multiple weather elements and complex temporal resolution -can become very complicated and unduly wordy.  To avoid these -situations, we implement a set of consolidation rules described in this -section.  These rules are for Scalar and Vector elements.  -For information on Weather consolidation see the Section on Weather Phrasing.
    -

    Definitions: Phrases are composed of sub-phrases depending on the -temporal resolution of the statistics.  For example, the Wind -phrase in the ZFP is composed of 2 6-hour sub-phrases, e.g. "North wind -10-15 mph increasing to 20 mph in the afternoon." A phrase can report -on -multiple elements (e.g. Wind and WindGust).  "North wind 10-15 mph -with gusts up to 35 mph."  Weather elements in these phrases are -considered "primary" and "secondary".

    -
      -
    • More than one element can be designated as "primary" in a phrase. -For example, for the wind phrase "Wind" and "WindGust" would both be -primary.
    • -
    • Though there can be more than one primary element for -consolidation purposes, the sub-phrase time ranges will be based upon -the first element's statistics.
    • -
    • Consolidation Rule: Separate any "primary elements" that are -similar throughout the time period into a separate phrase.
    • -
        -
      • Instead of: "North wind 10 mph with -gusts up to 35 mph increasing to 20 mph with gusts up to 35 mph in the -afternoon."
      • -
      • Produce: "North wind 10 mph increasing -to 20 mph in the afternoon. Gusts up to 35 mph."
      • -
      -
    • Elements can still be designated as secondary so that when -combined, an average, min, max, or sum of their values can be used. -Suppose that Swell and Swell2 are primary and Period and Period2 are -secondary.
    • -
        -
      • Instead of: "North swell 10 ft at 5 -seconds and northeast swell 12 ft at 5 seconds becoming north swell 10 -ft at 15 seconds and north swell 15 ft at 5 seconds"
      • -
      • Produce: "North swell 10 ft at 10 -seconds and northeast swell 12-15 ft at 5 seconds."
      • -
      -
    • Consolidation Rule For Vector Direction: If there are no -secondary elements and the direction is a progression with similar -magnitudes, report only the first and last directions.
    • -
        -
      • Instead of: "North wind 10 mph becoming -northeast 15 mph in the late morning becoming east 10 mph."
      • -
      • Produce: "North wind 10-15 mph becoming -east 10 mph in the afternoon."
      • -
      -
    • Consolidation Rule For Trends: If there are no secondary -elements and the magnitude is a progression over the time period, -report -only the first and last magnitudes with no time descriptors.
    • -
        -
      • Instead of: "Waves 2 to 4 feet building -to 3 to 6 ft in the late morning and early afternoon building to 4 to 7 -feet."
      • -
      • Produce: "Waves 2 to 4 feet building to -4 to 7 feet."
      • -
      -
    -

    PHRASE ORDERING

    -You might want to re-order the phrases of a component based on the -forecast data.  For example, suppose we have the following: -

    .TODAY...STRONG WINDS. THUNDERSTORMS WITH -HEAVY RAINFALL.  HIGHS
    -AROUND 80. SOUTHEAST WINDS AROUND 70 MPH BECOMING -SOUTH AROUND 105
    -MPH IN THE AFTERNOON.

    -

    The winds are the most dominant feature and -thus you might want to move the "wind_withGusts_phrase" closer to the -beginning of the forecast.  To re-order phrases on-the-fly, follow -steps similar to this example:

    -

    --Make sure the Product Component Definition -for any Periods in which you'd like to order the phrases has the -method, "orderPhrases", prior to "assembleSubPhrases":

    -

        def Period_1(self):
    -        -component =  {
    -            -"type": "component",
    -            -"methodList": [
    -                          -self.orderPhrases,
    -                          -self.assemblePhrases,
    -                          -self.wordWrap,
    -                          -],
    -            -....

    -

     --Modify the -"orderPhrases"(PhraseBuilder) method, for example:

    -

        def orderPhrases(self, -tree, component):
    -        -reorderList = []
    -        -timeRange = component.getTimeRange()
    -        -areaLabel = component.getAreaLabel()

    -

            # -Put in some logic to see if you want to re-arrange the order
    -        # of -the phrases.  For example:
    -        # -Check for high winds
    -        -windMax, dir = tree.stats.get("Wind", timeRange, areaLabel, -mergeMethod="Max")
    -        if -windMax > 50:
    -           -# Put wind phrase first
    -           -reorderList.append(("wind_withGusts_phrase", "weather_phrase"))

    -

            # -Apply any reorderings that were identified
    -        for -name1, name2 in reorderList:
    -           -self.moveAbove(tree, component, name1, name2)
    -        return -self.DONE()

    -

    "UNTIL" PHRASING

    -In some phrases, you might want more resolution on the time descriptors -such as in the following: -

            "North winds 20 mph until 10 AM then 35 mph."

    -

    To accomplish this, override the flags below from the -ConfigVariables module.  Be sure that if you want higher temporal -resolution in your phrase, to set the temporal resolution in the -analysisList accordingly.  For example:

    -

                           -("Wind", self.vectorMedianRange, [0]),

    -

        def -untilPhrasing_flag_dict(self, tree, node):
    -        # If -set to 1, "until" time descriptor phrasing will be used.
    -        # E.g. -"NORTH WINDS 20 MPH UNTIL 10 AM...THEN 35 MPH"
    -        return -{
    -            -"otherwise": 0,
    -            -#"Wind" : 1,
    -            -}

    -

        def -onTheFly_untilPhrasing_flag_dict(self, tree, node):
    -        # If -set to 1, "until" time descriptor phrasing will be used ONLY if
    -        # the -time range for a sub-phrase does not end on a 3-hour boundary.
    -        return -{
    -            -"otherwise": 1,
    -            -#"Wind" : 1,
    -            -}

    -

        def -untilPhrasing_format_dict(self, tree, node):
    -        # -Format for "until" time descriptors.
    -        # If -"military": UNTIL 1000
    -        # If -"standard": UNTIL 10 AM
    -        return -{
    -            -"otherwise": "military",
    -            -#"Wind": "standard",
    -            -}

    -

    The untilPhrasing may apply to only certain -components of your product.  You can make this distinction as in -this  example from the FWF:

    -

        def -untilPhrasing_flag_dict(self, tree, node):
    -        # If -set to 1, "until" time descriptor phrasing will be used.
    -        # E.g. -"NORTH WINDS 20 MPH UNTIL 10 AM...THEN 35 MPH"
    -        # Be -sure to increase the temporal resolution if desired:
    -        # -E.g.  ("MixHgt", self.minMax, [0]),
    -        dict = -TextRules.TextRules.untilPhrasing_flag_dict(self, tree, node)
    -        -dict["LAL"] = 1
    -        -componentName = node.getComponent().get("name")
    -        if -componentName == "FirePeriod":
    -            -dict["Sky"] = 1
    -            -dict["Wx"]  = 1
    -        return -dict

    -

    VISIBILITY

    -Visibility is an attribute of the Wx grid and is reported on a -sub-phrase level within the weather_phrase.  -Since  each sub-phrase can have multiple subkeys, we report  -the lowest visibility over the subkeys.    The -visibility -attribute is specified in the grids in statute miles.  You can -specify the output units ("SM" or "NM" for nautical miles) for -visibility in the element_outUnits_dict for "Visibility". Here's -an example: -

    Example 1:
    -  Grids:
    -      Hour 1-6      -Patchy F 1/4SM Chc R 1/2SM
    -      Hour 7-12   Sct  RW

    -

      Phrase:
    -CHANCE OF LIGHT RAIN AND PATCHY FOG WITH VISIBILITY LESS THAN 1 NM THEN -SCATTERED RAIN
    -SHOWERS IN THE AFTERNOON.

    -

    Example 2:
    -  Grids:
    -      Hour 1-6      -Patchy F 1/4SM Chc R 1/2SM
    -      Hour 7-12   Sct  RW -11/2SM

    -

      Phrase:  CHANCE OF LIGHT RAIN AND PATCHY FOG WITH -VISIBILITY LESS THAN 1 NM THEN SCATTERED RAIN SHOWERS WITH 2 NM -VISIBILITY IN THE AFTERNOON.

    -

    The wording for visibility within the weather -phrase can be configured by overriding the -visibility_weather_phrase_nlValue.

    -

    You can set the null_nlValue  -for "Visibility" so that only visibilities below the threshold are -reported.  The value should be in nautical miles. Suppose we have -set this value to 3 nautical miles, Then:

    -

    Example 3:
    -  Grids:
    -      Hour 1-6      -Patchy F 4SM Chc R
    -      Hour 7-12   Sct  RW

    -

      Phrase:
    -CHANCE OF LIGHT RAIN AND PATCHY FOG THEN SCATTERED RAIN SHOWERS IN THE -AFTERNOON.

    -

    You can set the  visibility_wx_threshold  -so that weather is only reported if visibility is below the -threshold.   Also, in this case you might want to set up a -list of significant_wx_visibility_subkeys.   If any of these subkeys appear in the sub-phrase, the -weather will be reported regardless of the visibility.  Suppose we have:

    -

        def -visibility_wx_threshold(self, tree, node):
    -        # -Weather will be reported if the visibility is below
    -        # this -threshold (in NM) OR if it includes a
    -        # -significant_wx_visibility_subkey (see below)
    -        return -3

    -

        def -significant_wx_visibility_subkeys(self, tree, node):
    -        # -Weather values that constitute significant weather to
    -        # be -reported regardless of visibility.
    -        # If -your visibility_wx_threshold is None, you do not need
    -        # to -set up these subkeys since weather will always be
    -        # -reported.
    -        # Set -of tuples of weather key search tuples in the form:
    -        -#  (cov type inten)
    -        # -Wildcards are permitted.
    -        return -[("* T"), ("* ZY")]

    -

    then:

    -

    Example 4:
    -  Grids:
    -      Hour 1-6      -Patchy F 1/4SM Chc R 4SM
    -      Hour 7-12   Sct  RW

    -

      Phrase:  CHANCE OF LIGHT RAIN AND PATCHY FOG WITH -VISIBILITY LESS THAN 1 NM IN THE MORNING.

    -

    Example 5:
    -   Hour 1-6      F 1/4SM  RW -1/2SM
    -   Hour 7-12   TRW

    -

      Phrase:   CHANCE OF LIGHT RAIN AND PATCHY FOG WITH -VISIBILITY LESS THAN 1 NM THEN SCATTERED SHOWERS AND
    -THUNDERSTORMS IN THE AFTERNOON.

    -

    Finally, there is a consolidation method (consolidateVisibility -in WxPhrases).  If the low visibility is constant across -sub-phrases, visibility is separated out into its own phrase:

    -

    Example 6:
    -   Hour 1-6      F 1/4SM  RW -1/2SM
    -   Hour 7-12   TRW  1/4SM

    -

      Phrase:   CHANCE OF LIGHT RAIN AND PATCHY FOG THEN -SCATTERED SHOWERS AND THUNDERSTORMS IN THE AFTERNOON. VISIBILITY LESS -THAN 1 NM.

    -

    The wording for visibility within the -visibility_phrase can be configured by overriding the visibility_phrase_nlValue.
    -

    -

    If you always want visibility reported in its own phrase, you can -include the visibility_phrase in your -phrase list ANDmake sure to set the  embedded_visibility_flag to zero so that it does not appear redundantly within -the weather phrase.

    -

    WEATHER -PHRASING

    -Also see sections on
    -     Algorithm for rankedWx -and dominantWx
    -     Customizing -Weather Phrases
    -     PoP/Wx -Consistency
    -     Local -Effects for the Combined SkyPopWx Phrase
    -
    -Weather phrasing in the formatters involves many -modules and logic threads as outlined in the following diagram:
    -
    -Weather Phrase Design
    -
    -Weather phrasing is complex, but centers around two primary -methods:  "makeAggregateSubkey" (CommonUtils) and -"checkWeatherSimilarity" (PhraseBuilder).  These methods are -ultimately employed throughout the many phases of text generation: -Analysis, Merging of grid statistics, Sub-phrase Combining, Local -Effects, Period Combining and Weather Wording.  This ensures -consistency throughout the process and makes customizing easier.
    -
    -The makeAggregateSubkey method -consolidates two subkeys according to the following:
    -
    -
      -
    • coverage and intensity:  choose -highest ranked, or if similar ranks,  strongest
    • -
    • visibility: choose lowest visibility
    • -
    • attributes:  make aggregate list
      -
    • -
    -It uses the rankFuzzFactor -(CommonUtils) to determine if 2 ranks are similar.  It refers to -the wxHierarchies (WxPhrases) to -determine which coverage or intensity is stronger.
    -
    -The checkWeatherSimilarity -method compares two rankLists i.e. lists of (subkey, rank) -tuples.  It uses similarWxTypes, -similarCoverageLists and similarIntensities to -determine if subkeys are similar.   To -be deemed similar, the rankLists must meet the following criteria:
    -
    -
      -
    • Have the same number of subkeys,
    • -
    • If there is just one subkey per rankList, the subkeys must have -the same weather type,  similar intensities AND similar coverages,
    • -
    • The rankLists differ only in intensity (this test is skipped if -"noIntensityCombining" is turned on for the node e.g. -severeWeather_phrase),
      -
    • -
    • If there is more than one subkey per rankList, they must pass the -"checkSubkeysSimilarity" test:
      -
    • -
        -
      • The set of wxTypes in rankList1 is equal to the set of wxTypes -in rankList2 AND
        -
      • -
      • Each wxType individually can be combined i.e. they have similar -coverages.   
        -
      • -
      -
    • In the case that they can be combined, the -"checkSubkeysSimilarity" method returns an aggregate "rankList" which -it creates using "makeAggregateSubkey".
      -
    • -
    -      
    -Analysis:  -The "rankedWx" method is used for weather phrasing and is discussed in -detail in the section Algorithm -for rankedWx -and dominantWx. Of note, here, is that the algorithm uses the -"aggregateCov_algorithm" (default is "getAggregateCov")  to -compute an aggregate coverage, -and the "getAggregate" method to determine the aggregate -intensity,  visibility, and attributes according to the rules of -the "makeAggregateSubkey" (CommonUtils) method. 
    -
    -In the Analysis phase, we also Filter -the subkeys.  Just as Scalar and Vector statistics are -automatically converted and rounded, weather subkeys are automatically -filtered according to the following criteria:
    -
      -
    • If the filter_subkeys_flag -is -set to 0, no filtering is done.  Default is 1.
    • -
    • Subkeys with the same weather type are -combined using the "makeAggregateSubkey" method.
      -
    • -
    • Subkeys with differing weather types are -combined according to the wxCombinations - list:
    • -
    -    -def wxCombinations(self):
    -        # This -is the list of which wxTypes should be combined into one.
    -        # For -example, if ("RW", "R") appears, then wxTypes of "RW" and "R" will -
    -        # be -combined into one key and the key with the dominant coverage will -
    -        # be -used as the combined key.
    -        # You -may also specify a method which will be
    -        -#  -- given arguments subkey1 and subkey2 and
    -        -#  -- should return
    -        -#     -- a flag = 1 if they are to be combined, 0 -otherwise
    -        -#     -- the combined key to be used
    -        -#  Note: The method will be called twice, once with (subkey1, -subkey2)
    -        -#  and once with (subkey2, subkey1) so you can assume one ordering. -
    -        -#  See the example below, "combine_T_RW"
    -        # -
    -        return -[
    -                -("RW", "R"),
    -                -("SW", "S"),
    -                -self.combine_T_RW,
    -            -] -

         def -combine_T_RW(self, subkey1, subkey2):
    -        # -Combine T and RW only if the coverage of T
    -        # is -dominant over the coverage of RW
    -        -wxType1 = subkey1.wxType()
    -        -wxType2 = subkey2.wxType()
    -        if -wxType1 == "T" and wxType2 == "RW":
    -            -order = self.dominantCoverageOrder(subkey1, subkey2)
    -            -if order == -1:
    -                -return 1, subkey1
    -        return -0, None

    -All weather filtering variables are located in -the WxPhrases module and can be overridden by copying them into your -Overrides file.
    -
    -Merging of statistics occurs -when a tree.stats.get command requests statistics for a time period -spanning more than one in the Statistics Dictionary.  For example, -if we request Wx statistics with a 3-hour temporal resolution and -request the statistics for a 6-hour period, we must merge the 3-hour -statistics.  Again, we must filter  subkeys and ultimately -employ  the "makeAggregateSubkey" method.
    -
    -Sub-phrase Combining.  There -are various weather phrases for which we must combine -sub-phrases.  The "skyPopWx_phrase" is used for simpler cases in -which the resulting phrase only requires 1 or 2 sub-phrases.  For -more complex scenarios, the "weather_phrase" is triggered.  The -"severeWeather_phrase" and "heavyPrecip_phrase" are special cases, but -use the same combining scheme to determine the appropriate sub-phrasing.
    -
      -
    • "weather_phrase", "severeWeather_phrase", "heavyPrecip_phrase" -rely on the "preProcessWx" method to combine the weather types found in -the time period of interest.  This method uses the -"checkWeatherSimilarity" method to determine if subkeys can be combined -and the "makeAggregateSubkey" method to create new subkeys for the -resulting sub-phrases.  Subkeys are put into sub-phrases with -others of the same time span within the time period.  This method -looks at all the subkeys for all sub-phrases at one time.  For -example, if you had
      -
    • -
        -
      • Hours 1-3: Wide R, SChc S
      • -
      • Hours 4-6: SChc S
      • -
      • Hours 7-12: SChc S Lkly ZR
      • -
      -
    -           you would -end up with
    -
      -
        -
      • SubPhrase 1: Hours 1-3:  Wide R
      • -
      • SubPhrase 2: Hours 1-12: SChc S
      • -
      • SubPhrase 3: Hours 7-12: Lkly ZR
      • -
      -
    -           and -wording:  "Widespread rain in the early morning.  Slight -chance of snow through the day.  Freezing rain likely in the -afternoon."
    -
      -
    • "skyPopWx_phrase": This phrase is used only for the simpler case -of 1 or 2 resulting sub-phrases.  Thus, we use the simpler -sub-phrase by sub-phrase combining method, "combineStats" which also -employs the "checkWeatherSimilarity" and "makeAggregateSubkey" -methods.   The sub-phrase by sub-phrase combining allows us -to have phrases such as: "Rain and snow in the morning then snow in the -afternoon."  instead of "Rain in the morning.  Snow through -the day."
    • -
    -Local Effects.  For -consistency, local effects for the weather phrases uses the same -underlying "checkWeatherSimilarity" method.   Local effects -for the weather_phrase will use the general -"checkLocalEffectDifference" (PhraseBuilder) method which in turn calls -"checkWeatherSimilarity".  For information on setting up local -effects for the "skyPopWx_phrase", see the section: Local -Effects for the Combined SkyPopWx Phrase.
    -
    -Period Combining.  
    If you choose to examine Wx  -similarities as a basis for period combining, the "similarWx" method -will call "checkWeatherSimilarity" for it's comparison of Wx across -periods.
    -
    -Weather Words.  
    The words for each weather -sub-phrase are created by the following steps:
    -
      -
    • If the PoP is below the pop_wx_lower_threshold,   pop_related_wxTypes are removed.
    • -
    • Check for weather wording dependent on the -visibility threshold.  See section: Visibility
    • -
    • If useSimple  (default -is 2 or fewer subkeys),  use old-style simpler wording i.e. do not -use "mixed with", "pockets of", etc.  Examples of Simple wording: -"Rain and snow likely in the evening." "Chance of rain and snow and -slight chance of sleet in the evening." "Chance of showers." "Mostly -cloudy with rain likely and a slight chance of -thunderstorms."   Example of  Complex wording: "Rain -mixed with snow likely in the evening." "Chance of rain mixed with snow -and sleet in the evening."
    • -
    • Otherwise, use ranking of subkeys to form wording:
    • -
        -
      • For subkeys with similar rank and coverages, use "mixed with" -wording .
      • -
      • For subkeys with lesser coverage than the highest ranked, use -"possibly mixed with".
      • -
      • For subkeys with greater coverage than the highest ranked, use -"with pockets of"
      • -
      -
    -          Only switch once -to "mixed with", "possibly mixed with" or "with pockets of".  The rankFuzzFactor (CommonUtils) is used to -determine if ranks are similar and   the similarCoverages  method is used to -determine if coverages are similar.  The wording can be adjusted -for mixedWith, possiblyMixedWith, -withPocketsOf  and -wxConjunction.
    -
    -
      -
    • The "weather_value" method constructs the words for each -subkey.  This wording can be adjusted and is described in the -section: Customizing -Weather Phrases.
    • -
    • Add embedded visibility wording if needed.
    • -
    -
    -
    -

    Appendix A

    -

    Local Effects Re-design/Design to Handle Combined Phrases
    -

    -

    Phrase Processing Steps including Local Effects

    -
      -
    • CONSOLIDATE --Phrase Level: -e.g. separateNonPrecip (separate out non-precip events such as Fog from -RW), consolidateWx (if RW appears throughout the period and S is just -in the afternoon, split them into separate phrases), consolidatePhrase -(if Gusts are the same throughout the period and the Wind changes, -split them into separate phrases).
    • -
    • CHECK FOR LOCAL EFFECTS -- Phrase Level:  If local -effects are triggered, create separate Conjunctive phrases for each -local effect area (or group of areas).
      -
    • -
    • COMBINE -- Phrase Level:  Combine -sub-phrases based on similar data.
    • -
    • CREATE WORDS -- Sub-phrase Level: Create words for -each sub-phrase.
    • -
    • CONSOLIDATE SUB-PHRASES -- -Component Level: -Consolidate so that we do not have duplicate phrasing within local -effect areas. 
      -
    • -
    • ASSEMBLE SUB-PHRASES -- Phrase -Level.
      -
    • -
    • ASSEMBLE PHRASES -- Component -Level:
      -
    • -
        -
      • Order Wx Phrases
        -
      • -
      • Consolidate Local Effect Phrases
      • -
          -
        • Incorporate Non Local Effect phrases (not implemented) OR
        • -
        • Convert to Embedded phrases if possible
        • -
        • Order Local Effect phrases that remain Conjunctive
        • -
        -
      • Assemble Component Words with appropriate qualifiers
        -
      • -
      -
    -

    Examples of Phrase Processing Steps

    -The following examples show the progression through the phrase -processing steps.  They are rough sketches, not intended to be -complete. They use these abbreviations:
    -
      -
    • Area1 is the entire area while WW (Windward)  and LW -(Leeward) are local effect areas.
    • -
    • SPW = skyPopWx_phrase
    • -
    • Wx = weather_phrase
    • -
    • PoP = popMax_phrase
    • -
    • Sky = sky_phrase
    • -
    • >> Means "executes"
      -
    • -
    • --> Means "results in"
    • -
    -

    Test Case 3_3 F20
    -

    -Grids:
    -        -Area1:              -  Iso T (hours 0-6)  Chc R Lkly S    Sky -90  (hours 0-12)
    -                                         -(The Wx is the result when we sample the combined Windward and Leeward -values).
    -        -Windward:        Iso T (hours -0-6)   Lkly R Lkly S  PoP 90    Sky -90  (hours 0-12)
    -        -Leeward:            -Iso T (hours 0-6)   Chc -R                -PoP 40    Sky 90  (hours 0-12)
    -
    -Words:
    -       ISOLATED THUNDERSTORMS IN THE -MORNING.
    -       RAIN AND SNOW LIKELY WINDWARD...A -40 PERCENT CHANCE OF RAIN LEEWARD
    -       ...CHANCE OF PRECIPITATION 70 -PERCENT WINDWARD.
    -
    -Note:  The PoP is reported separately for WW because it is greater -than 60.
    -
    -Steps:
    -
      -
    • Sky Phrase >> includeSky == 0 since same throughout, so -kept phrase >> empty words since PoP > 60
      -
    • -
    • SPW Area1  >> Consolidation -->
      -
    • -
        -
      •  SPW Area1 for Chc R Lkly S  >> -CheckLocalEffects -->
      • -
          -
        • SPW WW for Lkly R Lkly S --> RAIN AND SNOW LIKELY WINDWARD
        • -
        • SPW LW for Chc R --> A 40 PERCENT CHANCE OF RAIN LEEWARD
        • -
        -
      • SPW  Area1 for Iso T >> CheckLocalEffects --> -ISOLATED THUNDERSTORMS IN THE MORNING.
        -
      • -
      -
    • Wx Area1 >> Consolidation (preProcessWx rearranges -sub-phrases) >> CheckLocalEffects -->
    • -
        -
      • Wx WW >> removed by SPW Windward Lkly R Lkly S
      • -
      • Wx LW >> removed by SPW Leeward Chc R
      • -
      -
    • Pop Area1 >> Removed by SPW Windward and Leeward
      -
    • -
    -

    Test Case 3_3 F6 
    -

    -Grids:
    -        -Area1:              - 
    -        -Windward:         Sct RW  -Sky 70   PoP 50
    -        -Leeward:            -NoWx     Sky 20   PoP   0
    -
    -Words:
    -       SUNNY LEEWARD...MOSTLY CLOUDY WITH -SCATTERED SHOWERS WINDWARD...CHANCE OF SHOWERS 50 PERCENT WINDWARD
    -Steps:
    -
      -
    • Sky Area1 >> CheckLocalEffects -->
    • -
        -
      • Sky WW --> Removed by SPW for WW
        -
      • -
      • Sky LW --> SUNNY
        -
      • -
      -
    • SPW Area1  >> Consolidation  >> -CheckLocalEffects -->
      -
    • -
        -
      • SPW WW --> MOSTLY CLOUDY WITH SCATTERED SHOWERS
        -
      • -
      • SPW LW   -- Removed because there is NoWx
        -
      • -
      -
    • Wx Area1 >> CheckLocalEffects -->
    • -
        -
      • Wx WW --> removed by SPW WW -->
        -
      • -
      • Wx LW --> empty
        -
      • -
      -
    • Pop Area1 >> CheckLocalEffects -->
    • -
        -
      • Pop WW --> CHANCE OF SHOWERS 50 PERCENT
      • -
      • Pop LW --> empty
        -
      • -
      -
    -

    Test Case 3_3 F30  Sub-phrase consolidation Case 1
    -

    -This is an example in which we need the Consolidate Sub-phrases step.
    -Case 1: duplicate sub-phrases are for the same areaLabel.
    -
    -Grids:
    -        -Area1:              - 
    -        -Windward:        (hours 9-12) Wx: -Patchy:F  PoP 20  Sky 50
    -        -Leeward:            -(hours 9-12) Wx: Wide:F    PoP 0    Sky 50
    -
    -Words:
    -       MOSTLY SUNNY.
    -       WINDWARD...PATCHY FOG LATE IN THE -AFTERNOON.
    -       LEEWARD...WIDESPREAD FOG LATE IN -THE AFTERNOON.
    -
    -
      -
    • Sky Area1 --> MOSTLY SUNNY.
      -
    • -
    • SPW Area1  >> Consolidation -->
      -
    • -
        -
      • Spawned Wx Area1 (F) --> Consolidation --> -CheckLocalEffects -->
      • -
          -
        • Wx WW  Patchy F
        • -
        • Wx Leeward Widespread F
          -
        • -
        -
      -
    • Wx Area1 >> CheckLocalEffects -->
    • -
        -
      • Wx WW --> Patchy F
        -
      • -
      • Wx LW --> Widespread F
        -
      • -
      -
    • Pop Area1 >> No PoP reported.
      -
    • -
    -
      -
    • >> All these subPhrases are processed by -ConsolidateSubPhrases which finds Case 1:
    • -
        -
      • Wx WW   Patchy F
      • -
      • Wx WW   Patchy F
      • -
      • Wx LW  Widespread F
      • -
      • Wx LW  Widespread F
      • -
      -
    • After Consolidating Sub-Phrases: -->
    • -
        -
      • Wx WW   Patchy F
      • -
      • Wx LW    Widespread F
      • -
      -
    -

    Test Case 3_3 F22  Sub-phrase -consolidation Case 2

    -This is an example in which we need the Consolidate Sub-phrases step.
    -Case 2:  duplicate subphrases are for a local effect and cover all -possible local effect areas for their phrase, create a new phrase for -component.getAreaLabel() with this subPhrase wording. Remove the local -effect subPhrases.
    -
    -Grids:
    -        -Area1:              - 
    -        -Windward:        Chc T (hours -0-6)   Lkly RW    PoP 70
    -        -Leeward:            -Chc T (houts 0-6)   Chc RW     PoP 40
    -
    -Words:
    -       CLOUDY.  CHANCE OF -THUNDERSTORMS IN THE MORNING.
    -       WINDWARD...SHOWERS LIKELY...CHANCE -OF SHOWERS AND THUNDERSTORMS 70 PERCENT.
    -       LEEWARD...CHANCE OF SHOWERS IN THE -AFTERNOON...CHANCE OF SHOWERS AND THUNDERSTORMS
    -      40 PERCENT.
    -      
    -Steps:
    -
      -
    • Sky Area1 --> CLOUDY.
      -
    • -
    • SPW Area1  >> Consolidation (Chc T is not the same -throughout period) >> CheckLocalEffects -->
      -
    • -
        -
      • SPW WW >> Consolidation -->
        -
      • -
          -
        • SPW WW for Chc T --> CHANCE OF THUNDERSTORMS IN THE MORNING
        • -
        • SPW WW for Lkly RW --> SHOWERS LIKELY
        • -
        -
      • SPW LW >> Consolidation -->
        -
      • -
          -
        • SPW LW for Chc T --> CHANCE OF THUNDERSTORMS IN THE MORNING
        • -
        • SPW LW for Chc RW --> CHANCE OF SHOWERS IN THE AFTERNOON
        • -
        -
      -
    • Wx Area1 >> CheckLocalEffects -->
    • -
        -
      • Wx WW --> removed by SPW WW
        -
      • -
      • Wx LW --> removed by SPW LW
        -
      • -
      -
    • Pop Area1 >> CheckLocalEffects -->
    • -
        -
      • Pop WW --> CHANCE OF SHOWERS AND THUNDERSTORMS 70 PERCENT
      • -
      • Pop LW --> CHANCE OF SHOWERS AND THUNDERSTORMS 40 PERCENT
      • -
      -
    -
      -
    • >> All these subPhrases are processed by -ConsolidateSubPhrases which finds Case 2:
    • -
        -
      • SPW WW   CHANCE OF THUNDERSTORMS
      • -
      • SPW LW    CHANCE OF THUNDERSTORMS
      • -
      -
    • After Consolidating Sub-Phrases: -->
    • -
        -
      • SPW Area1 Chc T --> CHANCE OF THUNDERSTORMS IN THE MORNING
      • -

      • -
      • -
      • SPW WW for Lkly RW --> SHOWERS LIKELY
      • -
      • SPW LW for Chc RW --> CHANCE OF SHOWERS IN THE AFTERNOON
      • -
      -
    -       Note:  The leeward showers -are "in the afternoon" because T and RW are combined if their
    -       the coverage of T is greater or -equal to that of RW.
    -

    Test Case 3_3 F45 Need checkSkyPopWx to remove pop phrases for -component as well as local effect area.

    -Grids:
    -        -Windward:        Sky: -Cloudy            -SChc S    PoP 20
    -        -Leeward:            -Sky: Partly Sunny Chc R      PoP 30
    -
    -Words:
    -      CLOUDY WITH A 20 PERCENT CHANCE OF SNOW -WINDWARD...
    -      PARTLY SUNNY WITH A 30 PERCENT CHANCE OF -RAIN LEEWARD
    -
    -(No extra PoP phrase)
    -      
    -Steps:
    -
      -
    • Sky >> CheckLocalEffects -->
    • -
        -
      • Sky Windward >> removed by SPW Windward
        -
      • -
      • Sky Leeward >> removed by SPW Leeward
        -
      • -
      -
    • SPW Area1  >> CheckLocalEffects -->
    • -
        -
      • SPW Windward  >> CLOUDY WITH A 20 PERCENT CHANCE OF -SNOW WINDWARD...
      • -
      • SPW Leeward      >> PARTLY SUNNY -WITH A 30 PERCENT CHANCE OF RAIN LEEWARD
      • -
      -
    • Wx Area1 >> CheckLocalEffects -->
    • -
        -
      • Wx Windward >> removed by SPW Windward
        -
      • -
      • Wx Leeward >> removed by SPW Leeward
        -
      • -
      -
    • PoP Area1 >> removed by SPW Windward and/or Leeward (which -removes both the LE area and Area1).  This works because there is -never a case where you have a local effect PoP reported AND you also -want an Area1 PoP reported.
      -
    • -
    -

    -

    Design Changes Made from Original Local Effect Strategy to New

    -Basically, we were trying to do too much upstream,  making -assumptions -that were ok for simple 1-dimensional phrases, but did not hold for -multi-element phrases. Now we have moved much of the decision-making -downstream when we know more about the outcome.
    -
      -
    • "checkLocalEffects" -method:  Change: "checkLocalEffects" must run after -spawning new phrases.  -We cannot assume that "checkLocalEffects" runs as the first phrase -method. With phrases that might split into multiple phrases, we need to -check for local effects AFTER phrases have been split, say, into -separate sky and weather phrases or separate wind and wind gust -phrases.
      -
    • -
        -
      • "checkLocalEffects" was automatically added as the first -phraseList method by ForecastNarrative.
      • -
      • Now Phrase Definitions must  list -"checkLocalEffects" explicitly. 
        -
      • -
          -
        • "standard_phraseMethods"  (PhraseBuilder)
          -
        • -
        • "standard_vector_phraseMethods" (VectorRelatedPhrases)
          -
        • -
        • "standard_weather_phraseMethods" (WxPhrases)
          -
        • -
        • "skyPopWx_phrase" (CombinedPhrases)
          -
        • -
        • "sky_phrase" (ScalarPhrases)
        • -
        • "fireSky_phrase", -"trend_DayOrNight_phrase", "dayOrNight_phrase", "haines_phrase", -"lal_phrase" (FirePhrases)
          -
        • -
        -
      • Must carry over "localEffects" information when spawning new -phrases in "splitPhrase" and "splitWxPhrases" -(PhraseBuilder)
      • -
      • Must apply "disabledSubkeys" when checking local effects in "checkThreshold", -"checkSkyWxDifference" (PhraseBuilder)
        -
      • -
      -
    • All local effects start out as -conjunctive. Change: Make all local effects conjunctive when -created then after all processing is done, convert to embedded if -appropriate. ("checkLocalEffects" in -PhraseBuilder and "makeLocalEffectNodes") -We used to try and determine if a phrase could be embedded at the -beginning of processing when we first discovered there was a local -effect.  Later, we would find that some of the conjunctive phrases -degenerated and could be turned into embedded. 
      -
    • -
        -
      • "localEffect_hook" -used to try and decide which phrases could be eliminated. When SPW -became more complex, this job was not possible and caused duplicate and -missing phrases.  Now we generate them all and remove duplicate -information:
      • -
          -
        • In the "checkSkyPopWx" -method
        • -
        • Through consolidation in the Consolidate Sub Phrases step.
        • -
        -
      -
    • Create subPhrase words.  -Proceed as normal to create subPhrase words for local effect and other -subPhrases.
    • -
    • Consolidate SubPhrases: -  At product Component Level:
      -
    • -
    -
            -##  Timing: This method runs at the component level
    -        ##  AFTER all -sub-phrase words have been set and
    -        ##  BEFORE they have -been assembled into phrases at the phrase level.
    -        ##
    -        ##  Purpose: If for all -possible areaLabels per phrase or phrase type
    -        -##        we repeat a particular -subPhrase and timeRange,
    -        -##      Factor it out into an un-qualified -phrase
    -        ##
    -        ##  For example:
    -        ##    Chance -of thunderstorms in the morning (windward)
    -        ##    Chance -of thunderstorms in the morning (leeward)
    -        ##    Chance -of rain in the afternoon (windward)
    -        ##    Chance -of snow in the afternoon (leeward)
    -        ##
    -        ##  becomes:
    -        ##    Chance -of thunderstorms in the morning (unqualified)
    -        ##    Chance -of rain in the afternoon (windward)
    -        ##    Chance -of snow in the afternoon (leeward)
    -
    -
      -
        -
      • All Product components must list -"consolidateSubPhrases" before "assemblePhrases" or -"assembleIndentedPhrases"
      • -
          -
        • In all Narrative Standard products
        • -
        • In FirePhrases compound phrases:  "skyWeather_byTimeRange_compoundPhrase", -"fireWind_compoundPhrase", "fireValleyWind_compoundPhrase", -"fireRidgeWind_compoundPhrase"
        • -
        • In FWS_Overrides:  "fireEyeWind_compoundPhrase"
          -
        • -
        -
      -
    -
      -
        -
      • Because consolidateSubPhrases waits until all subPhrases are -finished AND executes -before assembleSubPhrases (and assemblePhrases),  phrases can no -longer -wait for other phrases to completely finish.  They can, however, -wait -for all subphrases to finish.  Thus, "findWords" (PhraseBuilder) -now -just returns concatenated subPhrases instead of concatenated completed -phrases.  All methods should use "findWords" rather than waiting -for phrases to complete.  
        -
      • -
      -
        -
          -
        • "extremeTemps_words" must -be changed to use "findWords" OR the system will give "21 -PASSES" message since it is -waiting for the -reportTrends_phrase to finish.
        • -
        -
      • Enhanced "checkRepeatingString" -(PhraseBuilder) to handle local effect situations.
        -
      • -
      -
    • Assemble -Sub Phrases"assembleSubPhrases" -(PhraseBuilder)  now needs consolidateSubPhrases_trigger to make -sure -that subPhrases have been consolidated before we assemble them.
    • -
    • Assemble -Phrases: "assemblePhrases", -"assembleIndentedPhrases", "assembleSentences":
      -
    • -
        -
      • Consolidate -Local Effects:  Replace "combineConjunctiveLocalEffects" -with -"consolidateLocalEffects".       -
        -
      • -
      -
    -       -            -     # Organize the local effect and non-local -effect phrases.
    -              -          # "node" can be a -component or a compound phrase.
    -              -          # Convert to embedded -local effect phrases if appropriate.
    -            -            # Apply the -Local Effect thresholds:
    -            -            -#    repeatingEmbedded_localEffect_threshold
    -            -            -#    repeatingPhrase_localEffect_threshold
    -
    -
    -
      -
    • Calls "incorporateNonLocalEffectPhrases":
      -        #  Try to incorporate -non-qualified phrases
      -        #    If there -is exactly one leArea group in the set of phrases
      -        -#      AND this group is composed of intersect -areas
      -        -#      AND there is more than one local effect -phrase
      -        -#      AND the number of non-local effect -phrases
      -        -#       < -repeatingPhrase_localEffect_threshold:
      -        -#         Convert them to -conjunctive local effect phrases
      -        -#         (one for each -intersect local effect area)
      -        -#        return 1
      -        #    Else:
      -        -#        return 0
      -   
      -        #   EXAMPLE:
      -        #   Instead of:
      -        #     -Chance of thunderstorms in the morning.
      -        #     -Windward...Cloudy...Rain likely...Chance of precipitation 70 percent.
      -        #     -Leeward...Partly cloudy...Scattered showers...Chance of precipitation 30
      -        #     -percent. Highs in the 40s.  Winds 20 mph.
      -        #
      -        #   We will -produce:
      -        #     -Windward...Cloudy....Rain likely...Chance of thunderstorms in the -morning...
      -        #     -Chance of precipitation 70 percent.
      -        #     -Leeward...Partly cloudy...Scattered showers...Chance of thunderstorms in
      -        #     -the morning...Chance of precipitation 30 percent. Highs in the 40s.
      -        #     -Winds 20 mph.
    • -
      -
    • If cannot incorporate, then calls  -"convertToEmbedded":  (updated "makeEmbeddedFromConjunctive")
      -        #
      -        #   Converts -conjunctive local effects to embedded if possible.
      -        #   For each -leGroup:
      -        -#      If number of possible embedded phrases
      -        -#              -< repeatingEmbedded_localEffect_threshold
      -        -#         AND there are NO -mandatory conjunctives:
      -        -#             -Replace conjunctive phrases with embedded phrase(s).
    • -
    -
      -
    • Finally, calls -"orderLocalEffectPhrases":  See Test Cases F8, F14, F15, -F16, F22, F37, F38, F46
      -        #
      -        #   Group all -conjunctive local effect phrases
      -        -#      for each local effect area together
      -        -#      (at the location of the first -occurrence).
      -        #
      -        #   EXAMPLE:
      -        #     -LEEWARD...SUNNY IN THE MORNING THEN BECOMING PARTLY SUNNY...SCATTERED -SHOWERS.
      -        #     -WINDWARD...MOSTLY CLOUDY WITH SCATTERED SHOWERS
      -        #  
      -        #   instead of:
      -        #     -LEEWARD...SUNNY IN THE MORNING THEN BECOMING PARTLY SUNNY.
      -        #     -WINDWARD...MOSTLY CLOUDY WITH SCATTERED SHOWERS.
      -        #     -LEEWARD...SCATTERED SHOWERS.         -#  
    • -
    -
      -
        -
      • Qualify conjunctive local -effect phrases:  Modified "qualifyWords" -to handle local effect qualifiers in this new design and to remove some -bugs from previous design.  Added "addPeriod" argument to "sentence" (StringUtils) and -removal of extra space from "combineSentences" -(StringUtils).
      • -
      -
    -
      -
    •    New ConfigVariables: -
    • -
    -
        #### Component-Level -Local Effect thresholds
    -    def repeatingEmbedded_localEffect_threshold(self, -tree, component):
    -        # Number of embedded local -effect phrases allowed in a component
    -        # before they are gathered -together into a conjunctive local
    -        # effect clause.  For -example, with the threshold set to 2:
    -        #
    -        # Instead of:
    -        #     -Cloudy windward and partly cloudy leeward.
    -        #     -Rain likely windward and scattered showers leeward.
    -        #     -Chance of precipitation 50 percent windward and 30
    -        #     -percent leeward.
    -        #
    -        # We will produce:
    -        #     -Windward...Cloudy...Rain likely...Chance of precipitation 50 percent.
    -        #     -Leeward...Partly cloudy...Scattered showers...Chance of precipitation
    -        #     30 -percent.
    -        #
    -        # NOTE:  If we have -even one conjunctive local effect, however, all will be left
    -        #     -conjunctive.  For example, instead of:
    -        #
    -        #     -Cloudy windward and partly cloudy leeward.
    -        #     -Windward...Rain likely in the morning.
    -        #     -Leeward...Scattered showers in the afternoon.
    -        #
    -        #  We will produce:
    -        #     -Windward...Cloudy...Rain likely in the morning.
    -        #     -Leeward...Partly cloudy...Scattered showers in the afternoon.
    -        #
    -        return 2
    -
    -    def repeatingPhrase_localEffect_threshold(self, -tree, component):
    -        # Number of repeating local -effect phrases allowed inside a
    -        # set of conjunctive local -effects for each of the
    -        # repeatingPhrase_categories -(see below).
    -        #
    -        # For example, with the -default of 1 and the categories below,
    -        #
    -        # Instead of:
    -        #    Chance -of thunderstorms in the morning.
    -        #    -Windward...Cloudy...Rain likely...Chance of precipitation 70 percent.
    -        #    -Leeward...Partly cloudy...Scattered showers...Chance of precipitation 30
    -        #    percent. -Highs in the 40s.  Winds 20 mph.
    -        #
    -        # We will produce:
    -        #    -Windward...Cloudy....Rain likely...Chance of thunderstorms in the -morning...
    -        #    Chance -of precipitation 70 percent.
    -        #    -Leeward...Partly cloudy...Scattered showers...Chance of thunderstorms in
    -        #    the -morning...Chance of precipitation 30 percent. Highs in the 40s.
    -        #    Winds 20 -mph.
    -        #
    -        # Note that if we had:
    -        #    -Windward...Cloudy....Rain likely...Chance of precipitation 70 percent.
    -        #    -Leeward...Partly cloudy...Scattered showers......Chance of precipitation
    -        #    30 -percent. Highs in the 40s. Winds 20 mph.
    -        #
    -        # The phrasing would remain -unchanged since there are 2 phrases (Temps and Winds)
    -        # in the "ALL OTHER PHRASES" -category that would have to be repeated within the
    -        # conjunctive local effects.
    -        return 1

    -    def repeatingPhrase_localEffect_categories(self, -tree, component):
    -        return [
    -            -["skyPopWx_phrase", "sky_phrase", "weather_phrase", "popMax_phrase"],
    -            -["ALL OTHER PHRASES"],
    -            ]
    -
    -    def lePhraseNameGroups(self, tree, component):
    -        # Groups of phrase names -that can be combined into embedded local effect phrases.
    -        # If the phrase is not -listed here, it is assumed that only phrases with the
    -        # same name can be combined -with it into an embedded local effect phrase.
    -        # For example:
    -        #   With the -group:  ("skyPopWx_phrase", "weather_phrase"), we will allow:
    -        #
    -        #   A 20 percent -chance of rain windward and areas of fog leeward.
    -        #
    -        #   Since -"skyPopWx_phrase" and "wind_phrase" do not appear as group, we will
    -        #   not allow:
    -        #
    -        #    A 20 -percent chance of rain windward and north winds 20 mph leeward.
    -        #
    -        #
    -        return [("skyPopWx_phrase", -"weather_phrase")]
    -
    -
    -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextReferenceIntroduction.html b/cave/com.raytheon.viz.gfe/help/TextReferenceIntroduction.html deleted file mode 100644 index 032020f257..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextReferenceIntroduction.html +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - Text Products Reference - - - -

    Introduction

    -This reference material is to be used in conjunction with the Text Product User Guide which gives -high-level explanations and important background information for the -Text Product capability of the GFESuite software. The User Guide -gives links to appropriate sections of this document for more details -and extensive examples. diff --git a/cave/com.raytheon.viz.gfe/help/TextReferenceProductSet-upand.html b/cave/com.raytheon.viz.gfe/help/TextReferenceProductSet-upand.html deleted file mode 100644 index f1e049a01b..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextReferenceProductSet-upand.html +++ /dev/null @@ -1,1419 +0,0 @@ - - - - - - Text Products Reference - - - -WFO Site InformationWFO Site InformationWFO Site Information -
    -

    Product Set-up and Customization

    -
    EDEX Product Configuration
    Quick Start Product Set up
    -        Tabular Products
    -         Narrative Products
    Hazard Products
    Statements
    Product Customization
    -      Customizing -Narrative Phrases
    -          Example: Customizing a Narrative Phrase -
    -          Narrative Definition and Configurable -Issuance -- "def issuance_list"
    -          Post-Processing Narrative -Phrases
    -       AllowedHazards
    -           HazardKey
    WFO Site Information
    -
    -

    EDEX Product Configuration

    -The GFESuite set of product formatters are delivered to the field as -templates, which are then expanded upon installation. The installation -converts the templates into the Baseline, Region, and local (site) -versions -of the formatters. The installation also will fill in the templated -information, -such as the WFO name, city, and state, and the product PIL, WMOID, and -AWIPS database pil and transmission pil. -

    This automatic configuration -is based on the afos2awips.txt pil/wmoid table. If there are errors in -this table, then the products will not be correctly configured. To -correct -the templates after making changes to afos2awips.txt, you can rerun the -template expansion scripts. Refer to the configureTextProduct User Guide -for more details. -

    -

    Some sites will have multiple entries in their afos2awips.txt table -for -a particular product, e.g., ZFP. The configuration script takes this -into -account and will automatically generate formatters for each entry -found. -

    -

    -

    Quick Start Product Set Up

    -This section gives step-by-step instructions to get a product set-up -and running. The following section "Product -Customization Guide" gives instructions on configuring the product -and customizing it to your local site. -
      -
    • Login to the GFE from a terminal window under a new user ID, -e.g. TextTest. From a terminal window in the /awips2/cave -directory, type ./cave.sh -u tester_id -component GFE. Login as a new user ID such as -TextTest. -You will use this ID to set up new products and test them. When -you are satisfied with a product, you may move it to your SITE -directory.
    • -
    • Create Edit Areas. Create edit areas named -"area1", -"area2", and "area3". Some products are set up to run with -these "defaultEditAreas" as noted in the table below. Other -products run with a set of edit area Combinations which can be set up -through the Formatter Launcher Dialog.
    • -
    • Locate the product you wish to set up. From the GFE -Main Menu, select "Define Text Products". Locate the "Standard" -file for the product you wish to set up in the table below:
    • -
    -            TABULAR --TYPE PRODUCTS
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
     ProductStandard File
    -(Text Products Window)
    -
    Site Definition File
    -Site Overrides File
    -(Text Utilities Window)
    -
    -OR Local file
    -(Text Products Window)
    -
    Regional -Overrides File
    -(Text Utilities Window)
    -
    Edit Areas
    -
    Additional Set-up Info 
    CCFCCFCCF_<site>_Definition
    -CCF_<site>_Overrides
    -
    CCF_<region>_Overrides"defaultEditAreas"
    -
    Edit Areas Needed: Typically point edit areas are required -for each entry to you wish to generate the product for.
    SFTSFTSFT_<site>_Definition
    -SFT_<site>_Overrides
    -
    SFT_<region>_Overrides"defaultEditAreas"Edit Areas Needed: Typically point edit areas are required -for each entry to you wish to generate the product for.
    AFMPFMAFM_<site>_Definition
    -AFM_<site>_Overrides
    -
    AFM_<region>_OverridesCombinations
    -
    See Standard product file for details.
    PFMPFMPFM_<site>_Definition
    -PFM_<site>_Overrides 
    PFM_<region>_Overrides "defaultEditAreas"Edit Areas Needed: Typically point edit areas are required -for each entry to you wish to generate the product for.
    MVFMVFMVF_<site>_Definition
    -MVF_<site>_Overrides
    -
    MVF_<region>_Overrides"defaultEditAreas"Edit Areas Needed: Typically point edit areas are required -for each entry to you wish to generate the product for.
    FWF TabularFWFTableFWFTable_<site>_Definition
    -FWFTable_<site>_Overrides
    -
    FWFTable_<region>_OverridesCombinations
    -

    -
    FWMFWMFWM_<site>_Definition
    -FWM_<site>_Overrides 
    FWM_<region>_Overrides"defaultEditAreas"
    -

    -AFD
    AFDAFD_<site>_Definition
    -AFD_<site>_Overrides
    AFD_<region>_OverridesCombinations
    -
    -
    -

                NARRATIVE-TYPE -PRODUCTS

    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
     ProductStandard File
    - (Text Products Window)
    -
    Site Definition File
    - Site Overrides File
    - (Text Utilities Window)
    -
    - OR Local file
    - (Text Products Window)
    -
    Regional -Overrides File
    - (Text Utilities Window)
    -
    Edit -Areas
    -
    Additional Set-up Info 
    ZFPAreaFcstZFP_<site>_Definition
    -ZFP_<site>_Overrides
    -
    ZFP_<region>_OverridesCombinations
    -

    -
    SAFAreaFcstSAF_<site>_Definition
    -SAF_<site>_Overrides
    -
    SAF_<region>_Overrides"defaultEditAreas"Also inherits from ZFP Site Definitions and Overrides so that -those settings and customizations will carry over to the SAF.
    -
    -Also inherits from SAF_Overrides
    -
    CWFCWFCWF_<site>_Definition
    -CWF_<site>_Overrides
    -
    CWF_<region>_OverridesCombinations
    -

    -
    CWF_PacificCWF_PacificCWF_Pacific_<site>_Definition
    -CWF_Pacific_<site>_Overrides
    -
    CWF_Pacific_<region>_OverridesCombinations
    -
    GLFGLFGLF_<site>_Definition
    -GLF_<site>_Overrides
    -
    GLF_<region>_Overrides"defaultEditAreas"Many special edit areas needed.  -

    See Standard GLF product file for more details. 

    -
    NSHNSHNSH_<site>_Definition
    -NSH_<site>_Overrides
    -
    NSH_<region>_OverridesCombinations
    -
    OFF
    -
    OFF
    -
    OFF_<site>_Definition
    -OFF_<site>_Overrides
    -
    OFF_<region>_Overrides
    -
    Combinations
    -

    -
    FWFFWFFWF_<site>_Definition
    -FWF_<site>_Overrides
    -
    FWF_<region>_OverridesCombination -


    -
    FWS
    -
    FWF
    -
    FWS_<site>_Definition
    -FWS_<site>_Overrides
    FWS_<region>_OverridesLat/Lon point
    -
    Also inherits from FWS_Overrides.
    -
    -
    -
      -
    • Open the Standard product file for viewing. Press -the arrow to the left of the product name to display available configurations; -then MB3 over the name of the standard file and choose, "Open".
    • -
    • Create Data and Publish to Official Database. Locate -the documentation section in the standard file for "Weather Elements -Required." Create data for these weather elements and then, from -the Products Menu, choose "Publish to Official."
    • -
    • Run your product. From the "Products" menu, select -"Formatter Launcher" The Formatter -Launcher Dialog will appear listing the -products. Select the name of the product, which brings up a new -tab. If the product -runs with Combinations of edit areas, a map will appear and you may use -the Zone Combiner portion of the dialog to set up desired -combinations. Choose "Run" to start the formatter.
    • -
    • Make dialog selections. Some products will display -a dialog for user input. Make appropriate selections and choose -OK.
    • -
    • Output will appear in the Formatter Launcher Dialog and -you -can modify, save, and/or transmit it.
    • -
    • If you have any problems, refer to the Troubleshooting Guide.
    • -
    • Review AreaDictionary. The "AreaDictionary" is located in the -"TextUtilities" folder of the Localization perspective. This file is -automatically generated and contains information about the zones, -counties and cities for your site. This information is documented at -the beginning of the file. Be sure and review the generated file and, -if necessary, use MB3 "Open" to make changes at SITE level. Please -note that any item listed as CONFIGURED is a generated item and will -be overwritten during software upgrades.
    • -
    • Set up Customized Edit Areas. -For those products that use "defaultEditAreas", modify the Site -Definition file with appropriate edit areas customized for your site.
      -
    • -
    • Run the Baseline, Regional, and -Site Products.
    • -
    • Deactivating Products: If products appear in the Formatter -Launcher which your site does not want to use, you can deactivate them -as follows: Open the Site Definition File OR Local product file -and set -the -"displayName. Press MB3 over the Site Definition File OR -Local file (see -table above) and choose "Open". Set the "displayName" -Definition -entry. This is the name that will appear in the Formatter -Launcher -Dialog.
      -
    • -
    -

    Hazard Products

    -The following Hazard Products are installed automatically. To run -them: From the Formatter Launcher, choose -Products-->Hazards.
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Product
    -
    Standard -File
    -
    Local -File
    -
    Edit -Areas
    -
    Additional -Info
    -
    ADR
    -
    CivilEmerg
    -(Inherits from GenericReport)
    -
    CivilEmerg_ADR_LocalCombinationsDoes not use any gridded -data.  Zone combiner is used to define area of product.
    -
    AVA
    -
    CivilEmerg
    -(Inherits from GenericReport)
    CivilEmerg_AVA_LocalCombinationsDoes not use any gridded -data.  Zone combiner is used to define area of product.
    AVW
    -
    CivilEmerg
    -(Inherits from GenericReport)
    CivilEmerg_AVW_LocalCombinationsDoes not use any gridded -data.  Zone combiner is used to define area of product.
    CAE
    -
    CivilEmerg
    -(Inherits from GenericReport)
    CivilEmerg_CAE_LocalCombinationsDoes not use any gridded -data.  Zone combiner is used to define area of product.
    CDW
    -
    CivilEmerg
    -(Inherits from GenericReport)
    CivilEmerg_CDW_LocalCombinationsDoes not use any gridded -data.  Zone combiner is used to define area of product.
    CEM
    -
    CivilEmerg
    -(Inherits from GenericReport)
    CivilEmerg_CEM_LocalCombinationsDoes not use any gridded -data.  Zone combiner is used to define area of product. 
    -
    CFW
    -
    Hazard_CFW
    -(Inherits from GenericHazard)
    Hazard_CFW_Local
    -
    Automatically determined
    -
    Uses the Hazards grid.
    EQR
    -
    CivilEmerg
    -(Inherits from GenericReport)
    CivilEmerg_EQR_LocalCombinations
    -
    Does not use any gridded -data.  Zone combiner is used to define area of product.
    EQW
    -
    CivilEmerg
    -(Inherits from GenericReport)
    CivilEmerg_EQW_Local
    -
    Combinations
    -
    Does not use any gridded -data.  Zone combiner is used to define area of product.
    EVI
    -
    CivilEmerg
    -(Inherits from GenericReport)
    CivilEmerg_EVI_LocalCombinationsDoes not use any gridded -data.  Zone combiner is used to define area of product.
    FFA
    -
    Hazard_FFA
    -(Inherits from GenericHazard)
    Hazard_FFA_Local
    -
    Automatically determined
    -
    A dialog is displayed when this -formatter is started to allow the forecaster to select the flood reason -for the required H-VTEC line. -

    Can be configured for either ZONES or FIPS UGCs.
    -

    -
    FRW
    -
    CivilEmerg
    -(Inherits from GenericReport)
    CivilEmerg_FRW_LocalCombinationsDoes not use any gridded -data.  Zone combiner is used to define area of product.
    HLS
    -
    Hazard_HLS
    -(Inherits from GenericReport)
    Hazard_HLS_Local
    -
    Combinations
    -
    Does not use any gridded -data.  Zone combiner is used to define area of product.
    HMW
    -
    CivilEmerg
    -(Inherits from GenericReport)
    CivilEmerg_HMW_LocalCombinationsDoes not use any gridded -data.  Zone combiner is used to define area of product.
    HWOHazard_HWO
    -(Inherits from GenericReport)
    Hazard_HWO_LocalCombinationsDoes not use any gridded -data.  Zone combiner is used to define area of product.
    LAE
    -
    CivilEmerg
    -(Inherits from GenericReport)
    CivilEmerg_LAE_LocalCombinationsDoes not use any gridded -data.  Zone combiner is used to define area of product.
    LEW
    -
    CivilEmerg
    -(Inherits from GenericReport)
    CivilEmerg_LEW_LocalCombinationsDoes not use any gridded -data.  Zone combiner is used to define area of product.
    MWS
    -
    Hazard_MWS
    -(Inherits from GenericHazard)
    Hazard_MWS_Local
    -
    Automatically determinedUses the Hazards grid.
    -
    NPW
    -
    Hazard_NPW
    -(Inherits from GenericHazard)
    Hazard_NPW_Local
    -
    Automatically determinedUses the Hazards grid.
    -
    NUW
    -
    CivilEmerg
    -(Inherits from GenericReport)
    CivilEmerg_NUW_LocalCombinationsDoes not use any gridded -data.  Zone combiner is used to define area of product.
    RFW
    -
    Hazard_RFW
    -(Inherits from GenericHazard)
    Hazard_RFW_Local
    -
    Automatically determinedUses the Hazards grid.
    -
    RHW
    -
    CivilEmerg
    -(Inherits from GenericReport)
    CivilEmerg_RHW_LocalCombinationsDoes not use any gridded -data.  Zone combiner is used to define area of product.
    SPW
    -
    CivilEmerg
    -(Inherits from GenericReport)
    CivilEmerg_SPW_LocalCombinationsDoes not use any gridded -data.  Zone combiner is used to define area of product.
    TOE
    -
    CivilEmerg
    -(Inherits from GenericReport)
    CivilEmerg_TOE_LocalCombinationsDoes not use any gridded -data.  Zone combiner is used to define area of product.
    VOW
    -
    CivilEmerg
    -(Inherits from GenericReport)
    CivilEmerg_VOW_LocalCombinationsDoes not use any gridded -data.  Zone combiner is used to define area of product.
    WCN
    -
    Hazard_WCN
    -(Inherits from GenericHazard)
    Hazard_WCN_Local
    -
    Automatically determinedUses the Hazards grid.
    WSW
    -
    Hazard_WSW
    -(Inherits from GenericHazard)
    Hazard_WSW_Local
    -
    Automatically determinedUses the Hazards grid.
    -
    -
    -

    Statements

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Product
    -
    Standard File
    -
    Local File
    -
    EditAreas
    -
    Additional -Info
    -
    ESF
    -
    GenericReport
    -
    ESF_Local
    -
    Combinations
    -
    Can be configured to use either -FIPS or ZONE codes.
    -
    NOW
    -
    GenericReportNOW_Local
    -
    Combinations
    -
    PNS
    -
    GenericReportPNS_Local
    -
    Combinations
    -
    RFD
    -
    GenericReportRFD_Local
    -
    Combinations
    -
    SPS
    -
    GenericReportSPS_Local
    -
    Combinations
    -
    -
    -

    Product Customization

    -Customizing Narrative Phrases -

    Example: Customizing a Phrase -

    -

    The "wind_withGusts_phrase" produces phrases such as:

    -

    WINDS NORTHEAST 10 TO 20 KNOTS WITH GUSTS TO AROUND 70 KNOTS VEERING -SOUTHEAST 5 TO 15 KNOTS WITH GUSTS AROUND 25 KNOTS IN THE EARLY -MORNING.

    -

    When we find this phrase in the Wind and -WindGust Text Rules section, we see that it can be customized in -various ways. If we want to change the descriptor from "WINDS" to -"WIND", we need to override the phrase_descriptor_dict -for "Wind". First, we look to see if it is -already overridden in the Standard File, AreaFcst, which we -open in the Text Products folder of the Define Text Products dialog. We -can issue a "find" command to see if it is there. It is not, so next we -look in the ConfigVariables utility from the Text Utilities folder -and issue a "find" command. NOTE: -The ConfigVariables Utility is "Read-Only", so -you cannot change the method in that file. You MUST copy it into your -Overrides file, and in that location, you can change the value which -will override or supercede the value found in the library module.
    -

    -

    We notice that the phrase_descriptor_dict -is very lengthy. We do not have to repeat the entire method. -Instead, we can use the dictionary as a starting -point and simply change any entries that are relevant to us as follows: -

    -
    def phrase_descriptor_dict(self, -tree, node):
    -         dict -= TextRules.TextRules.phrase_descriptor_dict(self, tree, node)
    -         -dict["Wind"] = "wind"
    -         -return dict
    -Notice that our descriptor entry can be in lower case.  All -formatters work in lower case to construct the phrase.  It is -converted to upper case near the end of processing.  
    -

    If we want to report knots as "KTS" instead of "KNOTS", we will -override the units_descriptor_dict for -"kt" as follows in the "Overriding Thresholds and Variables" section of -our Overrides file:

    -
      def -units_descriptor_dict(self, tree, node):
    -         dict -= TextRules.TextRules.units_descriptor_dict(self, tree, node)
    -         -unitsDict = dict["units"]
    -         -unitsDict["kt"] = "kts"
    -         -return dict
    -The wind_withGusts_phrase reports gusts if they are 10 knots greater -than the maximum wind speed. Suppose we would like to suppress -reporting gusts unless they are at least 15 knots greater than the -maximum wind speed. The table for the -"public_windRange_withGusts_phrase" lists a method called gust_wind_difference_threshold. We can locate it in the VectorRelatedPhrases module -and copy and paste it into our Overrides file: -

           def -gust_wind_difference_threshold(self, tree, node):
    -             -# Difference between gust and max wind below which gusts are not -mentioned
    -             -# Units are in mph or knots depending on the current product
    -             -return 15

    -

    Narrative -Definition and Configurable Issuance -- issuance_list

    -

    Narrative products are composed of a -"narrative" which contains a series of "component" phrase -products. This is used to construct a "narrative" type of -product of the form:

    -

            {
    -            -"type": "narrative",
    -            -"narrativeDef":  [(<componentName>, <number of -hours>), ...],
    -            -"methodList": [self.assembleChildWords"],
    -            -# optional:
    -           -"priorPeriod": <number of hours>,   # Number of hours -for sampling prior to forecast. Used for
    -                                                                              -# first period trends
    -        } -

    -

    For example:

    -

           {
    -            -"type": "narrative",
    -            -"narrativeDef":  [("Period_1", 12), ("Period_2_3", 12), -("Period_2_3, 12)],
    -            -"methodList": [self.assembleChildWords"],
    -            -# optional:
    -           -"priorPeriod": 24,   # Number of hours for sampling prior to -forecast. Used for
    -                                              -# first period trends
    -        } -

    -

    Note that you may define a "Phantom" period -during which no phrases will be generated.  It will act as a -placeholder advancing your time periods:

    -

           "narrativeDef": {
    -                -("Period", "period1"),
    -                -("Period", 12), ("Period", 12),
    -                -("LaterPeriod", 12), ("LaterPeriod", 12), ("LaterPeriod", 12),
    -                -("Phantom", 6), ("Extended", 24), ("Extended", 24), ("Extended", 24) -
    -          -}

    -

    You can customize the issuance times and the -series of components by overriding the _issuance_list method, which returns information about the issuance -times you want for your product.  The issuance_list, is -found in the Standard file for narrative-type products.

    -

     For each -issuance time we must give the following information:

    -
      -
    • description -- text to appear in the -startUp dialog for the product.
    • -
    • startHour, endHour -- start and end hours -for the first period.  These times are relative to self.DAY() and -self.NIGHT() which default to 6 and 18, respectively.  The -startHour or endHour can be specified as "issuanceHour".
    • -
    • expirationHour -- hour when the product -expires in local time (it is converted to UGC for the header)
    • -
    • period1 Label  -- the label for the -first period. e.g. ".TODAY...", ".REST OF TODAY..."
    • -
    • period1 lateNight phrase -- phrase to use -if the hours of 3am to 6am must be qualified e.g. "Partly cloudy in -the early morning."
    • -
    • period1 lateDay phrase -- phrase to use -if -the hours of 3pm to 6pm must be qualified e.g. "Partly cloudy in the -early evening."
    • -
    • todayFlag -- if 1, "TODAY" and "TONIGHT" -phrasing will be used in subsequent periods, otherwise, weekday wording -will apply.
    • -
    • narrative  definition -- component -and time period pairs
    • -
    -To understand how this works, here is an example -of an issuance list for the ZFP (AreaFcst Standard product): -

       def _10_503_issuance_list(self, -argDict):
    -        narrativeDefAM = [
    -            -("Period_1", -"period1"),            -
    -            -("Period_2_3", 12), ("Period_2_3", 12),
    -            -("Period_4_5", 12), ("Period_4_5", 12),
    -            -("Period_6_14", 12), ("Period_6_14", 12), ("Period_6_14", 12), -("Period_6_14", 12),
    -            -("Period_6_14", 12), ("Period_6_14", 12), ("Period_6_14", 12), -("Period_6_14", 12),
    -            ]
    -        narrativeDefPM = [
    -            -("Period_1", "period1"),
    -            -("Period_2_3", 12), ("Period_2_3", 12),
    -            -("Period_4_5", 12), ("Period_4_5", 12),
    -            -("Period_6_14", 12), ("Period_6_14", 12), ("Period_6_14", 12), -("Period_6_14", 12),
    -            -("Period_6_14", 12), ("Period_6_14", 12), ("Period_6_14", 12), -("Period_6_14", 12),
    -            -("Period_6_14", 12),
    -            ]
    -       
    -        return [
    -            -("Morning", self.DAY(), self.NIGHT(), self.NIGHT(),
    -             -".TODAY...", "early in the morning", "late in the afternoon",
    -             -1, narrativeDefAM),
    -            -("Morning with Pre-1st Period", self.DAY()-2, self.NIGHT(), -self.NIGHT(),
    -             -".TODAY...", "early in the morning", "late in the afternoon",
    -             -1, narrativeDefAM),
    -            -("Morning Update", "issuanceHour", self.NIGHT(), self.NIGHT(),
    -             -".REST OF TODAY...", "early in the morning", "late in the afternoon",
    -             -1, narrativeDefAM),
    -            -("Afternoon Update", "issuanceHour", self.NIGHT(), self.NIGHT(),
    -             -".REST OF TODAY...", "early in the morning","late in the afternoon",
    -             -1, narrativeDefAM),
    -            -#  End times are tomorrow:
    -            -("Afternoon", self.NIGHT(), 24 + self.DAY(), 24 + self.DAY(),
    -             -".TONIGHT...", "late in the night", "early in the evening",
    -             -1, narrativeDefPM),
    -            -("Afternoon with Pre-1st Period", self.NIGHT()-2, 24 + self.DAY(), 24 + -self.DAY(),
    -             -".TONIGHT...", "late in the night", "early in the evening",
    -             -1, narrativeDefPM),
    -            -("Evening Update", "issuanceHour", 24 + self.DAY(), 24 + self.DAY(),
    -             -".REST OF TONIGHT...", "early in the morning","early in the evening",
    -             -1, narrativeDefPM),
    -            # -For the early morning update, this produces:
    -            # -REST OF TONIGHT:
    -            # -MONDAY
    -            # -MONDAY NIGHT
    -            -("Early Morning Update", "issuanceHour", self.DAY(), self.DAY(),
    -             -".REST OF TONIGHT...", "early in the morning","late in the afternoon",
    -             -0, narrativeDefPM),
    -            # -Alternative
    -            # -For the early morning update, this produces:
    -            # -EARLY THIS MORNING:
    -            # -TODAY
    -            # -TONIGHT
    -            -#("Evening Update", "issuanceHour", 24 + self.DAY(), 24 + self.DAY(),
    -            # -".REST OF TONIGHT...", "late in the night", "early in the evening",
    -            # 1, -narrativeDefPM),
    -            -#("Early Morning Update", "issuanceHour", self.DAY(), self.DAY(),
    -            # -".EARLY THIS MORNING...", "early in the morning", "late in the -afternoon",
    -            # 1, -narrativeDefPM),
    -            ]

    -


    -
    NOTE: Any variables that begin with a "self._" should be -encased in a "try" block. This is because the "_issuance_list" is -accessed and examined once BEFORE the product is actually run in order -to set up the input dialog. During this first examination, the -variables are not yet initialized. As an example, here is the -issuance_list from the FWF:
    -

    -

        def -_issuance_list(self, argDict):
    -        -narrativeDefAM = [
    -            -("FirePeriod", "period1"),
    -            -("FirePeriod", 12), ("FirePeriod", 12),
    -           -]
    -        -narrativeDefPM = [
    -            -("FirePeriod", "period1"),
    -            -("FirePeriod", 12), ("FirePeriod", 12), ("FirePeriod", 12)
    -            -]
    -        -extended = [
    -            -("FireExtendedShortTerm", 24), ("FireExtendedShortTerm", 24),
    -            -("FireExtendedShortTerm", 24),
    -            -("FireExtended", 24), ("FireExtended", 24), 
    -            -]
    -        -try:
    -            -if self._individualExtended == 1:
    -                -if self._extendedLabel == 1:
    -                    -narrativeDefAM.append(("ExtendedLabel",0))
    -                    -narrativeDefPM.append(("ExtendedLabel",0))
    -                -narrativeDefAM = narrativeDefAM + extended
    -            -narrativeDefPM = narrativeDefPM + extended
    -        -except:
    -            -pass
    -        -
    -        -return [
    -            -("Morning", self.DAY(), self.NIGHT(), self.NIGHT(),
    -             -".TODAY...", "early in the morning", "late in the afternoon",
    -             -1, narrativeDefAM),
    -            -("Morning Update", "issuanceHour", self.NIGHT(), self.NIGHT(),
    -             -".REST OF TODAY...", "early in the morning", "late in the afternoon",
    -             -1, narrativeDefAM),
    -            -("Afternoon Update", "issuanceHour", self.NIGHT(), self.NIGHT(),
    -             -".REST OF TODAY...", "early in the morning","late in the afternoon",
    -             -1, narrativeDefAM),
    -            -#  End times are tomorrow:
    -            -("Afternoon", self.NIGHT(), 24 + self.DAY(), 24 + self.DAY(),
    -             -".TONIGHT...", "late in the night", "early in the evening",
    -             -1, narrativeDefPM),
    -            -("Evening Update", "issuanceHour", 24 + self.DAY(), 24 + self.DAY(),
    -             -".REST OF TONIGHT...", "late in the night","early in the evening",
    -             -1, narrativeDefPM),
    -            -# For the early morning update, this produces:
    -            -# REST OF TONIGHT:
    -            -# MONDAY
    -            -# MONDAY NIGHT
    -            -("Early Morning Update", "issuanceHour", self.DAY(), self.DAY(),
    -             -".REST OF TONIGHT...", "early in the morning","late in the afternoon",
    -             -0, narrativeDefPM),
    -            -# Alternative
    -            -# For the early morning update, this produces:
    -            -# EARLY THIS MORNING:
    -            -# TODAY
    -            -# TONIGHT
    -            -#("Evening Update", "issuanceHour", 24 + self.DAY(), 24 + self.DAY(),
    -            -# ".REST OF TONIGHT...", "late in the night", "early in the evening",
    -            -# 1, narrativeDefPM),
    -            -#("Early Morning Update", "issuanceHour", self.DAY(), self.DAY(),
    -            -# ".EARLY THIS MORNING...", "early in the morning", "late in the -afternoon",
    -            -# 1, narrativeDefPM),
    -            -]

    -

    Post-Processing Narrative Phrases

    -

    Although, it is not encouraged, there will be -times that you will want to post-process phrases to clean up -undesirable wording.

    -

    A "postProcessPhrase" hook is available  for most -phrases. This  allows you to do string replacement -and/or abbreviations. Here is the default method from the -PhraseBuilder module. You may copy it into your Overrides file -and add replacements:

    -

        def postProcessPhrase(self, -tree, node):
    -        words -= node.get("words")
    -        if -words is not None:
    -            -words = words.replace("rain showers and thunderstorms", "showers and -thunderstorms")
    -            -return self.setWords(node, words)
    -

    -AllowedHazards
    -
    -Every product that includes Headline phrases also contains a method -that controls which Hazards are mentioned. This method can be -overridden so that you have control over which weather hazards -(Warnings, Advisories, and Watches) appear in each product. An -example of this method appears below.
    -
    -
    -    def -allowedHazards(self):
    -        allActions = ["NEW", "EXA", -"EXB", "EXT", "UPG", "CAN", "CON", "EXP"]
    -        marineActions = ["NEW", -"EXA", "EXB", "EXT", "CON"]
    -        return [
    -            -('HF.W', marineActions, 'Marine'),      # -HURRICANE FORCE WIND WARNING
    -            -('SR.W', marineActions,  'Marine'),      -# STORM WARNING
    -            -('GL.W', marineActions, 'Marine'),      # GALE -WARNING
    -            -('BW.Y', marineActions, 'Marine'),      # BRISK WIND -ADVISORY
    -            -('UP.W', allActions, -'IceAccr'),              -# HEAVY FREEZING SPRAY WARNING
    -            -('TO.A', allActions, -'Convective'),        # TORNADO WATCH
    -            -('SV.A', allActions, -'Convective'),        # SEVERE -THUNDERSTORM WATCH
    -            -('UP.Y', allActions, -'IceAccr'),               -# HEAVY FREEZING SPRAY ADVISORY
    -            -('AF.Y', allActions, -'Ashfall'),               -# VOLCANIC ASHFALL ADVISORY
    -            -('FG.Y', allActions, -'Fog'),                      -# DENSE FOG ADVISORY
    -            -('SM.Y', allActions, -'Smoke'),                -# DENSE SMOKE ADVISORY
    -            -('LO.Y', allActions, -'LowWater'),         # LOW -WATER ADVISORY
    -            -('SmCrftExCau'),                                      -# Local headline
    -            ]
    -

    -In this example, we show all of the possible components of the -allowedHazards list. This list not only controls which Headlines -appear in each product, but also which VTEC strings appear in the -product as well.
    -
    -Each line in the allowedHazards list can contain up to three parts: the -key for the hazard, the VTEC actions that are allowed for that hazard, -and a category for the hazard. The only part that is mandatory is -the hazard key. -Usually this key corresponds to a VTEC code, but locally-defined -hazards may be defined as well (See the last entry). The action -list and the category are optional. The category field can -be used to group hazards. If more than one hazard in a group is -found, only the highest priority hazard is reported, where priority is -defined by the order of appearance in the list. In the example -above, if both a Storm Warning (SR.W) and Gale Warninng (GL.W) -were found in the grids, only the Storm Warning would be -reported. By the same token, you can have multiple hazards -in an area by assigning different categories to each hazard.
    -
    -Hazard Key
    -
    -The HazardKey is the key that appears in the serverConfig file and -hence in the GFE display when you edit the Hazard grid. There are -two types of hazard keys, VTEC, and locally-defined. VTEC hazard -keys follow a particular format and are pre-defined for you in the -VTECTable. However you may also define local hazards as well. The -last entry in the above example of the allowedHazards list is a -locally-defined hazard.  In this example, it is "SmCrftExCau" which is an -abreviation for "Small Craft Exercise Caution". To include a -locally-defined hazard all you need to do is list it all by itself in -the allowedHazards list. Once your localConfig is set up properly you -will see this hazard appear (generally at the end of the list of -hazards) and you can define a Hazard grid that contains this -particular Hazard. Once defined in a grid, this hazard will -automatically appear in the product as long as the same hazardKey -appears in the allowedHazards list as in the example above.
    -
    -VTEC hazard keys are slightly more complicated. The presence of -the key in allowedHazards list is not the only piece of information -necessary for the hazard to appear in the product. You must also -defined the list of VTEC "action codes" as well. This action code -list defines which type of VTEC code can appear in your product. -For convenience, we include a list including all possible VTEC codes, -as well as a list of codes that apply to the Marine-type -products. In general, you will want to include all of the VTEC -action codes for every VTEC hazard. In some cases, however, you -may want to limit the set of actions codes in each product.
    -
    -
    -

    WFO Site Information

    -WFO site information is stored in a TextUtility named SiteCFG. -This module is loaded using
    -the familiar BASE, SITE paradigm. Note that a user other than -BASE or SITE should not override
    -this file. The file contains a dictionary which holds information -used to configure text products
    -from the BASE template files. It also is used by the formatter -launcher to find the name of
    -the backup site.
    -
    -A sample of this dictionary look like the following:
    -
    -SiteInfo= {
    -  'ABQ': {
    -         'region': 'SR',
    -         'fullStationID': -'KABQ',
    -         'wfoCityState': -'ALBUQUERQUE NM',
    -         'wfoCity': -'ALBUQUERQUE',
    -         'state': 'NEW MEXICO',
    -         }
    -}
    -
    -The key is a WFO site id. This file can be overridden by -the SITE user to modify any desired -entries. Again, it is undefined bahavior (anything can happen) -for any other user other than -SITE to modify this file.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/TextReferenceQuizQuestions.html b/cave/com.raytheon.viz.gfe/help/TextReferenceQuizQuestions.html deleted file mode 100644 index 353062456c..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextReferenceQuizQuestions.html +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - Text Products Reference - - - -

    Quiz Questions

    - -
    -

    Text Product User Guide -- PART 1

    -
      -
    1. What are the three main steps that the system performs to produce -a test product?
    2. -
    3. Where do you find a list of available text products?
    4. -
    5. Where do I find information about a text product such as a -description, weather elements needed, edit areas required?
    6. -
    7. What do you need to do to get a product to show up in the -Formatter Launcher Dialog?
    8. -
    9. What do you do if you try to run your product and nothing happens?
    10. -
    11. Where can I find information about simple settings and options -available for a text product?
    12. -
    13. Given that the Infrastructure classes are read-only, how can I -make my product behave differently from the baseline?
    14. -
    -

    Text Product User Guide -- PART 2

    -
      -
    1. How are the weather elements and phrases for a narrative product -defined? Where can I find this information?
    2. -
    3. What do we mean when we say the narrative phrases are -"Analysis-Driven"?
    4. -
    5. What are the two ways I can change the analysis for a particular -weather element to affect the phrasing?
    6. -
    7. Where can learn about the various analysis methods available?
    8. -
    9. How would you change the text of the ZFP so weather would appear -after sky and before the max/min temp?
    10. -
    11. How do I locate the thresholds and variables that I will need to -customize my product?
    12. -
    13. Where do I find information about setting up Local Effects?
    14. -
    15. Suppose I want to learn more about the phrases in the first -period of my ZFP product. How do I locate the Product Component -definition for that period?
    16. -
    17. What do I do if my Hazards are not showing up in the product?
    18. -
    19. Where can I find information regarding trouble-shooting tips and -strategies?
    20. -
    21. What information should I include when submitting a help request -to the listserver?
    22. -
    -Answers to -Quiz Questions diff --git a/cave/com.raytheon.viz.gfe/help/TextReferenceTextProductCreationUser.html b/cave/com.raytheon.viz.gfe/help/TextReferenceTextProductCreationUser.html deleted file mode 100644 index a9eb555c38..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextReferenceTextProductCreationUser.html +++ /dev/null @@ -1,160 +0,0 @@ - - - - - - Text Products Reference - - - -
    -

    Text Product Creation User -Guide

    Time Display Formats -


    -

    Time Display -Formats

    -The display format for the time period in text or period labels for -Simple Tabular products may be specified in the product Definition as -"timePeriodFormat" or "periodLabelFormat", -respectively. Also, Smart Text products have access -to -various TimeDescriptor methods such as "getCurrentTime" which use the -same "formatting entries" shown below. The general form is a tuple -containing the following: -

    (LTorZulu, durationFormat, startFormat, endFormat)

    -

      If LTorZulu is set to "LT", the time period will be reported -in local time instead of GMT. By setting a format string to "", that -value is not output. The formatting entries consist of a keyword -prefixed with an '%'. The software will substitute the appropriate -value in place of the %keyword in the format string. To add extra -characters, such as spaces or some text (e.g., "to"), simply add those -characters to the format. For example, this timePeriodFormat:

    -

          "timePeriodFormat": ("LT", "%H hours -", "%a %b %d, %Y %I:%M %p", " to %a %b %d, %Y %I:%M %p %Z"),

    -

    will yield a time period display such as:

    -

            12 hours Mon Apr 23, 2001 -06:00 AM to Mon Apr 23, 2001 06:00 PM MDT.

    -

    Formatting Entries:  -The following list specifies the acceptable formatting entries that are -allowed:

    -

            -%a        Locale's abbreviated -weekday name.
    -        -%A        Locale's full weekday -name.
    -        -%b        Locale's abbreviated month -name.
    -        -%B        Locale's full month name.
    -        -%c        Locale's appropriate date -and time representation.
    -        -%C        The century number (the -year divided by 100 and truncated to an integer) as a decimal number -[00-99].
    -        -%d        Day of the month as a -decimal number [01,31].
    -        -%D        Equivalent to the -directive -string %m/%d/%y.
    -        -%e        Day of the month as a -decimal number [1,31]; a single
    -                     -digit is preceded by a space.
    -        -%h        Equivalent to %b.
    -        -%H        Hour (24-hour clock) as a -decimal number [00,23].
    -        -%I        Hour (12-hour clock) as a -decimal number [01,12].
    -        -%j        Day of the year as a -decimal number [001,366].
    -        -%m        Month as a decimal number -[01,12].
    -        -%M        Minute as a decimal number -[00,59].
    -        -%n        The New-line character.
    -        -%p        Locale's equivalent of -either AM or PM.
    -        -%r        The time in AM and PM -notation; in the POSIX locale this is equivalent to %I:%M:%S %p.
    -        -%R        The time in 24 hour -notation (%H:%M).
    -        -%S        Second as a decimal number -[00,61].
    -        -%t        The Tab character.
    -        -%T        The time in hours, -minutes, -and seconds (%H:%M:%S).
    -        -%u        The weekday as a decimal -number [1(Monday),7].
    -        -%U        Week number of the year -(Sunday as the first day of the week) as a decimal number -[00,53].  -All days in a new year preceding the
    -                        -first Sunday are considered to be in week 0.
    -        -%V        The week number of the -year -(Monday as the first day of the week) as a decimal number -[01,53].  -If the week containing January
    -                        -1st has four or more days in the new year, then it is considered -week 1; otherwise, it is week 53 of the previous year, and the next -week -is week 1.
    -        -%w        Weekday as a decimal -number -[0(Sunday),6].
    -        -%W        Week number of the year -(Monday as the first day of the week) as a decimal number -[00,53].  -All days in a new  year preceding
    -                        -the first Monday are considered to be in week 0.
    -        -%x        Locale's appropriate date -representation.
    -        -%X        Locale's appropriate time -representation.
    -        -%y        Year without century as a -decimal number [00,99].
    -        -%Y        Year with century as a -decimal number.
    -        -%Z        Time zone name (or by no -characters if no time zone exists).
    -        -%%        The percent (%) character. -
    -

    diff --git a/cave/com.raytheon.viz.gfe/help/TextReferenceTroubleShooting.html b/cave/com.raytheon.viz.gfe/help/TextReferenceTroubleShooting.html deleted file mode 100644 index 41bc915641..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextReferenceTroubleShooting.html +++ /dev/null @@ -1,337 +0,0 @@ - - - - - - Text Products Reference - - - -

    TroubleShooting

    - -    Trouble-shooting -Strategies
    -    Error Messages and -Solutions
    -    Problems and Solutions -
    -

    Trouble-shooting -Strategies

    -Strategy 1 -- "No Output":  Nothing -happens when you run your product. -
    -
      -
    1. Make sure you are running your product -locally.
    2. -
    3. Check the Process Monitor for error -messages.
    4. -
    5. Check the Error -Messages section -below for your error.
    6. -
    -


    -Strategy 2 -- "Baseline Problem": You are getting undesirable -results with the baseline formatter (no threshold or variable overrides -in the Overrides file).

    -
      -
    1.  If the problem is with a narrative phrase, check the Text -Rules Reference documentation to see if there are thresholds and -variables that you might set to produce desired results.
    2. -
    3. If not, send a message to the  listserver including a -description of the problem and the desired results.
    4. -
    -Strategy 3 -- "Isolate Override": You are getting undesirable -results and you have overridden some thresholds or variables in your -Overrides file. -
      -
    1. Run the baseline version of the product to see if you get the -same results.
    2. -
    3. If so, see Strategy 2 above.
    4. -
    5. If not, comment out the overrides in your Overrides file and run -it -as the baseline.
    6. -
    7. Now begin adding in the overrides one-by-one until the problem -re-occurs.
    8. -
    9. That will give you a hint as to where the offending code might be.
    10. -
    11. If it's not clear at that point, include all this information in -a message to the Listserver.
    12. -
    -Strategy 4 -- "Infinite Loop or No -Words":  For a particular edit area, you get the message:  -
    -        -WARNING: TOO MANY PASSES ON TREE.
    -      or -
    -        -WARNING: EMPTY WORDS FROM TREE. -

    -
    These problems are often data-dependent making it difficult to -reproduce especially at another site.  Thus, you will have to -perform some detective work "on the spot" in order to isolate the -problem before seeking assistance from the support teams.  In -these -situations, the narrative product is not completing as intended.  -The multiple-pass processing has the potential of an infinite loop if -the logic is such that some method either does not return a "done" -status (e.g. return self.setWords() or self.DONE()) or does not set the -words for a phrase correctly.  In either case, the strategy for -locating the problem is the same.  We want to locate the offending -method, and turning on the "trace" flag will help us to see which -method -is being called repeatedly.  However, before we turn on the -volumnious trace messages, we want to isolate the problem as much as -possible.  We do this by isolating the edit area, time period, and -phrase method that are causing the trouble. -
      -
    1. Isolate the edit area for -which -there is a problem. Run the product for that area ONLY by -altering -your Combinations file or the "defaultEditAreas" list.
    2. -
    3. Isolate the time period for -which there is a problem. Override the issuance_list for -the -product and comment out all periods except the first for the issuance -causing the problem. For example, if we are running the 10-503 ZFP and -getting a problem with the Morning issuance, we would comment out all -but Period_1 in the _10_503_issuance_list.  (Be sure and copy the -entire issuance_list method into your Overrides file).
    4. -
       
      - def _10_503_issuance_list(self, -argDict):
      -         -narrativeDefAM = [
      -             -("Period_1", "period1"), 
      -             -#("Period_2_3", 12), ("Period_2_3", 12), 
      -             -#("Period_4_5", 12), ("Period_4_5", 12), 
      -             -#("Period_6_14", 12), ("Period_6_14", 12), ("Period_6_14", 12), -("Period_6_14", 12), 
      -             -#("Period_6_14", 12), ("Period_6_14", 12), ("Period_6_14", 12), -("Period_6_14", 12), 
      -             -]
      -         -narrativeDefPM = [
      -             -("Period_1", "period1"),
      -             -("Period_2_3", 12), ("Period_2_3", 12), 
      -             -("Period_4_5", 12), ("Period_4_5", 12), 
      -             -("Period_6_14", 12), ("Period_6_14", 12), ("Period_6_14", 12), -("Period_6_14", 12), 
      -             -("Period_6_14", 12), ("Period_6_14", 12), ("Period_6_14", 12), -("Period_6_14", 12), 
      -             -("Period_6_14", 12),
      -             -]
      -
      -        -.....etc...
      - Run the product for this time -period and see if you get the same error.  If not, begin -uncommenting the periods one at a time until you get the error.  -Of -course, the earlier the time period, the easier it will be to read the -trace.  So for any components prior to the the one causing the -trouble, override the Product Component definition and remove all the -entries in the "analysisList" and "phraseList".  For example, if -the problem does not occur until the third period of the Morning -issuance, remove  the "analysisList" and "phraseList" entries for -the "Period_1" component: -

      def Period_1(self):
      -         -component =  { 
      -             -"type": "component",
      -             -"methodList": [
      -                           -self.assemblePhrases, 
      -                           -self.wordWrap, 
      -                           -],
      -             -"analysisList": [ 
      -                        -],
      -             -"phraseList":[ 
      -                    -],
      -       } -

      -

      -
    5. Isolate the phrase -method.  Determine which phrase is causing the problem by -overriding the product component for the time period causing the -trouble. Comment out all but the first phrase method and run the -product.  If the problem does not occur, begin uncommenting each -phrase one-by-one running the product until you find which phrase is -causing the problem.  Then comment out all but that phrase method -and run the product again to see that the problem occurs.  In some -rare cases, you may have to uncomment more that one phrase to get the -problem to occur.)
    6. -
    7. Check the offending phrase -method code. Find the phrase "word" method in the Text -Rules -library (or your Overrides file if you have overridden or added -methods) and -ensure that all of it's return statements return either a self.DONE() call or a self.setWords() -call.   -If not, correct the code and run your product again.  If that was -not the problem, proceed to the next step.
    8. -
    9. Turn on the trace messages.  -Now you can turn on the trace messages in your Overrides file by -setting -the 'Definition["trace"]' flag to 1.  Re-run the product and -examine the end of the trace messages.  You are looking for a -method that is repeating without returning a status of DONE as reported -in the message OR is continually returning 'None' for the value of -'Words' in the trace message.   If you find the offending -method, you can begin to investigate why it is not completing.  At -this point, you can submit this information to the listserver post for -more help.
    10. -
    11. Check your overrides. -You may want to try Strategy 3 -(above) to see if the problem occurs with the baseline formatter.  -If not, you will want to isolate which of your overrides introduces the -problem.
    12. -
    -

    Error Messages

    -Below are  some common error messages and solutions. -

    ******************************
    -Error message:

    -

    Traceback (most recent call last):
    -  File "<string>", line 1, in ?
    -  File "/scratch/hansen/HEAD/GFESuite/headline/TextFormatter.py", -line 949, in profMain
    -    main2(arg)
    -  File "/scratch/hansen/HEAD/GFESuite/headline/TextFormatter.py", -line 890, in main2
    -    forecast = formatter.getForecast(forecastType, -argDict)
    -  File "/scratch/hansen/HEAD/GFESuite/headline/TextFormatter.py", -line 154, in getForecast
    -    raise Exception, LogStream.exc()
    -Exception: Traceback (most recent call last):
    -   File -"/scratch/hansen/HEAD/GFESuite/headline/TextFormatter.py", line 151, in -getForecast
    -    text = product.generateForecast(argDict)
    -   File "FWF", line 593, in generateForecast
    -   File "FWF", line 676, in _sampleData
    -   File -"/scratch/hansen/HEAD/GFESuite/headline/ForecastNarrative.py", line -467, -in getNarrativeData
    -    error = self.__breakOutDefinition(argDict, -narrativeDefinition, timeRange, areaList)
    -   File -"/scratch/hansen/HEAD/GFESuite/headline/ForecastNarrative.py", line -628, -in __breakOutDefinition
    -    editAreas = self.__intersectEditAreas(leAreaLabel, -argDict)
    -   File -"/scratch/hansen/HEAD/GFESuite/headline/ForecastNarrative.py", line -733, -in __intersectEditAreas
    -    leArea = self.findEditArea(None, leAreaLabel)
    -   File -"/scratch/hansen/HEAD/GFESuite/headline/ForecastNarrative.py", line -767, -in findEditArea
    -    editArea = self.getEditAreas(self.__argDict, -[areaLabel])[0]
    -   File "EditAreaUtils", line 82, in getEditAreas
    -   File -"/scratch/hansen/HEAD/GFESuite/libs/pyInter/AFPSSup.py", line 2283, in -getReferenceData
    -    def getReferenceData(*args): return -apply(_AFPSSup.IFPClient_getReferenceData,args)
    TypeError: -IFPClient::getReferenceData()failed : Unable to find reference data -[(BelowElev,P=0,A=0)]

    -

    Solution:

    -
      -
    • The last line of the message tells us that we are missing an Edit -Area,  "BelowElev".
    • -
    • Read the documentation in the standard product file to see if -there are any required edit areas that you are missing.  This -information will be inthe "EditAreas Needed" section.
    • -
    -******************************
    -Error message: -

    Problem importing module: CWFPeriod--
    -Traceback (innermost last):
    - File "imputil.py", line 106, in _import_hook
    -ImportError: No module named CWFPeriod

    -

    Solution:

    -
  • Find the offending Product Component (in this case -CWFPeriod in the Overrides file)
  • -
  • Try commenting out sections within the product component (e.g. -CWFPeriod) until you do not get the error.
  • -
  • Incrementally comment lines back in to find which line is the -offender.
  • -
    -******************************
    -
    -Error message: -
    Traceback (most recent call last):
    File "<string>", line 1, in ?
    File "TextFormatter.py", line 949, in profMain
    File "TextFormatter.py", line 890, in main2
    File "TextFormatter.py", line 154, in getForecast
    Exception: Traceback (most recent call last):
    File "TextFormatter.py", line 151, in getForecast
    File "AreaFcst", line 759, in generateForecast
    File "AreaFcst", line 881, in _makeProduct
    File "ForecastNarrative.py", line 523, in generateForecast
    File "ForecastNarrative.py", line 563, in traverseTree
    File "ForecastNarrative.py", line 563, in traverseTree
    File "ForecastNarrative.py", line 544, in traverseTree
    File "PhraseBuilder", line 830, in consolidatePhrase
    File "PhraseBuilder", line 691, in checkForDifferences
    File "PhraseBuilder", line 739, in checkScalarDifference
    File "ConfigVariables", line 517, in scalar_difference_nlValue
    File "TextUtils", line 177, in access_dictionary
    AttributeError: 'NoneType' object has no attribute 'has_key'
    -

    -

    Solution:

    -
      -
    • Notice the "scalar_difference_nlValue" reference in the -Traceback.  Look for a similar variable in your traceback.
    • -
    • Check your Overrides file for this dictionary e.g. -"scalar_difference_nlValue_dict" and make sure it is returning the -dictionary properly.  For example:
    • -
    -    def scalar_difference_nlValue_dict(self, tree, -node):
    -        # Scalar difference.  -If the difference between scalar values
    -        # for 2 sub-periods is -greater than or equal to this value,
    -        # the different values will -be noted in the phrase.
    -        dict = -TextRules.TextRules.scalar_difference_nlValue_dict(self, tree, node)
    -        dict["WindGust"] = 10 # -knots or mph depending on product
    -        dict["Period"] = 5 # seconds -
    -        dict["PoP"] = 10 # -percentage
    --->  return dict
    -
    -
    -
    -******************************
    -

    Problems/Solutions

    -Problem:
    -"minimum_range" or "maximum_range" is not taking effect. -

    Solution:
    -Check to to see if a "range_nlValue" is being set for this weather -element either in the Overrides file, Standard file, or in -ConfigVariables.  The range_nlValue supercedes the other ranges -and -should be set to zero in order to apply minimum or maximum ranges.

    diff --git a/cave/com.raytheon.viz.gfe/help/TextReferencecommandline.html b/cave/com.raytheon.viz.gfe/help/TextReferencecommandline.html deleted file mode 100644 index 41e7b2f0ba..0000000000 --- a/cave/com.raytheon.viz.gfe/help/TextReferencecommandline.html +++ /dev/null @@ -1,296 +0,0 @@ - - - - - - Text Products Reference - - - -
    -

    Command line arguments to the -TextFormatter

    -
    -
    -The usual way to execute the Text Formatter is via the Formatter -Launcher Dialog in the GFE which automatically generates a command line -from the -Text Product definiton. However, the program can be run -stand-alone with the following command and arguments. To see the -set-up of these arguments for a given text product, examine the Process -Monitor window.
    -
    -runIFPText -d -database -t forecastType [-c configFile] [-o outputFile] [-u -username] [-l language] [-A appendFile] [-V {varDict}] [-O serverFile] [-S gfeGenOutputFile] -[-site siteID] [-z drtOffset] [-a vtecActiveTableName] [-T] [-E] [-v vtecMode] [-r -editAreaName] [-w timeRangeName] [-s startTime -e endTime] [-i period]
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Switch
    -
    Optional
    -
    Example
    -
    Purpose
    -
    -d database
    -
    No
    -
    -d -BOU_GRID__Official_00000000_0000
    -
    Defines the source database for -the gridded information.
    -
    -t forecastType
    -
    No
    -
    -t ZFP
    -
    Defines the Forecast Type.
    -
    -c configFile
    -
    Yes
    -
    -c localGfeConfig
    -
    Defines the GFE config file. Default is gfeConfig.
    -
    -o outputFile
    -
    Yes
    -
    -o /tmp/123.txt
    -
    Output file for text product.
    -
    -S gfeSpecialOutputFile
    -
    Yes
    -
    -S /tmp/10234783.txt
    -
    This is a special filename that is -used for background processing text formatters to store the output forecast text. The -GFE puts on this switch for formatters that are run locally by the GFE -so the forecast text may be gathered at the end of the formatter execution. -Formatters run by EDEX put on this switch for the same purpose. The -connection allows for proper behavior in the GFE's Formatter Launcher and -Process Monitor. -
    -
    -site siteID
    -
    Yes
    -
    -site bou
    -
    Defines the site id to use.
    -
    -u userName
    -
    Yes
    -
    -u mark
    -
    Specifies the user name under -which to run the formatter.
    -
    -l language
    -
    Yes
    -
    -l spanish
    -
    Used for formatters that support -foreign languages. The options are "spanish" and "french". -Default is "english".
    -
    -A appendFile
    -
    Yes
    -
    -A /tmp/123.txt
    -
    Append filename. Output -text is appending to specified file.
    -
    -V varDict
    -
    Yes
    -
    -V '{("Product Issuance", -'productIssuance"):"Morning"}'
    -
    VariableList values from user -interface dialog.
    -
    -O serverFile
    -
    Yes
    -
    -O test123
    -
    Output file in the server's -product drafts directory.
    -
    -z drtOffset
    -
    Yes
    -
    -z 20041020_1211
    -
    Specifies the Displaced -Real-Time Time
    -
    -T
    -
    Yes
    -
    -T
    -
    Places the formatter into "TEST" -mode. If vtecMode is specified, it is set to "T". "TEST" mode adds -...TEST... to headlines and MND headers.
    -
    -E
    -
    Yes
    -
    -E
    -
    Places the formatter into -"EXPERIMENTAL" mode. If vtecMode is specified, it is set to -"E". "EXPERIMENTAL" mode adds "EXPERIMENTAL..." to the MND header.
    -
    -v vtecMode
    -
    Yes
    -
    -v "O"
    -
    Specifies the VTEC code ('X', -'O', 'T', 'E') for the product. If not specified, then VTEC is disabled -for the product.
    -
    -a activeTableName
    -
    Yes
    -
    -a PRACTICE
    -
    Defines the active table to use -for VTEC comparisons. If not specified, uses the operational "active" -table.
    -
    -r
    -
    Yes
    -
    -r CO_Adams
    -
    Used for Simple Table products -to specify Edit Area over which to run table
    -
    -w
    -
    Yes
    -
    -w Today
    -
    Used for Simple Table products -to specify named Time Range over which to run table
    -s
    -
    Yes
    -
    -s 20041213_1200Used for Simple Table products -to specify the start time over which to run table (Must also include -and end time)
    -
    -e
    -
    Yes
    -
    -e 20041216_1200Used for Simple Table products -to specify the end time over which to run table (Must also include and -start time)
    -i
    -
    Yes
    -
    -i 3
    -
    Used for Simple Table products -with variable period (for rows or columns)
    -The -E and -T switches are mutually exclusive.
    -

    -V Switch - run-time VariableList

    -This option to provide a run-time VariableList instead -of displaying the user dialog. -

    The dictionary must be in the form of a Python dictionary -string. For example:
    -

    -

      --V  '{("Product Issuance", "productIssuance"):"Morning", -("Issuance Type", "issuanceType"):"Routine"}'
    -
    -

    - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/Toolbar.html b/cave/com.raytheon.viz.gfe/help/Toolbar.html deleted file mode 100644 index a3f2f915c5..0000000000 --- a/cave/com.raytheon.viz.gfe/help/Toolbar.html +++ /dev/null @@ -1,503 +0,0 @@ - - - - - - GFE Suite Documentation - Button Bar - - -
    -

    GFE Toolbar Reference Guide

    -
    -
    January 18, 2012
    -
    -
    -


    -
    -

    -

    -

    This section describes each of the buttons in the button bar and the -function that they perform. -

    -

    Click on any button to get help for that button. -

    -

    Panning -

    -

    Pan -

    GFE Layout -

    -

    Toggle Grid Manager/Temporal EditorExpand Time ScalingContract Time ScalingDeselect allToggle Quick ViewSave Forecast Grids

    -

    Frame Stepping -

    -

    Step BackStep Forward

    -

    Edit Tools -

    -

    Edit ActionsUndo Grid EditSample ToolContour Tool - Pencil ToolMove/Copy Tool

    -

    Edit Areas -

    -

    Select Points ToolToggle Edit AreaClear Edit AreaEdit Area QuerySet Edit ModeSave QuickSetQuickSet Slot 1 - QuickSet Slot 2QuickSet Slot 3QuickSet Slot 4

    -

    - -
    -

    -Pan -

    -

    This button toggles the GFE Spatial -Editor between map panning on and off. You can pan the map -using your mouse wheel. -

    -
    -

    Temporal -Editor / Grid Manager -

    -

    This button toggles the GFE between the Grid Manager and the -Temporal -Editor. The screen space for these editors is shared and this toggle -button -allows you to toggle between them. -

    -

    -

    -Expand -Time -

    Changes the time scaling for the Grid Manager and Temporal Editor so -that a unit of time is larger. Think of it as a zoom-in time button. -

    -

    -

    -Contract -Time -

    Changes the time scaling for the Grid Manager and Temporal Editor so -that a unit of time is smaller. Think of it as a zoom-out time button. -
    -

    -
    -

    Deselect -All -

    -

    Deselects any Weather Elements and Time Ranges selected in the Grid -Manager. -
    -

    -
    -

    Grid Manager Display Mode -

    -

    Allows the user to choose the Grid Manager Display Mode. -The various choices are Normal, History, Saved, Published, Modified, -and Sent. Depending upon the choice, the color coding and labels -within each grid block of the grid manager will indicate various -states. For Normal, the colors indicate whether a grid is -displayed and active within the Spatial Editor. For History, the -color coding indicates the model data source and whether it has been -modified. Saved, Published, Modified, and Sent use color -coding based on the last time the grid was saved, published, modified, -or sent via ISC.
    -

    -
    -

    Toggle -Quick View -

    -

    Toggles Quick View Mode on and off. Quick View Mode allows the user -to set the behavior of the Spatial Editor when the pointer is moved -over -the Grid Manager. If the button is selected, the data displayed in the -Spatial Editor is controlled by the cursor position over the Grid -Manager -(i.e. the Spatial Editor displays the grid under the cursor). -Otherwise, -the data displayed in the Spatial Editor does not change when the -cursor -is moved over the Grid Manager time blocks. The default is off. -
    -

    -

    -Toggle -ISC Mode -

    Toggle ISC Mode places the GFE in the ISC -(Intersite -Coordination Viewing/Editing) mode. When the GFE is in this mode, -the displayed data in the spatial editor is a composite of the Forecast -grid and the received intersite coordination grids. The data over -your CWA region is from the Forecast database and the remainder of the -displayed grid is the intersite coordination grids. Toggling ISC -mode affects more than the display. Sample display, color table -fit to data operations, move/copy, smooth, and pencil operations are all -affected. When in ISC mode, these tools work on the composite Fcst and ISC -grids. -Refer to the ISC Training Guide for more -details. -
    -

    -
    -

    Save -Grids to Forecast -

    -

    When selected this button causes the Save -Forecast dialog to appear which allows you to save your forecast -grids to the database. -
    -

    -
    -

    Step -Back Frame -

    -

    Causes the Spatial Editor to display the previous visible grid in -the -inventory. If no earlier grid exists, then the last visible grid is -displayed. -
    -

    -
    -
    -

    Step -Forward Frame -

    -

    Causes the Spatial Editor to display the next visible grid in the -inventory. -If no later grid exists, then the first visible grid is displayed. -
    -

    -
    -

    Edit -Actions -

    -

    Displays the Edit -Actions dialog where Smart Tool are found. -
    -

    -
    -

    Undo -Grid Edit -

    -

    Reverses the last grid edit action no matter where the operation was -executed. -

    -

    -

    -Sample -Tool -

    Makes the Sample Tool the active tool in the Spatial Editor. The -Sample -Tool allows you to display a text representation of the gridded value -under -the cursor. -
    - - - - - - - - - - - - - - - - - - - -
    ActionFunction
    MB1 clickAdd sample
    MB2 clickRemove sample
    MB1 dragDisplay moving sample
    -
    -  -

    -

    -
    -

    Contour -Tool -

    -

    Makes the Contour Tool the active tool in the Spatial Editor. The -Contour -Tool allows you to modify gridded values by adding, deleting and -adjusting -contours. -
    - - - - - - - - - - - - - - - - - - - - - - - -
    ActionFunction
    MB1 dragDraw a new contour
    MB2 dragModify the position of the selected contour
    MB1 clickAdd a new contour
    MB2 clickDelete an existing contour
    -

    -

    -
    -

    Pencil -Tool -

    -

    Makes the Pencil Tool the active tool in the Spatial Editor. The -Pencil -Tool allows you to modify gridded values by adjusting the position of -virtual -contours. -
    - - - - - - - - - - - -
    ActionFunction
    MB1 dragModify the position of the selected contour
    -

    -

    -
    -

    Move/Copy -Tool -

    -

    Makes the Move/Copy Tool the active tool in the Spatial Editor. The -Move/Copy Tool allows you to move a defined area of data to a new -location. -
    - - - - - - - - - - - - - - - -
    ActionFunction
    MB1 dragCopy selected points to new location
    MB2 dragMove selected points to new location
    -
    -  -

    -

    -
    -

    Select -Points Tool -

    -

    Makes the Select Points tool the active tool in the Spatial Editor. -The Select Points Tool allows you to select areas or grid points to -which you apply Edit Actions. -
    - - - - - - - - - - - - - - - -
    ActionFunction
    MB1 dragSelect edit area
    MB2 dragDeselect edit area
    -

    -

    -
    -

    Toggle -Edit Area -

    -

    Invert the set of selected areas such that any area that was -selected -will be deselected and any area that was not selected will be selected. -
    -

    -
    -

    Clear -Edit Area -

    -

    Clears the edit area such that no areas are selected. -

    -

    -

    -Edit -Area Query -

    Displays the Edit -Area Query dialog from which you may launch a query that selects -areas -based on gridded values. -
    -

    -

    -

    Edit -Area Mode -

    -

    Changes the Edit Area Mode. Replace mode (=) replaces the old edit -area -with any new one. Union (|) adds the new edit area to the old one. -Intersect -(&) calculates the intersection of the old and new areas. Subtract -(-) removes the new edit area from the old one. -
    -

    -
    -

    QuickSet -Save -

    -

    Pressing this button followed by one of the numbered button to its -right, -saves the current edit area under that slot. -
    -

    -
    -

    QuickSet -Slot 1 -

    -

    Pressing this button by itself causes the edit area stored under -this -slot to be combined with the current edit area, according to the -current -Edit Area Mode. Pressing this button immediately after pressing the Q -button -causes the current edit area to be stored under this slot. -
    -

    -
    -

    QuickSet -Slot 2 -

    -

    Pressing this button by itself causes the edit area stored under -this -slot to be combined with the current edit area, according to the -current -Edit Area Mode. Pressing this button immediately after pressing the Q -button -causes the current edit area to be stored under this slot. -
    -

    -
    -

    QuickSet -Slot 3 -

    -

    Pressing this button by itself causes the edit area stored under -this -slot to be combined with the current edit area, according to the -current -Edit Area Mode. Pressing this button immediately after pressing the Q -button -causes the current edit area to be stored under this slot. -
    -

    -
    -

    QuickSet -Slot 4 -

    -

    Pressing this button by itself causes the edit area stored under -this -slot to be combined with the current edit area, according to the -current -Edit Area Mode. Pressing this button immediately after pressing the Q -button -causes the current edit area to be stored under this slot. -
    -

    -

    -
    -
    -

    Back To TOC

    -
    - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.gfe/help/VTEC.html b/cave/com.raytheon.viz.gfe/help/VTEC.html deleted file mode 100644 index c8089b24ae..0000000000 --- a/cave/com.raytheon.viz.gfe/help/VTEC.html +++ /dev/null @@ -1,2129 +0,0 @@ - - - - - - - GFESuite VTEC - - -

    GFESuite VTEC
    -

    -
    March 13, 2012 - THIS VERSION IS NOT COMPLETE
    -
    -
    -

    Table of Contents

    -Overview -
    -VTEC Program Flow
    -Enabling VTEC in GFE Text Products
    -VTEC Decoder
    -AWIPS D2D Setup for GFESuite VTEC
    -Synchronization of the Active -Table from Backup Sites
    -Debugging/Examining the Active, Proposed, -and Analyzed Tables
    -Editing the Active Table
    -Special GFE Startup for VTEC Testing/Practice
    -Important Log Files
    -VTEC Codes and Upgrade/Downgrade Tables
    -
    -

    Overview

    -This document describes the configuration and program flow of VTEC -through the GFE.
    -
    -
    -

    VTEC Program Flow
    -

    -The following diagram shows the VTEC program flow through the -GFE. It consists of three major parts: VTEC Decoding, VTEC -Merging, and Product Formatting.
    -
    -

    VTEC Decoding

    -
    -Text bulletins containing VTEC codes -are received over the AWIPS SBN. These are routed to the -NotifyTextProd AWIPS D2D persistent process. The NotifyTextProd -compares the incoming product against the routing table contained in -the pattern file. The pattern file is used to determine the -process to be run for that file. The pattern file used in -the GFESuite/VTEC situation instructs the NotifyTextProd to start the -VTECDecoder anytime a W* (all warnings) or FZ* (all routine marine -products) arrives.
    -
    -The VTECDecoder reads the text product, decodes the UGC strings and the -VTEC strings. It then merges its findings with the "Active" -table. The "Active" table represents the currently active (or -recently active) watches, warnings, and advisories. It tracks -Event Tracking Numbers (etns) by geographical id (UGC code) and knows -the current state of each VTEC through action codes (e.g., NEW, CAN, -UPG, EXT) for each product.
    -
    -There is a special WOU product that is received as guidance from the -Storm Prediction Center (SPC). These products, when -decoded, will send an alert message to the GFE (using sendGfeMessage) -informing the forecaster to run the PlotSPCWatches tool. This -allows the latest SPC guidance to be placed into the Hazards grids, -where it can further edited by the forecaster. Likewise, the Tropical -Prediction Center (TPC) sends out TCV tropical event bulletins, which -when decoded, sends an alert message to the GFE informing the -forecaster to run the PlotTPCEvents tool. This allows the latest -TPC guidance to be placed into the Hazards grid.
    -
    -The "Active" table is designed to be "locked" when writing. -Only the VTECDecoder and MergeVTEC processes lock the table during -their update cycle. Any client can read the table if the -table is not locked for writing.
    -

    -VTEC Flow
    -
    -
    -

    VTEC Merging - NOT COMPLETE

    -
    -It is important that the "Active" table be always -up-to-date. In the outside chance that a warning product is -missed on the SBN, EDEX asks surrounding sites for their -"Active" table on a routine basis. This is sent out as a -request via the WAN. The adjacent site, upon receiving the -request, packages the Active table for transmission back to the -requesting site. The requesting site receives the table and -runs the MergeVTEC routine. The MergeVTEC routine will add/update -any records that are newer in the received active table than the -existing active table. If a warning was issued and the action -code or etn was updated but the local site missed the text bulletin -(perhaps during a reboot), the MergeVTEC will update the warning record -in the local table. The configuration file VTECPartners is -critical in this process since it defines the adjacent sites from which -to get the active table, as well as the site filtering for the -VTECDecoder.
    -
    -
    -

    Product Formatting

    -When a GFE Text Product is run, it first analyzes the GFE Hazards -weather element. The Hazards grid contains areas of VTEC -phenomena and significance, such as WS.W for Winter Storm -Warning. The Hazards grid contains the "Proposed" set of -hazards. This is summed into a "Proposed" table. The -"Active" table is retrieved through EDEX and the VTEC -Comparison module analyzes the proposed and active table and derives -the "Analyzed table". The "Analyzed" table contains all of -the proper VTEC action strings and event tracking numbers based on the -VTEC Comparison logic. For example, if there is a hazard in the -active table but not in the proposed table, generally a "CAN" for -cancel is generated. If there is a new hazard in the -proposed table but not a matching one in the active table, then a "NEW" -is issued. If the logic detects that the user has proposed a -larger area or a longer time for an existing hazard, then the -appropriate EXT, EXA, or EXB action codes are generated.
    -
    -After the Analyzed table is complete, the hazards are filtered by -product, since not all products contain the same hazards. -The GFE and GHG Text Generation modules create the output -product. There is a fine line between the GFE and GHG text -generation portion of GFESuite. They both use the GFE text -formatter infrastructure. The GFE text formatters are for routine -forecast products and the GHG text formatters are for the watch, -warning, and advisory products.
    -

    -The Hazard weather element uses the auxiliary data field capability of -Discrete data. The auxiliary data field is only used in two cases with -Hazards. For convective watches (Tornado Watches and Severe -Thunderstorm -Watches), the Storm Prediction Center's (SPC) Event Tracking Number -is carried into the auxiliary data field. This is used by the VTEC -logic to determine which watch (or watches) is depicted in the grids. -The second use for the auxiliary data field is for GHG-style warning -products. It is used to define a segment number for multi-segmented -products. -

    -

    The following diagram illustrates the VTEC logic that is used to -take the proposed and active tables and generate the analyzed table. -

    -

    VTEC Compare
    -

    -The result of all of this logic is an Analyzed Table, which contains -a listing of all hazards and their VTEC codes.  The product -formatters then take the information in the Analyzed Table and inserts -VTEC codes and headlines into the various text products.
    -
    -

    Enabling VTEC in GFE Text Products
    -

    -VTEC can be in one of five modes:
    -
      -
    • Disabled
    • -
    • Operational ("O")
    • -
    • Test ("T")
    • -
    • Experimental ("E")
    • -
    • Experimental VTEC in an Operational Product ("X")
    • -
    -The mode is controlled by a single file contained in the -/awips2/cave/etc/gfe/userPython/textUtilities/regular -directory called VTECMessageType.py (which can be overridden -at -the SITE level if necessary). The product -category, e.g., WSW, should be placed in the file and the VTEC mode -indicated by -one of the acceptable letters: "O", "T", "E", "X". If a product -category is not in this file, then VTEC is not enabled for that product.
    -
    -IMPORTANT: The file in BASE should -not be modified. Instead the following technique should be -followed.
    -
    -
      -
    1. Open the localization perspective and browse to the GFE->TextUtilities.
    2. -
    3. Open the BASE level VTECMessageType.py.
    4. -
    5. Comment in or out the appropriate lines in the file to -enable/disable VTEC. Change the message type as appropriate -to one of the allowable codes: O, T, E, or X.
    6. -
    7. Use the File->Save As option to save the file as SITE, and exit the - Python editor. Exit the Localization perspective.
    8. -
    -

    The default provided VTECMessageType enables "O" operational VTEC -for all -products except for the MWS, where VTEC is still experimental "X". -

    -

    The VTECMessageType file looks like this:
    -# -----------------------------------------------------------------------------
    -# This software is in the public -domain, furnished "as is", without technical
    -# support, and with no warranty, -express or implied, as to its usefulness for
    -# any purpose.
    -#
    -# VTECMessageType.py
    -#
    -# This module stores the VTEC -message type for each product category
    -#
    -# Author: lefebvre
    -# -----------------------------------------------------------------------------
    -#Products not listed will be -considered VTEC disabled.
    -
    -VTECMessageTypeDict = {
    -    -'CWF' : 'O',
    -    -'NSH' : 'O',
    -    -'WSW' : 'O',
    -    -'WCN' : 'O',
    -    -'NPW' : 'O',
    -    -'FFA' : 'O',
    -    -'RFW' : 'O',
    -    -'CFW' : 'O',
    -    -'MWS' : 'X',
    -    }
    -
    -
    -# This method fetches the message -type for the specified product Category
    -# If not found, return None.
    -def -getVTECMessageType(productCategory):
    -    if -VTECMessageTypeDict.has_key(productCategory):
    -        -return VTECMessageTypeDict[productCategory]
    -    else:
    -        -return None
    -
    -Commenting in/out the lines in the VTECMessageTypeDict (highlighted in -blue above) will enable/disable VTEC.  Changing the values will -change the VTEC code/mode.
    -
    -
    -There is a close link between VTEC codes and Headlines. Even if VTEC is -disabled for a product, the Hazards output is still -based on VTEC codes and the VTEC comparison logic is still executed.
    -
    -An additional step involves setting up VTECPartners/localVTECPartners -for proper exchange of VTEC active tables. Refer to Synchronization of the Active Table -from Backup Sites or more information.
    -
    -

    -
    -

    VTEC Decoder
    -

    -The VTEC Decoder is used by GFESuite to decode incoming text bulletins -for UGC and VTEC codes.  It is automatically started by the AWIPS -D2D NotifyTextProd process based on the notify pattern table in the -data/acquire directory.
    -
    -A configuration file, VTECPartners.py and localVTECPartners.py, is used -to define the following entries for the VTEC Decoder:
    -
    - - - - - - - - - - - - - - - - - - - -
    VTEC_SPC_SITE
    -
    This entry defines the -four-letter id that identifies the Storm Prediction Center.  It is -set to KWNS in the configuration file.  Convective watches are -handled differently when they are from the SPC.
    -
    VTEC_TPC_SITE
    -
    This entry defines the -four-letter id that identifies the Tropical Prediction Center.  It -is set to KNHC in the configuraiton file.  TPC provides tropical -VTEC watches and warnings.
    -
    VTEC_DECODER_SITES
    -
    This entry defines the set of -WFO identifiers which are used for filtering on incoming text -bulletins.   If blank, then no filtering is performed and all -bulletins from all sites will be decoded.  There is no need to add -the SPC, TPC, or your own WFO id to this list since they are -automatically -added in the software.    Usually you only set up -entries containing the sites for which you perform primary and -secondary backups, and sites that surround your WFO.  For example, -if this is site BOU and you -sometimes back up PUB and CYS, then you will specify PKUB and KCYS in -the -list, as well as KGJT, KGLD, and KCYS.
    -
    VTEC_CAPTURE_TEXT_CATEGORIES
    -
    Defines the text categories -(pils) that will have their segment text captured and saved as part of -the active table.
    -
    -
    -The VTEC Decoder writes to the "Active Table" via exclusive write -locking.  A backup copy of the "Active Table" is made after each -modification. The VTECPartner's VTEC_BACKUP_TABLE_PURGE_TIME -specifies the number of hours in which to keep backup copies.
    -
    -
    -

    AWIPS D2D Setup for GFESuite VTEC - NOT UPDATED
    -

    -The AWIPS NotifyTextProd processes -will look for -/awips/GFESuite/primary/data/acquire/notifyPattern.txt and -/awips/GFESuite/svcbu/data/acquire/notifyPattern.txt.  That file -contains routing information for incoming text bulletins based on a WMO -pattern. Example contents of the "open" file is:
    -
    -#This file is -for NotifyTextProd to start the VTECDecoder whenever certain
    -#text -bulletins arrive.
    -^W.* -/awips/GFESuite/primary/data/vtec/spool -/awips/GFESuite/primary/bin/run/VTECDecoder -f <FILEID> -d -w -"<WMOID>"
    -^FZ.* -/awips/GFESuite/primary/data/vtec/spool -/awips/GFESuite/primary/bin/run/VTECDecoder -f <FILEID> -d -w -"<WMOID>"
    -^NWUS64.*KWNS -/awips/GFESuite/primary/data/vtec/spool -/awips/GFESuite/primary/bin/run/VTECDecoder -f <FILEID> -d -w -"<WMOID>"
    -
    -^W.* -/awips/GFESuite/svcbu/data/vtec/spool -/awips/GFESuite/svcbu/bin/run/VTECDecoder -f <FILEID> -d -w -"<WMOID>"
    -^FZ.* -/awips/GFESuite/svcbu/data/vtec/spool -/awips/GFESuite/svcbu/bin/run/VTECDecoder -f <FILEID> -d -w -"<WMOID>"
    -^NWUS64.*KWNS -/awips/GFESuite/svcbu/data/vtec/spool -/awips/GFESuite/svcbu/bin/run/VTECDecoder -f <FILEID> -d -w -"<WMOID>"
    -
    -The -above version is typical for AWIPS versions earlier than -OB6.   Starting with OB6, NotifyTextProd will be sent a -custom template based on the configured site identifier.   An -example of this template is shown below:
    -
    -#This file is -for NotifyTextProd to start the VTECDecoder whenever certain
    -#text -bulletins arrive.
    -#
    -
    -#Warnings
    -^W.*KABQ -/scratch/HEAD/GFESuite/release/data/vtec/spool -/scratch/HEAD/GFESuite/release/bin/run/VTECDecoder -f <FILEID> -d --w "<WMOID>"
    -^W.*KAMA -/scratch/HEAD/GFESuite/release/data/vtec/spool -/scratch/HEAD/GFESuite/release/bin/run/VTECDecoder -f <FILEID> -d --w "<WMOID>"
    -^W.*KBOU -/scratch/HEAD/GFESuite/release/data/vtec/spool -/scratch/HEAD/GFESuite/release/bin/run/VTECDecoder -f <FILEID> -d --w "<WMOID>"
    -^W.*KCYS -/scratch/HEAD/GFESuite/release/data/vtec/spool -/scratch/HEAD/GFESuite/release/bin/run/VTECDecoder -f <FILEID> -d --w "<WMOID>"
    -^W.*KDDC -/scratch/HEAD/GFESuite/release/data/vtec/spool -/scratch/HEAD/GFESuite/release/bin/run/VTECDecoder -f <FILEID> -d --w "<WMOID>"
    -^W.*KGJT -/scratch/HEAD/GFESuite/release/data/vtec/spool -/scratch/HEAD/GFESuite/release/bin/run/VTECDecoder -f <FILEID> -d --w "<WMOID>"
    -^W.*KGLD -/scratch/HEAD/GFESuite/release/data/vtec/spool -/scratch/HEAD/GFESuite/release/bin/run/VTECDecoder -f <FILEID> -d --w "<WMOID>"
    -^W.*KLBF -/scratch/HEAD/GFESuite/release/data/vtec/spool -/scratch/HEAD/GFESuite/release/bin/run/VTECDecoder -f <FILEID> -d --w "<WMOID>"
    -^W.*KPUB -/scratch/HEAD/GFESuite/release/data/vtec/spool -/scratch/HEAD/GFESuite/release/bin/run/VTECDecoder -f <FILEID> -d --w "<WMOID>"
    -^W.*KRIW -/scratch/HEAD/GFESuite/release/data/vtec/spool -/scratch/HEAD/GFESuite/release/bin/run/VTECDecoder -f <FILEID> -d --w "<WMOID>"
    -
    -#Marine
    -^FZ.*KABQ -/scratch/HEAD/GFESuite/release/data/vtec/spool -/scratch/HEAD/GFESuite/release/bin/run/VTECDecoder -f <FILEID> -d --w "<WMOID>"
    -^FZ.*KAMA -/scratch/HEAD/GFESuite/release/data/vtec/spool -/scratch/HEAD/GFESuite/release/bin/run/VTECDecoder -f <FILEID> -d --w "<WMOID>"
    -^FZ.*KBOU -/scratch/HEAD/GFESuite/release/data/vtec/spool -/scratch/HEAD/GFESuite/release/bin/run/VTECDecoder -f <FILEID> -d --w "<WMOID>"
    -^FZ.*KCYS -/scratch/HEAD/GFESuite/release/data/vtec/spool -/scratch/HEAD/GFESuite/release/bin/run/VTECDecoder -f <FILEID> -d --w "<WMOID>"
    -^FZ.*KDDC -/scratch/HEAD/GFESuite/release/data/vtec/spool -/scratch/HEAD/GFESuite/release/bin/run/VTECDecoder -f <FILEID> -d --w "<WMOID>"
    -^FZ.*KGJT -/scratch/HEAD/GFESuite/release/data/vtec/spool -/scratch/HEAD/GFESuite/release/bin/run/VTECDecoder -f <FILEID> -d --w "<WMOID>"
    -^FZ.*KGLD -/scratch/HEAD/GFESuite/release/data/vtec/spool -/scratch/HEAD/GFESuite/release/bin/run/VTECDecoder -f <FILEID> -d --w "<WMOID>"
    -^FZ.*KLBF -/scratch/HEAD/GFESuite/release/data/vtec/spool -/scratch/HEAD/GFESuite/release/bin/run/VTECDecoder -f <FILEID> -d --w "<WMOID>"
    -^FZ.*KPUB -/scratch/HEAD/GFESuite/release/data/vtec/spool -/scratch/HEAD/GFESuite/release/bin/run/VTECDecoder -f <FILEID> -d --w "<WMOID>"
    -^FZ.*KRIW -/scratch/HEAD/GFESuite/release/data/vtec/spool -/scratch/HEAD/GFESuite/release/bin/run/VTECDecoder -f <FILEID> -d --w "<WMOID>"
    -
    -#WCL
    -^NWUS64.*KWNS -/scratch/HEAD/GFESuite/release/data/vtec/spool -/scratch/HEAD/GFESuite/release/bin/run/VTECDecoder -f <FILEID> -d --w "<WMOID>"
    -
    -#WOU
    -^WOUS64.*KWNS -/scratch/HEAD/GFESuite/release/data/vtec/spool -/scratch/HEAD/GFESuite/release/bin/run/VTECDecoder -f <FILEID> -d --w "<WMOID>"
    -
    -#TCV
    -^WTNT8.*KNHC -/scratch/HEAD/GFESuite/release/data/vtec/spool -/scratch/HEAD/GFESuite/release/bin/run/VTECDecoder -f <FILEID> -d --w "<WMOID>"
    -
    -
    -The extra filtering becomes possible with OB6, due to the dual -NotifyTextProd processes running.
    -
    -There is no other setup required for AWIPS to being sending the text -bulletins to GFESuite.  However, once you first install IFPS, you -may need to restart the ingest processes on AWIPS so it -will read the routing file.  Restarting data ingest is done as -user "fxa" from the stopIngest.dx4 and startIngest.dx4 for dx4 based -ifpServers. -In later versions (OB6+) of AWIPS, there are special -startNotifyTextProd scripts that are available.
    -
    -IMPORTANT CONFIGURATION:  Once your site has installed OB6, you -should add the following to your localConfig file to take advantage of -the extra filtering, but only if you are running IFPS17.6.*. -Versions post IFPS17.6 are automatically configured for the extra -filtering.
    -
    -serverConfig.AUTO_CONFIGURE_NOTIFYTEXTPROD = 1
    -
    -Refer to the Misc. -Configuration Items for serverConfig and Auto Configuration of -NotifyTextProd in localConfig for additional information.
    -
    -
    -
    -

    Synchronization of the -Active Table from Backup Sites - NOT UPDATED
    -

    -Synchronization of the Active Table from Backup Sites is used to ensure -that your VTEC table is always up-to-date. It comes in -especially handy when you enter service backup and you need the latest -active table.  Based on the clock, the ifpServer will make a -request for adjacent site's active table.  The remote site(s) -ifpServer will respond with the active table.  The merge vtec -process compares records in the received active table against your own -active table.  Entries that are newer in the received table will -be merged into your active table. 
    -
    -
    -Merging characteristics are defined by the VTECPartners and -localVTECPartners configuration files.  The following entries -control this process:
    - - - - - - - - - - - - - - - - - - - -
    VTEC_TABLE_REQUEST_SITES
    -
    Defines the AWIPS 3-letter WFO -identifiers that will be requested to send their active table to you.
    -
    VTEC_MERGE_SITES
    -
    Defines the four-letter WFO ids -that will be decoded and merged with your active table during merges.
    -
    VTEC_REMOTE_TABLE_FETCH_TIME
    -
    Defines the interval that the -requests will be made for the active table to the -VTEC_TABLE_REQUEST_SITES.  The recommended time is no less than 15 -minutes and defaults to 60 minutes.
    -
    VTEC_RESPOND_TO_TABLE_REQUESTS
    -
    Set to either 1 or 0.  If -1, then the ifpServer will respond to requests for the active table to -be sent to the requestor from remote sites.
    -
    -
    -The -VTEC_TABLE_REQUEST_SITES -define the AWIPS 3-letter WFO identifiers that will be requested to -send their active table to you and the VTEC_MERGE_SITES are the sites -that will be decoded and merged into your active table.  Normally -this is set up to -include your primary and secondary backup sites, and the sites that -have you as primary and secondary backup.
    -
    -You will likely want to change the VTEC_TABLE_REQUEST_SITES to only -include two or three sites.
    -
    -The VTEC_MERGE_SITES is usually correctly set up in the baseline and -includes all sites within your defined grid domain.
    -
    -The procedure to configure the sharing of the VTEC active table is done -through the localVTECPartners -file.  Refer to the VTECPartners / -localVTECPartners documentation.
    -
    -
    -
    -

    Debugging/Examining the Active, -Proposed, and Analyzed Tables - NOT UPDATED
    -

    -The key to VTEC is the correct merging of the proposed and active -table. For diagnostics, the logging preferences file may be -edited to turn on the verbose and debug output for the VTECDecoder, -VTEC Merging, and product formatting. The contents of the -analyzed table will be output at each step of the VTEC -comparison. This is quite helpful for debugging.
    -
    -For formatters, you will want to enable the debugging for -HazardsTable.py.  Here is the complete -.../etc/BASE/logPref/runIFPText.logPref file, with the line to -turn on debugging highlighted.
    -
    -#Process        -Src     Sink    Category
    -#               -File
    -#-----------------------------------------
    -all             -all     file       -all = on
    -all             -all     file       -debug = off
    -all             -all     file       -verbose = off
    -all             -all     -tty        all = on
    -all             -all     -tty        debug = off
    -all             -all     -tty        verbose = off
    -all             -all     collective all = off
    -
    -all HazardsTable.py     -file       verbose = on
    -all HazardsTable.py     -tty        verbose = on
    -
    -#Uncomment following line for -debugging purposes
    -#all -HazardsTable.py all all = on
    -
    -
                                                                               -
    -                                                                              -
    -                                                                                -
    -# Prefixes
    -all   timeStamp = -on         # time stamps on
    -#all   processName = -off     # process name off
    -#all   processID = -off       # process id off
    -all   fileName = -on         # filenames wanted
    -all   lineNo = -on           # line -numbers wanted
    -                                                                                -
    -# TEMPORARY FOR DEVELOPMENT
    -#bug abort = on
    -
    -
    -For debugging the VTECDecoder, the logPref file is VTECDecoder.logPref -and the added line is:
    -
    -all  -VTECDecoder.py all all = on
    -
    -For debugging the VTEC Merge routine, the logPref file is -ingestAT.logPref and the added line is:
    -
    -all -MergeVTEC.py all all = on
    -
    -
    -
    -The debugging statements output records in the analyzed, active, and -proposed tables in a form similiar to that below.  This form shows -most of the field entries in each record:
    -
    -Vtec: -/T.NEW.KLOX.HW.W.0001.040903T0900Z-040903T1900Z/
    -Hdln: HIGH -WIND WARNING
    -Start: Fri -Sep  3 09:00:00 2004 1094202000.0  Action: NEW
    -End:   -Fri Sep  3 19:00:00 2004 1094238000.0
    -Phen: -HW   Sig: W   Office: KLOX   Etn: 0001 -Seg: 0   Key: HW.W
    -Zone: CAZ051
    -
    -
    -The following describes the various fields in the analyzed, active, and -proposed tables:
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Vtec
    -
    Contains the actual VTEC string. -The proposed table (from the Hazard grid) does not contain a Vtec -string since it hasn't been calculated at this point.  The active -table contains the VTEC string from the text product, and the proposed -table contains the output VTEC string.
    -
    Hdln
    -
    The Headline is the descriptive -name for the VTEC phenomena and significance.  ??? indicates that -the headline description has not yet been assigned to the record.
    -
    Start
    -
    The starting time of the event -is output in a readable form as well as the number of seconds since the -epoch.
    -
    End
    -
    The ending time of the event is -output in a readable form as well as the number of seconds since the -epoch.
    -
    previousStart
    -
    The previous starting time of -the event is given for events that have been shortened or extended.
    -
    previousEnd
    -
    The previous ending time of the -event is given for events that have been shortened or extended.
    -
    downgradeFrom
    -
    Contains information about the -event that this event was downgraded from.
    -
    upgradeTo
    -
    Contains information about the -event that this event was upgraded to.
    -
    UFN
    -
    Until Further Notice flag, -indicates that the ending time is not defined and the event is -continued until a replacement record is decoded.
    -
    Purge
    -
    The purge time of the event -is output in a readable form as well as the number of seconds since the -epoch.  The purge time is from the date-time group at the end -of the UGC line.
    -
    Issue
    -
    The product issuance time of the -event -is output in a readable form as well as the number of seconds since the -epoch.  The issue time is from the date-time group on the 1st line -of the product.
    -
    Action
    -
    The action code assigned to this -record is shown.   ??? indicates that the action code has not -yet been determined.
    -
    Phen
    -
    The VTEC Phenomena is -shown.   Locally defined hazard keys will not have a -phenomena.
    -
    Sig
    -
    The VTEC Significance is -shown.  Locally defined hazard keys will not have a significance.
    -
    Office
    -
    The Office identifier associated -with this record is shown.  It is the 4-letter site id.
    -
    Etn
    -
    The assigned event tracking -number for the record is shown.  The proposed table normally does -not have an entry, except for convective watches.   ??? -indicates that the event tracking number has not yet been determined.
    -
    Seg
    -
    The assigned segment -number. This is normally zero for the analyzed and proposed -tables. The segment number from the VTECDecoder indicates the -ordering of the product. The proposed table normally does -not have this entry, except that the forecaster may define a hazard -with different segements to aid the hazard formatters in formatting the -product.
    -
    Key
    -
    The key is the Discrete Key that -was found in the grids. Keys with a colon and a number reflect a -convective watch with ETN or a segment descriptor.
    -
    Zone
    -
    The zone is the geographical -identifier or UGC. UGCs may be Zone or FIPS.  They are edit -area names for the proposed table and the decoded UGC identifiers for -the active table.
    -
    Text
    -
    This field is not normally -shown.  Only the active table contains this field.   It -contains the hazard/forecast text that was found in the segment that -corresponds with the VTEC record.
    -
    Overview Text
    -
    This field is not normally -shown.  Only the active table contains this field.   It -contains the overview text that was found between the MND header and -the -first segment.
    -
    Previous Text
    -
    This field is not normally -shown.  Only the analyzed table contains this field.   -It -contains the hazard/forecast text that was found in the segment that -corresponds with the VTEC record previously. For example, if the VTEC -record is a "CON", then the text represents the information contained -in the last issued product for that segment. If the record is an "EXA", -then that segment wasn't issued previously, but the captured text is -for the -same event from the previous issuance.
    -
    Previous Overview Text
    -
    This field is not normally -shown.  Only the analyzed table contains this field.   -It contains the text that was found between the MND header and the -first segment.
    Pil
    -
    This field contains the product -category for the record.
    -
    -
    -The dumpAT program is available to dump out -the contents of the VTEC active table.   It only runs on the -server machine where GFESuite has been installed, but does not require -the ifpServer running.
    -
    -

    Editing the Active Table

    -
    -
    Editing of the Active Table is -currently not -supported in this version of GFESuite; however, the GHG Monitor can be used to view the events.
    -
    -

    Special GFE Startup Modes for VTEC Test and -Practice

    -There are two special GFE startup modes for VTEC testing and -practice:
    -
      -
    • TEST
    • -
    • PRACTICE
    • -
    -The PRACTICE mode uses an alternate active table to -ensure isolation from operations. Please see the GFE Startup Guide -for more details on the behavior of these modes.
    -
    -

    Mixing Test and Operational Hazards

    -It is possible to mix test and operational hazards with the -GFE/GHG.  When used properly, TEST hazards previously issued will -not appear in the operational products.   When improperly -used, test hazards can be shown as operational hazards in a product.
    -
    -For example, if a test tornado watch (TO.A) is placed into the grids, -and an operational ZFP is generated, the headlines in the ZFP will -mention TORNADO WATCH.  It is important to either remove the test -hazards from the grids prior to generation of the operational products, -or run the test products from the Fcst database while running the -official products from the Official database.
    -
    -
    -

    Important Log Files - NOT COMPLETE

    -There are several log files that contain pertient information about the -VTEC operation. These are the primary log files:
    - - - - - - - - - - - - - - - - - - - - - - - -
    edex-ingest*
    -
    Logs from the VTEC Decoder, -which shows the decoding of each received product and how the VTEC -active table is being changed.
    -
    cave* in the user caveData subdirectory
    -
    Formatter logs, which contain -information about the processing of the Hazards grid and active table, -as well as the final analyzed table for determining VTEC codes and -headlines.
    -
    edex-ingest-text*
    -
    Received active table logs, -showing the records that were merged into your active table.
    -
    edex-request-productSrvRequest* ??
    -
    Log showing requests from your -site to other sites for active tables.
    -
    ??
    -
    Log showing the sending of the -active table from your site to other sites.
    -
    -
    -There is a secondary log file that are part of the Intersite -Coordination part of the software that also contain some transaction -information:
    - - - - - - - -
    iscDataRec
    -
    Transmitted and Received ISC log -files.
    -
    -
    -

    -

    VTEC Codes and Upgrade/Downgrade Table

    -VTEC Codes
    -Upgrade Table
    -DowngradeTable
    -
    -

    VTEC Codes

    -The following table lists the "known" VTEC Codes by GFESuite.  Not -all of these are produced in the GFE/GHG product generation.  The -other codes are used for the GHG Monitor to monitor non-GFE/GHG events:
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    VTEC Coding
    -
    Phenomena Code
    -
    Significance -Code
    -
    Headline / -Description
    -
    AF.Y AF Y ASHFALL ADVISORY
    AS.Y AS Y AIR STAGNATION ADVISORY
    BS.Y BS Y BLOWING SNOW ADVISORY
    BW.Y BW Y BRISK WIND ADVISORY
    BZ.A BZ A BLIZZARD WATCH
    BZ.W BZ W BLIZZARD WARNING
    CF.A CF A COASTAL FLOOD WATCH
    CF.S CF S <coastal flood statement -- no headline>
    -
    CF.W CF W COASTAL FLOOD WARNING
    CF.Y CF Y COASTAL FLOOD ADVISORY
    DS.W DS W DUST STORM WARNING
    DU.Y DU Y BLOWING DUST ADVISORY
    EC.A EC A EXTREME COLD WATCH
    EC.W EC W EXTREME COLD WARNING
    EH.A EH A EXCESSIVE HEAT WATCH
    EH.W EH W EXCESSIVE HEAT WARNING
    EW.W
    -
    EW
    -
    W
    -
    EXCESSIVE WIND WARNING
    -
    FA.A FA A FLOOD WATCH
    FA.W FA W AREAL FLOOD WARNING
    FA.Y FA Y AREAL FLOOD ADVISORY
    FF.A FF A FLASH FLOOD WATCH
    FF.W FF W FLASH FLOOD WARNING
    FG.Y FG Y DENSE FOG ADVISORY
    FL.A FL A FLOOD WATCH
    FL.W FL W FLOOD WARNING
    FL.Y FL Y FLOOD ADVISORY
    FR.Y FR Y FROST ADVISORY
    FW.A FW A FIRE WEATHER WATCH
    FW.W FW W RED FLAG WARNING
    FZ.A FZ A FREEZE WATCH
    FZ.W FZ W FREEZE WARNING
    GL.W GL W GALE WARNING
    HF.W HF W HURRICANE FORCE WIND WARNING
    HI.A HI A INLAND HURRICANE WATCH
    HI.W HI W INLAND HURRICANE WARNING
    HS.W HS W HEAVY SNOW WARNING
    HT.Y HT Y HEAT ADVISORY
    HU.A HU A HURRICANE WATCH
    HU.W HU W HURRICANE WARNING
    HW.A HW A HIGH WIND WATCH
    HW.W HW W HIGH WIND WARNING
    HZ.A
    -
    HZ
    -
    A
    -
    HARD FREEZE WATCH
    -
    HZ.W
    -
    HZ
    -
    W
    -
    HARD FREEZE WARNING
    -
    IP.W IP W SLEET WARNING
    IP.Y IP Y SLEET ADVISORY
    IS.W IS W ICE STORM WARNING
    LB.Y LB Y LAKE EFFECT SNOW AND BLOWING SNOW ADVISORY
    LE.A LE A LAKE EFFECT SNOW WATCH
    LE.W LE W LAKE EFFECT SNOW WARNING
    LE.Y LE Y LAKE EFFECT SNOW ADVISORY
    LO.Y LO Y LOW WATER ADVISORY
    LS.A LS A LAKESHORE FLOOD WATCH
    LS.S LS S <lakeshore flood statement - no headline>
    -
    LS.W LS W LAKESHORE FLOOD WARNING
    LS.Y LS Y LAKESHORE FLOOD ADVISORY
    LW.Y LW Y LAKE WIND ADVISORY
    MA.S MA S <marine statement - no headline>
    -
    MA.W MA W SPECIAL MARINE WARNING
    RB.Y RB Y SMALL CRAFT ADVISORY FOR ROUGH BAR
    SB.Y SB Y SNOW AND BLOWING SNOW ADVISORY
    SC.Y SC Y SMALL CRAFT ADVISORY
    SE.W SE W HAZARDOUS SEAS WARNING
    SI.Y SI Y SMALL CRAFT ADVISORY FOR WINDS
    SM.Y SM Y DENSE SMOKE ADVISORY
    SN.Y SN Y SNOW ADVISORY
    SR.W SR W STORM WARNING
    SU.W SU W HIGH SURF WARNING
    SU.Y SU Y HIGH SURF ADVISORY
    SV.A SV A SEVERE THUNDERSTORM WATCH
    SV.W SV W SEVERE THUNDERSTORM WARNING
    SW.Y SW Y SMALL CRAFT ADVISORY FOR HAZARDOUS SEAS
    TI.A TI A INLAND TROPICAL STORM WATCH
    TI.W TI W INLAND TROPICAL STORM WARNING
    TO.A TO A TORNADO WATCH
    TO.W TO W TORNADO WARNING
    TR.A TR A TROPICAL STORM WATCH
    TR.W TR W TROPICAL STORM WARNING
    TS.A TS A TSUNAMI WATCH
    TS.W TS W TSUNAMI WARNING
    TY.A TY A TYPHOON WATCH
    TY.W TY W TYPHOON WARNING
    UP.W UP W HEAVY FREEZING SPRAY WARNING
    UP.Y UP Y FREEZING SPRAY ADVISORY
    WC.A WC A WIND CHILL WATCH
    WC.W WC W WIND CHILL WARNING
    WC.Y WC Y WIND CHILL ADVISORY
    WI.Y WI Y WIND ADVISORY
    WS.A WS A WINTER STORM WATCH
    WS.W WS W WINTER STORM WARNING
    WW.Y WW Y WINTER WEATHER ADVISORY
    ZF.Y ZF Y FREEZING FOG ADVISORY
    ZR.Y ZR Y FREEZING RAIN ADVISORY
    -
    -

    Upgrade Table

    -The following table lists the types of VTEC phenomena that can be -upgraded and to what phonomena it upgrades to.  An upgrade is -indicated in VTEC by a pair of UPG/NEW action codes:
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Upgraded To:
    -
    Upgraded From:
    -
    BS.Y (BLOWING SNOW ADVISORY)BZ.A (BLIZZARD WATCH), LE.A (LAKE EFFECT SNOW WATCH), WS.A -(WINTER -STORM WATCH),
    BZ.W (BLIZZARD WARNING)BS.Y (BLOWING SNOW ADVISORY), BZ.A (BLIZZARD WATCH), IP.Y -(SLEET -ADVISORY), LB.Y (LAKE EFFECT SNOW AND BLOWING SNOW ADVISORY), LE.A -(LAKE EFFECT SNOW WATCH), LE.Y (LAKE EFFECT SNOW ADVISORY), SB.Y (SNOW -AND BLOWING SNOW ADVISORY), SN.Y (SNOW ADVISORY), WS.A (WINTER STORM -WATCH), WW.Y (WINTER WEATHER ADVISORY), ZR.Y (FREEZING RAIN ADVISORY),
    CF.W (COASTAL FLOOD WARNING)CF.A (COASTAL FLOOD WATCH), CF.Y (COASTAL FLOOD ADVISORY),
    CF.Y (COASTAL FLOOD ADVISORY)CF.A (COASTAL FLOOD WATCH),
    DS.W (DUST STORM WARNING)DU.Y (BLOWING DUST ADVISORY), HW.A (HIGH WIND WATCH), LW.Y -(LAKE WIND -ADVISORY), WI.Y (WIND ADVISORY),
    EC.W (EXTREME COLD WARNING)EC.A (EXTREME COLD WATCH),
    EH.W (EXCESSIVE HEAT WARNING)EH.A (EXCESSIVE HEAT WATCH), HT.Y (HEAT ADVISORY),
    FR.Y (FROST ADVISORY)FZ.A (FREEZE WATCH), HZ.A (HARD FREEZE WATCH),
    -
    FW.W (RED FLAG WARNING)FW.A (FIRE WEATHER WATCH),
    FZ.W (FREEZE WARNING)FR.Y (FROST ADVISORY), FZ.A (FREEZE WATCH), HZ.A (HARD FREEZE -WATCH),
    -
    GL.W (GALE WARNING)BW.Y (BRISK WIND ADVISORY), SC.Y (SMALL CRAFT ADVISORY), SI.Y -(SMALL -CRAFT ADVISORY FOR WINDS), SW.Y (SMALL CRAFT ADVISORY FOR HAZARDOUS -SEAS),
    HF.W (HURRICANE FORCE WIND WARNING)BW.Y (BRISK WIND ADVISORY), GL.W (GALE WARNING), SC.Y (SMALL -CRAFT -ADVISORY), SE.W (HAZARDOUS SEAS WARNING), SI.Y (SMALL CRAFT ADVISORY -FOR WINDS), SR.W (STORM WARNING), SW.Y (SMALL CRAFT ADVISORY FOR -HAZARDOUS SEAS),
    HI.W (INLAND HURRICANE WARNING)HI.A (INLAND HURRICANE WATCH), TI.A (INLAND TROPICAL STORM -WATCH), TI.W -(INLAND TROPICAL STORM WARNING),
    HS.W (HEAVY SNOW WARNING)BS.Y (BLOWING SNOW ADVISORY), BZ.A (BLIZZARD WATCH), IP.Y -(SLEET -ADVISORY), LB.Y (LAKE EFFECT SNOW AND BLOWING SNOW ADVISORY), LE.A -(LAKE EFFECT SNOW WATCH), LE.Y (LAKE EFFECT SNOW ADVISORY), SB.Y (SNOW -AND BLOWING SNOW ADVISORY), SN.Y (SNOW ADVISORY), WS.A (WINTER STORM -WATCH), WW.Y (WINTER WEATHER ADVISORY), ZR.Y (FREEZING RAIN ADVISORY),
    HT.Y (HEAT ADVISORY)EH.A (EXCESSIVE HEAT WATCH),
    HU.A (HURRICANE WATCH)TR.A (TROPICAL STORM WATCH),
    HU.W (HURRICANE WARNING)HU.A (HURRICANE WATCH), TR.A (TROPICAL STORM WATCH), TR.W -(TROPICAL -STORM WARNING),
    HW.W (HIGH WIND WARNING)DU.Y (BLOWING DUST ADVISORY), HW.A (HIGH WIND WATCH), LW.Y -(LAKE WIND -ADVISORY), WI.Y (WIND ADVISORY),
    HZ.W (HARD FREEZE WARNING
    -
    FZ.A (FREEZE WATCH), FR.Y (FROST -ADVISORY), HZ.A (HARD FREEZE WATCH),
    -
    IP.W (SLEET WARNING)BS.Y (BLOWING SNOW ADVISORY), BZ.A (BLIZZARD WATCH), IP.Y -(SLEET -ADVISORY), LB.Y (LAKE EFFECT SNOW AND BLOWING SNOW ADVISORY), LE.A -(LAKE EFFECT SNOW WATCH), LE.Y (LAKE EFFECT SNOW ADVISORY), SB.Y (SNOW -AND BLOWING SNOW ADVISORY), SN.Y (SNOW ADVISORY), WS.A (WINTER STORM -WATCH), WW.Y (WINTER WEATHER ADVISORY), ZR.Y (FREEZING RAIN ADVISORY),
    IP.Y (SLEET ADVISORY)BZ.A (BLIZZARD WATCH), LE.A (LAKE EFFECT SNOW WATCH), WS.A -(WINTER -STORM WATCH),
    IS.W (ICE STORM WARNING)BS.Y (BLOWING SNOW ADVISORY), BZ.A (BLIZZARD WATCH), IP.Y -(SLEET -ADVISORY), LB.Y (LAKE EFFECT SNOW AND BLOWING SNOW ADVISORY), LE.A -(LAKE EFFECT SNOW WATCH), LE.Y (LAKE EFFECT SNOW ADVISORY), SB.Y (SNOW -AND BLOWING SNOW ADVISORY), SN.Y (SNOW ADVISORY), WS.A (WINTER STORM -WATCH), WW.Y (WINTER WEATHER ADVISORY), ZR.Y (FREEZING RAIN ADVISORY),
    LB.Y (LAKE EFFECT SNOW AND BLOWING SNOW ADVISORY)BZ.A (BLIZZARD WATCH), LE.A (LAKE EFFECT SNOW WATCH), WS.A -(WINTER -STORM WATCH),
    LE.W (LAKE EFFECT SNOW WARNING)BS.Y (BLOWING SNOW ADVISORY), BZ.A (BLIZZARD WATCH), IP.Y -(SLEET -ADVISORY), LB.Y (LAKE EFFECT SNOW AND BLOWING SNOW ADVISORY), LE.A -(LAKE EFFECT SNOW WATCH), LE.Y (LAKE EFFECT SNOW ADVISORY), SB.Y (SNOW -AND BLOWING SNOW ADVISORY), SN.Y (SNOW ADVISORY), WS.A (WINTER STORM -WATCH), WW.Y (WINTER WEATHER ADVISORY), ZR.Y (FREEZING RAIN ADVISORY),
    LE.Y (LAKE EFFECT SNOW ADVISORY)BZ.A (BLIZZARD WATCH), LE.A (LAKE EFFECT SNOW WATCH), WS.A -(WINTER -STORM WATCH),
    LS.W (LAKESHORE FLOOD WARNING)LS.A (LAKESHORE FLOOD WATCH), LS.Y (LAKESHORE FLOOD -ADVISORY),
    LS.Y (LAKESHORE FLOOD ADVISORY)LS.A (LAKESHORE FLOOD WATCH),
    SB.Y (SNOW AND BLOWING SNOW ADVISORY)BZ.A (BLIZZARD WATCH), LE.A (LAKE EFFECT SNOW WATCH), WS.A -(WINTER -STORM WATCH),
    SE.W (HAZARDOUS SEAS WARNING)BW.Y (BRISK WIND ADVISORY), SC.Y (SMALL CRAFT ADVISORY), SI.Y -(SMALL -CRAFT ADVISORY FOR WINDS), SW.Y (SMALL CRAFT ADVISORY FOR HAZARDOUS -SEAS),
    SN.Y (SNOW ADVISORY)BZ.A (BLIZZARD WATCH), LE.A (LAKE EFFECT SNOW WATCH), WS.A -(WINTER -STORM WATCH),
    SR.W (STORM WARNING)BW.Y (BRISK WIND ADVISORY), GL.W (GALE WARNING), SC.Y (SMALL -CRAFT -ADVISORY), SE.W (HAZARDOUS SEAS WARNING), SI.Y (SMALL CRAFT ADVISORY -FOR WINDS), SW.Y (SMALL CRAFT ADVISORY FOR HAZARDOUS SEAS),
    SU.W (HIGH SURF WARNING)SU.Y (HIGH SURF ADVISORY),
    TI.W (INLAND TROPICAL STORM WARNING)HI.A (INLAND HURRICANE WATCH), TI.A (INLAND TROPICAL STORM -WATCH),
    TR.W (TROPICAL STORM WARNING)HU.A (HURRICANE WATCH), TR.A (TROPICAL STORM WATCH), TY.A -(TYPHOON -WATCH),
    TY.A (TYPHOON WATCH)TR.A (TROPICAL STORM WATCH),
    TY.W (TYPHOON WARNING)TR.A (TROPICAL STORM WATCH), TR.W (TROPICAL STORM WARNING), -TY.A -(TYPHOON WATCH),
    UP.W (HEAVY FREEZING SPRAY WARNING)UP.Y (FREEZING SPRAY ADVISORY),
    WC.W (WIND CHILL WARNING)WC.A (WIND CHILL WATCH), WC.Y (WIND CHILL ADVISORY),
    WC.Y (WIND CHILL ADVISORY)WC.A (WIND CHILL WATCH),
    WI.Y (WIND ADVISORY)HW.A (HIGH WIND WATCH),
    WS.W (WINTER STORM WARNING)BS.Y (BLOWING SNOW ADVISORY), BZ.A (BLIZZARD WATCH), IP.Y -(SLEET -ADVISORY), LB.Y (LAKE EFFECT SNOW AND BLOWING SNOW ADVISORY), LE.A -(LAKE EFFECT SNOW WATCH), LE.Y (LAKE EFFECT SNOW ADVISORY), SB.Y (SNOW -AND BLOWING SNOW ADVISORY), SN.Y (SNOW ADVISORY), WS.A (WINTER STORM -WATCH), WW.Y (WINTER WEATHER ADVISORY), ZR.Y (FREEZING RAIN ADVISORY),
    WW.Y (WINTER WEATHER ADVISORY)BZ.A (BLIZZARD WATCH), LE.A (LAKE EFFECT SNOW WATCH), WS.A -(WINTER -STORM WATCH),
    ZR.Y (FREEZING RAIN ADVISORY)BZ.A (BLIZZARD WATCH), LE.A (LAKE EFFECT SNOW WATCH), WS.A -(WINTER -STORM WATCH),
    -
    -
    -

    Downgrade Table

    -The following table lists the types of VTEC phenomena that can be -downgraded and to what phonomena it downgrades to.  An downgrade -is indicated -in VTEC by a pair of CAN/NEW action codes: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Downgraded To:
    -
    Downgraded -From:
    -
    BS.Y (BLOWING SNOW ADVISORY)BZ.W (BLIZZARD WARNING), HS.W (HEAVY SNOW WARNING), IP.W -(SLEET -WARNING), IS.W (ICE STORM WARNING), LE.W (LAKE EFFECT SNOW WARNING), -WS.W (WINTER STORM WARNING),
    BW.Y (BRISK WIND ADVISORY)GL.W (GALE WARNING), HF.W (HURRICANE FORCE WIND WARNING), -SR.W (STORM -WARNING),
    CF.Y (COASTAL FLOOD ADVISORY)CF.W (COASTAL FLOOD WARNING),
    DU.Y (BLOWING DUST ADVISORY)DS.W (DUST STORM WARNING), HW.W (HIGH WIND WARNING),
    FR.Y (FROST ADVISORY)FZ.W (FREEZE WARNING), HZ.W (HARD FREEZE WARNING),
    -
    GL.W (GALE WARNING)HF.W (HURRICANE FORCE WIND WARNING), SR.W (STORM WARNING),
    HT.Y (HEAT ADVISORY)EH.W (EXCESSIVE HEAT WARNING),
    IP.Y (SLEET ADVISORY)BZ.W (BLIZZARD WARNING), HS.W (HEAVY SNOW WARNING), IP.W -(SLEET -WARNING), IS.W (ICE STORM WARNING), LE.W (LAKE EFFECT SNOW WARNING), -WS.W (WINTER STORM WARNING),
    LB.Y (LAKE EFFECT SNOW AND BLOWING SNOW ADVISORY)BZ.W (BLIZZARD WARNING), HS.W (HEAVY SNOW WARNING), IP.W -(SLEET -WARNING), IS.W (ICE STORM WARNING), LE.W (LAKE EFFECT SNOW WARNING), -WS.W (WINTER STORM WARNING),
    LE.Y (LAKE EFFECT SNOW ADVISORY)BZ.W (BLIZZARD WARNING), HS.W (HEAVY SNOW WARNING), IP.W -(SLEET -WARNING), IS.W (ICE STORM WARNING), LE.W (LAKE EFFECT SNOW WARNING), -WS.W (WINTER STORM WARNING),
    LS.Y (LAKESHORE FLOOD ADVISORY)LS.W (LAKESHORE FLOOD WARNING),
    LW.Y (LAKE WIND ADVISORY)DS.W (DUST STORM WARNING), HW.W (HIGH WIND WARNING), WI.Y -(WIND -ADVISORY),
    SB.Y (SNOW AND BLOWING SNOW ADVISORY)BZ.W (BLIZZARD WARNING), HS.W (HEAVY SNOW WARNING), IP.W -(SLEET -WARNING), IS.W (ICE STORM WARNING), LE.W (LAKE EFFECT SNOW WARNING), -WS.W (WINTER STORM WARNING),
    SC.Y (SMALL CRAFT ADVISORY)GL.W (GALE WARNING), HF.W (HURRICANE FORCE WIND WARNING), -SE.W -(HAZARDOUS SEAS WARNING), SR.W (STORM WARNING),
    SE.W (HAZARDOUS SEAS WARNING)HF.W (HURRICANE FORCE WIND WARNING), SR.W (STORM WARNING),
    SI.Y (SMALL CRAFT ADVISORY FOR WINDS)GL.W (GALE WARNING), HF.W (HURRICANE FORCE WIND WARNING), -SE.W -(HAZARDOUS SEAS WARNING), SR.W (STORM WARNING),
    SN.Y (SNOW ADVISORY)BZ.W (BLIZZARD WARNING), HS.W (HEAVY SNOW WARNING), IP.W -(SLEET -WARNING), IS.W (ICE STORM WARNING), LE.W (LAKE EFFECT SNOW WARNING), -WS.W (WINTER STORM WARNING),
    SR.W (STORM WARNING)HF.W (HURRICANE FORCE WIND WARNING),
    SU.Y (HIGH SURF ADVISORY)SU.W (HIGH SURF WARNING),
    SW.Y (SMALL CRAFT ADVISORY FOR HAZARDOUS SEAS)GL.W (GALE WARNING), HF.W (HURRICANE FORCE WIND WARNING), -SE.W -(HAZARDOUS SEAS WARNING), SR.W (STORM WARNING),
    TI.W (INLAND TROPICAL STORM WARNING)HI.W (INLAND HURRICANE WARNING),
    UP.Y (FREEZING SPRAY ADVISORY)UP.W (HEAVY FREEZING SPRAY WARNING),
    WC.Y (WIND CHILL ADVISORY)WC.W (WIND CHILL WARNING),
    WI.Y (WIND ADVISORY)DS.W (DUST STORM WARNING), HW.W (HIGH WIND WARNING),
    WW.Y (WINTER WEATHER ADVISORY)BZ.W (BLIZZARD WARNING), HS.W (HEAVY SNOW WARNING), IP.W -(SLEET -WARNING), IS.W (ICE STORM WARNING), LE.W (LAKE EFFECT SNOW WARNING), -WS.W (WINTER STORM WARNING),
    ZR.Y (FREEZING RAIN ADVISORY)BZ.W (BLIZZARD WARNING), HS.W (HEAVY SNOW WARNING), IP.W -(SLEET -WARNING), IS.W (ICE STORM WARNING), LE.W (LAKE EFFECT SNOW WARNING), -WS.W (WINTER STORM WARNING),
    -
    -
    -
    -

    Back to Table Of Contents -
    -
    -
    -

    - - diff --git a/cave/com.raytheon.viz.gfe/help/VTECPartners.html b/cave/com.raytheon.viz.gfe/help/VTECPartners.html deleted file mode 100644 index 0550f94a8a..0000000000 --- a/cave/com.raytheon.viz.gfe/help/VTECPartners.html +++ /dev/null @@ -1,314 +0,0 @@ - - - - - - - VTECPartners.py - - -

    VTECPartners

    -December 30, 2011
    - -

    -Overview

    -The VTECPartners.py file is the baseline supplied configuration file -for VTEC active table coordination.  The file controls the -following aspects of VTEC:
    -
      -
    • Definition of the national Storm Prediction Center VTEC id for -use in the Merge VTEC and VTECDecoder routines.
    • -
    • List of coordination sites from which their VTEC active table -will be retrieved and merged into our VTEC active table.
    • -
    • Coordination interval for active tables.
    • -
    • List of site filters used for VTEC decoding and merging.
    • -
    • Backup file purge time.
    • -
    • Text capture categories for the VTEC Decoder
    • -
    • Mapping of pils from initial issuance to update/cancel pils.
      -
    • -
    -The localVTECPartners.py file is -used to override baseline entries in the VTECPartners.py file.
    -

    -
      -
    -

    Format

    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Contains a list of request -sites.  These are the AWIPS site identifiers (nominally -3-letters).  Requests will be sent from EDEX to these -sites at the interval specified in the VTEC_REMOTE_TABLE_FETCH_TIME -entry.
    -

    - VTEC_TABLE_REQUEST_SITES -= []
    The Tornado Watches and Severe -Thunderstorm watches from SPC are handled differently than the local -office watches.  The tropical storm and hurricane watch/warnings -are also handled differently. These entries identifies the VTEC site -identifier -for SPC and TPC.
    -

    - VTEC_SPC_SITE -= 'KWNS'
    -VTEC_TPC_SITE = 'KNHC'
    -
    A site filter is applied when -active tables from remote sites are merged into our active table.  -If this was not done, your active table would soon end up containing -records from every site in the country.  Your adjacent sites and -your backup offices should be listed in this field.  These entries -are VTEC site identifiers, which are always 4-letters in length, such -as KBOU.
    -
    -To not apply any filter, set this value to None (through -localVTECPartners).
    -

    - VTEC_MERGE_SITES -= []
    The VTECDecoder receives text -bulletins from the AWIPS data stream and decodes them for VTEC -entries.  This entry is used to specify which site's will be -included in the VTECDecoder stream.  If a VTEC site id is detected -in an incoming product and that site is not included in this list, the -entry will be discarded.  These entries are VTEC site identifiers, -which are always 4-letters in length, such as PAFC.
    -
    -To not apply any filter, set this value to None (through -localVTECPartners).
    -

    - VTEC_DECODER_SITES -= []
    The VTECDecoder captures the -segment text for each product.   Only a few of the product -formatters require this text. Since the text is large when compared -with the size of the rest of the record, we only capture text for -certain product categories.   The -VTEC_CAPTURE_TEXT_CATEGORIES defines the product categories for which -we capture and save text into the active table.
    -
    -If this definition is changed, old records will also be updated and -their text field possibly removed.
    -

    - VTEC_CAPTURE_TEXT_CATEGORIES -= ['WSW', 'NPW']
    -
    -
    Remapping of product pils.  -This is required for certain VTEC events if a hazard is created in one -pil and then updated or cancelled in another pil.  Example is the -TO.W (Tornado Warning), which is issued in the TOR pil but -updated/cancelled in the SVS pil.  In order for the table matching -purging to work correctly, the pils in the followup products must be -mapped back to the original.  This is *only* for use for -non-GFE/GHG issued products since the GHG logic uses the pil -information to calculate VTEC. This is a dictionary of (phen,sig,pil) -with the remapped pil as the value.  These values should not be -changed.
    -
    VTEC_MAPPED_PILS = {
    -   -('TO','W','SVS'): 'TOR', ('SV','W','SVS'): 'SVR', ('FF','W','FLS'): -'FFW',
    -   -('FL','W','FLS'): 'FLW', ('MA','W','MWS'): 'SMW', ('EW','W','SVS'): -'EWW',
    -   }
    -
    -
    This entry defines the purge -interval in hours for the backups of the active table.  Each time -the active table is updated, a backup copy is made.
    -

    - VTEC_BACKUP_TABLE_PURGE_TIME -= 168
    -
    -
    This entry defines the -coordination interval for updating your active table with adjacent -site's active tables.  It is specified in seconds.
    -

    - VTEC_REMOTE_TABLE_FETCH_TIME -= 60*60
    This entry determines whether my -sites will respond to VTEC table requests from other sites.  If -set to 1, then we will return our filtered VTEC table to the requestor -site.
    -

    - #VTEC_RESPOND_TO_TABLE_REQUESTS -= 1
    -
    This section handles the default -configuration for VTECPartners.  Do not change this section.  -The first part of the section contains a dictionary of failed site, and -its primary and secondary backup sites.  Other functions are used -to define the default values for the configuration.  The import -section deals with the localVTECPartners configuration file, which is -used to override -the baseline entries.
    -
    #--------------------------
    - #DO NOT -CHANGE ANY CODE BELOW THIS NOTICE
    - #--------------------------
    -
    -
    -

    -
    -
    -
    -

    Modification Technique

    -The modification technique requires the user to create a -localVTECPartners.py file in the /awips2/edex/data/utility/common_static/site/SITE_ID/vtec -directory and then override -just those elements required.  Refer to the localVTECPartners.py documentation.
    -
    -

    Enabling Sharing of VTEC Table

    -Enabling Sharing of the VTEC Active Table is important in order to keep -your active table in sync with other site's active tables.  -Normally, the active tables for the main site and backup site are kept -up to date since they are fed by the same text bulletin data -feed.  However, if the AWIPS system was down and products were -missed, or you are backing up a site that is far remote from your -normal domain, the sharing of the VTEC active table is -important.   Sharing of the VTEC active table also will allow -the site to recovery from a corrupted VTEC active table through manual -intervention.
    -
    -Sharing of the VTEC active table is accomplished through these steps:
    -
      -
    1. Creation of a localVTECPartners.py file.
    2. -
    3. Enabling your site to respond to other requests for your active -table.
    4. -
    5. Enabling your site to request other sites active table.
    6. -
    7. Restarting the EDEX.
      -
    8. -
    -Refer to the localVTECPartners.py -documentation for more details on the syntax of the -localVTECPartners.py file.  Basically you will create a file in -/awips2/edex/data/utility/common_static/site/SITE_ID/vtec -called localVTECPartners.py and it will contain at least -the following information:
    -
    -import -VTECPartners
    -from -VTECPartners import *
    -
    -VTEC_RESPOND_TO_TABLE_REQUESTS -= 1
    -VTEC_REMOTE_TABLE_FETCH_TIME -= 60*60  #60 minutes
    -
    -
    -Additionally you may want to specify the sites that you will request -active tables from, although by default this is set up to be your -primary and secondary backup sites, and sites that include you as their -primary and secondary backup sites.   You may want to pare -down the list to only 2 or 3 sites to cut down on WAN traffic.  If -you want to modify the list, then you will have an additional entry -such as:
    -
    -VTEC_TABLE_REQUEST_SITES -= ['DVN','DMX']
    -
    -After you have enabled the sharing, you should examine your ingestAT, dumpAT, iscDataRec log -files to -ensure operations are working as desired.
    -
    -Note: The sites specified in -VTEC_TABLE_REQUEST_SITES do not represent AWIPS physical sites, but -EDEX servers running the specified site domain.  Thus if you specify -'DMX', the software will discover all of the EDEX servers on the network -running the domain 'DMX' and choose one of the servers to request -the VTEC table updates from.  The software will first try to -find a message handler ID that matches the domain id, with the known -primary GFE location (dx3/98000000), and then will check other -hosts and ports and perhaps different message handler ids for the 'DMX' -domain.  The log files will indicate where the requests are sent.
    -
    - -

    - - - diff --git a/cave/com.raytheon.viz.gfe/help/ViewWCL.html b/cave/com.raytheon.viz.gfe/help/ViewWCL.html deleted file mode 100644 index 1102c46e3a..0000000000 --- a/cave/com.raytheon.viz.gfe/help/ViewWCL.html +++ /dev/null @@ -1,182 +0,0 @@ - - - - - ViewWCL Procedure - - -
    -

    ViewWCL

    -

    Procedure for viewing the SPC proposed watches

    -
    -Methodology
    -How It Works
    -
    -

    Methodology

    -
    -The first step in the watch by county process occurs when the -Storm Prediction Center issued a Watch Coordination List (WCL) product. -This product -outlines their first guess at what the watch should be, and is used a -reference -for the watch coordination conference call.
    -
    -In GFE, the display of WCL information is handled in a two step process.
    -
    -First, the WCL arrives internally, triggering a notification on all -GFEs.
    -
    -WCL Notification
    -
    -At that point, the forecast should select ViewWCL from the -Hazards -Menu.  
    -
    -
    -

    -View WCL Menu
    -
    -
    -
    A dialog is displayed and the forecaster selects the appropriate -bulletin. The dialog lists all of the WLCs received in the last six -hours.
    -
    -
    -
    -When the procedure runs, it will create a temporary grid in GFE -called ProposedWatches. -This grid has no bearing whatsoever on the actual Hazard grid, as it is -for display and coordination only.
    -
    -WCL Grid
    -
    -The grid has eight labels. These are:
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key
    -
    Current Watch Type
    -
    Proposed Watch Type
    -
    SV.A
    -
    None
    -
    Severe Thunderstorm Watch
    -
    TO.A
    -
    None
    -
    Tornado Watch
    -
    sv.a
    -
    Severe Thunderstorm Watch
    -
    No Change
    -
    to.a
    -
    Tornado Watch
    -
    No Change
    -
    to->SV
    -
    Tornado Watch
    -
    Severe Thunderstorm Watch
    -
    sv->SV
    -
    Severe Thunderstorm Watch
    -
    Severe Thunderstorm Watch (New)
    -
    sv->TO
    -
    Severe Thunderstorm Watch
    -
    Tornado Watch
    -
    to->TO
    -
    Tornado Watch
    -
    Tornado Watch (New)
    -
    -
    -Here is an example of a WCL grid with two watches displayed. The -brighter blue -region is the new (proposed) Severe Thunderstorm Watch. The darker red -area to -the southeast is an existing Tornado Watch. The purple area between -them are counties -which are currently under the Tornado Watch, but will be under the -Severe Thunderstorm -Watch when it is issued.
    -
    -WCL Grid 2
    -
    -
    -
    -

    How It Works

    -The ViewWCL procedure reads in saved data written into the EDEX -databases by the VTEC Decoder. The data -contains the watch type, the ugc list of counties, the WCL issuance -time, and the WCL expiration time.  The procedure then filters the -VTEC active table and extracts records that meet all of the following -conditions:
    -
      -
    • Product PIL is "WCN"
    • -
    • Office ID is your own office id
    • -
    • Event ending time is later than the current time
    • -
    • The VTEC action code is not CAN or EXP.
    • -
    -The final steps are:
    -
      -
    • The procedure calculates the starting and ending time of the -"to-be-created" grid by encompassing all events that were filtered, -plus the issuance and expiration time.
      -
    • -
    • Any existing ProposedWatches grids are removed from the GFE.
    • -
    • Comparisons are made between the proposed WCL watch and the -active table information to determine the correct "category" for -display.
    • -
    • The temporary ProposedWatches grid is created and displayed.
    • -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/VirtualParm.html b/cave/com.raytheon.viz.gfe/help/VirtualParm.html deleted file mode 100644 index 6b3fd2557c..0000000000 --- a/cave/com.raytheon.viz.gfe/help/VirtualParm.html +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - Virtual Weather Elements Configuration - - -

    Virtual Weather Elements Configuration
    -

    -
    February 17, 2012
    -
    -
    -
    -

    Table of Contents

    -Overview -
    -

    -
    -

    Overview

    -This document describes the configuration technique for the virtual -weather element capability of the GFESuite.
    -
    -NOTE: This -release does not support configurable virtual weather elements, thus -this documentation is incomplete.
    -
    -Virtual weather elements are enabled for the ISC weather elements MinT, -MaxT, SnowAmt, QPF, and PoP. See the Intersite -Coordination User's Guide for more details.
    -
    -
    -

    Back to TOC -
    -
    -

    - - diff --git a/cave/com.raytheon.viz.gfe/help/aqtree.js b/cave/com.raytheon.viz.gfe/help/aqtree.js deleted file mode 100644 index 5fd7c968d8..0000000000 --- a/cave/com.raytheon.viz.gfe/help/aqtree.js +++ /dev/null @@ -1,171 +0,0 @@ -/* -aqtree.js - -Converts an unordered list to an explorer-style tree - -To make this work, simply add one line to your HTML: - - -and then make the top UL of your nested unordered list of class "aqtree". - -That's it. No registration function, nothing. - -http://www.kryogenix.org/code/browser/aqlists/ - -Stuart Langridge, November 2002 -sil@kryogenix.org - -Inspired by Aaron's labels.js (http://youngpup.net/demos/labels/) and Dave Lindquist's menuDropDown.js (http://www.gazingus.org/dhtml/?id=109) - -and now heavily hacked by Shariin of Fennin Ro =) - -With revisions by Phil Kulikauskas - -*/ - - -addEvent(window, "load", makeTrees); - -function makeTrees () { - // We don't actually need createElement, but we do - // need good DOM support, so this is a good check. - if (!document.createElement) return; - - uls = document.getElementsByTagName ("ul"); - for (uli=0; uli < uls.length; uli++) - { - ul = uls[uli]; - if (ul.nodeName == "UL" && ul.className == "aqtree") - { - processULEL (ul); - } - } -} - -function processULEL (ul) -{ - if (!ul.childNodes || ul.childNodes.length == 0) return; - - var log = document.getElementById ("log"); - - // Iterate LIs - for (var itemi = 0; itemi < ul.childNodes.length; itemi++) - { - window.status = "item " + itemi; - var item = ul.childNodes[itemi]; - if (item.nodeName == "LI") - { - item.style.listStyle = "none"; - - // Iterate things in this LI - var atag; - var subul = 0; - - // rather than just playing with the a tag, we - // want to insert a new a tag and play with *that* - - // create the a tag - atag = document.createElement ("a"); - atag.setAttribute ("class", "treenode"); - // put a '-' inside it, as we're defaulting to an open tree - // we could instead put a + in it and set the ul to display:none - // to default to a closed tree - icon = document.createElement ("img"); // AQ5 - if (item.className == "expand") - { - icon.setAttribute ("src", "../images/bullet.gif"); - } - else - { - icon.setAttribute ("src", "../images/plus.gif"); // AQ5 - } - atag.appendChild (icon); // AQ5 - - // insert it before our link - var first = item.firstChild; - item.insertBefore (atag, first); - // and insert a space to look pretty - item.insertBefore (document.createTextNode (" "), first); - - for (var sitemi = 0; sitemi < item.childNodes.length; sitemi++) - { - if (item.childNodes[sitemi].nodeName == "UL") - { - subul = item.childNodes[sitemi]; - // conceal the contents of this child, so we default - // to a closed tree - if (item.className != "expand") - { - subul.style.display = "none"; // AQ5 - } - processULEL (subul); - } - } - if (subul && item.className != "expand") { - // this node has children, tie in the open/close handlers - associateEL (atag, subul); - } else { - // this node has no children; just display a bullet - icon = document.createElement ("img"); // AQ5 - icon.setAttribute ("src", "../images/bullet.gif"); // AQ5 - atag.parentNode.replaceChild (icon, atag); // AQ5 - } - } - } -} - -function associateEL (anchor, ul) -{ - if (!anchor) alert ("associateEL"); - - anchor.onclick = function () - { - var display = ul.style.display; - if (ul.style.display == "none") - { - // open the node - ul.style.display = "block"; - // change the + to a - - icon = document.createElement ("img"); // AQ5 - icon.setAttribute ("src", "../images/minus.gif"); // AQ5 - anchor.replaceChild (icon, anchor.firstChild); // AQ5 - } - else - { - // close the node - ul.style.display = "none"; - // change the - to a + - icon = document.createElement ("img"); // AQ5 - icon.setAttribute ("src", "../images/plus.gif"); // AQ5 - anchor.replaceChild (icon, anchor.firstChild); // AQ5 - } - return false; - } - anchor.onmouseover = function() - { - var display = ul.style.display; - window.status = (display == "block") ? "Collapse" : "Expand"; - return true; - } - anchor.onmouseout = function() - { - window.status = ""; - return true; - } -} - -/* Utility functions */ - -function addEvent(obj, evType, fn){ - /* adds an eventListener for browsers which support it - Written by Scott Andrew: nice one, Scott */ - if (obj.addEventListener){ - obj.addEventListener(evType, fn, true); - return true; - } else if (obj.attachEvent){ - var r = obj.attachEvent("on"+evType, fn); - return r; - } else { - return false; - } -} diff --git a/cave/com.raytheon.viz.gfe/help/aqtree2.js b/cave/com.raytheon.viz.gfe/help/aqtree2.js deleted file mode 100644 index a7187438d8..0000000000 --- a/cave/com.raytheon.viz.gfe/help/aqtree2.js +++ /dev/null @@ -1,173 +0,0 @@ -/* -aqtree.js - -Converts an unordered list to an explorer-style tree - -To make this work, simply add one line to your HTML: - - -and then make the top UL of your nested unordered list of class "aqtree2". - -That's it. No registration function, nothing. - -http://www.kryogenix.org/code/browser/aqlists/ - -Stuart Langridge, November 2002 -sil@kryogenix.org - -Inspired by Aaron's labels.js (http://youngpup.net/demos/labels/) and Dave Lindquist's menuDropDown.js (http://www.gazingus.org/dhtml/?id=109) - -and now heavily hacked by Shariin of Fennin Ro =) - -With revisions by Phil Kulikauskas - -NOTE: THIS VERSION LINKS CURRENT LEVEL IE images/*.* INSTEAD OF ../images/*.* - -*/ - - -addEvent(window, "load", makeTrees); - -function makeTrees () { - // We don't actually need createElement, but we do - // need good DOM support, so this is a good check. - if (!document.createElement) return; - - uls = document.getElementsByTagName ("ul"); - for (uli=0; uli < uls.length; uli++) - { - ul = uls[uli]; - if (ul.nodeName == "UL" && ul.className == "aqtree") - { - processULEL (ul); - } - } -} - -function processULEL (ul) -{ - if (!ul.childNodes || ul.childNodes.length == 0) return; - - var log = document.getElementById ("log"); - - // Iterate LIs - for (var itemi = 0; itemi < ul.childNodes.length; itemi++) - { - window.status = "item " + itemi; - var item = ul.childNodes[itemi]; - if (item.nodeName == "LI") - { - item.style.listStyle = "none"; - - // Iterate things in this LI - var atag; - var subul = 0; - - // rather than just playing with the a tag, we - // want to insert a new a tag and play with *that* - - // create the a tag - atag = document.createElement ("a"); - atag.setAttribute ("class", "treenode"); - // put a '-' inside it, as we're defaulting to an open tree - // we could instead put a + in it and set the ul to display:none - // to default to a closed tree - icon = document.createElement ("img"); // AQ5 - if (item.className == "expand") - { - icon.setAttribute ("src", "images/bullet.gif"); - } - else - { - icon.setAttribute ("src", "images/plus.gif"); // AQ5 - } - atag.appendChild (icon); // AQ5 - - // insert it before our link - var first = item.firstChild; - item.insertBefore (atag, first); - // and insert a space to look pretty - item.insertBefore (document.createTextNode (" "), first); - - for (var sitemi = 0; sitemi < item.childNodes.length; sitemi++) - { - if (item.childNodes[sitemi].nodeName == "UL") - { - subul = item.childNodes[sitemi]; - // conceal the contents of this child, so we default - // to a closed tree - if (item.className != "expand") - { - subul.style.display = "none"; // AQ5 - } - processULEL (subul); - } - } - if (subul && item.className != "expand") { - // this node has children, tie in the open/close handlers - associateEL (atag, subul); - } else { - // this node has no children; just display a bullet - icon = document.createElement ("img"); // AQ5 - icon.setAttribute ("src", "images/bullet.gif"); // AQ5 - atag.parentNode.replaceChild (icon, atag); // AQ5 - } - } - } -} - -function associateEL (anchor, ul) -{ - if (!anchor) alert ("associateEL"); - - anchor.onclick = function () - { - var display = ul.style.display; - if (ul.style.display == "none") - { - // open the node - ul.style.display = "block"; - // change the + to a - - icon = document.createElement ("img"); // AQ5 - icon.setAttribute ("src", "images/minus.gif"); // AQ5 - anchor.replaceChild (icon, anchor.firstChild); // AQ5 - } - else - { - // close the node - ul.style.display = "none"; - // change the - to a + - icon = document.createElement ("img"); // AQ5 - icon.setAttribute ("src", "images/plus.gif"); // AQ5 - anchor.replaceChild (icon, anchor.firstChild); // AQ5 - } - return false; - } - anchor.onmouseover = function() - { - var display = ul.style.display; - window.status = (display == "block") ? "Collapse" : "Expand"; - return true; - } - anchor.onmouseout = function() - { - window.status = ""; - return true; - } -} - -/* Utility functions */ - -function addEvent(obj, evType, fn){ - /* adds an eventListener for browsers which support it - Written by Scott Andrew: nice one, Scott */ - if (obj.addEventListener){ - obj.addEventListener(evType, fn, true); - return true; - } else if (obj.attachEvent){ - var r = obj.attachEvent("on"+evType, fn); - return r; - } else { - return false; - } -} diff --git a/cave/com.raytheon.viz.gfe/help/baseSiteUserConcept.html b/cave/com.raytheon.viz.gfe/help/baseSiteUserConcept.html deleted file mode 100644 index c580f0bdab..0000000000 --- a/cave/com.raytheon.viz.gfe/help/baseSiteUserConcept.html +++ /dev/null @@ -1,822 +0,0 @@ - - - - - - - BASE SITE USER Concept - - -

    -GFESuite Configurability - BASE, SITE, USER -Concept

    -
    February 17, 2012
    -
    -Table of Contents
    - - - -The Effect of Multiple Users -
    -What Data Types -Do the BASE, SITE, USER Apply To? -
    -Where are These -BASE, SITE, and USER Files Located? -
    -How Do I Control -Whether -I Am a USER or a SITE? -
    -How Do I Make -Modifications -to the SITE Files? -
    -How Do I Make -Modifications -to the USER Files? -
    -How Do I Define a New USER? -
    -Are -Programs Other Than the GFE Affected by the BASE, SITE, USER Concept? -

    -
    -
    -

    Overview

    -The GFESuite software uses the concept of site and user overrides. This -permits the installed files from the software distribution to not -interfere -with local modifications. Installed files are called BASE -files. -A site can choose to make changes or override the BASE files by -installing -the sites's files in the SITE area. An individual user can -override -the BASE and SITE definitions by installing custom user files in the -USER -area. Files under the BASE directories -should -NEVER be modified by the site or they will be overwritten on the next -upgrade. -

    Upon request of data from EDEX, the server will first look -for data in the customized user directory. If the requested data -is found, it is returned. If not found, the server then looks in -the site directory. If the requested data is found there, it is -returned. -If not found, then the server looks in the base directory. If the -requested data is found in the base directory, it is returned. If -not found, an error is returned. -

    -

    Upon storage of data to EDEX, the server will always try to -write into the customized user directory. If it is successful, -subsequent -reads of the data will always be returned via the customized version of -the file. -

    -

    Data is retrieved from EDEX using different identifiers, -which -identify the name of an entity, but not its location (e.g., BASE, SITE, -USER). When that data is retrieved, the client can then determine -where the data was retrieved. -

    -

    There are some special cases: -

    -
      -
    • Server configuration files -are not -stored in the server, but still use the concept of BASE and SITE. -There are no USER-type files for the server configuration since there -is -only one server per site. See the server configuration information for -details.
    • -
    • Grids, topography, and map backgrounds data available through EDEX -are available at only one level. There is no override capability -for this type of data through the server. In other words, every -user of an EDEX will "see" the identical set of grids, topography, and -map backgrounds. There aren't separate databases for BASE -Forecast and SITE or USER Forecast.
    • -
    -Some of the files stored in the server are Python files, and others are -non-Python files. With the non-Python files, you get the choice of -a complete override of SITE and BASE files, i.e., you can't do a simple -merge. With the Python files, you can either do a complete -override -using SITE and BASE or you can use the Python "import" statement to do -partial overrides. -
    -
    -

    Data -Retrieval -Using the BASE, SITE, USER Concept

    -The following illustration shows examples of the files that will be -retrieved -by a user. The search path for users will always be the USER -directory -first, then the SITE followed by the BASE. If the file is not -found, -an error will be returned. Files in the SITE override files in -the -BASE directory. Files in each USER directory override files in -the -BASE and SITE. -
    -

    Non-Python Case

    -


    -This example applies to non-Python -files stored in the server. -

    -

    This table illustrates the different conditions and what file is -retrieved based on a USER, and based on SITE. -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FileExists in BASEExists in SITEExists in USERReturned File by USERReturned File by SITE
    aYESNONOBaseBase
    bYESYESYESUserSite
    cNOYESYESUserSite
    dNOYESNOSiteSite
    eNONOYESUser<none>
    fYESYESNOSiteSite
    -

    -


    -

    -

    Python Case

    -


    -Data retrieval for Python files from the server work on essentially -the same principal, except that Python files can import other files as -shown in the following table and illustration illustration (the black -arrows -indicate the import path as defined in the actual files, the red arrows -indicate the final result): -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FileExists in BASEExists in SITEExists in USERReturned File by USER (considering imports)Returned File by SITE (considering imports)
    mYESNONOBase mBase m
    nYESNOYES - inports mBase m + User nBase n
    oNOYES - imports mNOBase m + Site oBase m + Site o
    pNOYES - imports mNOBase m + Site pBase m + Site p
    qNONOYES - imports pBase m + Site p + User q<none>
    rNONOYESUser r<none>
    sNONOYES - imports nBase m + User n + User s<none>
    -

    -


    -Note that for the Python "n" case, the BASE "n" is hidden from the -USER since there is already an "n" in USER. Therefore a USER who -uses an "import n" statement in one of the files will not see the BASE -"n", but will see the USER "n". There is no way to specify in an -import statement whether you want BASE or SITE or USER. In the case of -USER "r", no imports were performed at all. -
    -

    -
    -

    Data Storage -Using -the BASE, SITE, USER Concept

    -The following illustration shows examples of the files that will be -stored -by a user. The storage path for users is always the USER -directory. -If the file is read-only, attempts to store a file with the same name -will fail. -

    This table illustrates the different conditions and what file is -stored -based on a USER, and based on SITE. -File "e" in USER is read-only in this example. Attempts to write -over "e" will fail. File "a" is located in BASE and a new one is -written to USER. Even though "a" in BASE is read-only, the user -may write a file into USER under the same name. -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FileExists in BASEExists in SITEExists in USERStorage Location for USERStorage Location for SITE
    aYES (read-only)NONOUserBase
    bYESYESYESUserBase
    cNOYESYESUserBase
    dNOYESNOUserBase
    eNONOYES (read-only)<ERROR>Base
    fYESYESNOUserBase
    -

    -


    -

    -
    -

    The Effect of Multiple Users

    -Multiple users, as long as their login name or specified user name are -different, are isolated from each other. This allows individuals to -create -their own special set of edit areas, smart tools, and GFE -configurations -without affecting other users. -

    It is quite possible, and probable, to have two different clients, -such -as GFEs, running under the same user login name. This case is not -treated as two different users. -

    -

    The following illustration shows examples of the files that will be -stored by two users with different login names. The storage path -for users is always the USER directory. If the file is read-only, -then attempts to store a file with the same name will fail. -

    -

    The table illustrates the different conditions and what file is -stored -based two users, USER1 and USER1. In this example, there are no -read-only -files in USER1 or USER2. Examples are shown for the -non-Python files, which don't use the import facility. -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FileExists in BASEExists in SITEExists in USER1Exists in USER2Storage Location for USER1Storage Location for USER2
    aYES (read-only)NONONOUser1User2
    bYESYESNOYESUser1User2
    cNOYESYESNOUser1User2
    dNOYESNONOUser1User2
    eNONONONOUser1User2
    fYESYESNONOUser1User2
    -

    -

    -

    The following illustration shows examples of the files that will be -retrieved by two users. The search path for users is always the -USER -directory first, then the SITE followed by the BASE. If the file -is not found, then an error will be returned. Files in the SITE -override -files in the BASE directory. Files in each USER directory -override -files in the BASE and SITE. -

    -

    The files in the different USER directories are not seen by all -users, -just the user that matches the login name. -

    -

    The table illustrates the different conditions and what file is -retrieved -based on a user, and based on SITE. -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FileExists in BASEExists in SITEExists in USERReturned File by USER1Returned File by USER2
    aYESNONOBaseBase
    bYESYESYESSiteUser
    cNOYESYESUserUser
    dNOYESNOSiteSite
    eNONONO<none><none>
    fYESYESNOSiteSite
    -

    -

    -

    -
    What -Data Types Do the BASE, SITE, USER Apply To?

    -The BASE, SITE, and USER concepts apply to the types of data shown in -the -following table. If the BASE, SITE, USER concept is used, then the site -can override the initial installation files (BASE), and an individual -user -can override the sites's files. If there is a "Python 'import' -capability" -for a particular data type, that permits partial overrides by using the -Python "import" statement to pull in additional files. -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Data TypeUses BASE, SITE, USER ConceptPython "import" capable
    Sample SetsYESNO
    Color TablesYESNO
    Edit areas -(a.k.a. -REFERENCE sets)YESNO
    Edit ToolsYESYES
    ProceduresYES
    -
    YES
    -
    Text Utilities
    -
    YES
    -
    YES
    -
    Utilities (e.g., Smart Scripts)
    -
    YES
    -
    YES
    -
    Edit -Area GroupsYESNO
    Weather -Element Groups -(BUNDLE)YESNO
    Combo (Zone Combiner saved -configurations, and color table)
    -
    NO - this is a special case that -does not use the BASE/SITE/User concept. All files are written -into the SITE-level regardless of user.
    -
    NO
    -
    Combo (Zone Combinations used by -products)
    -
    NO - this is a special case that -does not use the BASE/SITE/User concept. -All files are written into the SITE-level regardless of user.YES
    -
    Text Formatters
    -
    YESYES
    -
    Selection -Time -Range by nameYESNO
    Grid DataNONO
    Map Background DataNONO
    Topography DataNONO
    Server ConfigurationsPartially. Base and Site are supported, but are implemented -in a different -technique than is described here. For information, see the server -configuration guide.YES
    GFE ConfigurationsYES. The implementation is done differently than described -here. -For information, see the GFE -configuration -guide.YES
    Virtual Parm Modules
    -
    YES
    -
    YES
    -
    GHG Monitor Configuration
    -
    YES
    -
    NO
    -
    -

    -

    -
    -

    Where are -These -BASE, SITE, and USER Files Located?

    -The location of the server configuration files are shown in the table -below: -
    - - - - - - - - - - - - - - - - - - - - - - - -
    File PurposePart of Standard ReleaseAWIPS File Location
    BASE files -
    yes
    -
    /awips2/edex/data/utility/common_static/base/gfe/*
    - /awips2/cave/etc/gfe/userPython/*
    SITE customized files -
    no
    -
    /awips2/edex/data/utility/common_static/site/site/gfe/*
    - /awips2/edex/data/utility/cave_static/site/site/gfe/userPython/*
    USER customized files -
    no
    -
    /awips2/edex/data/utility/common_static/user/username/gfe/*
    - /awips2/edex/data/utility/cave_static/user/username/gfe/userPython/*
    -

    The BASE files should never be modified. SITE modifications are -done in the SITE directories. User modifications are done in each -individual user directory structure. -
    -

    -
    -

    How Do I Control -Whether -I Am a USER or a SITE?

    -Many of the files supported in this hierarchical scheme are -written/controlled -from the GFE. In AWIPS2, all users are logged in with their assigned -system user id. The software does not treat user vs. site as user -accounts. Site level modifications by users are permitted. -
    -

    How Do I Make -Modifications -to the SITE Files?

    -Making modifications to the SITE files can be accomplished two ways: -
      -
    1. Start the Localization perspective and make any changes.
    2. -
    3. Go to the UNIX file system and edit, copy, move, or delete files -from under -the SITE/* directory. You can copy files from the BASE/* -directories, -but make NO changes to the BASE/* directories or files.
    4. -
    -

    EDEX and CAVE must be restarted for any changes in common_static. CAVE must -be restarted for any changes in CAVE configuration.

    -
    -

    How Do I Make -Modifications -to the USER Files?

    -Making modifications to the USER files are accomplished the same way -as SITE level modifications (see paragraph above). -
    -

    Are -Programs -Other Than the GFE Affected by the BASE, SITE, USER Concept?

    -All other GFESuite programs, including ifpIMAGE, -and ifpAG, use the BASE, SITE, USER -concept. -These programs take a "-u" switch to specify the user name. By -default, -if the user name is not specified, in which case the SITE user name is -used. -

    Since these other programs are typically product generation -programs, -it is unlikely that you would want individual user configurations to -affect -the output. Therefore the default is SITE. -
    -

    -

    -Back To Top -
    -Back To TOC -
    -
    -
    -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/coordConversion.html b/cave/com.raytheon.viz.gfe/help/coordConversion.html deleted file mode 100644 index 561ba6481c..0000000000 --- a/cave/com.raytheon.viz.gfe/help/coordConversion.html +++ /dev/null @@ -1,227 +0,0 @@ - - - - - - coordinate conversion routine - - -

    -Coordinate Conversion routine

    -
    March 7, 2003 -
    - -

    Table Of Contents

    -Overview -
    -Running coordConversion -
    -Restrictions -

    -
    -

    Overview

    -The coordinate conversion routine is intended as an aid to system -administrators -for setting up the correct domain coordinates in serverConfig -or localConfig.  Basically the -coordConversion -program accepts either latitude/longitude, AWIPS world coordinates, or -grid coordinates, and converts the input to the other two coordinate -systems. -The ifpServer must be running in order to run coordConversion. -

    -
    -

    Running coordConversion

    -


    -Start the program from the "bin" directory.  Refer to directory -structure information for GFESuite -

    -

    The command line is shown below:
    -

    -

    coordConversion -h serverhost -p serverport
    -

    - - - - - - - - - - - - - - - - - - -
    Command Line -Switch
    -
    Mandatory/Optional
    -
    Description
    -
    -h serverhost
    -
    Mandatory (see Note)
    -
    Specifies the host running the -ifpServer.
    -
    -p serverport
    -
    Mandatory (see Note)
    -
    Specifies the port for the -ifpServer.
    -Note: The -h and -p switches are predefined to -match your GFESuite installation, such that they will point to the -ifpServer -specified on installation.  Thus the -h and -p switches are not -necessary -for normal running of this program.  However, if you wish to -connect -to a different server, then you will need to specify the -h and -p -switches.  If environment variables ${CDSHOST} or ${CDSPORT} are -defined, then the default server and port will be determined from the -environment variables, unless overridden with the user specified -h and --p switches.
    -
    -

    An example of starting the program is: -

    -

    coordConversion -h localhost -p 98000000 -

    -

    The program will prompt you for the projection you wish to -use.  -The default is shown.  If you elect to do a conversion on a -different -projection, a list of projections is provided. -

    -

    Database Projection currently: Grid211 -
    -Do you want to use this projection? 0=no, 1=yes -
    -0 -
    -Choose Projection: -
    -0 - exit -
    -1 - Grid216 -
    -2 - Grid212 -
    -3 - Grid214AK -
    -4 - Grid203 -
    -5 - Grid226 -
    -.... -

    -

    After selection of the projection, the program offers three choices: -

    -

    Enter type of transfer.  Choose one of the options -
    -0 - exit -
    -1 - LatLon to AWIPS and Grid Coordinate -
    -2 - AWIPS Coordinate to Grid Coordinate and LatLon -
    -3 - Grid Coordinate to LatLon and AWIPS Coordinate -
    -  -

    -

    Example of LatLon to AWIPS and Grid Coordinate -

    -

    LatLon to AWIPS and GridCoord,  [enter 999 to exit] -
    -Latitude? 40.5 -
    -Longitude? -105.21 -
    -Awips coordinate is: x=41.9675 y=33.1418 -
    -Grid coordinate is: x=63 y=98 InGrid=1 -

    -

    LatLon to AWIPS and GridCoord,  [enter 999 to exit] -
    -Latitude? 40.75 -
    -Longitude? -105.44 -
    -Awips coordinate is: x=41.7468 y=33.5155 -
    -Grid coordinate is: x=60 y=104 InGrid=1 -

    -

    LatLon to AWIPS and GridCoord,  [enter 999 to exit] -
    -Latitude? -
    -  -

    -

    Example of AWIPS Coordinate to Grid Coordinate and Lat/Lon -

    -

    AWIPS to lat/lon and grid cell [enter 999 to exit] -
    -AWIPS x coordinate? 30 -
    -AWIPS y coordinate? 40 -
    -Lat: 44.2482 Lon: -117.175 -
    -Grid coordinate is: x=-128 y=208 InGrid=0 -

    -

    AWIPS to lat/lon and grid cell [enter 999 to exit] -
    -AWIPS x coordinate? 31 -
    -AWIPS y coordinate? 41 -
    -Lat: 45.0347 Lon: -116.378 -
    -Grid coordinate is: x=-112 y=224 InGrid=0 -

    -

    AWIPS to lat/lon and grid cell [enter 999 to exit] -
    -AWIPS x coordinate? -
    -  -

    -

    Example of Grid Coordinate to AWIPS Coordinate and Lat/Lon -

    -

    Grid Cell to AWIPS and lat/lon  [Enter 999 to exit] -
    -Grid x coordinate? 0 -
    -Grid y coordinate? 0 -
    -Awips coordinate is: x=38 y=27 -
    -Lat: 35.9079 Lon: -108.304 -

    -

    Grid Cell to AWIPS and lat/lon  [Enter 999 to exit] -
    -Grid x coordinate? 50 -
    -Grid y coordinate? 50 -
    -Awips coordinate is: x=41.125 y=30.125 -
    -Lat: 38.328 Lon: -105.765 -

    -

    Grid Cell to AWIPS and lat/lon  [Enter 999 to exit] -
    -Grid x coordinate? -
    -  -

    -

    -
    -

    Restrictions

    -


    -coordConversion requires an active ifpServer in order to work

    -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/d2dWENames.html b/cave/com.raytheon.viz.gfe/help/d2dWENames.html deleted file mode 100644 index 9e5eac78fb..0000000000 --- a/cave/com.raytheon.viz.gfe/help/d2dWENames.html +++ /dev/null @@ -1,613 +0,0 @@ - - - - - - - D2D Weather Element Names - - -

    -D2D Weather Element Names

    -
    -January 9, 2012
    -
    -
    Note:  For the most -accurate -information, please use the hdfview -utility and examine the model data files -directly.
    -
    -
    -

    GFS80 Model (CONUS 211)
    -

    -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Weather Element NameDescriptive NameUnitsAvailable Levels
    ghGeopotential HeightmetersBL030 BL3060 BL6090 BL90120 BL120150 BL150180 MB 1000 975 -950  925 900 -875 850 825 800 775 750 725 700 675 650 625 600 575 550 525 500 450 400 -350 300 250 200 150 100
    -
    rhRelative HumiditypercentBL030 BL3060 BL6090 BL90120 BL120150 BL150180 MB 1000 975 -950  925 900 -875 850 825 800 775 750 725 700 675 650 625 600 575 550 525 500 450 400 -350 300 250 200 150 100 SIG44100
    -
    tTemperaturedegrees c.FHAG2 BL030 BL3060 BL6090 BL90120 BL120150 BL150180 MB 1000 -975 950  925 900 -875 850 825 800 775 750 725 700 675 650 625 600 575 550 525 500 450 400 -350 300 250 200 150 100 TROP
    -
    WindWindmeters/secondBL030 BL3060 BL6090 BL90120 BL120150 BL150180 MB 1000 975 -950  925 900 875 850 825 800 775 750 725 700 675 650 625 600 575 -550 525 500 450 400 350 300 250 200 150 100 TROP
    avAbsolute Vorticity/secondMB 850 700 500 250
    pvvPressure Vertical VelocityPa/sMB 850 700 500 400 300 250 200 150 100
    pPressurepascalsSFC TROP  
    pwPrecipitable Waterkg/m**2EA
    pmslAtmospheric pressure (MSL)pascalsMSL
    sliSurface Lifted Indexdegrees KSFC
    tpTotal Precipitationkg/m**2SFC
    vssVertial Speed Shearl/sTROP
    cape
    -
    Convective Available Potential -Energy
    -
    J/kg
    -
    SFC BL0180
    -
    cin
    -
    Convective Inhibition
    -
    J/kg
    -
    SFC BL0180
    -
    -

    -

    -
    -

    NAM80 Model (CONUS211)
    -

    -  -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Weather Element NameDescriptive NameUnitsAvailable Levels
    ghGeopotential HeightmetersMB 1000-100 by 50  
    rhRelative HumiditypercentFHAG 2  MB 1000-100 by 50  BL030 BL3060 BL6090 -BL90120 BL120150
    -
    tTemperaturedegrees KFHAG2 MB 1000-100 by 50  BL030 BL3060 BL6090 BL90120 -BL120150 
    -
    WindWindmeters/secondFHAG 10 MB 1000-100 by 50  BL030 BL3060 BL6090 BL90120 -BL120150
    -
    avAbsolute Vorticity/secondMB 1000 850 700 500 250
    pvvPressure Vertical VelocityPa/sMB 1000-100 by 50
    pAtmospheric PressurepascalsSFC  
    heliHelicitym/s **2FHAG 0>30
    capeConvective Available Potential EnergyJ/kgSFC BL0180
    cinConvective InhibitionJ/kgSFC BL0180
    -
    bliBest Lifted Indexdegrees KBL0180
    -
    pliParcel lifted indexdegrees KBL 0>30
    pwPrecipitable Waterkg/m**2EA
    emspMean Sea Level PressurePascalsMSL
    cpConvective Precipitationmm.SFC
    tpTotal Precipitationmm.SFC
    -

    -
    -

    RAP40 Model (CONUS211)
    -

    -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Weather Element NameDescriptive NameUnitsAvailable Levels
    ghGeopotential HeightmetersMB 1000-100 by 50   FRZ
    rhRelative HumiditypercentFHAG 2    MB 1000-100 by 50   BL030 -BL6090 BL6090 BL150180  FRZ
    tTemperaturedegrees KFHAG 2  MB 1000-100 by 50    BL030 BL6090 -BL6090 BL150180   
    -
    WindWindmeters/secondFHAG 10 MB 1000-100 by 50  BL030 BL6090 BL6090 BL150180    -MAXW TROP
    pAtmospheric PressurepascalsSFC     FRZ MAWX TROP
    mmspMean Sea Level PressurePascalsMSL
    cpConvective Precipitationmm.SFC
    tpTotal Precipitationmm.SFC
    prPrecipitation Ratekg/m**2/sSFC
    lgspLarge Scale Precipitationkg/m**2SFC
    potPotential Temperature at Tropopausedegrees KTROP
    -

    -

    -  -

    NAM40/NAM20 Model (CONUS215/212)
    -

    -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Weather Element NameDescriptive NameUnitsAvailable Levels
    ghGeopotential HeightmetersMB 1000-600 by 25  MB 550-100 by 50   FHAG2 -BL030 BL3060 BL6090 BL90120 BL120150
    rhRelative HumiditypercentMB 975-600 by 25  MB 550-300 by 50  ,  BL030 -BL3060 BL6090 BL90120 BL120150 FHAG2
    -
    tTemperaturedegrees KMB 1000-600 by 25  MB 550-100 by 50  
    WindWindmeters/secondMB 1000-600 by 25  MB 550-100 by 50  FHAG10 -BL030 BL3060 BL6090 BL90120 BL120150
    avAbsolute Vorticity/secondMB 1000, 850, 700, 500, 250
    pvvPressure Vertical VelocityPa/sMB 1000-600 by 25  MB 550-100 by 50  
    pAtmospheric PressurepascalsSFC
    heliHelicitym/s **2FHAG030
    -
    capeConvective Available Potential EnergyJ/kgSFC, SFC BL0180
    cinConvective InhibitionJ/kgSFC, SFC BL0180
    -
    bliBest Lifted Indexdegrees KSFC BL 0>180
    pliParcel lifted indexdegrees KBL 0>30
    pwPrecipitable Waterkg/m**2EA
    emspMean Sea Level PressurePascalsMSL
    cpConvective Precipitationmm.SFC
    tpTotal Precipitationmm.SFC
    mxtMaximum Temperaturedegrees KFHAG 2
    mntMinimum Temperaturedegrees KFHAG 2
    dptDewpoint Temperaturedegrees KFHAG 2
    wsWind Speedmeters/secFHAG 10
    wdWind Directionmeters/secFHAG 10
    tccTotal Cloud CoverpercentEA
    thpThunderstorm ProbabilitypercentSFC
    cpozpProbability of Freezing PrecippercentSFC
    cpofpProbability of Frozen PrecippercentSFC
    popProbability of Precipitationpercent SFC
    sndSnow DepthmetersSFC
    -
    -


    -

    -

    gfsLR Model

    -  -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Weather Element NameDescriptive NameUnitsAvailable Levels
    ghGeopotential HeightmetersMB 1000 850 700 500 300 250
    rhRelative HumiditypercentMB 1000 850 700 500 400 300 BL030 SIG44100
    tTemperaturedegrees KMB 1000 850 700 500 300 250  BL030
    WindWindmeters/secondMB 1000 850 700 500 300 250  BL030
    avAbsolute Vorticity/secondMB 850 700 500 250
    pmslMean Sea Level PressurePascalsMSL
    cpConvective Precipitationmm.SFC
    tpTotal Precipitationmm.SFC
    wghFive-wave heightmetersMB 500
    -

    -

    -
    - - - diff --git a/cave/com.raytheon.viz.gfe/help/dfcConfig.html b/cave/com.raytheon.viz.gfe/help/dfcConfig.html deleted file mode 100644 index 59ec8eada0..0000000000 --- a/cave/com.raytheon.viz.gfe/help/dfcConfig.html +++ /dev/null @@ -1,421 +0,0 @@ - - - - - - Daily Forecast Critique Configuration Guide - - - - - -

    -Daily Forecast Critique Configuration Guide

    - -
    July, 2002
    - - - -

    -Overview

    - -
    The Daily Forecast Critique program can be adapted -to the local forecast office by changing the settings found in the DFC -config file called dfcConfig.py.  This file contains all of the various -settings needed by the main display program ifpDFC as well as the two archive -programs: archiveObs and archivePointForecast.
    - -
     
    -Let's start by briefly describing each item in the dfcConfig.py file. -

    The contents of this file is in blue to -distinguish it from the description that follows.  Each configuration -item is separated by a horizontal line. -

    DO NOT MODIFY THE dfcConfig.py FILE!!!  -Any changes should be made to the localDfcConfig.py file in your SITE -
    directory.  See -the section localDfcConfig.py for -more details. -

    -
    - -
    -

    -Archive -Data Configuration

    -This section descibes the configuration items that affect which models, -times and elements are archived for later display. -

    import siteConfig -
     

    -This import statement is very important in that many -of the files DFC generates and later reads are defined in this configuration -file.   If you do, it is very likely that DFC will not work properly, -if at all. -
    -
    -
    ## host and port definitions -based on siteConfig.py
    - -
    host = siteConfig.GFESUITE_SERVER
    - -
    port = int(siteConfig.GFESUITE_PORT)
    -These statements inherit the host and port definitions -of siteConfig so that the DFC programs know where server lives. Change -these only if you will be using DFC with an ifpServer other than your operational -system. -
      -
    -
    - -
    ## the list of elements that -will be archived
    - -
    supportedWEs = ['temperature', -'dewpoint', 'windSpeed', 'windDir']
    -This item contains a list of weather elements that -DFC currently supports.  You may REMOVE elements from this list, but -adding any new ones will likely cause problems.  At this early stage -in the DFC development, only these elements are supported by the software.  -Other elements may be added later. -
    -
    - -
    ## the list of directories -in which the observation are stored
    - -
    obDirectories = ['/data/fxa/point/metar/netcdf/']
    - -
    ###                   -'/data/fxa/LDAD/mesonet/qc/'] # uncomment this line to include any mesonet -stations
    -This item defines where your local surface observations -are stored.  For most sites the first item is the standard directory -into which the surface observation data files are stored.  Other local -data sources may also be defined in this list, depending on your particular -office.  Many offices use LDAD to gather and store additional data -sources.  You may add new directories to this list if they contain -netCDF files that store surface observations in the typical D2D format. -
      -
    -
    - -
    dfcTop = siteConfig.GFESUITE_DFCDIR
    - -
    ## the directory where the -observation archive will be stored
    - -
    obArchiveDir = siteConfig.GFESUITE_DFCDIR -+ '/archivedObs/'
    - -
    ## directory where the point -forecasts will be stored
    - -
    fcstArchiveDir = siteConfig.GFESUITE_DFCDIR -+ '/archivedFcsts/'
    -These three items define where the archive files -for the observations and forecasts are stored.  Unless you are already -short on disk space, it is strongly recommended -that you leave these unmodified. -
    -
    - -
    ## Define the site ID
    - -
    dfcSiteID = siteConfig.GFESUITE_SITEID
    -This item defines the ID for your site based on whatever -is defined in your siteConfig file.  It is used to figure out which -stations that lie in or near your WFO.   In general, there will -be no need to modify this item. -
    -
    - -
    ## How long observations will -stay around before purging (in hours)
    - -
    obPurgeTime = 72
    - -
    pointFcstPurgeTime = 72
    -These items control how long observations and forecasts -stay in the archive before they are purged. Increasing these values will -cause DFC to use more disk space in the directories obArchiveDir -and fcstArchiveDir. -

    NOTE! -
    If you set the obPurgeTime to a value less than -6 hours, the purger will automatically reset the value to 6 so that you -will always archive least 6 hours worth of observations. -

     
    - -
    -
    - -
    -
    ## A placeholder for a configurable -list of stations -
    myStations = [ ] -

    This is the item that you will change if you want to change the list -of stations from ALL of the stations in or near your office domain to a -list of stations that you choose. -
    -


    -## a dictionary containing the model, elements and -forecast hour
    - -
    ## to be archived by the pointFcst -archive program
    - -
    pointFcstDict = {
    - -
    -
        'NAM':
    - -
        {'T':[0, -6, 12, 18, 24, 30, 36, 42, 48, 54, 60, 66, 72],
    - -
         'Td':[0, -6, 12, 18, 24, 30, 36, 42, 48, 54, 60, 66, 72],
    - -
         'Wind':[0, -6, 12, 18, 24, 30, 36, 42, 48, 54, 60, 66, 72],
    - -
         },
    -    'MesoNAM':
    - -
        {'T':[0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48],
    - -
         'Td':[0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48],
    - -
         'Wind':[0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48],
    - -
         },
    - -
        'MRF':
    - -
        {'T':[0,12,24,36,48,60,72,84,96,108,120],
    - -
         'Td':[0,12,24,36,48,60,72,84,96,108,120],
    - -
         'Wind':[0,12,24,36,48,60,72,84,96,108,120],
    - -
         },
    - -
        'AVN':
    - -
        {'T':[0,6,12,18,24,30,36,42,48,54,60,72,78,84,90,96,102,108,114,120],
    - -
         'Td':[0,6,12,18,24,30,36,42,48,54,60,72,78,84,90,96,102,108,114,120],
    - -
         'Wind':[0,6,12,18,24,30,36,42,48,54,60,72,78,84,90,96,102,108,114,120],
    - -
         },
    - -
       'Official': -
        {'T':[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23, -
              -24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44, -
              -45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65, -
              -66,67,68,69,70,71,72], -
        'Td':[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23, -
              -24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44, -
              -45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65, -
              -66,67,68,69,70,71,72], -
        'Wind':[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23, -
              -24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44, -
              -45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65, -
              -66,67,68,69,70,71,72], -
         },
    - -
     
    -This item tells DFC which forecasts to archive.  -The python dictionary defined above specifies the model, weather element, -and forecast hour for each model.  This is another configuration item -that will affect the amount of disk space used by the DFC archive programs.  -If you are not interested in archiving every available forecast, please -feel free to edit these lists to whatever you like.  If you wish to -include a new model (e.g., a model run at your local office), just insert -a new model entry like those defined already. Note that in order to run -DFC with a locally generated model, you must first configure ifpInit to -generate surface weather elements for that model. Once you can successfully -populate your GFE Forecast database with your local model, you're -ready to add it to this list of models. -

    This config file serves as a template for another structure that is -used by the forecast archive processes.  Any time you change your -localDfcConfig.py file, the structure, which is saved to disk between archive -runs, is regenerated, so that the file on disk always reflects your latest -changes. -

      -

    -Appearance -Configuration

    -In addition to the various archive configuration items, there are also -items that help you configure the DFC display.  These include the -size of the display screen, the plotted symbol types, lines types and widths, -colors, and font types and sizes. Each of these items is described below -in more detail. -

    configList = [('screen', 'width', 800)] -

    This item determines the width of the display -screen in pixels.  You can make the size larger or smaller by adjusting -this value. -

    symbolTypes = ["plus", "asterisk", "circle", "cross", -"square", "triangle", "diamond", "star", "fancy plus", "fancy square", -"fancy cross", -
                            -"fancy diamond"] -

    The symbolTypes item is a list of symbol types.  -Each new plot uses the next symbol type in the sequence.  If you plot -so many data sets that you reach the end of the list, the new symbol is -selected for the beginning again.  You may not need all of the symbol -types listed here and may remove some if you like.  The complete set -of possible symbol types is listed below. -

             "none"                  "filled circle"
    -        "dot"                   "filled square"
    - "plus"                  "filled triangle"
    -       "asterisk"              "filled diamond"
    -        "circle"                "filled inverted triangle"
    -      "cross"                 "filled fancy square"
    -   "square"                "filled fancy diamond"
    -  "triangle"              "half filled circle"
    -    "diamond"               "half filled square"
    -    "star"                  "half filled triangle"
    -  "inverted triangle"     "half filled diamond"
    -   "starburst"             "half filled inverted triangle"
    - "fancy plus"            "half filled fancy square"
    -      "fancy cross"           "half filled fancy diamond"
    -     "fancy square"          "octagon"
    -       "fancy diamond"         "filled octagon"
    -fcstSymbolSize = 4.0  ## change this to 0.0 -to remove symbols on fcst data -
    obSymbolSize = 3.0 -

    You can also control the size of the symbols plotted -in the DFC display.  The fcstSymbolSize controls how large -the symbols are drawn for forecast data.  The obSYmbolSize controls -how large symbols are plotted for observations.  You can remove the -symbol for forecast data sets if you set the size to 0.0. -

    colors = ["blue", "red", "darkgreen", "magenta", -"black", "coral", "darkviolet", "brown", "darkred", "darkblue"] -

    The colors items lists the colors and the order -in which they are used.  The ones listed here are generally dark to -maximize the  contrast against the white background.  Feel free -to change the order or color, if you would like to see something different.  -Like the symbol types, the colors are used in the order specified and then -reset to the beginning again when the end of the list is reached. Usually, -the entire list of possible colors can be found in the file:/usr/lib/X11/rgb.txt. -

    lineTypes = ["solid", "longdashed", "dotted", -"shortdashed", "dotdashed", "dotdotdashed", "dotdotdotdashed"] -

    The lineTypes list is used when plotting model -data.  Lines are drawn between points in time order.  The line -type used for these type of plots is read from this list.  Like symbol -type and color, the DFC display starts with the first lineType in the list, -then uses the second and so on until the end when it starts from the beginning -again. The complete set of lineTypes is listed above. -

    lineWidth = 2 -

    The lineWidth determines how thick the line is in pixels.  If you -find the lines hard to see, increase the value one or two pixels. -

    fontFace = "helvetica" -
    fontSize = 1.5 -

    The fontFace and fontSize configuration items -allow you to change the font style and size, respectively.  -Since the loaded fonts on your system may vary, be sure that the font is -available from your system before changing it. -
    -


    -

    -localDfcConfig.py

    -To modify any of the above items, it is strongly recommended that you create -a localDfcConfig.py file in your etc/SITE directory.  That way, any -changes you make will be preserved when you upgrade to a newer version -of GFESuite. -

    Before making any of these changes you must first create the localDfcConfig.py -file in your etc/SITE directory.  Once you have done this, include -these lines at the very top of the file -

    from dfcConfig import * -
    import dfcConfig -

    That will ensure that changes you make to this file can be "seen" by -the main config file. -

    Once that is done you may then override any definition in the main configuration -file by redefining it with a "dfcConfig." prefix.  For example, -

      dfcConfig.myStations = ["KABC', "KDEF", -"KGHI"] -

    This will redefine any of the items already defined in the main configuration -file. -

    -Changing myStations

    -Changing myStations (the list of stations for which data will be achived) -is something that you will likely want to do.  The reason is that -the default station list is the set of stations that live within a rectangle -that circumscribes your office domain.  Typically,  this list -comprises about 100 stations.  You may wish to cut down the number -of stations to reduce the amount of disk space that DFC uses as well as -reduce the number of stations that you will see in the DFC interface.  -Reducing the number of stations will make it easier to find a station you -want. -

    -Changing the pointFcstDict

    -Changing a dictionary is slightly different.  To modify any of the -model entries, use the following syntax: -
      -

    dfcConfig.pointFcstDict ['NAM'] = -
        {'T':[0, 12, 24, 36, 48, 60], -
         'Td':[0, 6, 12, 18, -24, 30, 36, 42, 48, 54, 60, 66, 72], -
         'Wind':[0, 6, 12, 18, -24, 30, 36, 42, 48, 54, 60, 66, 72]} -

    To add a new model, use the same syntax. -

    -Changing any of the display items

    -Changing any of the config item that affect the display works exactly the -same way.  Just redefine the item you wich to change, making sure -it's preceded by "dfcConfig." before the item name.  For example to -change the line width: -

    dfcConfig.lineWidth = 3 -
     

    - -
    -
    For information on using the Daily Forecast Critique, -refer to the DFC User's Guide .
    - -
    -
    - -
      -
      -
      - - diff --git a/cave/com.raytheon.viz.gfe/help/dfcUser.html b/cave/com.raytheon.viz.gfe/help/dfcUser.html deleted file mode 100644 index 0468e9e819..0000000000 --- a/cave/com.raytheon.viz.gfe/help/dfcUser.html +++ /dev/null @@ -1,298 +0,0 @@ - - - - - - Daily Forecast Critique User's Manual - - -

    -Daily Forecast Critique User's Guide

    -
    July 23, 2003
    - -

    Table of Contents

    -

    -Overview

    -

    -Starting DFC

    -

    -The DFC Interface

    -

    - Data Sources

    -

    -Weather Element

    -

    -Stations

    -

    -Plot Button

    -

    -Combine Button

    -Status -Message -

    -
    -

    -Overview

    -
    The Daily Forecast Critique (DFC) is a suite of -programs -that allows forecasters to compare forecasts (Official or model -forecasts) -to observations.  With this  first release, DFC only compare -point observations with point forecasts extracted from the  -various -forecast grids.  Future versions will allow forecasters to compare -gridded forecasts with gridded analyses, calculate statistics for use -in -a Smart Tool (to correct for any bias, for example), and provide a -flexible -framework within which forecasters can write tools to calculate their -own -statistics and summaries.
    -
     
    -
    DFC comprises three different programs: a -programs -that archives point observations, a second that archives the extracts -point -forecasts from the various forecast grids, and a third that provides a -user interface that lets forecasters compare the observations to a -variety -of forecasts.  The diagram below illustrates the relationship -between -these programs and the data that they generate or display.
    -
    overview of DFC processes -
    -
    The archiveObs process is launched automatically -from the ifpServer.  It reads local observations from the AWIPS -surface -observations database and stores them in the observations -archive.  -The archivePointFcst process is also launched from  the -ifpServer.  -It reads grids from the ifpServer, extracts the values at locations for -which we have observations and stores the point forecast in the -archive.  -Since the archive processes archive local data only, you can configure -DFC to store data as far back in time as you like, provided you have -the -enough disk space.  If DFC relied purely on the existing AWIPS -real-time -databases, you would be allow to view data that is only 1-2 days -old.  -These archive processes and database allow you to extend that to -several -weeks.  For more information on how to configure DFC, refer to the -DFC Configuration Guide. -
    -
    -

    The ifpDFC main program allows you to plot observations and -forecasts -extracted at a point on the same display.  This allows you to -assess -the quality of not only your forecast, but forecasts objectively -derived -from models via ifpInit.  This section show you how to start the -DFC -display program. -

    -

    Starting DFC

    -You can start ifpDFC two different ways.  The first way is to open -a terminal window and "cd' to the bin directory. -

    cd /awips/GFESuite/primary/bin -

    -

    Your directory may be in a different location, depending on how your -office set up the directory structure at installation time. From this -directory -type: -

    -

    ifpDFC -

    -

    The other way to start the main DFC display is to select from the -main -menu bar in the GFE Verify->Daily Forecast Critique. This -menu item -is located just to the right if the Edit Areas menu item as in the -figure -below. -

    -

    Picture of GFE main menu bar
    -

    -


    -The complete command line is shown below:
    -

    -

    ifpDFC -h serverhost -p serverport
    -

    - - - - - - - - - - - - - - - - - - -
    Command Line -Switch
    -
    Mandatory/Optional
    -
    Description
    -
    -h serverhost
    -
    Mandatory (see Note)
    -
    Specifies the host running the -ifpServer.
    -
    -p serverport
    -
    Mandatory (see Note)
    -
    Specifies the port for the -ifpServer.
    -Note: The -h and -p switches are predefined to -match your GFESuite installation, such that they will point to the -ifpServer -specified on installation.  Thus the -h and -p switches are not -necessary -for normal running of this program.  However, if you wish to -connect -to a different server, then you will need to specify the -h and -p -switches.   If environment -variables ${CDSHOST} or -${CDSPORT} are defined, then the default server and port will be -determined from the environment variables, unless overridden with the -user specified -h and -p switches. -

    -
    -

    The DFC Interface

    -Once you successfully start ifpDFC, the DFC display will appear.  -It should look something like this. -

    Snaphopt image of DFC interface
    -  -

    -

    Note that the interface is divided into four sections: Weather -Element, -Stations, Data Sources, and ValidTime.  Using the DFC interface, -you -may select these options to produce a plot of just the data you -want.  -A description of each of these sections follows. -
    -

    -
    -

    Weather Element

    -Selecting one of the Weather Element buttons will eventually cause a -time -series weather element to be displayed.  At this early stage in -the -DFC development there are only four weather elements supported: -temperature, -dew point, wind speed and wind direction.  Future versions will -hopefully -support more weather elements. -
    -
    -

    Stations

    -The next section, as you go left to right, is the Stations -listbox.  -This widget allows you to select the station at which you want a time -series -display.  You may only select one station at a time, but you can -combine -any time series with any other using the "Combine" button. -
    -
    -

    Data Sources

    -The Data Sources section allows you to specify the source of the point -data.  The first entry is always "Observations".  These -correspond -to surface observations such as METAR, mesonet, or RAWS sites.  -Selecting -"Observations" will eventually generate a time series plot of observed -values vs. time. -

    Selecting either the observations or any of the models (either -numerical -models, MOS, or the Official) will generate a time series that shows -the -value of the weather element extracted from a point in the specified -IFP -model database.  Note that these values are from the IFP database -not the D2D database.  IFPInit must generate an IFP database -before -any model data can be displayed in DFC. -
    -

    -
    -

    Model Times

    -If you select a model as your data source, the Model Times  -section -will display a list of possible model times times to choose from.  -These times are listed in mmDD_HHMM format, where mm is the numeric -month, -DD is the day of the month, HH is the hour and MM is the -minute.  -This list is sorted so that the most recent models are on top. You may -select as many model times as you want to see displayed in the DFC -viewer. -Once you select the Plot or Combine button, you will see as many model -time series plots as you have selected in this column. -
    -
    -

    Plot Button

    -Once you have selected the data source, weather element, station, and -valid -time, you are ready to make a plot.  To generate a plot,  -simply -click on the button near the bottom of the interface labelled -"Plot".  -Once you do this you should see a window appear that contains the time -series that you specified.  Each time you click "Plot", a new -window -with the specified time series will appear. -

    To remove the window, just click on the icon in the window's title -bar -that is labelled with an "X".  Since your window manager may vary, -this icon may be labelled differently or this action may be available -from -a pop-up menu invoked elsewhere on the window. -
    -

    -
    -

    Combine Button

    -The "Combine" button works just like the "Plot" button except that the -new plot will appear in a new window overlaid with the data you plotted -previously.  This allows you to overlay a model time series on top -of a plot of observations, or compare two models for the same station. -

    Note that if you change the Weather Element and then select -"Combine" -a new window will be automatically created, since plotting weather -elements -with different units would require more than one vertical data scale. -
    -

    -
    -

    Status Message

    -At the very bottom if ther interface is the area where status messages -are displayed.  Occasionally, you may forget to select a model -time -or data migh not be available.  When events like these occur, a -message -is displayed to give you a hint about what  to do next. -
    -
    -
    -  -
    -  - - diff --git a/cave/com.raytheon.viz.gfe/help/directoryLayout.html b/cave/com.raytheon.viz.gfe/help/directoryLayout.html deleted file mode 100644 index 7d5f0eaddc..0000000000 --- a/cave/com.raytheon.viz.gfe/help/directoryLayout.html +++ /dev/null @@ -1,449 +0,0 @@ - - - - - - - GFESuite Directory Layout - - -

    -GFESuite Directory Layout

    -
    March 27, 2012
    -
    -
    -

    Table of Contents

    -Overview -
    -EDEX Top-Level Runtime Directory -
    -CAVE Top-Level Runtime Directory -
    -Database Directory Structure -
    -GRID Directory Structure -
    -Model Data / Forecast -Data File Structure -
    -Text Products Directory Structure
    -MHS Directory Structure -
    -

    Overview

    -This document describes the install and runtime directory structure for -the AWIPS sites. In AWIPS2, directories are split up into EDEX side (server) and -CAVE side (client). On both sides, the top-level directory is /awips2, however -EDEX operations are mainly run on dx3/dx4, with data management (PyPies) on dx1. -CAVE operations and directory structure reside on lx/xt workstations. -This page describes *SOME* of the important directories accessed by GFE. -The directory tree is described in the following parts: - -


    -

    -
    -

    EDEX Top - Level Runtime -Directory

    -The top-level runtime directory consists of several other directories. -The top-level directories are: -
    - - - - - - - - - - - - - - - -
    Top-Level EDEX Directories
    Directory NamePurpose
    edextop-level data and executables
    GFESuitetop-level utilities, data and Service Backup
    -

    The following tables describe files and directory structures within -each of the top-level directories: -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    EDEX Sub-Directories
    Filename or Directory NamePurpose
    edex/bintop-level configuration and startup scripts
    edex/confTop-level edex configuration for logs and services
    edex/dataTop-level data, utilities and edex configuration files including localizations - and vcmodule for virtual ISC displays
    edex/etcruntime parameters for different edex runtime levels and services like ingest/request
    edex/liblocation of libraries used by edex
    edex/logsedex logfiles
    edex/webappsscripts run by uengine
    -

    -
    - - - - - - - - - - - - - - - - - - - -
    Relevant Top-Level CAVE Directories
    Filename or Directory NamePurpose
    alertvizAlertViz executables and settings
    cavecave configurations and executables including cave.sh
    GFESuitecommand line interface executables for GFE -
    -
    -

    -


    - - - - - - - - - - - - - - - - - - - - - - - -
    Important CAVE Sub-Directories
    Filename or Directory NamePurpose
    cave/etc/gfeGFE base level tools, procedures, utilities and configurations
    -
    cave/etc/ghgGHG monitor executables and configurations
    cave/configurationEclipse runtime settings
    GFESuite/binlocation of command line interface executables
    -
    -

    -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Executable and Script Directories (/awips2/GFESuite/bin)
    Filename or Directory NamePurpose
    bin/configureTextProductsConfigure Text Products -utility for querying the afos2awips.txt table for PILs, deleting, and -recreating product templates.
    bin/dumpATVTEC active table dump utility -for AWIPS map coordinates to lat/lon and vice versa
    bin/getNotify.pynotification debug utility to -show database notifications from EDEX
    bin/gfeclient.sha wrapper script that allows to execute command line scripts in EDEX
    bin/ghgMonitor
    -
    GHG Monitor Program
    -
    bin/ifpAGifpAG executable
    bin/ifpBreakAllLocksscript to break all locks in the server
    bin/ifpIMAGEscript to run the GFE as the ifpIMAGE -program
    bin/ifpInitscript to run the smart -initialization -program
    bin/ifpnetCDFscript to run the ifpnetCDF -program.
    bin/ifpServerTextscript to run the ifpServerText -program
    bin/iscMosaicscript to run the iscMosaic -program
    bin/moveGFEDatautility program to move gfe -configuration -data from one user to another
    bin/purgeAllGrids
    -
    script to delete all grids from -a specified database.
    -
    bin/runIFPTextscript to run text generation (GFE in background mode)
    bin/runProcedurescript to run a procedure (GFE in background mode)
    bin/sendGfeMessage
    -
    script to send messages to all -clients connected to EDEX, message appears in AlertViz
    -
    bin/VTECDecoder
    -
    script to run VTEC decoder
    -
    bin/src
    -
    contains sub-directories with executables called by - the scripts listed in this table -
    -

    -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -etc/gfe (configuration) Important Directories
    Filename or Directory NamePurpose
    combinationsdefault zone combo configuration
    editAreaGroupsdefault edit area groups
    editAreasdefault edit areas
    sampleSetsdefault sample sets
    userPythonbaseline smart tools, procedures, gfeConfig files, text products, text utilities, - and other utilities used by tools and procedures
    weGroupsdefault weather element groups
    -
    - - - - - - - - - - - - - - - -
    etc/ghg Sub-Directory
    Filename or Directory NamePurpose
    configcontains default GHG monitor configuration file
    userPythoncontains the MakeHazard utility and TCMETNDecoder
    -

    -
    -
    -

    Database Directory -Structure

    -
    In AWIPS2 the database is on dx1 under /awips2/edex/data/hdf5. -The sub-directories used by GFE are grib and gfe. The grib sub-directory -contains grib model data. The gfe/SITE_ID sub-directory contains GFE grid -databases including Fcst, Official, ISC, Restore, and any model databases. -Topography databases are also found here. -
    -

    GRID Database Structure

    -The model, Forecast, and Official databases are stored in the -/awips2/edex/data/hdf5/gfe/SITE_ID directory -tree. The first level subdirectories are the model -names, e.g., NAM and Fcst. Within each model directory will be a -series of database files contained in a directory that represents -the date and time of the data, i.e., 2012_03_27_0600/RNK_GRID__GFS40_20120327_0600.h5. -A database contains all of the grid and -metadata needed to represent the weather elements. Each -database actually consists one HDF5 file. -

    The name of each database represents the: -

    -
      -
    • Site identifier (e.g., BOU)
    • -
    • Format of the database (always GRID)
    • -
    • Model Name (e.g., NAM12)
    • -
    • Optional Database Type (e.g., V)
    • -
    • Date/Time of Model Run (e.g., 20001214_0000)
    • -
    -

    -

    Model Data / -Forecast Data File Structure

    -Each model (e.g., NAM), Forecast, and Official database is stored in -HDF5 file format. -The model name is in the following format: site_GRID_ot_date_time, -where site is the WFO identifier, ot is the optional -type, -date -and time are the date-time stamp for the model valid -time. -If the date/timestamp is all zeros (00000000_0000), then the model is -"rolling" -or not time-based. In this case the files are never purged from -the -system. Typically the Forecast and Official databases are set up -to be permanent. Another word to describe this case is a -singleton model. The *.h5 file contains the following -information: -

    -
      -
    • Grid data.
    • -
    • Grid Parm Info of each weather element, -that fully describes how the data is represented in the system.
    • -
    • Grid Parm Storage Information for the database
    • -
    -

    -
    -

    Text Products Directory Structure

    -

    The /awips2/edex/data/utility/edex_static/base/textproducts directories -are used for configuring the GFE formatters that are "templated". -When AWIPS is installed, the formatters are created from templates. -The templates, and the routines to expand them into products are contained -in the text installation directory structure. See the Readme.txt file for -detailed information.
    -

    -
    -

    MHS Directory Structure

    -The MHS Directory Structure to support GFESuite is quite small, but -necessary.  -The directory structure is used to support Intersite -Coordination of Grids. The MHS host on AWIPS is "ds1" prior to OB7, -and "dx1" OB7 and after. -

    There os one spooling directory for incoming messages -to the AWIPS Message Handling System, and two scripts to support the -intersite coordination grids. -
    -
    - - - - - - - - - - - - - - - - - - - - - - - -
    Filename or LocationPurposePart of Release
    /awips2/GFESuite/products/ISCISC spooling directory for incoming data.Installed as a part of AWIPS
    /awips2/GFESuite/bin/iscDataRecScript that requests processing from EDEX for grids -received from the AWIPS WAN.Installed as a part of AWIPS
    /awips2/edex/data/utility/edex_static/base/gfe/isc/iscDataRec.pyReceive script called by the IscDataRecRequestHandler when -intersite data has been received from other sites.Installed as a part of AWIPS
    -

    -
    -
    -

    Back to Table Of Contents - - diff --git a/cave/com.raytheon.viz.gfe/help/docindex.html b/cave/com.raytheon.viz.gfe/help/docindex.html deleted file mode 100644 index 0ceaa9b4f1..0000000000 --- a/cave/com.raytheon.viz.gfe/help/docindex.html +++ /dev/null @@ -1,801 +0,0 @@ - - - - GFESuite Documentation - - - -GFESuite Documentation -

    - - - diff --git a/cave/com.raytheon.viz.gfe/help/dumpAT.html b/cave/com.raytheon.viz.gfe/help/dumpAT.html deleted file mode 100644 index bacfb95c32..0000000000 --- a/cave/com.raytheon.viz.gfe/help/dumpAT.html +++ /dev/null @@ -1,194 +0,0 @@ - - - - - - dumpAT User's Guide - - -

    -dumpAT User's Guide

    -
    January 9, 2012
    -
    -

    -Table of Contents

    -

    -Overview

    -

    -Running the dumpAT Program

    -

    -Example Output

    -
    -
    -

    -Overview

    -
    The dumpAT is a utility program to output all or -portions of the VTEC active table.  For further information on the -meaning of the codes within the VTEC active table, refer to the GFESuite VTEC Guide.
    -
    -
    -
    -

    Running the dumpAT Program

    -
    Restriction: -The dumpAT program can only be run from the same machine as the VTEC -active table is residing!
    -
    -
    -
    The command line syntax is:
    -
    dumpAT -w siteid [-p phenomena] [-s -significance] [-a id] [-e etn] [-l pil] [-a action] [-n tableName] [-f -tableFilename]
    -
    -
    -
    A sample command line is: -
    -dumpAT -n active -a NEW -p WS -p FA -p GL
    -
    -
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Option SyntaxOptional or MandatoryDescription
    -w wfoid
    -
    Mandatory. May have more than one -w switch.
    -
    Defines the WFOID filter.
    -
    -p phenomena
    -
    Optional. May have more than one -p switch.
    -
    Defines the VTEC phenomena filter, e.g., "WS".  If not -specified, -then all phenomenas will be output.
    -
    -s significance
    -
    Optional. May have more than one -s switch.Defines the VTEC significance filter, e.g., "A".  If not -specified, -then all significances will be output.
    -
    -e etn
    -
    Optional. May have more than one -e switch.
    -
    Defines the etn (event tracking number) filter, e.g., -0245.  If not -specified, then all etns will be output.
    -
    -l pil
    -
    Optional. May have more than one -l switch.
    -
    Defines the product pil (category) filter, e.g., NPW.  -If not -specified, then records from all product pils will be output.
    -
    -a action
    -
    Optional. May have more than one -a switch.
    -
    Defines the VTEC action filter, e.g., CON.  If not -specified, then -all actions will be output.
    -
    -i id
    -
    Optional. May have more than one --i switch.
    -
    Defines the Geographical ID -filter, e.g., COZ023.
    -
    -n tableName
    -
    Optional.
    -
    Determines the name of the active table to dump.  -Default is "active".
    -
    -f tableFileName
    -
    Optional.  Only the -f or --n switch may be provided, not both.
    -
    Uses this file as the table to -dump. This file may be an uncompressed active table, or a compressed -active table.
    -
    - -
    -
    -

    -Example Execution

    -
    The following shows an example of running the -dumpAT without any filtering:
    -

    lx1-nhda{jdynina}113: ./dumpAT -w LWX
    -INFO:dumpAT:*********** dumpAT ****************
    -INFO:dumpAT:Cmd: -h ec -r 9581 -w LWX
    -INFO:dumpAT:Requesting active table dump from server.
    -INFO:dumpAT:Response received from server.
    -INFO:dumpAT:Number of records (unfiltered): 16
    -INFO:dumpAT:Number of records (filtered): 16
    -INFO:dumpAT:Records:
    -Vtec: /O.CAN.KLWX.WI.Y.0001.000000T0000Z-120102T1000Z/
    -Hdln:
    -Start: Mon Jan 2 08:09:00 2012 1325491740L Action: CAN Pil: NPW
    -End: Mon Jan 2 10:00:00 2012 1325498400L UFN: False RecState: Decoded
    -Purge: Mon Jan 2 09:15:00 2012 1325495700L
    -Issue: Mon Jan 2 08:09:00 2012 1325491740L
    -Phen: WI Sig: Y Office: KLWX Etn: 0001 Seg: 1 Key: WI.Y
    -Zone: MDZ501
    -
    -Vtec: /O.CON.KLWX.WS.W.0001.000000T0000Z-120103T2200Z/
    -Hdln:
    -Start: Tue Jan 3 15:29:00 2012 1325604540L Action: CON Pil: WSW
    -End: Tue Jan 3 22:00:00 2012 1325628000L UFN: False RecState: Decoded
    -Purge: Tue Jan 3 22:00:00 2012 1325628000L
    -Issue: Tue Jan 3 15:29:00 2012 1325604540L
    -Phen: WS Sig: W Office: KLWX Etn: 0001 Seg: 2 Key: WS.W
    -Zone: MDZ501
    -
    -Vtec: /O.EXT.KLWX.GL.W.0001.000000T0000Z-120104T0000Z/
    -Hdln:
    -Start: Tue Jan 3 22:36:00 2012 1325630160L Action: EXT Pil: MWW
    -End: Wed Jan 4 00:00:00 2012 1325635200L UFN: False RecState: Decoded
    -Purge: Wed Jan 4 06:45:00 2012 1325659500L
    -Issue: Tue Jan 3 22:36:00 2012 1325630160L
    -Phen: GL Sig: W Office: KLWX Etn: 0001 Seg: 1 Key: GL.W
    -Zone: ANZ530
    -
    -
    -INFO:dumpAT:Final: wctime:2.40, cputime:0.28

    -

    -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/edexHDF5.html b/cave/com.raytheon.viz.gfe/help/edexHDF5.html deleted file mode 100644 index 2e5550d820..0000000000 --- a/cave/com.raytheon.viz.gfe/help/edexHDF5.html +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - EDEX HDF5 Format - - -

    -EDEX D2D HDF5 File Format

    -March 28, 2012 -
    - -
    -This document describes the format of the HDF5 file that is: -
      -
    • -read by EDEX as a D2D database
    • -
    -If you are interested in the format of the netCDF files generated from -the ifpnetCDF product formatter, or -read -by the iscMosaic program , then refer to -the -netCDF File Format Document. -

    -When data arrives over the SBN, the EDEX JVM ingest thread reads the next available message in AMQP queue -from the QPID message broker. It compares against the distribution XML files loaded into memory on EDEX -startup from /awips2/edex/data/utility/edex_static/base/distribution. If no pattern matches, nothing is -done. Otherwise a metadata record is generated in the appropriate table of the metadata database, and -an HDF5 file is written to /awips2/edex/data/hdf5/grib/MODEL_NAME on dx1. SmartInit is kicked off by -EDEX and generates data in /awips2/edex/data/hdf5/gfe/SITE_ID. You can access the -metadata database on dx1 as user awips. You can view the contents of HDF5 files using either the -free HDFView utility, or h5dump (installed in /awips2/tools/bin).

    -
    -

    About h5dump

    -OPTIONS
    -

    -h, --help          Print a usage message and exit
    --B, --userblock     Print the content of the user block
    --H, --header        Print the header only; no data is displayed
    --i, --object-ids    Print the object ids
    --V, --version       Print version number and exit
    --a P, --attribute=P Print the specified attribute
    --d P, --dataset=P   Print the specified dataset
    --g P, --group=P     Print the specified group and all members
    --l P, --soft-link=P Print the value(s) of the specified soft link
    --o F, --output=F    Output raw data into file F
    --t P, --datatype=P  Print the specified named data type
    --w N, --width=N     Set the number of columns of output
    --x, --xml           Output in XML
    --D U, --xml-dtd=U   Use the DTD at U -

    Subsetting is available by using the following options with a dataset -attribute. Subsetting is done by selecting a hyperslab from the data. -Thus, the options mirror those for performing a hyperslab selection. -The START and COUNT parameters are mandatory if you do subsetting. -The STRIDE and BLOCK parameters are optional and will default to 1 in -each dimension.

    --s L, --start=L     Offset of start of subsetting selection
    --S L, --stride=L    Hyperslab stride
    --c L, --count=L     Number of blocks to include in selection
    --k L, --block=L     Size of block in hyperslab

    -P - is the full path from the root group to the object.
    -F - is a filename.
    -N - is an integer greater than 1.
    -L - is a list of integers the number of which are equal to the
    -    number of dimensions in the dataspace being queried
    -U - is a URI reference

    -Examples:
    -
    -  1) Attribute foo of the group /bar_none in file quux.h5
    -

    -    h5dump -a /bar_none/foo quux.h5
    -

    -  2) Selecting a subset from dataset /foo in file quux.h5
    -

    -    h5dump -d /foo -s "0,1" -S "1,1" -c "2,3" -k "2,2" quux.h5 -
    -

    -
    -

    Diagnosing Model Problems

    -If you point the volume browser to a D2D directory and the model is not -appearing, verify that: -
      -
    • EDEX started up without any errors that would affect gfe, i.e., all - configurations loaded normally.
    • -
    • Ingest processes started normally and are up and running.
    • -
    • PyPies are up and running on dx1.
    • -
    • -the file name is in the standard format of yyyymmdd_hhmm, which is the -model base time
    • -
    • -that the file contains all of the required variables, dimensions, and -attributes -as outlined above
    • -
    • -that there isn't more than ONE directory in the D2DDIRS -configuration containing files that have an variable called "model" -with -the same name
    • -
    -If all else fails, you can turn on the debugging logging option in EDEX. -In this mode EDEX will log all problems it finds -with model data files. To turn on this feature, perform the following steps: -
      -
    1. -Edit the file /awips2/edex/conf/log4j-ingest.xml to set level value = "DEBUG" -for the appender ThreadBasedLog. Refer -to the log files document for details.
    2. -
    3. -Stop and restart EDEX.
    4. -
    5. -Look in the server log files. It will show the problems for all -files -it finds. If it doesn't identify your file or directory, re-check -your D2DDIRS -to be sure you have set it up correctly.
    6. -
    -


    -

    - - diff --git a/cave/com.raytheon.viz.gfe/help/getNotify.html b/cave/com.raytheon.viz.gfe/help/getNotify.html deleted file mode 100644 index 039f06a4a4..0000000000 --- a/cave/com.raytheon.viz.gfe/help/getNotify.html +++ /dev/null @@ -1,324 +0,0 @@ - - - - - - getNotify User's Guide - - -

    -getNotify User's Guide

    -
    January 13, 2012
    -
    -

    -Table of Contents

    -

    -Overview

    -

    -Running the getNotify Program

    -

    -Example Output

    -
    -
    -

    -Overview

    -
    The getNotify program is a diagnostic routine to -connect to awips qpid server, receive notifications of data changes, and -then output the notifications to the terminal window. It is handy for -diagnosing notifications that are sent from the server. -

    -
    -
    -

    -Running the getNotify Program

    -
    The command line syntax is: -
    -python getNotify.py -h hostname -p portNumber [-u user] [-l] [-g] [-d] [-m] [-v]

    -
    -
    A sample command line is:
    -
    python getNotify.py -h cpsbn1 -p 5672 -g

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Option SyntaxOptional or MandatoryDescription
    -h hostnameMandatory (See note)Specifies the host, upon which the awips qpid server is running
    -p portMandatory (See note)Specifies the port, upon which the awips qpid server is running
    -u userOptionalSpecifies the user on connection to the awips qpid server. Defaults to -the current UNIX login name.
    -lOptionalIf specified, outputs detailed information about lock -notifications.
    -gOptionalIf specified, outputs detailed information about grid update -notifications.
    -dOptionalIf specified, outputs detailed information about database -inventory -change notifications.
    -mOptionalIf specified, outputs detailed information about user message -notifications.
    -v
    -
    Optional
    -
    If specified, outputs detailed -information about the VTEC Table Change Notifications.
    -
    -
    -
    -

    Example Data

    -
    The following shows some example output and how -it -is interpreted. This example uses just the -h and -p switches so -the program output simply lists the number of received notifications. -
    -

    Basic Execution

    -

    dx3-nhda{jdynina}112: python getNotify.py -h cpsbn1 -p 5672
    -Get Notifications Diagnostic Program
    -Establishing connection to broker on cpsbn1
    -Establishing connection to broker on cpsbn1
    -Connection complete to broker on cpsbn1
    -Connection complete to broker on cpsbn1
    -L=0,G=42,D=0,S=0,R=0,C=0,T=0,U=0,B=0,V=0,
    -L=0,G=25,D=0,S=0,R=0,C=0,T=0,U=0,B=0,V=0,
    -L=0,G=85,D=0,S=0,R=0,C=0,T=0,U=0,B=0,V=0,
    -L=0,G=38,D=0,S=0,R=0,C=0,T=0,U=0,B=0,V=0,
    -L=0,G=29,D=0,S=0,R=0,C=0,T=0,U=0,B=0,V=0,
    -L=0,G=38,D=0,S=0,R=0,C=0,T=0,U=1,B=0,V=0,
    -L=0,G=9,D=0,S=0,R=0,C=0,T=0,U=1,B=0,V=0,
    -L=0,G=3,D=0,S=0,R=0,C=0,T=0,U=0,B=0,V=0,
    -L=0,G=0,D=0,S=0,R=0,C=0,T=0,U=0,B=0,V=0,
    -L=0,G=3,D=0,S=0,R=0,C=0,T=0,U=0,B=0,V=0,
    -L=0,G=53,D=0,S=0,R=0,C=0,T=0,U=0,B=0,V=0,
    -L=0,G=14,D=0,S=0,R=0,C=0,T=0,U=1,B=0,V=0,
    -L=0,G=65,D=0,S=0,R=0,C=0,T=0,U=0,B=0,V=0,
    -
    -

    -

    The following table describes the symbol and its meaning: -
    -  - - - - - - - - - - - - - - - - - - - - - - - -
    LLock Notifications
    GGrid Update Notifications
    DDatabase Inventory Change Notifications
    MUser Message Notifications
    V
    -
    VTEC Table Change Notifications
    -
    -
    -

    Note: For AWIPS2, a decision was made to not support the following notification -types:

    -*SampleNotification
    -*ReferenceNotification
    -*ColorSpectrumNotification
    -*TextFileNotification
    -*ProcessStatusNotification

    -because of the architectural -differences between AWIPS1 and AWIPS2, these specific notifications will not -be supported by getNotify.

    -

    -

    Execution with -l switch

    -The lock notification message contains the weather element identifier -(ParmID), and the new lockTable. Note, no locks were detected in this case. -

    dx3-nhda{jdynina}113: python getNotify.py -h cpsbn1 -p 5672 -l
    -Get Notifications Diagnostic Program
    -Establishing connection to broker on cpsbn1
    -Establishing connection to broker on cpsbn1
    -Connection complete to broker on cpsbn1
    -Connection complete to broker on cpsbn1
    -L=0,G=0,D=0,S=0,R=0,C=0,T=0,U=0,B=0,V=0,
    -L=0,G=13,D=0,S=0,R=0,C=0,T=0,U=0,B=0,V=0,
    -L=0,G=0,D=0,S=0,R=0,C=0,T=0,U=0,B=0,V=0,
    -L=0,G=9,D=0,S=0,R=0,C=0,T=0,U=0,B=0,V=0,
    -L=0,G=0,D=0,S=0,R=0,C=0,T=0,U=0,B=0,V=0,
    -L=0,G=0,D=0,S=0,R=0,C=0,T=0,U=0,B=0,V=0,
    -L=0,G=8,D=0,S=0,R=0,C=0,T=0,U=0,B=0,V=0,
    -L=0,G=8,D=0,S=0,R=0,C=0,T=0,U=0,B=0,V=0,
    -L=0,G=0,D=0,S=0,R=0,C=0,T=0,U=0,B=0,V=0,
    -
    -
    -

    -

    Execution with -g switch

    -The grid update notification message contains the replacement time -range, -the weather element identifier (ParmID), and the replacement times of -the grids. -

    dx3-nhda{jdynina}115: python getNotify.py -h cpsbn1 -p 5672 -g
    -Get Notifications Diagnostic Program
    -Establishing connection to broker on cpsbn1
    -Establishing connection to broker on cpsbn1
    -Connection complete to broker on cpsbn1
    -Connection complete to broker on cpsbn1
    -L=0,G=0,D=0,S=0,R=0,C=0,T=0,U=0,B=0,V=0,
    -L=0,G=21,D=0,S=0,R=0,C=0,T=0,U=0,B=0,V=0,
    -GRID=[
    -ParmID: WVPER_SFC:LWX_GRID_D2D_EPwave10_20120113_1200
    -Replacement TimeRange: (Jan 20 12 12:00:00 , Jan 20 12 13:00:00 )
    -Histories: {(Jan 20 12 12:00:00 , Jan 20 12 13:00:00 ): [Origin: INITIALIZED
    -Origin Parm: WVPER_SFC:LWX_GRID_D2D_EPwave10_20120113_1200
    -Origin Time Range: (Jan 20 12 12:00:00 , Jan 20 12 13:00:00 ) Time Modified: None Who Modified: None
    -Update Time: None
    -Publish Time: None
    -Last Sent Time: None
    -]},
    -ParmID: PERPW_SFC:LWX_GRID_D2D_EPwave10_20120113_1200
    -Replacement TimeRange: (Jan 20 12 12:00:00 , Jan 20 12 13:00:00 )
    -Histories: {(Jan 20 12 12:00:00 , Jan 20 12 13:00:00 ): [Origin: INITIALIZED
    -Origin Parm: PERPW_SFC:LWX_GRID_D2D_EPwave10_20120113_1200
    -Origin Time Range: (Jan 20 12 12:00:00 , Jan 20 12 13:00:00 ) Time Modified: None Who Modified: None
    -Update Time: None
    -Publish Time: None
    -Last Sent Time: None
    -]}
    -
    -

    -

    Execution with -d switch

    -The database inventory change notification message contains the updated -inventory, the additions, deletions. -

    dx3-nhda{jdynina}116: python getNotify.py -h cpsbn1 -p 5672 -d
    -Get Notifications Diagnostic Program
    -Establishing connection to broker on cpsbn1
    -Establishing connection to broker on cpsbn1
    -Connection complete to broker on cpsbn1
    -Connection complete to broker on cpsbn1
    -L=0,G=0,D=0,S=0,R=0,C=0,T=0,U=0,B=0,V=0,
    -L=0,G=60,D=1,S=0,R=0,C=0,T=0,U=0,B=0,V=0,
    -DB=[
    -Inventory[AFC_GRID__Restore_00000000_0000,
    -AFC_GRID_Test_Fcst_00000000_0000, AFC_GRID__ISC_00000000_0000,
    -AFC_GRID__RTMA_00000000_0000, AFC_GRID__SAT_00000000_0000, AFC_GRID__MSAS_00000000_0000,
    -AFC_GRID__Official_00000000_0000, AFC_GRID__Fcst_00000000_0000,
    -AFC_GRID_Prac_Fcst_00000000_0000, AFC_GRID__LAPS_00000000_0000, AFC_GRID__AKWAVE_20120113_0000,
    -AFC_GRID__AKWAVE_20120113_0600, AFC_GRID__MOSGuide_20120112_1200,
    -AFC_GRID__MOSGuide_20120113_0000, AFC_GRID__NAM12_20120113_0000, AFC_GRID__NAM12_20120113_0600,
    -AFC_GRID__NamDNG5_20120113_0000, AFC_GRID__NamDNG5_20120113_0600,
    -AFC_GRID_D2D_NAM40_20120113_1200, AFC_GRID_D2D_UKMET-NorthernHemisphere_20120113_1200,
    -AFC_GRID_D2D_TPCProb_20120113_1200, AFC_GRID_D2D_AKWAVE_20120113_0000,
    -AFC_GRID_D2D_OPCTAFBNW_20120111_0000, AFC_GRID_D2D_NAM20_20120113_1200,
    -AFC_GRID_D2D_ENSEMBLE_20120113_0000, AFC_GRID_D2D_NAM95_20120113_0000,
    -AFC_GRID_D2D_TPCProb_20120112_0000, AFC_GRID_D2D_TPCProb_20120113_0000,
    -AFC_GRID_D2D_gfsLR_20120113_0000, AFC_GRID_D2D_MOSGuide_20120112_1200,
    -AFC_GRID_D2D_TPCProb_20120112_0600, AFC_GRID_D2D_RTMA_20120113_1400,
    -AFC_GRID_D2D_TPCProb_20120111_1800, AFC_GRID_D2D_GlobalWave_20120113_0600,
    -AFC_GRID_D2D_OPCTAFBNW_20120113_1200, AFC_GRID_D2D_NAM95_20120113_1200,
    -AFC_GRID_D2D_GFS190_20120113_0600, AFC_GRID_D2D_GFS190_20120113_1200,
    -AFC_GRID_D2D_TPCProb_20120112_1800, AFC_GRID_D2D_gfsLR_20120112_0000,
    -AFC_GRID_D2D_ENSEMBLE_20120112_1200, AFC_GRID_D2D_GlobalWave_20120113_1200,
    -AFC_GRID_D2D_WaveWatch_20120113_0600, AFC_GRID_D2D_RTMA_20120113_1500,
    -AFC_GRID_D2D_TPCProb_20120112_1200, AFC_GRID_D2D_NamDNG5_20120113_1200,
    -AFC_GRID_D2D_AKWAVE_20120113_0600, AFC_GRID_D2D_OPCTAFBNW_20120113_0000,
    -AFC_GRID_D2D_GFS190_20120113_0000, AFC_GRID_D2D_MOSGuide_20120113_0000,
    -AFC_GRID_D2D_NamDNG5_20120113_0600, AFC_GRID_D2D_gfsLR_20120111_0000,
    -AFC_GRID_D2D_OPCTAFBNW_20120111_1200, AFC_GRID_D2D_NAM12_20120113_1200,
    -AFC_GRID_D2D_OPCTAFBNW_20120112_1200, AFC_GRID_D2D_OPCTAFBNW_20120112_0000,
    -AFC_GRID_D2D_OPCTAFBNW_20120108_1200, AFC_GRID_D2D_TPCProb_20120113_0600,
    -AFC_GRID_D2D_OPCTAFBNW_20120109_0000, AFC_GRID_D2D_UKMET-NorthernHemisphere_20120113_0600,
    -AFC_GRID_EditTopo_Topo_00000000_0000, AFC_GRID_D2D_PRISMClimo_00000000_0000,
    -AFC_GRID_D2D_NCDCClimo_00000000_0000, AFC_GRID_D2D_CRMTopo_00000000_0000,
    -AFC_GRID_D2D_NED_00000000_0000, AFC_GRID_D2D_AKWAVE_20120113_1200]
    -Additions[AFC_GRID_D2D_AKWAVE_20120113_1200]
    -Deletions[],
    -]
    -
    -
    -

    -

    Execution with -m switch

    -The user message notification consists of the message, and the -priority. -

    dx3-nhda{jdynina}117: python getNotify.py -h cpsbn1 -p 5672 -m
    -Get Notifications Diagnostic Program
    -Establishing connection to broker on cpsbn1
    -Establishing connection to broker on cpsbn1
    -Connection complete to broker on cpsbn1
    -Connection complete to broker on cpsbn1
    -L=0,G=7,D=0,S=0,R=0,C=0,T=0,U=0,B=0,V=0,
    -L=0,G=8,D=0,S=0,R=0,C=0,T=0,U=0,B=0,V=0,
    -L=0,G=15,D=0,S=0,R=0,C=0,T=0,U=0,B=0,V=0,
    -L=0,G=11,D=0,S=0,R=0,C=0,T=0,U=0,B=0,V=0,
    -L=0,G=6,D=0,S=0,R=0,C=0,T=0,U=0,B=0,V=0,
    -USER=[
    -Message: ISC: PBZ ['MinT'] (21/00->21/13) #Grids=1
    -Priority: EVENTA
    -Category: ISC
    -,
    -] -
    -
    -
    -

    -

    Execution with -v switch

    -The vtec table change notification consists of the table name, -modification time, and modification source:
    -dx3-nhda{jdynina}118: python getNotify.py -h cpsbn1 -p 5672 -v
    -Get Notifications Diagnostic Program
    -Establishing connection to broker on cpsbn1
    -Establishing connection to broker on cpsbn1
    -Connection complete to broker on cpsbn1
    -Connection complete to broker on cpsbn1
    -L=0,G=0,D=0,S=0,R=0,C=0,T=0,U=0,B=0,V=0,
    -L=0,G=0,D=0,S=0,R=0,C=0,T=0,U=0,B=0,V=0,
    -L=0,G=0,D=0,S=0,R=0,C=0,T=0,U=0,B=0,V=0,
    -L=0,G=0,D=0,S=0,R=0,C=0,T=0,U=0,B=0,V=0,
    -VTEC=[
    -Table Name: 'OPERATIONAL'
    -ModTime: Jan 13 12 16:54:25 GMT
    -ModSource: VTECDecoder,
    -] -
    -
    -
    -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/gfeConfig.html b/cave/com.raytheon.viz.gfe/help/gfeConfig.html deleted file mode 100644 index 9b58b4b9a1..0000000000 --- a/cave/com.raytheon.viz.gfe/help/gfeConfig.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - gfeConfig - Main Page - - -
    -

    GFE/ifpIMAGE Configuration File

    -

    The gfe configuration file defines the configuration -of -the Graphical Forecast Editor. The  configuration is defined by -assigning -values, in the gfe configuration file, to a variety of display -environment -variables.    These environment variables define the -graphic display -colors of the GFE, initial settings and values of GFE tools, as well as -many other aspects of the display. -

    -

    The gfe configuration file is used by both the GFE and the ifpIMAGE -program. Normally the ifpIMAGE will have its own configuration file -that -inherits from the gfe configuration and, in some cases, has its own -display -options.  Note that single quotes (' ') and double quotes (" -") -are used interchangeably throughout the examples given of the display -environment -variables. -

    -

    This information is provided for you to -help -you understand the format of the gfe configuration file.  You -should -NEVER change the original gfeConfig.GFECONFIG in the BASE directory -since -your changes will be overwritten with the next upgrade.  See the gfe -configuration overview for -information on how to make changes that -are supported for the gfe. -

    -All gfe configuration files should be -created -and modified using the GFE.  See modifying -gfe -configuration files for further information on how to modify -the -files.
    -
    -

    Organization

    -
    -Heading
    -Hiding the -Configuration -File
    -
    Mutable Parameter and -Viewable Database -Configuration
    -Initial GFE Startup -Weather -Elements, Samples, and Edit Action Lists  and Keyboard Shortcuts -Configuration
    -Misc. Configuration Items -
    -Map Background -Configuration
    -
    Graphical Hardware -Configuration
    -
    System Time Range -Configuration
    -
    User Interface -Configuration
    -
    Sample and Legend Colors -
    -GFE Font Sizes
    -
    Grid Data History -Configuration
    -
    Algorithm Configuration
    -
    Dialog and Menu -Configuration
    -
    Weather Element -Configuration
    -
    Weather/Discrete Common -Value Definitions
    -
    Default -(Non-Weather) Color -Table Algorithm Configuration
    -
    Discrete Color -Table Algorithm -Configuration
    -
    Weather Color Algorithm -Configuration
    -
    Preference Defaults
    -
    PNG Graphical Product -Generation
    -
    Product Generation -Scripts
    -
    Process -Monitor
    -
    Formatter -Launcher
    -
    -
    -
    -
    -

    Back To TOC

    -
    -
    -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/gfeConfig_Algor.html b/cave/com.raytheon.viz.gfe/help/gfeConfig_Algor.html deleted file mode 100644 index 4fba586c56..0000000000 --- a/cave/com.raytheon.viz.gfe/help/gfeConfig_Algor.html +++ /dev/null @@ -1,404 +0,0 @@ - - - - - - gfeConfig - Algorithm Configuration - - -
    -
    -

    GFE/ifpIMAGE Configuration File
    -Algorithm Configuration
    -

    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
     
    -
    -
    GFE Configuration Item
    -
    -
    Applicable to GFE
    -
    -
    Applicable to ifpIMAGE
    -
    -
    Notes
    -
    Significant -Weather Time-Weighted Sample ThresholdYESNO
    -
    Default Pencil WidthYESNO
    -
    Pencil Influence SizesYESNO
    -
    Interpolation AlgorithmYESNO
    -
    Smoothing AlgorithmYESNO
    -
    Contour Sub SampleYESNO
    -
    -
    -
    -
    -


    -

    -

    Significant -weather time weighted average percent

    -Smart tools can request a time-weighted average of grids.  For -weather, -this requires a threshold.  The weather key returned from the -time-weighted -average of grids, includes all weather sub keys that exist for more -than -the Significant WeatherTimeWeightAverage_percent of the grids.  If -none of the sub keys exceed the threshold, then the most dominent -subkeys) -will be used as the time-weighted average. -

    For example, let's say there are three weather grids, the first is -an -hour long, the second is two hours long, and the third is three hours -long.  -There is Rain in the first grid, Snow in the second grid, and Thunder -and -Rain in the third grid.  The total duration of the three grids is -6 hours. The percentages calculated via this algorithm is shown in the -following table:

    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
     
    -
    -
    Weather Type
    -
    -
    First Grid
    -
    -
    Second Grid
    -
    -
    Third Grid
    -
    -
    Total Duration
    -
    -
    Percentage
    -
    Rain1 hour0 hours3 hours4 hours66.6%
    Snow0 hours2 hours0 hours2 hours33.3%
    Thunder0 hours0 hours3 hours3 hours50.0%
    -
     
    -
    -Depending upon the threshold, the time-weighted results can be -different, -as shown in the following table:
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
     
    -
    -
    Threshold
    -
    -
    Result
    -
    -
    Notes
    -
    20%Rain, Snow, Thunderall of the weather types are above the threshold
    40%Rain, ThunderSnow is only 33.3%, so it is not part of the time-weighted -average
    60%RainOnly rain is above the threshold.
    80%RainSince none of the entries are above the threshold, the result -is the -subkey that is most predominent.

    -SignificantWeatherTimeWeightAverage_percent = 40
    -  -

    Default Pencil -Width

    -The default pencil width is specified per weather element in grid -cells.  -The pencil width can be changed interactively through the GFE -GUI.  -If not specified, the default is set to 5 grid cells. For those weather -elements that are not-surface based, the format is -parmName_level_pencilWidth. -

    T_pencilWidth = 5

    -

    Pencil -Influence Sizes

    -The number and value of the Pencil Tool's Influence Sizes can be -defined -in the GFE config file as well.  Just define a list of sizes in -grid -cells much like the Pencil Tool Width. -

    PencilToolInfluence_list = [2, 4, 8, 12, 16]

    -

    You are allowed to enter as many sizes as you want, but be -warned.  -The resulting menu may be too long to be completely displayed on the -screen.

    -

    Interpolation -Algorithm

    -The interpolation algorithm may be specified for each weather -element.  -The format of the entry is parmName_interpolateAlgorithm.  If not -specified, then the format defaults to that shown in the following -table:
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - -
     
    -
    -
    Weather Element
    -
    -
    Default Algorithm
    -
    QPFCUBIC_ADVECT
    SkyCUBIC_ADVECT
    PoPCUBIC_ADVECT
    all othersCUBIC_NOADVECT
    -
    -The available algorithms are shown in the following table:
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - -
     
    -
    -
    Algorithm
    -
    -
    Description
    -
    CUBIC_ADVECTCubic spline is applied to the data points temporally.  -Software -looks for areas that can be advected.  The advection component of -the algorithm works best for weather elements that contain areas of -zero -value.
    CUBIC_NOADVECTCubic spline is applied to the data points temporally.  -Software -gradually adjusts points from starting value to ending value without -advection -considerations.
    LINEAR_ADVECTLinear calculations are applied to adjacent base grids -temporally.  -Software looks for areas that can be advected.  The advection -component -of the algorithm works best for weather elements that contain areas of -zero value.
    LINEAR_NOADVECTLinear calculations are applied to adjacent base grids -temporally.  -Software gradually adjusts points from starting value to ending value -without -advection considerations.

    -An example of setting Temperature to use the linear and advective -capabilities -of the interpolation, you would do the following: -

    T_interpolateAlgorithm = "LINEAR_ADVECT"

    -

    For those weather elements that are not surface based, the format -is -parmName_level_interpolateAlgorithm.

    -

    Smoothing -Algorithm

    -The Smoothing Algorithm can use a number of possible smoothing -filters.  -By default, the choices are 3x3, 5x5, 7x7, or 9x9.  Generally, -more -smoothing will occur with larger smoothing filter sizes. When the GFE -is -first started, the 3x3 filter size is the default, but this can be -changed -to any one of the filter sizes in the list.  To change the default -add this line to your GFEConfig file. -

    SmoothSize = 7

    -

    In this example the smoothing filter size will default to 7x7, -when -the GFE is started.

    -

    The list of possible filter sizes can be configured in the GFE as -well.  -To define a new list, which appears in the main menu item -GFE->Editing -Preferences, use the following syntax in your GFEConfig file.

    -

    SmoothSizeList = [3, 5, 7, 9, 11]

    -

    Note that all of the integer values are odd.  Even values -will -give the same results.  For example, a value of 2 will give the -same -results as 3, 4 the same as 5, and so on.  We recommend that you -define -the list with odd values simply for consistency.

    -

    Contour Sub -Sample

    -The Countour Analyzer algorithm is used to convert contours into a grid -for the Contour -Tool.  -It can run over a subsampled grid to improve performance.  This is -usually ok since the contour tool is mostly used where there is not -much -detail due to topography. The value of ContourSubSample is used to -divide -the x and y dimensions of the original grid to get the dimensions of -the -subsampled grid. So, setting ContourSubSample to 4 would cause the -Contour -Analyzer to reduce a 400x400 grid to a 100x100 grid for contouring -purposes. -This can greatly speed up the algorithm.  Setting ContourSubSample -to 1 will cause no reduction. The default value is 4.  If -ContourSubSample -is set to a value less than or equal to 0 then it will go back to -4.  -If it is set to a value large enough to make the subsampled grid have -an -x or y dimension less than 5, then it will be reduced so that the -minimum -dimension for x or y will be 5.  This configurable item is simply -for performance. -

    ContourSubSample = 4
    -

    -
    - -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/gfeConfig_DB.html b/cave/com.raytheon.viz.gfe/help/gfeConfig_DB.html deleted file mode 100644 index 3669f8cb27..0000000000 --- a/cave/com.raytheon.viz.gfe/help/gfeConfig_DB.html +++ /dev/null @@ -1,151 +0,0 @@ - - - - - - gfeConfig - Mutable Parameter and Viewable Database -Configuration - - -
    -
    -

    GFESuite/ifpIMAGE Configuration File
    -Mutable Database and -Viewable Database Configuration

    -


    -

    -This section of the configuration file defines entries that affect the -mutable database and viewable database configurations. -
      - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    GFE Configuration Item
    -
    -
    Applicable to GFE
    -
    -
    Applicable to ifpIMAGE
    -
    -
    Notes
    -
    Mutable DatabaseYESNODoesn't affect output PNGs
    Viewable Database TypesYESYESAffect overall available set of types
    Filtered Data MaskYESYESNormally only used for ifpIMAGE
    -
    -
    -
    -


    -

    -

    Mutable -Database Name

    -The mutable database name is in a "type_model_time" format.  There -are several permutations of this format: -
  • _model
  • -
  • type_model
  • -
  • _model_time
  • -
  • type_model_time
  • -
    -Normally the mutable database name is set to "_Fcst" for the forecast -database.  -It is unusual, except for testing, to set this field to a different -value. -

    The "_model" format is used when the database does not have a -specified -type and a specific model time does not matter.  Be sure to -include -the underscore character for this format. The "type_model" format is -used -when the database to be edited has a specified type (e.g., D2D for D2D -models). -The formats with the time are not normally used but are useful -when you want to edit a specific database that is not a -singleton.  -The format for the time string is yyyymmdd_hhmm.  An example of -the -time string for November 8, 1999 at 1200z is 19991108_1200.

    -

    mutableModel = "_Fcst"

    -

    Viewable -Database Types

    -The "dbTypes"  entry defines the database types that will be -viewable -by the GFE.  Database types are defined in serverConfig.py for -each -database.  Typically the databases derived from models, the -forecast -database, and the official database all share the same database -type.  -Other databases, such as the D2D viewable models, are assigned -different types. -

    The standard databases have a database type of '' (no -value).  -This value must be included in the list of "dbTypes".  D2D model -databases have a type of "D2D".  Virtual databases, such as those -used for the Virtual ISC weather elements, have a type of "V".

    -

     You may want to adjust this list to always exclude certain -categories -of databases from being displayed on the GFE. 

    -

    dbTypes = ['', 'D2D', 'V']

    -

    Filtered Data Mask

    -The GFE supports filtering of the displayed data by site identifier or -site plus weather element name.  The main purpose of this to to -produce -clipped graphical products (i.e., ifpIMAGE).  For normal GFE -operations, -the entry should be commented out or non-existant. The displayed data -is -clipped by specifying an edit area, such as BOU_CWA.  The GFE will -access the edit area and then clip all spatially displayed data to this -area.  There are four formats of the entry, and the entries are -searched for in this order:
    -
      -
    • siteID_weatherElementName_mask, where siteID -is the site identifier that is currently in use by the GFE, and -weatherElementname is for specific clipping for a weather element,
    • -
    • siteID_mask, where siteID -is the site identifier that is currently in use by the GFE,
    • -
    • weatherElementName_mask, where weatherElementname is for -specific clipping for a weather element,
    • -
    • mask
      -
    • -
    -

    BOU_Wind_mask = "BOU"
    -BOU_mask = "CWA"
    -Wind_mask = "CWA"
    -mask = "CWA"
    -
    -

    -
    -

    -

    - -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/gfeConfig_Discrete.html b/cave/com.raytheon.viz.gfe/help/gfeConfig_Discrete.html deleted file mode 100644 index 554a1b9f98..0000000000 --- a/cave/com.raytheon.viz.gfe/help/gfeConfig_Discrete.html +++ /dev/null @@ -1,203 +0,0 @@ - - - - - - gfeConfig - Discrete Color Algorithm Configuration - - -
    -
    -

    GFE/ifpIMAGE Configuration File
    -Discrete Color Algorithm Configuration

    -The discrete color algorithm is very simple in the case of -non-overlapping -discrete configuration.  It simply uses a color table in much the -same way as SCALAR and VECTOR use color tables.  The algorithm -becomes -more complicated when the discrete element contains overlapping -information.
    -
      - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    GFE Configuration Item
    -
    -
    Applicable to GFE
    -
    -
    Applicable to ifpIMAGE
    -
    -
    Notes
    -
    Discrete Overlap PatternsYESYES
    -
    Discrete Complex ColorYESYES
    -
    Discrete Complex PatternYESYES
    -
    -
    -

    Discrete Color Algorithm -  -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Number of Discrete Keys at a Grid PointFill PatternColor
    1No fill patternAs specified by the Color Table that is assigned to the -discrete weather -element.
    2The 1st element (priority-order) is drawn as a solid.  -The 2nd -element is drawn using the first entry in Discrete -Overlap Patterns.Each element is drawn as specified in the Color Table that is -assigned -to the discrete weather element.  For example, if the discrete key -is "A^B" and A is assigned red and B is assigned blue, then there will -be a solid red area with a patterned blue.
    3...n+1 (where n is the number of patterns identified in the Discrete -Overlap Patterns)The 1st element is drawn as a solid.  The remaining -elements are -drawn with each of the entries in the Discrete -Overlap Patterns.Each element is drawn as specified in the Color Table that is -assigned -to the discrete weather element. 
    n+2...   (where n is the number of patterns -identified in -the Discrete Overlap Patterns)The pattern for all elements is as shown in the Discrete -Complex Pattern entry.The color for all elements is as shown in the Discrete -Complex Color entry.
    -
    -


    -

    -

    Discrete Overlap Pattern

    -The Discrete Overlap Pattern entry defines the set of patterns to use -for -overlapping discrete fields where an overlap occurs.   The -number -of patterns indicate the number of overlaps that will be made visually -before the Discrete Complex Pattern and Discrete Overlap Pattern is -used. -

    DiscreteOverlapPatterns = ['TRANS_25PC_45DEG', -'TRANS_25PC_135DEG', -'CROSS'] -

    -

    The available fill patterns are: -

    -
  • WHOLE
  • -
  • WIDE
  • -
  • SCATTERED
  • -
  • WIDE_SCATTERED
  • -
  • ISOLATED
  • -
  • TRANS_25PC_45DEG
  • -
  • TRANS_25PC_135DEG
  • -
  • SELECTED_AREA
  • -
  • DUALCURVE
  • -
  • CURVE
  • -
  • VERTICAL
  • -
  • CROSS
  • -
  • HORIZONTAL
  • -
    -You can view examples of these fill -patterns -here. -
    -  -
    -  -

    Discrete Complex Color

    -The Discrete Complex Color is used when there are many overlapping -discrete -values at a grid point and the list of Discrete -Overlap Patterns has been exhausted. -

    DiscreteComplexColor = 'red' -
    -  -
    -  -

    -

    Discrete Complex Pattern

    -The Discrete Complex Pattern is used when there are many overlapping -discrete -values at a grid point and the list of Discrete -Overlap Patterns has been exhausted. -

    DiscreteComplexPattern = 'DUALCURVE' -

    -

    The available fill patterns are: -

    -
  • WHOLE
  • -
  • WIDE
  • -
  • SCATTERED
  • -
  • WIDE_SCATTERED
  • -
  • ISOLATED
  • -
  • TRANS_25PC_45DEG
  • -
  • TRANS_25PC_135DEG
  • -
  • SELECTED_AREA
  • -
  • DUALCURVE
  • -
  • CURVE
  • -
  • VERTICAL
  • -
  • CROSS
  • -
  • HORIZONTAL
  • -
    -You can view examples of these fill -patterns -here.
    -
    -
    - -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/gfeConfig_GHist.html b/cave/com.raytheon.viz.gfe/help/gfeConfig_GHist.html deleted file mode 100644 index 2c29ec7fe6..0000000000 --- a/cave/com.raytheon.viz.gfe/help/gfeConfig_GHist.html +++ /dev/null @@ -1,239 +0,0 @@ - - - - - - gfeConfig - Grid Manager Grid Data History Configuration - - -
    -
    -

    GFE/ifpIMAGE Configuration File
    -Grid Manager Grid Data History Configuration

    -The grid manager may be toggled into the history mode from the normal -mode.  -The history mode will show the origin, source, and modified state of -all -of the grids using a series of colors and patterns.  This section -of the gfe configuration file permits tailorability of the display -algorithm.  -Generally colors are used to indicate model source or and grid origin -and -patterns are used to indicate that the grid has been modified. -

    The basic color algorithm is as follows: -

    -
      -
    • If the origin of the grid came from a model (e.g., populated), -then the -software looks for a configurable item denoting a color for that -particular -model (with the configuration item format being HistoryModelColor_modelname).  -If found, the grid block is painted that color.   If the -particular -configuration item is not found for the model, then the color specified -in the HistoryOriginColor_Populated is used.
    • -
    • If the origin of the grid did not come from a model, and hence is -"Calculated", -"Scratch", "Interpolated", or "Other", the color of the grid block is -the -color specified in HistoryOriginColor_origintype.  If not -defined, -a gray color is used.
    • -
    -The basic pattern algorithm is as follows: -
      -
    • If the grid has not been modified, then no fill pattern is used -and the -grid block is solid.  A grid is modified whenever a grid edit -operation -is applied to the grid or if the grid has been time shifted.
    • -
    • If the grid has been modified by you, then the fill pattern will -be -that -specified by HistoryUserModPattern_Me.  Note -that a grid is treated as "modified by me" only for the duration of the -current GFE session.  Everytime the GFE is started, a new -workstation -identifier is assigned and the grid data history is tracked by -workstation -identifier.
    • -
    • If the grid has been modified by someone else, then the fill -pattern -will -be that specified by HistoryUserModPattern_Other.
    • -
    -The text characters algorithm is as follows: -
      -
    • If a grid is modified by me, the text contained in -HistoryUserModText_Me -is used.
    • -
    • If a grid has been modified by someone else, the text contained -in -HistoryUserModText_Other -is used.
    • -
    • If a grid has not been modified, and has originated from a model, -then:
    • -
        -
      • if a model-specific text string is provided, as a configuration -item in -the form of HistoryModelText_modelname, then those will be the -characters -used.
      • -
      • if a model-specific text string is not provided, then the -configuration -item HistoryOriginText_Populated is used to define the text string.
      • -
      -If a grid has not been modified, and its origin is not a model, then -the -configuration item of the form HistoryOriginText_originType is -used -to define the text string. -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    GFE Configuration Item
    -
    -
    Applicable to GFE
    -
    -
    Applicable to ifpIMAGE
    -
    -
    Notes
    -
    Modified -by -Me/Other Text and Pattern ConfigurationYESNO
    -
    Text and -Color Configuration -for Origin TypesYESNO
    -
    Text -and -Color Configuration for Model Populated GridsYESNO
    -
    -
    -
    -
    -

    Modified -by Me/Other Text and Pattern Configuration

    -The Grid Manager in history mode will indicate by text characters and -patterns -if the grid has been modified.  The software can distinguish -between -modified by me, and modified by someone else.  Note that the -modified -by me is only indicated for the duration of the current GFE session. -The -available fill patterns are: WHOLE, WIDE, SCATTERED, WIDE_SCATTERED, -ISOLATED, -TRANS_25PC_45DEG, TRANS_25PC_135DEG, SELECTED_AREA, DUALCURVE, CURVE, -VERTICAL, -CROSS, HORIZONTAL, BIGCROSS. You can see examples -of the fill patterns here. -

    HistoryUserModText_Me = "m"    #Text for -modified -by me
    - HistoryUserModText_Other = "o"     #Text -for modified by other
    - HistoryUserModPattern_Me = "TRANS_25PC_45DEG"   -#Pattern -for mod by me
    - HistoryUserModPattern_Other = "TRANS_25PC_135DEG"   -#Pattern for mod by other

    -

    Text -and Color Configuration for Origin Types

    -

    The text and color configuration for non-modified grids are -defined -in this section.  Grids can have one of five origins: Populated, -Calculated, -Scratch, Interpolated, and Other.  Populated grids are those -generated -by ifpInit and generally are copied into the Forecast database.  -Calculated -grids are those created from contours. Scratch grids are the grid that -were created from scratch. Interpolated grids are the grids that were -created/modified -from the interpolation technique.  Other is a catch-all for all -other -potential sources of grids.  Note that the user may also specify -the -specific color and text characters for populated data based on the -modelname --- see the next section for information on this.

    -

    HistoryOriginText_Populated = "P"
    - HistoryOriginText_Calculated = "C"
    - HistoryOriginText_Scratch = "S"
    - HistoryOriginText_Interpolated = "I"
    - HistoryOriginText_Other = "?"
    - HistoryOriginColor_Populated = "wheat"
    - HistoryOriginColor_Calculated = "red"
    - HistoryOriginColor_Scratch = "magenta"
    - HistoryOriginColor_Interpolated = "blue"
    - HistoryOriginColor_Other = "gray75"

    -

    Text -and Color Configuration for Model Populated Grids

    -

    The color and text associated with Populated grids may be tailored -for -each model source.  If an entry for a particular model is not -found, -then the text will default to that specified in -HistoryOriginText_Populated -and the color to that specified in HistoryOriginColor_Populated. The -format -for the text is HistoryModelText_modelname and the format for -the -color is HistoryModelColor_modelname.

    -

    HistoryModelColor_MRF = '#30df10'
    - HistoryModelColor_RUC = '#00ffff'
    - HistoryModelColor_MOS = '#e6c8a1'
    - HistoryModelColor_NAM = '#ffff52'
    - HistoryModelColor_MesoNAM = '#ff99ff'
    - HistoryModelColor_AVN = 'pink'
    - HistoryModelText_MRF = 'MRF'
    - HistoryModelText_RUC = 'RUC'
    - HistoryModelText_MOS = 'MOS'
    - HistoryModelText_NAM = 'NAM'
    - HistoryModelText_MesoNAM = 'NAM'
    - HistoryModelText_AVN = 'AVN'
    -
    -

    -
    -
    -
    -
    -
    Back To TOC
    -
    -
    -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/gfeConfig_HW.html b/cave/com.raytheon.viz.gfe/help/gfeConfig_HW.html deleted file mode 100644 index 3d9ddd98b3..0000000000 --- a/cave/com.raytheon.viz.gfe/help/gfeConfig_HW.html +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - gfeConfig - Graphical Hardware Configuration - - -
    -
    -

    GFE/ifpIMAGE Configuration File
    -Graphical Hardware Configuration

    -This section controls some of the font sizes that are used in the -GFE.
    -
    - - - - - - - - - - - - - - - - - - - - - -
    -
    GFE Configuration Item
    -
    -
    Applicable to GFE
    -
    -
    Applicable to ifpIMAGE
    -
    -
    Notes
    -
    FontsYESYESFonts for ifpIMAGE are not tailorable.  There are five -fixed sizes.
    Background Color -for Drawing -PanesYESYES
    -
    -
    -
    -
    -

    Fonts

    -The fonts used by the GFE can be controlled.  For alignment -purposes -the fonts should be non-proportional. There are five sizes of text -fonts -used in the GFE which are identified from 0 through 4 to -increase/decrease -the size of the text. -

    The TextFont* entries are used by the various editors and -visualizations, -in other words, everything else on the gfe. They should be ordered from -smallest font to largest font and be all from one font family.  -The -GFE software is coded to use specific entries.  If you don't like -the defaults, they can be changed elsewhere -in the configuration file.

    -

    TextFont0 =  -"-b&h-lucidatypewriter-bold-*-sans-10-*"
    -TextFont1 =  "-b&h-lucidatypewriter-bold-*-sans-12-*" -
    -TextFont2 =  "-b&h-lucidatypewriter-bold-*-sans-14-*" -
    -TextFont3 =  "-b&h-lucidatypewriter-bold-*-sans-18-*" -
    -TextFont4 =  "-b&h-lucidatypewriter-bold-*-sans-24-*" -

    -

    Background -Color -for Drawing Panes

    -The color which will be used as the background for all of the display -panes -may be specified.  If you change this entry, you may also want to -change the sample -colors and image -legend -colors to prevent conflicts. -

    bgColor = "black"

    -
    - -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/gfeConfig_ISC.html b/cave/com.raytheon.viz.gfe/help/gfeConfig_ISC.html deleted file mode 100644 index 2386a28b30..0000000000 --- a/cave/com.raytheon.viz.gfe/help/gfeConfig_ISC.html +++ /dev/null @@ -1,137 +0,0 @@ - - - - - - gfeConfig - Intersite Coordination - - -
    -
    -

    GFE/ifpIMAGE Configuration File
    -Intersite Coordination

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    GFE Configuration Item
    -
    -
    Applicable to GFE
    -
    -
    Applicable to ifpIMAGE
    -
    -
    Notes
    -
    Preselected -Send ISC Dialog Weather Element GroupYESNO
    -
    Send ISC Dialog -DialogTimes ConfigurationYESNO
    -
    Limiting Times of Sending GridsYESNO
    -
    Limiting Weather Elements to SendYESNO
    -
    -
    -
    -
    -


    -

    -

    Preselected -Send ISC Dialog Weather Element Group -

    -

    The weather elements in the  group named in this entry will be -highlighted upon initial startup of the Send ISC Dialog.  The -default -is that none is specified, so that the currently loaded weather -elements -are selected. -

    -

    SendISCGridDialogInitialWEGroup = "Public" -
    -  -
    -  -

    -

    Send -ISC Dialog -Times Configuration

    -The list of entries that appear on the Send -ISC Dialog -are listed in this field.  The entries must be valid -user-defined -Time Ranges or they will be ignored. -

    SendISCTimes = ['Day 3', 'Day 5'] -
    -  -

    -

    Limiting the Times of -Grids to -Send

    -By default, the sending of ISC grids is not limited to any time range, -other than what is specified on the Publish -Dialog or Send ISC -Dialog.  -To save on processing and communication traffic, the time range may be -trimmed by specifying the following two configuration items.  -These -items are in hours from the current time.  For example, if you -wanted -to make sure that no grids were sent from the past and no grids past 7 -days, the configuration entries would be: -

    ISC_sendLimitBeforeCurrentTime = 0 -
    -ISC_sendLimitAfterCurrentTime = 7*24 -
    -  -

    -

    Limiting the Weather -Elements to -Send

    -By default, the sending of ISC grids is not limited by weather element. -Sites request what elements they wish. -To save on processing and communication traffic, the weather elements may be -trimmed by specifying an "ISC_neverSendParms" entry.  Even if the -user selects these weather elements for sending, they will not be sent. -

    ISC_neverSendParms = ['T', 'Td']
    -

    -
    -


    -

    - -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/gfeConfig_Map.html b/cave/com.raytheon.viz.gfe/help/gfeConfig_Map.html deleted file mode 100644 index 2965f22508..0000000000 --- a/cave/com.raytheon.viz.gfe/help/gfeConfig_Map.html +++ /dev/null @@ -1,182 +0,0 @@ - - - - - - gfeConfig - Map Background Configuration - - -
    -

    GFE/ifpIMAGE Configuration File
    -Map Background Configuration

    -The map background configuration section defines the following: -
      -
    • Initial list of map backgrounds to be displayed when the GFE is -initialized
    • -
    • Available map background colors.
    • -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    GFE Configuration Item
    -
    -
    Applicable to GFE
    -
    -
    Applicable to ifpIMAGE
    -
    -
    Notes
    -
    Default Map BackgroundsYESYES
    -
    Map Background ColorsYESYES
    -
    Map Background Line WidthsYESYES
    -
    Map Background Line -PatternYESYES
    -
    Map Label OffsetsYESYES
    -
    Map Background Font OffsetYESYESThe entry defines the base font to be used on all -map backgrounds.
    -
    -

    -Default Map -Backgrounds -

    The default map background list can contain zero or more map -names.  -In AWIPS1 you could refer to Maps.py in the server configuration file section for the -possible -set of map names, or use the GFE to display the list of available maps -and choose names from the list. In AWIPS2, currently a Maps.java file is used -and is not subject to overrides. There are planned changes to address this in -the future.

    -

    The following variable will load the initial loaded set of map -backgrounds. -The name of the -background should match the list of available maps defined in Maps.java.

    -

    MapBackgrounds_default = ['CWA','States']
    -

    -

     

    -

    Map Background -Colors

    -

    The user may specify a specific color to be used for a map -background, -rather than getting a random color assigned. Format is -mapName_graphicColor -= color.  The color does not need to be in the -MapBackgrounds_availColors -list.

    -

    States_graphicColor = 'green'
    -

    -

     

    -

    Map -Background Line -Widths

    -The default line width of the map background can be specified in the -configuration -file.  Valid numbers are zero and up. You can always change the -line -width interactively during a GFE session.  If not specified, then -the line width is assumed to be zero. -

    Default line widths can be set for each map background based on -map -name. Zero is the default value, which represents thin lines. The -larger -the number, the wider the line.  The format is mapName_lineWidth. -Do not include a decimal point after these entries.

    -

    States_lineWidth = 1
    -

    -

     

    -

    Map -Background Line -Patterns

    -The default line pattern can be varied for each map background.  -If -not specified, then the line pattern is assumed to be solid.  -There -are currently four line patterns supported in the GFE. -

    Default line patterns can be set up for each map background.  -The -possible strings are "SOLID", "DASHED", "DOTTED", -"DASHED_DOTTED".  -The values must be enclosed within quotes.   The format is -mapName_linePattern.

    -

    States_linePattern = "SOLID"
    -

    -

     

    -

    Map Background Font -Offset

    -The font used for a specific map background display is based on three -things: -
  • The definition of TextFont*, which defines the standard -fonts used in -the -GFE.
  • -
  • The optional definition of display type fonts, which defines -which of -the -standard fonts should be used for this particular type of display -(e.g., -Map_font).
  • -
  • The optional font offset, which adds or subtracts an offset size -from -the -calculations derived in the first two steps.
  • -
    -The font offset (called magnification on the GFE menus) allows the -default -font size to be increased or decreased on a per-map basis.  -NNumbers -can range from -2 through +2. Format is mapName_fontOffset.   -Do not include a decimal point after these entries. -

    States_fontOffset = 0
    -

    -
    -
      - -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/gfeConfig_Misc.html b/cave/com.raytheon.viz.gfe/help/gfeConfig_Misc.html deleted file mode 100644 index 0a0c74b959..0000000000 --- a/cave/com.raytheon.viz.gfe/help/gfeConfig_Misc.html +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - gfeConfig - Misc. Configuration Items - - -
    -
    -

    GFE/ifpIMAGE Configuration File
    -Misc. Configuration Items

    -This section contains miscellaneous configuration items that don't seem -to belong in any other category:
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    GFE Configuration Item
    -
    -
    Applicable to GFE
    -
    -
    Applicable to ifpIMAGE
    -
    -
    Notes
    -
    Grid Manager Sort OrderYESNO
    -
    Grid Manager Sort -AlgorithmYESNO
    -
    Auto Save IntervalYESNO
    -
    Product File Purge ThresholdYESNO
    -
    -
    -
    -

    Grid Manager -Sort Order

    -The Grid Manager Sort Order defines the order in which weather elements -will be displayed in the grid manager.  If not defined, then -weather -elements will be ordered alphabetically by weather element name.  -The first section of the grid manager will always be the mutable -database -(e.g., Fcst).  A separator line is placed at the end of the -mutable -database panes.  All other databases are shown after the separator -line.  If entries are defined in the sort order, then as weather -elements -are loaded, they are placed in the defined order.  If a weather -element -is not listed, then it is placed alphabetically at the end of the grid -manager section. -

    GridManagerSortOrder = ['T', 'Td', 'MaxT', "minT', 'Wind', -
    -  'FreeWind', 'TransWind', 'Sky', 'Wx', 'LAL', 'PoP', -
    -  'CWR', 'QPF', 'SnowAmt', 'FzLevel', 'Haines', 'MixHgt'] -

    -

    Grid -Manager Sort -Algorithm

    -This algorithm determines the sorting order of weather elements in the -Grid Manager, Samples, and Spatial Editor Legends. It contains of up to -5 characters in the order of sort importance. The characters are:'m' -for -mutable, 'N' for parm name, 'M' for model name, 't' for model time, and -'o' for model optional type. For example, "mNMto" will result in the -mutables -first, then parm name, then model name, then model time, then optional -type. This means that all of the weather elements with the same name -from -different models will be grouped together (except for the mutable). -

    GridManagerSortAlgorithm = "mNMto"

    -

    Auto Save Interval

    -The Auto Save Interval entry defines, in minutes, the initial setting -of -the automatic weather element save interval.  The values can range -from 0, to indicate Off, up to a reasonable value, such as 60, to save -the grids automatically every hour. -

    AutoSaveInterval = 30

    -

    -Product Directory Purge Threshold

    -These entries define the number of -hours to retain files within the -product directories before purging them, and the -number of days of log files to retain before purging them.
    -
    -ProductPurgeHours = 6 -
    -

    -
    -

    - -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/gfeConfig_Png.html b/cave/com.raytheon.viz.gfe/help/gfeConfig_Png.html deleted file mode 100644 index c1a755242d..0000000000 --- a/cave/com.raytheon.viz.gfe/help/gfeConfig_Png.html +++ /dev/null @@ -1,946 +0,0 @@ - - - - - - gfeConfig - PNG Graphical Product Generation - - -
    -
    -

    GFE/ifpIMAGE Configuration File
    -PNG Graphical Product Generation
    -

    -

    The GIF/PNG graphical product generation software uses the gfe -configuration -file to define the weather elements, clipping, colors, etc.  Refer -to the ifpIMAGE product generation guide for more details on how the -configuration -file is used. -
    -  -
    -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    GFE Configuration Item
    -
    -
    Applicable to GFE
    -
    -
    Applicable to ifpIMAGE
    -
    -
    Notes
    -
    PNG Local Time LegendNOYES
    -
    PNG Image SizeNOYES
    -
    PNG -Weather Element -to be Displayed as an ImageNOYES
    -
    PNG Image Data Smoothing and -Smooth ClippingYESYESThis is only applicable for scalar and vector weather -elements.  -Do not enable this in a normal GFE configuration file since the -performance -of the GFE will be unacceptable.
    PNG Weather -Elements -to be DisplayedNOYES
    -
    PNG Legend DisplayNOYES
    -
    PNG Weather Element -NameNOYES
    -
    PNG Alternative -Weather Element -NameNOYES
    -
    PNG Legend FormatsNOYES
    -
    PNG Filename PrefixNOYES
    -
    PNG Filename FormatNOYES
    -
    PNG Interval and Interval OffsetNOYES
    -
    PNG Fit To Data AreaNOYES
    -
    PNG Logo and Logo StringNOYES
    -
    PNG Legend LanguageNOYESCan use "french" and "spanish".
    PNG ColorBar RemovalNOYES
    -
    PNG Zoom DisableNOYES
    -
    PNG History MaskNOYES
    -
    PNG Info FilesNOYES
    -
    PNG Snapshot TimeNOYESUsed typically with Png_interval.
    PNG File TypeNOYES
    -
    -

    -
    -
    -
    -
    -


    -

    -

    PNG Local Time -Legend

    -The legends on the GFE are normally in GMT or ZULU time.  The -generated -PNG imagery can contain legends in either GMT or local time. -

    Legends display mode 0 for UTC, 1 for local time. Do not include a -decimal -point after the number. -

    -

    Png_localTime = 1
    -

    -

      -

    -

    PNG Image Size

    -The image size in height and width can be defined for Png imagery. You -only need to set one of these since the other will be automatically -calculated -to preserve the aspect ratio of your office domain.  If both the -height -and width are set, the width will be used as the reference dimension. -

    You can set the height and width (in pixels) for the Png images. It -is only necessary to set one of these, as the other will be calculated -using the aspect ratio of your office domain. Do not include decimal -points -after the numbers. Both default to 400. -

    -

    Png_height = 400 -
    -Png_width = 400
    -

    -

      -

    -

    PNG -Weather Element to be Displayed as an Image

    -By default, all weather elements displayed in the GFE for graphical -product -generation are displayed as a graphic, e.g., contours for scalars, wind -barbs or arrows for vectors, and bounded areas for weather. If the user -wishes to display one of the weather elements as an image, then this -entry -must be set to the parameter name of the weather element.  Only -one -weather element can be an image simultaneously. -

    If specified with the environment variable below, the weather -element -will be displayed as an image in the png. If nothing is specified here, -then all weather elements will be displayed as a graphic. For -non-surface -based elements, the format is weatherElementName_level_image. -

    -

    Png_image = 'T'
    -

    -

    -

    PNG Image Data -Smoothing -and Smooth Clipping -

    -

    Data Smoothing, and Smooth Clipping options are available for Png -images. -The Png_smoothImage indicates if the Png image displayed should be -smoothed -(1 = smoothing enabled, 0 = smoothing disabled).  Note that -smoothing -will only apply to scalar and vector images.  The Png_smoothClip -(1 -= enabled, 0= disabled) provides smoothing clipping to the edit area -mask -defined in display filter -. -

    -

    Png_smoothImage = 0 -
    -Png_smoothClip = 0 -

    -

    The following rules apply if both Png_smoothImage and Png_smoothClip -are used. -
    -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    DataType
    -
    -
    Png_smoothImage
    -
    -
    Png_smoothClip
    -
    -
    Result
    -
    -
    SCALAR/VECTOR
    -
    -
    0
    -
    -
    0
    -
    No data smoothing, no smooth clipping
    -
    SCALAR/VECTOR
    -
    -
    0
    -
    -
    1
    -
    No data smoothing, clipped to the pixel level of the display -filter (mask) indicated, uses the nearest "grid box" for the data
    -
    SCALAR/VECTOR
    -
    -
    1
    -
    -
    0
    -
    Data smoothing, clipped to the pixel level of the display -filter (mask) indicated, uses bi-linear interpolation for the data -values
    -
    SCALAR/VECTOR
    -
    -
    1
    -
    -
    1
    -
    Data smoothing, clipped to the pixel level of the display -filter (mask) indicated, uses bi-linear interpolation for the data -values
    -
    WEATHER/DISCRETE
    -
    -
    0
    -
    -
    0
    -
    No data smoothing, no smooth clipping
    -
    WEATHER/DISCRETE
    -
    -
    0
    -
    -
    1
    -
    No data smoothing, clipped to the pixel level of the display -filter (mask) indicated, uses the nearest "grid box" for the data
    -
    WEATHER/DISCRETE
    -
    -
    1
    -
    -
    0
    -
    No data smoothing, no smooth clipping
    -
    WEATHER/DISCRETE
    -
    -
    1
    -
    -
    1
    -
    No data smoothing, clipped to the pixel level of the display -filter (mask) indicated, uses the nearest "grid box" for the data
    -
    -  -
    -  -

    -

    PNG -List -of Weather Elements for Display

    -The user can specify the list of weather elements to be displayed by -specifying -the Png_parms.  This entry only applies to the ifpIMAGE program. -

    The format of each entry is a coded weather element identifier in -the -following format: -
    -"parmName_level:optType_modelName seq". For example, to display the -QPF surface field for the Official database, the entry would be: -"QPF_SFC:_Official --1" -

    -

    Png_parms = ['FzLevel_SFC:_Fcst -1', 'Sky_SFC:_Fcst -1', -'QPF_SFC:_Fcst --1']
    -

    -

      -

    -

    PNG Legend Display -

    -

    The legend that appears on the PNG image can be enabled or -disabled.  -By default it is enabled. -

    -

    This variable allows the ability to turn on/off legends for the -graphic -generation.  It applies only to graphic product generation and not -the GFE.  It defaults to 'on' if it is not specified.  Do not -include a decimal point after the number. -

    -

    Png_legend = 1
    -

    -

      -

    -

    PNG -Legend Weather -Element Name

    -By default, the weather element name placed on the legend of a PNG -image -is simply the 'SHORT'  weather element name, such as "T" for -temperature.  -The user can enable this option, which will instead use the long -descriptive -name for the weather element on the legend, such as "Temperature", or -turn -the name off completely.  An alternative form of the weather -element -name can be used if the Png_wxname_AltName entries are used in -conjunction -with this entry and this entry is set to "ALT".  If "ALT" is -specified, -and the corresponding Png_wxnamd_AltName is not found, then the short -weather -element name is used. -

    The applicable legend weather element name modes are 'SHORT' for -weather -element name, -
    -LONG for weather element descriptive name,  ALT for alternate, -and OFF for no name. -

    -

    Png_descriptiveWeName = 'SHORT'
    -

    -

      -

    -

    Png -Alternate -Weather Element Name

    -The Png Alternative Weather Element Name is used to define your own -weather -element name legend for the Png images.  For this feature to be -enabled, -you must set the Png_descriptiveName to ALT. -

    These entries define the weather element name to be displayed based -on the weather element name (e.g., "T").  The string format is -Png_WxElem_AltName. -(For non surface-based weather elements, the format is -Png_WxElem_Level_AltName.) For -example, Png_MaxT_AltName = "Highs" will display "Highs" for the Wx -element -name rather than "MaxT" or "Maximum Temperature".  If it is not -defined -and 'ALT' is set, then the weather element name will be the 'SHORT' -name. -

    -

    Png_MaxT_AltName = "Highs"
    -

    -

      -

    -

    PNG Legend Formats

    -The legend formats (for both Zulu mode and local time mode) may be -controlled -through the configuration file. The general ordering of each legend -is:  -duration + startTime + endTime.  Any of these may be disabled or -enabled -through the use of the format strings.  By setting a format string -to "", that value is not output.  There are separate entries for -the -Zulu and Local Time legends.  The formatting entries consist of a -keyword prefixed with an '%'.  The software will substitute the -appropriate -value in place of the %keyword in the format string.  To add extra -characters, such as spaces or some text (e.g., "to"), simply add those -characters to the format.    The following list -specifies -the acceptable formatting entries that are allowed: -
    -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    %aLocale's abbreviated weekday name.
    %ALocale's full weekday name.
    %bLocale's abbreviated month name.
    %BLocale's full month name.
    %c Locale's appropriate date and time representation.
    %C The century number (the year divided by 100 and truncated to -an integer) -as a   decimal number [00-99].
    %d Day of the month as a decimal number [01,31].
    %DEquivalent to the directive string %m/%d/%y.
    %e Day of the month as a decimal number [1,31], a single digit -is preceded -by a space.
    %h Equivalent to %b.
    %H Hour (24-hour clock) as a decimal number [00,23].
    %I Hour (12-hour clock) as a decimal number [01,12].
    %j Day of the year as a decimal number [001,366].
    %m Month as a decimal number [01,12].
    %M Minute as a decimal number [00,59].
    %n The New-line character.
    %p Locale's equivalent of either AM or PM.
    %r The time in AM and PM notation; in the POSIX locale this is -equivalent -to %I:%M:%S %p.
    %R The time in 24 hour notation (%H:%M).
    %S Second as a decimal number [00,61].
    %t The Tab character.
    %T The time in hours, minutes, and seconds (%H:%M:%S).
    %u The weekday as a decimal number [1(Monday),7].
    %U Week number of the year (Sunday as the first day of the week) -as a -decimal number [00,53].  All days in a new year preceding the -first -Sunday are considered to be in week 0.
    %V The week number of the year (Monday as the first day of the -week) as -a decimal number [01,53].  If the week containing January 1st has -four or more days in the new  year, then it is considered week 1; -otherwise, it is week 53 of the previous year, and the next week is -week -1.
    %w Weekday as a decimal number [0(Sunday),6].
    %W Week number of the year (Monday as the first day of the week) -as a -decimal number [00,53].  All days in a new  year preceding -the -first Monday are considered to be in week 0.
    %x Locale's appropriate date representation.
    %X Locale's appropriate time representation.
    %y Year without century as a decimal number [00,99].
    %Y Year with century as a decimal number.
    %Z Time zone name (or by no characters if no time zone exists).
    %% The percent (%) character.
    -

    In addition to the above list, there are special entries that -are substituted: [UNITS] can be substituted for the units for the -weather -element. Be sure to include the braces. For example, if you wanted the -local time string to be displayed like -Maximum Temperature  (F)  -12 hours Ending Wed Mar 3, 2000 6:00 PM MST, then the format -strings -would be set up to be: -

    -

    Png_legendFormat_LT_dur = "([UNITS]) %H hours " -
    -Png_legendFormat_LT_start = "" -
    -Png_legendFormat_LT_end = "Ending %a %b %d, %Y  %I:%M %p -%Z" -

    -

    If the duration, start time, or ending time is not desired, then the -entry should be set to "".  Note that there are separate entries -for -Zulu and LocalTime.  The duration formats -
    -can use the %H (hours) %M (minutes) formats. -

    -

    Png_legendFormat_Zulu_dur = "" -
    -Png_legendFormat_Zulu_start = "%b %d %H%MZ to " -
    -Png_legendFormat_Zulu_end = "%b %d %H%MZ" -
    -Png_legendFormat_LT_dur = "" -
    -Png_legendFormat_LT_start = "%b %d %I:%M %p %Z" -
    -Png_legendFormat_LT_end = "%b %d %I:%M %p %Z" -

    -

    If Png_snapshotTime is enabled, then -the single time depicted in the legend is the calculated snapshot time -(typically based on Png_interval and Png_intervalOffset).  -In this case, there are other legend format configuration file entries -that are used: -

    -

    Png_legendFormat_LT_snapshot = "%b %d %I:%M %p %Z" -
    -Png_legendFormat_Zulu_snapshot = "%b %d %H%MZ" -
    -  -

    -

    Png Filename Prefix

    -By default, the naming of the png files are yyyymmdd_hhmm.png.   -A prefix can be added to the name if desired using the -Png_filenamePrefix -item.  For example, if you wanted the filenames to be of a form -Wind_Sky_yyyymmdd_hhmm.png, -you would set the following string in the gfe configuration file: -

    Png_filenamePrefix = 'Wind_Sky_' -

    -

    The date/time string can also be changed to a base time and relative -offset from the absolute time.  See the ifpIMAGE -User's Manual section on date/time -string configuration. -
    -  -

    -

    Png Filename Format

    -By default, the naming of the png files are yyyymmdd_hhmm.png.  -The -date-time string may be changed to a user-specified format by using the -Png_baseTimeFormat in the gfe configuration file.  The possible -set -of values are those defined above in the legend format section.  -For -example, if you wanted the filename format to only include the day and -hour, then you could set the entry to: -

    Png_baseTimeFormat = "%d%H" -

    -

    If the time of the file is 20010509_1800, then the filename would be -0918.png.  See the ifpIMAGE User's Manual -section on date/time -string -configuration. -
    -  -

    -

    Png Interval and -IntervalOffset

    -Images can be created at regular at intervals by setting an interval -option -in the ipfIMAGE configuration file.   The interval starting -time -can be varied by setting an offset. -

    By default, png images are generated for each and every possible -change -in the generated grids.  For example, if you are generating a grid -for T and WaveHeight, and the T is a one hour grid and the WaveHeight a -6 hour grid, that starts at the same time (e.g., 12z), two different -images -will be generated.  The first will have T and WaveHeight together -and will be time stamped to 12z; the second will just have WaveHeight -and -will be time stamped to 13z.  This is identical behavior to -running -the GFE with multiple visible weather elements. -

    -

    You can override this behavior for the creation of the Png imagery -by -specifying an interval for which to generate imagery.  The -interval -is specified in hours.  Setting the value to 6 will generate grids -at 00z, 06z, 12z, and 18z, assuming there is data available to generate -the imagery.  The configuration line to set the generation to -every -6 hours is shown below: -

    -

    Png_interval = 6 -

    -

    To generate images that begin at a starting time other than 00z, you -can specify an interval offset using a configuration -option.   -For example, specifying an interval offset of 1 and an interval of 6 -(i.e., -Png_interval = 6) will generate images at 01z,  07z, 13z and -19z.   -The default for Png_intervalOffset is 0. -

    -

    Png_intervalOffset = 1 -
    -  -

    -

    Png_fitToDataArea

    -The Png_fitToDataArea works in conjunction with a fit -to data algorithm.  If the user has specified a "All Grids -over -Area", or "Single Grid over Area", then the ifpIMAGE program needs to -know -which area is to be used.  For the GFE, it is always the active -edit -area.  For the ifpIMAGE, the concept of an active edit area does -not -exist.  The format of the entry is simply the name of the edit -area. -

    Png_fitToDataArea = "BOU" -
    -  -

    -

    Png Logo and -Logo String

    -The ifpIMAGE program can automatically add to the bottom of each image -the NOAA and NWS logos.  The Png_logo entry enables the logo and -the -Png_logoString entry defines the text to appear between the two logos. -

    If Png_logo is set to 1, then a bar containing the noaa and nws -logos -will be inserted at the bottom of the image. -

    -

    Png_logo = 0 -

    -

    If Png_logo is enabled, then Png_logoString can be set to a string -you -would -
    -like to have in the "logo bar".  The string will be centered in -the bar. -

    -

    Png_logoString = "" -
    -  -

    -

    Png Legend Language

    -The Png_legendLanguage only affects the legends for the Png -imagery.  -If english is desired, then do not use this option.  If an -alternate -legend language is desired, then enter that here. Acceptable values -those -defined in the locale command (part of Unix). -
    -Acceptable languages are "spanish" and "french". -

    Png_legendLanguage = "spanish" -
    -  -

    -

    Png Color Bar Removal

    -Setting Png_omitColorBar to 1, will omit the color bar in ifpImage -

    Png_omitColorBar = 0 -
    -  -

    -

    Png Zoom Disable

    -Setting Png_wholeDomain to 1 or yes, will disable the automatic zoom -that -occurs when your data is clipped to a smaller region.  The default -is zoom to the clipped data region. -

    Png_wholeDomain = 0 -
    -  -

    -

    Png History Mask

    -Setting Png_historyMask to 1 or yes, will enables the display mask to -follow -the information contained in the Grid Data History of each grid.  -When set to 1, the grids will automatically be masked by the site -information -and the background color will be shown for those areas without data. -

    Png_historyMask = 1 -
    -

    -
    -

     

    -
    -

    Png Info Files

    -Setting Png_infoFiles to 1 or yes, will enable the creation of the PNG -info files along with the image PNG files.  Setting Png_infoFiles -to 0 or no will disable the creation of these files.  The default -is to create the Png info files. -
    -  -

    Png_infoFiles = 1 -
    -  -

    -

    Png Snapshot Time

    -Setting Png_snapshotTime to 1, will change the time displayed on the -PNG -images for each grid from the valid time of the grid, to the snapshot -time.  -You can use the legend formats to -control -how the time is formatted.  The snapshot time option is normally -used -with the Png_interval and Png_intervalOffset -options.  Those options create images on a regular basis and thus -are good candidates for displaying the time of the image, rather than -the -valid time of the grid. -
    -  -

    Png_snapshotTime = 1 -
    -  -

    -

    Png File Type

    -Defines the type of files that ifpIMAGE will produce. The default is -png.  -But you may also choose from the following list.  Note that these -are case sensitive and only png, svg, and gif have been really tested. -[ 'png', 'pnm', 'gif', 'svg', 'ai', 'ps', 'cgm', 'fig', 'pcl', 'hpgl', -'regis','tek', 'meta' ] -

    Png_fileType = 'png' -

    -
    - -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/gfeConfig_Pref.html b/cave/com.raytheon.viz.gfe/help/gfeConfig_Pref.html deleted file mode 100644 index 5827127850..0000000000 --- a/cave/com.raytheon.viz.gfe/help/gfeConfig_Pref.html +++ /dev/null @@ -1,423 +0,0 @@ - - - - - - gfeConfig - Preference Defaults - - -
    -
    -

    GFE/ifpIMAGE Configuration File
    -Preference Defaults

    -There are many preference defaults that can be set from the gfe -configuration file.  Many of these may also be set through the GFE -GUI too.
    -
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    GFE Configuration Item
    -
    -
    Applicable to GFE
    -
    -
    Applicable to ifpIMAGE
    -
    -
    Notes
    -
    Image On ActiveYESNO
    -
    Time Scale Lines -VisibilityYESNO
    -
    Editor Time Lines -VisibilityYESNO
    -
    Split Boundary VisibilityYESNO
    -
    Temporal Editor OverlayYESNO
    -
    Temporal -Editor Absolute/Relative -ModeYESNO
    -
    Temporal -Editor Statistics -ModeYESNO
    -
    Temporal -Editor Statistics -Mode ScalesYESNO
    -
    Wind Edit ModeYESNO
    -
    Weather Combine/Replace -ModeYESNO
    -
    Missing Data ModeYESNO
    -
    Show Warning DialogsYESNO
    -
    Default Contour to -Grid AlgorithmYESNO
    -
    Contour Sub-sampleYESNO
    -
    Select Grids When SteppingYESNO
    -
    Time Scale Displayed -PeriodsYESNO
    -
    Contour -Tool Representative Color
    -
    YES
    -
    NO
    -

    -
    Move/Copy, -Select Area, Contour Drawing Color
    -
    YES
    -
    NO
    -

    -
    -
    -
    -
    -
    -


    -

    -

    Image On Active

    -Default setting for changing the active grid to an image-type display. -This occurs when "Edit Grid" is chosen from the Grid Manager or by -setting -a parameter active from the legend. -

    ImageOnActiveSE = yes
    -
    -  -

    -

    Time Scale -Lines Visibility

    -Default visibility setting for showing the time scale lines in the Grid -Manager and Temporal Editor. -

    TimeScaleLines = yes
    -

    -

      -

    -

    Editor Time -Lines -Visibility

    -Default visibility setting for showing the editor time lines in the -Grid -Manager and Temporal Editor. The editor time line is always on for the -Time Scale. -

    EditorTimeLines = yes
    -

    -

      -

    -

    Split -Boundary Visibility

    -Default visibility setting for showing the split boundary or time -constraints -in the Grid Manager and Temporal Editor for mutable parameters. -

    SplitBoundaryDisplay = yes
    -

    -

      -

    -

    Temporal Editor -Overlay

    -Default setting for combining like parameters (same units) in the -temporal -editor when loading parameters. -

    TemporalEditorOverlay = yes
    -

    -

      -

    -

    Temporal -Editor Absolute/Relative Mode

    -Default setting for temporal editor edits. Choices are absolute mode or -relative mode which is defined by "yes" or "no". -

    TemporalEditorAbsoluteEditMode = no
    -

    -

      -

    - -

    Temporal -Editor Statistics Mode

    -Initial statistics mode for temporal editor range statistics dialog. -Choices are "ABSOLUTE", # "MODERATED", or "STANDARD_DEVIATION". -

    TemporalEditorStatisticsMode = "ABSOLUTE"
    -

    -

      -

    -

    Temporal -Editor Statistics Mode Scales

    -Initial minimum and maximum values for scales on temporal editor range -statistics dialog in moderated and stadard deviation operation modes -(dialog is not shown in absolute mode). Do NOT include a decimal point -for moderated mode values, you MUST include a decimal point for standard -deviation values. -

    TemporalEditorStatisticsModeModeratedMin = 15
    -TemporalEditorStatisticsModeModeratedMax = 15
    -TemporalEditorStatisticsModeStandardDeviationMin = 1.0
    -TemporalEditorStatisticsModeStandardDeviationMax = 1.0

    -

    -

      -

    - -

    Wind Edit Mode

    -Default setting for editing components of vector parameters. Choices -are -MAG, DIR, or BOTH. -

    WindEditMode = "BOTH"
    -

    -

      -

    -

    Weather -Combine/Replace -Mode

    -Default setting for automatic combining of existing weather/discrete -and new weather/discrete -when editing. For example, if the setting is yes and existing weather -is -Rain, then setting the value to Snow will result in a Rain/Snow mix. -For -discrete, if you setting is yes and the existing discrete value is -HiWndWRN, then setting the value to WntStmWRN will result in -values of HiWndWRN with WntStmWRN. -

    WeatherDiscreteCombineMode = no
    -

    -

      -

    -

    Missing Data Mode

    -Default setting for Missing Data Mode. Possible values are: 'Stop' -execution -of a smart tool if there is missing data and 'Skip' grids for which -there -is missing data. A User Alert message will report which grids were -skipped. -
    -A 'Create' instructs the GFE to supply the missing data grids. A User -Alert message will report which grids were created. -

    MissingDataMode = "Stop"
    -

    -

      -

    -

    Show Warning -Dialogs

    -Default setting for showing the dialog box when the user attempts to -edit -grids when a selection time range is active. Editing grids when a -selection -time range is active may cause multiple grids to be edited. -

    ShowTimeRangeWarning = yes -

    -

    Default setting for showing the dialog box when the user attempts to -edit grids without an edit area being set. The behavior is to edit the -entire domain. -

    -

    ShowEmptyEditAreaWarning = yes
    -

    -

      -

    -

    Default -Contour -to Grid Algorithm

    -Specifies the default contour to grid algorithm. Can be set to "Contour -Analyzer" or "Internal SIRS Server". -

    ContourServer = "Contour Analyzer"
    -

    -

      -

    - -

    Contour Sub-sample

    -The Contour Analyzer algorithm can run over a sub-sampled grid -to improve performance. This is usually ok since the contour tool -is mostly used where there is not much detail due to topography. -The value of ContourSubSample is used to divide the x and y dimensions -of the original grid to get the dimensions of the sub-sampled grid. -So, setting ContourSubSample to 4 would cause the Contour Analyzer to -reduce a 400x400 grid to a 100x100 grid for contouring purposes. -This can greatly speed up the algorithm. Setting ContourSubSample to -1 will cause no reduction. -The default value is 4. If ContourSubSample is set to a value less than -or equal to 0 then it will go back to 4. If it is set to a value large -enough to make the sub-sampled grid have an x or y dimension less than 5 -then it will be reduced so that the minimum dimension for x or y will be 5. -

    ContourSubSample = 4
    -

    -

      -

    - -

    Select Grids -When Stepping

    -Specifies whether the selection time range will track the spatial -editor -time when time stepping.  Time stepping is accomplished using the -Toolbar -step forward and back buttons or the keyboard -shortcuts.  -When this preference is enabled (i.e., yes), the selection time range -will -be set to: -
  • the one hour period surrounding the spatial editor -time, if there is no -active weather element, or
  • -
  • the time constraint box for the active weather element, if there -is no -grid that intersects the spatial editor time, or
  • -
  • the valid time of the grid for the active weather element that -intersects -the spatial editor time.
  • -
    -In addition, all weather elements except the active weather element -will -be deselected. -

    When this preference is disabled (i.e., no), the selection time -range, -and the set of selected weather elements will not change when using the -GFE -toolbar stepping buttons and keyboard -shortcuts. -

    -

    SelectGridsWhenStepping = no
    -

    -

      -

    -

    Time Scale -Displayed -Periods

    -Specifies the list of named selection time ranges  that appear on -the Time Scale.  The user may change the list through the -GFE->Viewing -Preferences->Time Scale Periods... menu entry.  The definitions -of -the time scale periods may also be changed through the GFE->Define -Time -Ranges menu. -

    TimeScalePeriods = ['Today', 'Tomorrow', 'Tomorrow Night', -'Day -3', -
    -  'Day 4', 'Day 5', 'Day 6', 'Day 7']
    -
    -

    -

    Contour Tool -Representative Color
    -

    -Specifies the display color for the contour tool's contour -display.  Default is "White".
    -

    ContourToolDrawing_color = "White"

    -
    -
    -
    -

    Move/Copy, Select Area, Contour -Drawing Color

    -Specifies the display color for the drawing aspect for the move/copy, -select area, and contour drawing tools.  Default is "White".
    -

    Drawing_color = "White"

    -
    - -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/gfeConfig_ProdGen.html b/cave/com.raytheon.viz.gfe/help/gfeConfig_ProdGen.html deleted file mode 100644 index dd60aefc07..0000000000 --- a/cave/com.raytheon.viz.gfe/help/gfeConfig_ProdGen.html +++ /dev/null @@ -1,326 +0,0 @@ - - - - - - gfeConfig - Product Generation Scripts - - -
    -
    -

    GFE/ifpIMAGE Configuration File
    -Product Generation Scripts

    -Product generation scripts are defined in this portion of the -configuration file. These entries define the contents of the product -generation -menu that is available from the Products pull-down menu.   -This -area can be used for much more than the product generation -programs.  -It is basically a list of menu entry items and scripts to be -executed.  -There is a set of "known" keywords which are replaced by their -appropriate -value.  For example, {host} is replaced with the server host name. -

    It is expected that sites will override the product generation -scripts -using a local gfe configuration override.  Refer to the gfe -configuration guide for details on how to override the gfe -configuration -file.  The standard supplied gfe configuration file contains -examples -of product generation, and sites will normally want to define entries -specific -to their site.

    -
    -
      -
    -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    GFE Configuration Item
    -
    -
    Applicable to GFE
    -
    -
    Applicable to ifpIMAGE
    -
    -
    Notes
    -
    FormatYESNO
    -
    Automatic VariablesYESNO
    -
    DialogsYESNO
    -
    Named VariablesYESNO
    -
    Radio and Check -Button VariablesYESNO
    -
    Edit Areas and GroupsYESNO
    -
    Multiple Command Line -ScriptsYESNO
    -
    ExamplesYESNO
    -
    Product Generation -Group -OrderingYESNO
    -
    -
    -
    -
    -


    -

    -

    Format

    -Each script entry is a text string of the form: "<entry -name>: -" + "<command line script> & " where: <Entry -Name> will appear in the Product Generation menu, <command -line script> is the command line that will be submitted -when the -script is chosen.
    -  -

    Automatic -Variables

    -The following variables can be used in scripts and the GFE will fill in -the appropriate information before executing the script: -
  • {host} - the database server -hostname or IP -address
  • -
  • {port} - the database server RPC port number
  • -
  • {site} - the site identifier, e.g., BOU
  • -
  • {productDB} - product database.  This is -the -official -database if it exists. Otherwise it is the mutable (Fcst) database.
  • -
  • {SEstart} - start of the spatial editor -time.  Note -all times are in the format of yyyymmdd_hhmm.
  • -
  • {SEend} - always {SEstart} plus 1 second.
  • -
  • {SelectedStart} - start of the selected time -range
  • -
  • {SelectedEnd} - end of the selected time range
  • -
  • {time} - current local time in the format of -yyyymmdd_hhmm
  • -
  • {ztime} - current zulu time in the format of -yyyymmdd_hhmm
  • -
  • {module: <module name>} - the correct -path -of the module -will be substituted in the command line.  The module must have a -.py -extension.
  • -
  • {home} - is replaced with the top-level -GFESuite -directory path. It is important to use this variable rather than -hard-coding -values. The scripts may be run either locally or remotely, and the -directory -structure may differ.
  • -
  • {prddir} - is replaced with the GFESuite -directory path to the products directory. It is important to use this -variable rather than hard-coding -values. The scripts may be run either locally or remotely, and the -directory -structure may differ.
  • -
    -

    Dialogs

    -If the following variables are used in a script, a dialog will appear -for -the user to make selections from a simple GUI before the script is -executed: -
  • {parmsMutable} - list of weather -elements in the -Forecast -database is displayed for selection
  • -
  • {parms} - list of weather elements is -displayed -for selection
  • -
  • {refsets} - list of named edit areas is -displayed for selection
  • -
  • {maps} - list of known map identifiers is -displayed for -selection
  • -
  • {databases} - list of known databases is -displayed for -selection
  • -
  • {output file} - allows user to enter an -output -filename
  • -
  • {output directory} - allows user to enter an -output directory -name
  • -
  • {startTime} - allows the user to enter a -starting time
  • -
  • {endTime} - allows the user to enter an -ending -time
  • -
    -

    Named Variables

    -To have the user prompted for a named variable, use the following in -your -script: -
    -
    {entry: <name of variable>: <default -value>}
    -
    -For example, to have the user prompted for "width" use:  {entry: -width: 350} in your script.
    -  -

    Radio -and Check -Button Variables

    -To have the user prompted for a list of radiobutton variables, use: -

    {entryButtons: <name of variable>: <list of values -separated -by commas>}
    -{entryButtons: ReportType: GeneralGIF,CustomizedGIF}

    -

    To have the user prompted for a list of checkbutton variables, -use:

    -

    {entryChecks: <name of variable>: <list of values -separated -by commas>}
    -{entryChecks: EditAreas: Area1,Area2,Area3}

    -

    Edit Areas and -Groups

    -If the name of the entryButtons or entryChecks is "EditAreas", the -system -will accept edit area OR edit area group names. The system will check -for -groups and will automatically expand them to the appropriate areas. -

    {entryChecks: EditAreas: Group1,Group2,Area1,Area2,Area3} -
    -{entryButtons: EditAreas: Group1,Group2,Area1}

    -

    Multiple -Command -Line Scripts

    -Scripts with Multiple Command Lines are allowed. To string multiple -command -lines together, use the following format for your command line script: -

    "csh -c (<command line 1>; <command line 2>; -<command -line 3>) &"
    -

    -


    -

    -

    Examples

    -The following section is an excerpt from the gfe configuration file -showing -various combinations of product generation scripts.  Product -Generation -Scripts are executed via the Product Generation menu on the GFE. Please -define TextProducts through the DefineTextProducts dialog (Product -Generation -Menu) within the GFE. -

    Scripts = [
    -    "Png Images...:" +
    -    "ifpIMAGE -c {entry:ConfigFile:gfeConfig} --o " + GFESUITE_IMAGE + " &",

    -

    ## to view the various ifpIMAGE -option switches

    -

        "Send Images to Website:" +
    -    "<your command line goes here to run -your -script",

    -

        "General Ascii Grids...: " + "ifpAG -h -{host} --r {port} -o " +
    -     GFESUITE_AG+ "/{time}.ag -d -{productDB} -&",

    -

        "Customized Ascii Grids...:" +
    -    "ifpAG -h {host} -r {port} -o " + -GFESUITE_AG -+ "/{time}.cag -d
    -    {productDB} " +
    -    "-p {parmsMutable} -s {SelectedStart} -e -{SelectedEnd} & ",

    -

        "Customized Grib...: " +
    -    "runIFPGrib -d {productDB} -o " + -GFESUITE_GRIB -+
    -    "/{entry: OutputFile: out.grib} " +
    -    "-w {parmsMutable} -s {SelectedStart} -e -{SelectedEnd} & "]

    -

    Product -Generation Group Ordering

    -

    To provide an order for the products generated , list an order -preference -in the list variable 'ProductList'.  Any products not listed in -'ProductList', -will be listed at the bottom of the Product Generation menu in -alphabetical -order.

    -

    ProductList = ["Png Images", "Ascii Grids", "YourProducts"] -
    -

    -
    - -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/gfeConfig_Samp.html b/cave/com.raytheon.viz.gfe/help/gfeConfig_Samp.html deleted file mode 100644 index 0776941ca5..0000000000 --- a/cave/com.raytheon.viz.gfe/help/gfeConfig_Samp.html +++ /dev/null @@ -1,424 +0,0 @@ - - - - - - gfeConfig - Sample and Legend Colors - - -
    -
    -

    GFE/ifpIMAGE Configuration File
    -Sample and Legend Colors

    -

    -


    -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    GFE Configuration Item
    -
    -
    Applicable to GFE
    -
    -
    Applicable to ifpIMAGE
    -
    -
    Notes
    -
    Alternative Sample ColorYESYES
    -
    Alternative Legend ColorYESYES
    -
    Sample -Latitude/Longitude -and Plus Sign ColorYESYES
    -
    Image Legend ColorYESYES
    -
    Show Sample ShadowsYESYES
    -
    Shadow Sample ColorYESYES
    -
    Sample Label OffsetsYESYES
    -
    Limiting -Samples -to Specific Weather ElementsYESYESNot particularily useful for the GFE. Intended mainly with -the ifpIMAGE -program.
    Using Descriptive Names -for Wx StringsYESYESNot particularily useful for the GFE. Intended mainly with -the ifpIMAGE -program.
    Show ISC Update TimeYESNOApplicable to Intersite Coordination mode.
    Show ISC Site IDYESNOApplicable to Intersite Coordination mode.
    Enable ISC MarkersYESNOApplicable to Intersite Coordination mode
    Show ISC Update Time MarkerYESNOApplicable to Intersite Coordination mode
    Show ISC Site ID MarkerYESNOApplicable to Intersite Coordination mode
    Show ISC Official -Symbol MarkerYESNOApplicable to Intersite Coordination mode
    ISC Official SymbolYESNOApplicable to Intersite Coordination mode
    Color Bar Labels/TickMark ColorsYESYES
    -
    Color Bar Additional Weather -IdentifierYESYES
    -
    -

    -
    -
    -
    -
    -


    -

    -

    Alternative -Sample Color

    -Alternative sample color. This is used primarily for ifpIMAGE when you -want a specific color for the sample, rather than the default which is -the graphic color.   Format is parmname_Sample_color = -"color". -Note that this applies only if the data is being displayed as a -graphic.  -Specification of a parm that is not SFC (surface-based)  is done -with -this format:  parmname_level_Sample_color. -


    -T_Sample_color = "#ff0672"
    -

    -

    Alternative -Legend Color

    -Alternative legend color. This is used primarily for ifpIMAGE when you -want a specific color for the legend, rather than the default which is -the graphic color.   Format is parmname_Legend_color = -"color". -Note that this applies only if the data is being displayed as a -graphic. -Specification of a parm that is not SFC (surface-based)  is done -with -this format:  parmname_level_Legend_color. -

    T_Legend_color = "#ff0672"
    -
    -

    -

    Sample -Latitude/Longitude and Plus Sign Color

    -Sample LatLon and + Color. This affects the color of the '+' drawing, -plus -the color of the latitude/longitude samples on the spatial editor. -

    SampleLLPlus_color = "white"
    -

    -

      -

    -

    Image Legend Color

    -Image Legend color. This affects the color of the legend when a weather -element is displayed as an image.    This also affects -the -sample color for weather element displayed as an image. -

    ImageLegend_color = "white"
    -

    -

      -

    -

    Sample Shadows

    -Sample Shadows. The samples can have a shadow character written in -black -offset from the sample text.  This improves constrast when the -main -sample color is light and the background color (e.g., image) is also -fairly -light.  Acceptable entries are either yes or no. -

    ShowSampleShadows = yes
    -

    -

      -

    -

    Sample Shadow Color

    -Sample Shadow Color.  You can control the color of the shadow on -samples.  -It defaults to "black".  Setting it to a different color may -improve -the contrast between the main sample color and the background -color.  -The color may be any valid color string. -

    SampleShadow_color = "#000000" -
    -  -
    -  -

    -

    Sample Label Offsets

    -SampleLabelXOffset and SampleLabelYOffset are the number of pixes you -wish -to move sample labels relative to their "normal" position. -

    SampleLabelXOffset = 0 -
    -SampleLabelYOffset = 0
    -

    -

      -

    -

    Limiting -Samples to Specific Weather Elements

    -Samples may be limited to just certain weather elements.  This -feature -is normally only used in conjunction with the creation of PNG imagery, -but will work on the GFE. -

    Limiting Samples to Specific Weather Elements controls the weather -elements -that will be displayed as samples. This feature is normally only used -in -conjunction with the creation of PNG imagery. If not specified, then -all -visible weather elements will have a sample value.  Specification -of a parm that is not SFC (surface-based)  is done with this -format:  parmname_level. -

    -

    SampleParms = ['T', 'Wind']
    -

    -

      -

    -

    Using -Descriptive Names -for Wx Strings

    -Using descriptive names instead of the pretty Wx strings for samples. -This -set of parallel lists translate a pretty Wx string into a more -descriptive -name for the sample labels. -

    AltWxSampleLabels_prettyWx = ['Sct RW-', 'Sct SW-'] -
    -AltWxSampleLabels_label = ['Rain Showers', 'Snow Showers'] -
    -

    -

      -

    -

    Show ISC Update Time

    -The samples can show the ISC Update Time if in ISC mode. Acceptable -entries -are yes and no. -

    ShowISCUpdateTime = yes
    -

    -

      -

    -

    Show ISC Site ID

    -The samples can show the ISC Site Id if in ISC mode. Acceptable entries -are yes and no. -

    ShowISCSiteID = yes -
    -  -

    -

    Enable ISC Markers

    -The ISC Markers may be enabled/disabled on startup.  ISC Markers -are -only shown if ISC mode or an ISC grid is displayed.  Acceptable -entries -are yes and no. -

    ShowISCMarkers = yes
    -

    -


    -

    -

    Show ISC -Update -Time Marker -

    -

    The ISC Update Time Marker can show the ISC update time if in ISC -mode.  -This update time marker is really just a sample without the data -point.  -Acceptable entries are yes and no. -

    -

    ShowISCUpdateTimeMarker = yes
    -

    -

      -

    -

    Show ISC Site -ID -Marker -

    -

    The ISC Site ID Marker can show the ISC Site ID marker if in ISC -mode.  -This site ID marker is really just a sample without the data -point.  -Acceptable entries are yes and no. -

    -

    ShowISCSiteIDMarker = yes
    -

    -

      -

    -

    Show -ISC -Official Symbol Marker -

    -

    The ISC Official Symbol Marker can show the "P" symbol if in ISC -mode.  -This official symbol marker is really just a sample without the data -point.  -Acceptable entries are yes and no. -

    -

    ShowISCOfficialSymbolMarker = yes
    -

    -

      -

    -

    ISC Official -Symbol -

    -

    The samples can show the "P" symbol for the official database data -or -not.  Data coming from the Forecast work database will not have -any -characters shown.  Acceptable entries are yes and no. -

    -

    ShowISCOfficialSymbol = yes
    -

    -

      -

    -

    Color Bar -Text/Tick Colors

    -Controls the tick, foreground text colors for the labels, and the -foreground/background -text colors for the pickup value. There is a special set of colors for -the Wx (WEATHER) pickup values. -

    SEColorBar_tickColor = "white" -
    -SEColorBar_fgTextColor = "white" -
    -SEColorBar_fgPickUpColor = "white" -
    -SEColorBar_bgPickUpColor = "black" -
    -SEColorBar_fgWxPickUpColor = "white" -
    -SEColorBar_bgWxPickUpColor = "purple"
    -

    -

      -

    -

    Color Bar Additional -Weather Identifiers

    -By default, the color bar values that appear for the Wx weather -parameter -consist only of the types that appear in the current grid.  For -example, -if the grid has TRW-, RW- and No Weather, but not snow, then the color -bar will have entries for TRW-, RW-, and No Weather, but not -snow.  -This behavior can be changed by using the Wx_AdditionalColorBarLabels -entry.  -This entry contains a list of Wx ugly strings to always appear in the -color -bar. -

    Wx_AdditionalColorBarLabels = -["Sct:SW:-:<NoVis>:<NoAttr>"] -

    -

    The same technique may also be applied to DISCRETE type elements, by -specifying the labels.  For example, for the Discrete Highlights -grid: -

    -

    Highlights_AdditionalColorBarLabels = ["WntrSTMWRN"] -

    -

    The parmname may be written as parmname_level for those weather -elements -that are not surface-based.
    -

    -
    -

     

    - -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/gfeConfig_StartUp.html b/cave/com.raytheon.viz.gfe/help/gfeConfig_StartUp.html deleted file mode 100644 index c9162f1843..0000000000 --- a/cave/com.raytheon.viz.gfe/help/gfeConfig_StartUp.html +++ /dev/null @@ -1,245 +0,0 @@ - - - - - - gfeConfig - Initial GFE Startup - - -
    -

    GFE/ifpIMAGE Configuration File
    -Initial GFE Startup Weather Elements, Samples, and Edit Action -Lists -and Keyboard Shortcuts Configuration

    -
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    GFE Configuration Item
    -
    -
    Applicable to GFE
    -
    -
    Applicable to ifpIMAGE
    -
    -
    Notes
    -
    Default -Weather -Element Load (Default Group)YESYESThis is the primary mechanism  for defining the weather -elements -for ifpIMAGE 
    Weather Element Group -OrderingYESNO
    -
    Default Sample SetsYESYESDefines the initial set of samples to be displayed.
    Edit Actions on PopUpYESNO
    -
    Keyboard ShortcutsYESNO
    -
    Grid Manager Edit ActionsYESNO
    -
    Edit Area GroupsYESNO
    -
    -
    -
    -

    Default -Weather Element Load (Default Group)

    -The DefaultGroup item names the weather element group that will be -attempted -to be loaded when starting the GFE.  A weather element group -contains -a listing of weather elements and their databases.  If you would -like -a different group to be initially loaded you have two options. You can -change the definition of the default group by loading a desired set of -weather elements in the GFE and then saving the group as that specified -in the configuration file.  You can also create a new group -through -the weather element load dialog in the GFE and save it under a -different -name and then change the DefaultGroup item. -

    DefaultGroup = "Public"

    -


    -

    -

    Weather -Element -Group Ordering

    -

    Provides an order for the weather elements for the group -menu.  -The user may list an order preference in the list variable -'WEList'.   -Any elements not listed in 'WEList', will be listed at the bottom of -the -weather element group menu in alphabetical order.

    -

    WEList = ["FireWx", "Gweight", "Public", "Temps"]
    -

    -

      -
    -

    -

    Default Sample -Sets

    -The DefaultSamples item defines the initial set of sample sets that are -displayed when starting the GFE.  Create your sample sets through -the Maps->Samples menu and store them under a unique name.  -Change -the entry in the gfe configuration file to identify that sample -set.  -More than one sample set can be initially loaded if desired by listing -each entry separated by a comma. -

    DefaultSamples = ['DefaultSamples']
    -

    -

     

    -

    Edit Actions on -PopUp

    -This item specifies whether all Smart Tools (screened by the active -weather -element) will appear on the Spatial Editor button-3 popup menu.  -All -smart tools (screened by active element) will appear if -AllEditActionsOnPopUp -= yes.  If set to 'no', a list of smart tools (screened by active -element) must be specified to appear on the Spatial Editor button-3 -popup -menu. -

    AllEditActionsOnPopUp = yes

    -

    AllEditActionsOnPopUP = no
    -PopUpEditActions = -["Assign_Value","AdjustValue_Down","AdjustValue_Up","Smooth"]
    -

    -

     

    -

    Keyboard Shortcuts

    -This item keyboard shortcuts. You are allowed up to 200 -shortcuts.  -IMPORTANT:  You should test your shortcuts on your system as many -keys are already bound by the system.  For example, F10 is bound -by some Tk widgets to bring up menus. Please note that AWIPS2 replaces -the KP_ syntax with the NUMPAD_ syntax, i.e. KP_Add in AWIPS1 becomes -NUMPAD_ADD in AWIPS2. -

    Each shortcut is defined by a list with entries:

    -
  • Shortcut key
  • -
  • State of ShortCut key
  • -
  • None
  • -
  • Ctl  (control key)
  • -
  • Alt  (alt key)
  • -
  • Shift (shift key)
  • -
    -
  • Action type:
  • -
  • EditTool
  • -
  • Sample
  • -
  • Pencil
  • -
  • Contour
  • -
  • MoveCopy
  • -
  • DrawEditArea
  • -
    -
  • SmartTool - to execute a smart tool
    -
  • -
  • Procedure - to run a procedure
    -
  • -
  • Toggle
  • -
  • ISC   - to toggle ISC -mode
    -
  • -
  • TEGM - to toggle temporal editor/ -grid manager
    -
  • -
  • HorizVert - toggle horiz/vertical -layout of GFE
    -
  • -
    -
  • Name of the action
  • -
    -Examples: -

    ShortCut1 = ["F1", "None", -"SmartTool","Assign_Value"]              -# F1
    -ShortCut2 = ["NUMPAD_SUBTRACT", "None", -"SmartTool","AdjustValue_Down"] -# Keypad -
    -ShortCut3 = ["NUMPAD_ADD", "None", -"SmartTool","AdjustValue_Up"]        -# Keypad +
    -ShortCut4 = ["F2", "None", "SmartTool","Smooth"]
    -ShortCut5 = ["F3", "None", "Procedure","ISC_Discrepancies"] -
    -ShortCut6 = ["F5", "None", "EditTool", "Sample"]
    -ShortCut7 = ["F6", "None", "EditTool", "Contour"]
    -ShortCut8 = ["F7", "None", "EditTool", "Pencil"]
    -ShortCut9 = ["F8", "None", "EditTool", "DrawEditArea"]

    -

    ShortCut10 = ["F5", "Ctl", "EditTool", "Sample"]
    -ShortCut11 = ["F6", "Alt", "EditTool", "Contour"]
    -ShortCut12 = ["F7", "Shift", "EditTool", "Pencil"]
    -

    -


    -

    -

    Grid Manager -Edit Actions

    -This item specifies what Smart Tools (not screened by the active -weather -element) will appear on the Grid Manager button-3 popup menu. -

    GridManagerEditActions = -["Show_ISC_Area","Show_ISC_Grid","Show_ISC_Highlights"]
    -

    -

     

    -

    Edit Area Groups

    -The Edit Area Groups entry is a list of edit area groups that will -initially -appear in the edit area and query dialog.  By default, only the -Misc -group will appear.  The user may set this to Zones to bring up the -set of zone edit areas, or any other edit area group name. -

    EditAreaGroups = ['Misc']
    -

    -
    -

    - -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/gfeConfig_UI.html b/cave/com.raytheon.viz.gfe/help/gfeConfig_UI.html deleted file mode 100644 index 707a84c0bc..0000000000 --- a/cave/com.raytheon.viz.gfe/help/gfeConfig_UI.html +++ /dev/null @@ -1,506 +0,0 @@ - - - - - - gfeConfig - User Interface Configuration - - -
    -
    -
    -

    GFE/ifpIMAGE Configuration File
    -User Interface Configuration
    -

    -
    -
    -

    -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    GFE Configuration Item
    -
    -
    Applicable to GFE
    -
    -
    Applicable to ifpIMAGE
    -
    -
    Notes
    -
    Available -Fill Patterns -and Line PatternsYESYES
    -
    Selected Color and -PatternYESNO
    -
    Time Scale Lines -Color and -PatternYESNO
    -
    Editor Time -Line Color, -Pattern, and WidthYESNO
    -
    Current System -Time Indicator -ColorYESNO
    -
    Lock Colors and PatternsYESNO
    -
    Time Block ColorsYESNO
    -
    Edit Area Color and Border WidthYESNO
    -
    Initial Width of Grid -ManagerYESNO
    -
    Initial Legend ModeYESNO
    -
    Initial Grid Manager Mode
    -
    YES
    -
    NO
    -

    -
    Number of Quick Set -ButtonsYESNO
    -
    Menu Item Limit -Prior to CascadeYESYES
    -
    Office Domain ExpansionYESYES
    -
    Location of Edit -Action DialogYESNO
    -
    Initial -Layout -of Grid Manager and Temporal EditorYESNO
    -
    Temporal Editor -Weather ElementsYESNO
    -
    Grid -Manager Last Saved, Modified, Published, and Sent Colors and TimesYES
    -
    NO
    -

    -
    -
    -
    -
    -
    -


    -

    -

    Available -Fill Patterns and Line Patterns

    -The colors may be specified as a known X-lib color, or as a '#rrggbb' -color.  -There are only a few allowed fill patterns and line patterns that may -be -used. If additional patterns are designed, you will need to contact the -developers. The available fill patterns are: -
  • WHOLE
  • -
  • WIDE
  • -
  • SCATTERED
  • -
  • WIDE_SCATTERED
  • -
  • ISOLATED
  • -
  • TRANS_25PC_45DEG
  • -
  • TRANS_25PC_135DEG
  • -
  • SELECTED_AREA
  • -
  • DUALCURVE
  • -
  • CURVE
  • -
  • VERTICAL
  • -
  • CROSS
  • -
  • HORIZONTAL
  • -
  • BIGCROSS
  • -
    -You can see examples of the fill patterns -here. -

    The available line patterns are:

    -
  • SOLID
  • -
  • DASHED
  • -
  • DOTTED
  • -
  • DASHED_DOTTED
  • -
    -

    Selected -Color -and -Pattern

    -Defines the color and pattern used in the Grid Manager to indicate a -time -selection. -

    Selected_color = 'LightSkyBlue'
    -Selected_fillPattern = 'TRANS_25PC_45DEG'
    -

    -

     

    -

    Time -Scale Lines -Color and Pattern

    -Defines the color and pattern of the time scale lines in the Grid -Manager -and Temporal Editor. -

    TimeScaleLines_color = 'Blue'
    -TimeScaleLines_pattern = 'DOTTED'
    -

    -

     

    -

    Editor -Time Line Color, Pattern, and Width

    -Defines the color, width, and pattern used for the editor time line -that -runs through the Grid Manager and Temporal Editor. -

    EditorTimeLine_color = 'Yellow'
    -EditorTimeLine_width = 2
    -EditorTimeLine_pattern = 'DOTTED'
    -

    -

     

    -

    Current -System -Time Indicator Color

    -Defines the color used by the Grid Manager to indicate the current -system -time. -

    CurrentSystemTime_color = 'Green'
    -

    -

     

    -

    Lock Colors -and Patterns

    -Defines the colors used in the Grid Manager to indicate that a time -period -is locked by you, or by another person. -

    LockedByMe_color = 'forestgreen'
    -LockedByMe_pattern = 'WHOLE'
    -LockedByOther_color = 'tomato2'
    -LockedByOther_pattern = 'WHOLE'
    -

    -

    -

    Time Block Colors

    -Defines the visible and active colors used in the Grid Manager to -indicate -when a grid block is either visible and/or active. -

    TimeBlockVisible_color = 'Yellow3'
    -TimeBlockActive_color = 'Yellow'
    -TimeBlockInvisible_color = 'Gray75'
    -TimeBlockPreview_color = 'Cyan'
    -

    -

     

    -

    Edit Area Color and -Border Width

    -Defines the color and border width used to indicate the Edit Area on -the -spatial editor. -

    ReferenceSet_color = 'Gray80'
    -ReferenceSet_width = 0
    -

    -

     

    -

    Initial -Width of -Grid Manager

    -The initial width of the grid manager when starting the GFE is -specified -in pixels.  This number may be adjusted as an office -desires.  -It is not recommended to go above 600 since there would be display -problems -on laptop computers. -

    Defines the initial horizontial size of the grid manager when -first -starting the GFE in pixels.

    -

    TimeScale_horizSize = 350
    -

    -

     

    -

    Initial Legend -Mode

    -The legend mode, upon startup, may be specified as 'GRIDS', 'MUTABLE', -'ACTIVE', 'MAPS', or 'SETIME'.  The default mode is 'GRIDS'.  -'GRIDS' shows all grids in the legend; 'MUTABLE' shows changed weather -elements; 'ACTIVE' shows actively displayed weather elements; 'MAPS' -shows -maps; and 'SETIME' shows the spatial editor time. -

    Note that while running the GFE, you can change the legend mode -with -a MB3 (over the grid)->Legends->'Hide', 'Show Fcst Weather -Elements', 'Show -Active Weather Elements' or 'Show Map'.

    -

    LegendMode = 'GRIDS'
    -

    -

     

    -

    Initial Grid -Manager Mode

    -The initial Grid Manager mode, upon startup, may be specified as -'Normal', 'History', 'Saved', 'Modified', 'Published', or 'Sent'.  -In 'Normal' mode, the Grid Manager shows all grid blocks as "gray", -except for those which are displayed or active in the spatial -editor.  In 'History' mode, the Grid Manager color-codes each grid -block to indicate its data source and whether it has been -modified.  'Saved' mode color codes the blocks based on the last -time the grid was saved.  'Modified' mode color codes the blocks -based on the last time the grid was modified.   'Published' -color codes the blocks based on the last published time.  'Sent' -color codes the blocks based on the last time the grid was sent via -Intersite Coordination.
    -

    Note that while running the GFE, you can change the grid manager -mode through the Toolbar's Grid -Manager Mode button. 
    -

    -InitialGMDisplayMode = 'Normal'
    -
    -
    -

    Number of -Quick Set -Buttons

    -The number of quick set buttons may be defined by the user.  At -present -there is a limit of 7.  Entering a number greater than 7 will -result -in only 7 quick set buttons being displayed. -

    QuickSetButtons = 4
    -

    -

     

    -

    Menu -Item -Limit Prior to Cascade

    -

    Sets the maximum number of menu items before any menu will cascade -with -a 'More >'. Do not place a decimal point after the number.

    -

    MaxMenuItemsBeforeCascade = 30
    -

    -

     

    -

    Office Domain -Expansion

    -The office domain is calculated from the domains of all weather -elements -that are loaded into the GFE.  The actual domain displayed on the -GFE spatial editor may be expanded in order to provide "white space" -around -the grid.  The percentage of expansion is defined via four -different -Office_Domain_expand variables.  By default, the percentage is 10% -in each of the four directions. Note that these values are not -absolute, -just hints.  The aspect ratio of the GFE spatial editor will take -these numbers into account, but may not use the exact values. -

    OfficeDomain_expandLeft = 10
    -OfficeDomain_expandRight = 10
    -OfficeDomain_expandTop = 10
    -OfficeDomain_expandBottom = 10
    -

    -

     

    -

    Location -of Edit -Action Dialog

    -The initial location of the edit action dialog can be set.  The -location -is in absolute screen coordinates with (0,0) in the upper left of the -display -(not relative to the GFE window).  To view the Edit Action Dialog -in lower left corner, set Ycoord to 600. -

    EditActionDialog_Xcoord = 99
    -EditActionDialog_Ycoord = 74
    -

    -

     

    -

    Initial -Layout of Grid Manager and Temporal Editor

    -The user can control whether the GFE initially comes up in horizontial -or vertical mode.  By default, the temporal editor and grid -manager -are placed above the spatial editor. The user will either specify -"OnTop", -which is the default, or "OnLeft". -

    GM_TE_Layout = "OnTop"
    -

    -

     

    -

    Temporal -Editor Weather Elements

    -

    Default setting for temporal editor weather elements.  -Choices -are 'ALL' ,  all weather elements are displayed in the temporal -editor, -'ALL_NOISC' ,  all weather elements except for ISC (intersite -coordination -elements) are displayed in the temporal editor, 'MUTABLE' (default), -just -the mutable weather elements (e.g., Fcst) are displayed in the temporal -editor,  'ACTIVE', just the single active weather element is -displayed -in the temporal editor, and 'VISIBLE', all visible elements in the grid -manager are also displayed in the temporal editor.

    -

    TemporalEditorWEMode = "MUTABLE"
    -

    -


    -

    -Grid -Manager Last Saved, Published, Sent, and Modified Configuration
    -
    -

    This section is used to configure the -grid manager colors and times when the Grid Manager mode is in one of -the "Last Display -Modes".  The entries are parallel lists of colors and -times.  If the last save, modified, published, sendISC time is -less than the given time (in minutes), then that color is used to -display the box.   The default if the last xxx time is -greater than the final "minutes" in the list, is Gray75.

    -Modified_minutes -= -[60, 180, 360, 720, 1440, 2880 ]
    -Modified_colors -= ["#0bc71e", "#60c7b8", "#417fc7", "#e17c10",
    -  -"#ebdf00", "#e11a00"]
    -                                                                                -
    -Saved_minutes -= [60, 180, 360, 720, 1440, 2880 ]
    -Saved_colors = -["#0bc71e", "#60c7b8", "#417fc7", "#e17c10",
    -  -"#ebdf00", "#e11a00"]
    -                                                                                -
    -Published_minutes -= [60, 180, 360, 720, 1440, 2880 ]
    -Published_colors -= ["#0bc71e", "#60c7b8", "#417fc7", "#e17c10",
    -  -"#ebdf00", "#e11a00"]
    -                                                                                -
    -Sent_minutes = -[60, 120, 180, 240, 300, 360]
    -Sent_colors = -["#0bc71e", "#60c7b8", "#417fc7", "#e17c10",
    -  -"#ebdf00", "#e11a00"]
    -
    -

    -
    - -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/gfeConfig_WE.html b/cave/com.raytheon.viz.gfe/help/gfeConfig_WE.html deleted file mode 100644 index f8176ef266..0000000000 --- a/cave/com.raytheon.viz.gfe/help/gfeConfig_WE.html +++ /dev/null @@ -1,906 +0,0 @@ - - - - - - gfeConfig - Weather Element Configuration - - -
    -
    -
    -
    -

    GFE/ifpIMAGE Configuration File
    -Weather Element Configuration

    -
    -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    GFE Configuration Item
    -
    -
    Applicable to GFE
    -
    -
    Applicable to ifpIMAGE
    -
    -
    Notes
    -
    Generic Graphic ColorsYESYES
    -
    Specific -Weather Element -Graphic ColorYESYES
    -
    Specific -Weather -Element Line WidthsYESYES
    -
    Specific -Weather -Element Line PatternsYESYES
    -
    Specific -Weather Element -Font OffsetsYESYES
    -
    Specific -Weather Element -DensitiesYESYES
    -
    Temporal Editor Pane SizeYESNO
    -
    Contour Values and IntervalsYESYES
    -
    Delta ValuesYESNO
    -
    Fuzz ValuesYESNO
    -
    Weather Element Visual -TypesYESYES
    -
    Bounded Area -Label/Boundary -VisibilityYESYES
    -
    Wind Barb and -Arrow Default -SizesYESYES
    -
    Wind Arrow ScalingYESYES
    -
    Sample Formats for -Vector DataYESYES
    -
    Default Values (for -CreateFromScratch)YESNO
    -
    -
    -
    -
    -
    -


    -

    -

    Generic Graphic -Colors

    -The list of generic colors defines set of graphic colors that will be -assigned -to the graphics, unless overridden by specific graphical colors.  -If the user loads too many weather elements such that this list is -exhausted, -the GFE will recycle the list and use the colors again.  An -additional -set of colors is automatically added. -

    Generic_colors = ['Green', 'Coral', 'Cyan', 'Wheat', -'Yellow', -'Violet', 'DarkKhaki', 'OrangeRed', 'DodgerBlue2', 'SpringGreen', -'IndianRed', -'CadetBlue1', 'NavajoWhite', 'LightGoldenrod1', 'Plum1', -'LemonChiffon3', -'LightSalmon', 'SlateGray3', 'DarkSeaGreen2', 'LemonChiffon', -'LightCyan2', -'Seashell', 'MediumPurple', 'Thistle1', 'RosyBrown3'] -
    -  -

    -

    Specific -Weather Element Graphic Color

    -The user may set up specific colors for a parameter.  These colors -are only suggestions.  The GFE will make every attempt to use -these -colors for the weather element.  In the case that the color is -already -in use, the GFE will assign a color from the Generic_colors list.  -The format of the specific color entries is the -weatherElementName_graphicColor.  -For those weather elements that are not surface-based, the format is -weatherElementName_level_graphicColor. -

    T_graphicColor = 'green' -
    -Wx_graphicColor = 'White' -
    -  -

    -

    Specific -Graphic Line Widths for a Weather Element

    -The default line width of any weather element can be specified in the -configuration -file.  Valid numbers are zero and up. You can always change the -line -width interactively during a GFE session.  If not specified, then -the line width is assumed to be zero. The format of the entry is -weatherElementName_lineWidth -= width.    For those weather elements that are not -surface-based, -the format is weatherElementName_level_lineWidth.  The larger the -number , the wider the line.   Do not include a decimal -point.  -The line width affects the following visualizations: -
  • Bounded Area outlines (weather)
  • -
  • Contour Lines (scalar)
  • -
  • Wind Barb and Wind Arrow Lines (vector)
  • -
    -T_lineWidth = 1 -
    -  -

    Specific -Graphic Line Patterns for a Weather Element

    -The default line pattern can be varied for each weather element.  -If not specified, then the line pattern is assumed to be solid.  -There -are currently four line patterns supported in the GFE. The possible -strings -are "SOLID", "DASHED", "DOTTED", "DASHED_DOTTED". The format of the -entry -is weatherElementName_linePattern = "PatternName".   For -those -weather elements that are not surface-based, the format is -weatherElementName_level_linePattern.  -The line pattern affects the following visualizations: -
  • Bounded Area outlines (weather)
  • -
  • Contour Lines (scalar)
  • -
  • Wind Barb and Wind Arrow Lines (vector)
  • -
    -T_linePattern = "SOLID" -
    -  -

    Specific -Font Offsets for a Weather Element

    -The font used for a specific weather element display is based on three -things: -
  • The definition of TextFont*, which defines the standard -fonts used in -the -GFE.
  • -
  • The optional definition of display type fonts, which defines -which of -the -standard fonts should be used for this particular type of display -(e.g., -Contour_font).
  • -
  • The optional font offset, which adds or subtracts an offset size -from -the -calculations derived in the first two steps.
  • -
    -The font offsets affect the following visualizations: -
  • Bounded Area labels (weather)
  • -
  • Contour labels (scalar)
  • -
  • Wind Arrows and Wind Barbs (vector)
  • -
    -The font offsets are used differently for wind arrows and wind -barbs.  -Obviously these visualizations do not have text associated with -them.  -Specifying a positive number for font offsets will result in a larger -(e.g., -longer) wind barb or arrow.  Specifying a negative number for the -font offset will result in a smaller wind barb or arrow. -

    The font offset (called magnification on the GFE menus) allows the -default -font size to be increased or decreased on a per-parameter basis.  -Note that for wind arrows/barbs, the fontOffset controls the size of -the -wind arrows/barbs.  Numbers can range from -2 through +2. Format -is -parmName_fontOffset.   For those weather elements that are -not -surface-based, the format is weatherElementName_level_fontOffset. Do -not -include a decimal point after these entries. -

    -

    T_fontOffset = 0 -
    -  -

    -

    Specific -Densities for a Weather Element

    -The density control of the weather element works differently, depending -upon the data type.  For scalar contoured data, the density -control -modifies the set of contours to show more or less of them.  For -vector -wind barbs or arrows, the density control controls the packing -algorithm -to show more or less of them.  Density does not affect the display -of weather-type data. The default is zero. Typical values can range -from --2 through +2.  You can use values outside of this range if -desired.  -Format is parmName_density.    For those weather -elements -that are not surface-based, the format is -weatherElementName_level_density. -Do not include a decimal point after these entries. -

    T_density = 0 -
    -  -

    -

    Temporal -Editor Pane -Size

    -The user has the ability of controlling the initial size of temporal -editor -panes based on the weather element first loaded into a pane.  If -not -specified, the default is 150 pixels in height.  The format of -this -entry is the weatherElementName_temporalDataPaneSize.   For -those -weather elements that are not surface-based, the format is -weatherElementName_level_temporalDataPaneSize. -

    Wx_temporalDataPaneSize = 200 -
    -  -

    -

    Contour Values and -Intervals

    -There are two ways to define contour values, either by specifying a -complete -set of values, or by specifying a single interval.  If both -methods -are defined, then the contour values will be used, thus overriding the -defined contour interval. If neither is defined, then the GFE uses an -algorithm -with linear contour intervals.  The values will be with a 1, 2, or -5 unit, such as 0.1, 0.2, 0.5, 1.0, 2.0, 5.0, etc. The algorithm -continues -to add more values until there are around 30 of them.  This works -well on some weather elements and very poorly on others.  The -format -is parmName_optionname, but for non-surface based elements, the format -is parmName_level_optionname. -
    Explicit Contour Values
    -If the user wishes to specify explicit contour values for a weather -element, -the format is weatherElementName_contourValues with a list of contour -values. -QPF is normally defined in the configuration file since small values -are -very important and the typical contour interval does not show enough -resolution -at low values. -

    Contour value specification is ignored for vector and weather-type -weather -elements. -

    -

    QPF_contourValues = [0.01, 0.05, 0.10, 0.15, 0.20, 0.25, -0.30, -0.40, 0.50, -
    -  0.60, 0.7, 0.8, 0.9, 1.0, 1.2, 1.4, 1.6, 1.8, 2.0, 2.2, -2.4, 2.6, 2.8, -
    -  3.0, 3.2, 3.4, 3.6, 3.8, 4.0, 4.2, 4.4, 4.6, 4.8, 5.0]

    -Topography_contourValues = [5.0, 10.0, 20.0, 30.0, 40.0, 50.0,
    -   60.0, 70.0, 80.0, 90.0, 100.0, 125.0, 150.0, 175.0, 200.0, 250.0,
    -   300.0, 350.0, 400.0, 450.0, 500.0, 600.0, 700.0, 800.0, 900.0,
    -   1000.0, 1250.0, 1500.0, 1750.0, 2000.0, 2500.0, 3000.0, 3500.0,
    -   4000.0, 4500.0, 5000.0, 5500.0, 6000.0, 6500.0, 7000.0, 7500.0,
    -   8000.0, 8500.0, 9000.0, 9500.0, 10000.0, 11000.0, 12000.0, 13000.0,
    -   14000.0, 15000.0, 16000.0, 17000.0, 18000.0, 19000.0, 20000.0]
    -

    -
    Contour Interval
    -The user may also specify a contour interval for a weather -element.  -The format is weatherElementName_contourInterval with a single number. -If not defined, then contour values are automatically computed. -

    Sky_contourInterval = 10.0 -
    -PoP_contourInterval = 10.0 -
    -MinT_contourInterval = 5.0 -
    -MaxT_contourInterval = 5.0 -
    -T_contourInterval = 5.0 -
    -Td_contourInterval = 5.0 -
    -  -

    -

    Delta Values

    -Delta values are weather element specific.  If not defined, it -defaults -to the minimum precision (e.g., 1 degree for temperature, 0.01" for -QPF). -The delta value is used for the Adjust Up and Adjust Down smart tools. -These may be reset through the GFE GUI.  Delta values are ignored -for the weather type of weather element. Format is parmName_deltaValue -= value.   For those weather elements that are not -surface-based, -the format is weatherElementName_level_deltaValue.  Be sure to -include -a decimal point. -

    FzLevel_deltaValue = 100.0
    -SnowLevel_deltaValue = 100.0
    -
    -

    -

    Fuzz Values

    -Fuzz values are weather element specific.  If not defined, it -defaults -to 1/100 of the parameter's range. A fuzz value is used when the user -selects -the "select homogenous area" on the spatial editor.  It is used to -determine all grid points that are contiguous that are "close to" the -selected -point and then uses that set as the new edit area.  These may be -reset -through the GFE GUI.  Fuzz values are ignored for the weather type -of weather element. -

    For example, if the fuzz is 2.0 degrees for Temperature and you -click -on 40 degrees, then all points between 38 and 42 will be selected as -long -as they are contiguous to the click point. Format is parmName_fuzzValue -= value.   For those weather elements that are not -surface-based, -the format is weatherElementName_level_fuzzValue. -

    -

    T_fuzzValue = 10.0 -
    -  -

    -

    Weather -Element Visual -Types

    -Visual types define the spatial and temporal visualization types for -the -different data types (scalar, vector, and weather).  The following -table illustrates the possible values for each editor and data type. -The -user may choose any of the choices.
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    Editor Type
    -
    -
    Data Type
    -
    -
    Available Visual Types (Image Mode)
    -
    -
    Available Visual Types (Graphic Mode)
    -
    SpatialScalarImage, ContourContour
    SpatialVectorImage, WindBarb, WindArrowWindBarb, WindArrow
    SpatialWeatherImage, BoundedAreaBoundedArea
    SpatialDiscreteImage, BoundedAreaBoundedArea
    TemporalScalarTEColorBar, TEColorRangeBar, TimeBar, RangeBarTimeBar, RangeBar
    TemporalVectorTEColorBar, TEColorRangeBar, TimeBar, WindBarb, WindArrow, -RangeBarTimeBar, WindBarb, WindArrow, RangeBar
    TemporalWeatherTEColorBar<none>
    TemporalDiscreteTEColorBar<none>
    -
    -The format of the entry is shown in the following table, where -"we" is the weather element name:
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    Editor Type
    -
    -
    Visual Mode
    -
    -
    Entry Format
    -
    SpatialImagewe_spatialImageType
    SpatialGraphicwe_spatialGraphicType
    TemporalImagewe_temporalImageType
    TemporalGraphicwe_temporalGraphicType
    -
    -If not defined in this configuration file, the GFE software -defaults to the following visualizations:
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    Editor Type
    -
    -
    Data Type
    -
    -
    Image Mode Defaults
    -
    -
    Graphic Mode Defaults
    -
    SpatialScalarImageContour
    SpatialVectorImage, WindBarbWindBarb
    SpatialWeatherImageBoundedArea
    SpatialDiscreteImageBoundedArea
    TemporalScalarTEColorBarTimeBar
    TemporalVectorTEColorBar, WindBarbTimeBar, WindBarb
    TemporalWeatherTEColorBar<none>
    TemporalDiscreteTEColorBar<none>
    -For example, the weather parameter may be viewed as a bounded -area and an image. For the image type, you may choose both image and -bounded -area. For the graphic type, you may choose only bounded area. By -default -if not specified, the graphic types for the spatial editor are contour, -wind barb, and bounded area for scalar, vector, and weather data. The -image -types for the spatial editor are image, image and wind barb, and image -for the scalar, vector, and weather data. For the temporal editor, the -graphic types are time bar, wind barb, and time bar and the image types -are color bar, color bar and wind barb, and color bar. Format is: -parmName_editorImageType -= [ types ] or parmName_editorGraphicType = [ types ] where 'editor' is -replaced with spatial or temporal. -

    Wind_spatialGraphicType = ["WindArrow"]. -
    -Wx_spatialImageType = [ "Image", "BoundedArea" ]
    -

    -

      -

    -

    Bounded -Area Label/Boundary Visibility

    -The user may turn on/off the boundary and the text labels for the -boundary -area visual.  The default value is both are on.  Allowable -values -are yes and no, or 1 and 0. -

    BoundedArea_Labels = yes -
    -BoundedArea_Boundary = yes
    -

    -

      -

    -

    Wind -Barb -and Wind Arrow Default Sizes

    -The default wind barb and wind arrow sizes may be specified in the GFE -configuration file. If not specified, they default to 60 pixels in -length. -The user may specify the default overall, or may specify the size for -each -weather element. -

    WindArrowDefaultSize = 60 -
    -WindBarbDefaultSize = 60
    -
    -

    -

    The entry format for a particular weather element definition of -arrow -or barb size is parmName_windArrowDefaultSize and -parmName_windBarbDefaultSize.  -For non-surface based weather elements, the format is -parmName_level_windBarbDefaultSize. -

    -

    Wind_windArrowDefaultSize = 60 -
    -Wind_windBarbDefaultSize = 60
    -

    -

      -

    -

    Wind/Swell Arrow Scaling

    -The length of the wind/swell arrows is proportional to the percentage of the -magnitude to the maximum allowable magnitude. The user may specify -whether -this is a linear or a logarithmic formula for each vector weather -element. -The format of these entries is parmName_arrowScaling.  (For -non-surface -based elements, the format is parmName_level_arrowScaling.)  The -value -given must be greater than 0.  Values greater than 1 will result -in -an almost linear assignment of magnitudes to length.  Values -approaching -zero will result in an emphasis of the values near the weather -element's -minimum possible value.  If 0.00 is specified for the entry, or -the -entry is omitted, then linear scaling of magnitude to distance is used. -

    The following table illustrates the percent of the maximum length of -the arrow that is used for the first 50% of the weather element's range.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    Factor Value
    -
    -
    Percent of the maximum distance used for a 50% of the -maximum -possible value.
    -
    -
    1.0
    -
    -
    58%
    -
    -
    0.5
    -
    -
    62%
    -
    -
    0.1
    -
    -
    75%
    -
    -
    0.05
    -
    -
    78%
    -
    -
    0.01
    -
    -
    85%
    -
    -  -
    -For example, if Wind ranges from 0 to 50 knots and the arrow maximum -size is 100 pixels, then a wind of 25 knots will appear 85 pixels in -length -if the factor value is 0.01. -
    -  -

    Wind_arrowScaling = 0.03
    -Swell_arrowScaling = 0.001
    -Swell2_arrowScaling = 0.001

    -

    -

      -

    -

    Sample -Formats for -Vector Data

    -The sample format for vector data may be adjusted to one of four -formats.  -The format affects the samples on the spatial and temporal editors, the -color bar pick-up value on the spatial editor, and the set value dialog -for vector. - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    Format
    -
    -
    Description
    -
    -
    Example
    -
    ddffDirection is indicated by a 2-digit number and ranges from -01-36.  -00 is reserved for calm winds.  The magnitude is truncated to the -nearest unit value and displayed. 0000 for calm, 3645 for wind from the North at 45.
    d/fDirection is indicated in degrees with up to three digits -(0-359).  -The magnitude is rounded to the precision value of the weather -element. 0/0 for calm, 45/10.5 for NE wind at 10.5.
    8ptDirection is indicated by a compass direction (N, NE, E, SE, -S, SW, -W, NE).  Magnitude is rounded to the precision value of the -weather -element."calm" for calm, NE5 for NE wind at 5.
    16ptDirection is indicated by a compass direction (N, NNE, NE, -ENE, E, -ESE, SE, SSE, S, SSW, SE, WSW, W, NNW, NW, NNW).  Magnitude is -rounded -to the precision value of the weather element."calm" for calm, NNE15 for a NNE wind at 15.
    -The user may specify an overall format which applies to all -vector weather elements, or may specify a specific format for an -individual -vector weather element. -
    -  -

    The user may specify the default sample format for vector weather -elements. -If not specified, then the format is "ddff". The user may specify a -format -for all vector elements, or can specify the format for a particular -weather -element.  The four possible formats are "ddff", "8pt", "16pt", and -"d/f". The configuration entry for the default sample format for all -vector -elements is WindFormat = "type".  The entry format to define the -format -for a specific entry is parmName_windFormat = "type".  For -non-surface -based elements, the format is parmName_level_windFormat. -

    -

    WindFormat = "ddff" -
    -Swell_windFormat = "8pt"
    -
    -

    -

    -Default Values (for Create -From Scratch)

    -The default values for SCALAR, VECTOR, WEATHER, and DISCRETE may be -specified on a per-weather element basis. By default, the SCALAR has -the weather element's minimum value, the VECTOR element has a magnitude -and direction of 0, the WEATHER element has <NoWx>, and DISCRETE -has -the first defined discrete key. This default may be changed through -the configuration file using a format of wename_defaultValue for -SCALAR, -WEATHER, and DISCRETE, and wename_magDefaultValue and -wename_dirDefaultValue -for VECTOR. For non-surface based elements, the format is changed with -the wename being replaced with the weatherElementName_levelName. -

    The SCALAR and VECTOR values are floats; the WEATHER and DISCRETE -values -are strings, as shown in the following examples, which are listed in -SCALAR, VECTOR, WEATHER, and DISCRETE order: -

    -

    T_defaultValue = 32.0 -
    -Wx_defaultValue = -"<NoCov>:<NoWx>:<NoInten>:<NoVis>:"
    -Wind_dirDefaultValue = 90.0
    -
    -

    -
    - -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/gfeConfig_WECol.html b/cave/com.raytheon.viz.gfe/help/gfeConfig_WECol.html deleted file mode 100644 index 866508f8ac..0000000000 --- a/cave/com.raytheon.viz.gfe/help/gfeConfig_WECol.html +++ /dev/null @@ -1,341 +0,0 @@ - - - - - - gfeConfig - Weather Color Algorithm Configuration - - -
    -
    -

    GFE/ifpIMAGE Configuration File
    -Weather Color Algorithm Configuration

    -The weather color algorithm is very complicated.  In order to -understand -the algorithm, it is important to understand the capability of the -weather -key and its components: coverage/probability, type, intensity, -visibility, -and optional attributes. -

    The allowed names of types, intensities, and coverage/probabilities -are available in the serverConfig.py -file.

    -
    -
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    GFE Configuration Item
    -
    -
    Applicable to GFE
    -
    -
    Applicable to ifpIMAGE
    -
    -
    Notes
    -
    Weather Color AlgorithmYESYES
    -
    Weather Coverage Fill -PatternsYESYES
    -
    Defining -Color Entries for Weather Type and IntensitiesYESYES
    -
    Weather Generic ColorsYESYES
    -
    -
    -
    -
    -
    -


    -

    -

    Weather -Color -Algorithm -

    -The current weather color algorithm ignores visibility and optional -attributes.  -The following table illustrates the color algorithm. A composite -weather -type is defined as more than one weather type combined for one -coverage/probability.  -For example, rain is a weather type and snow is a weather type. -Combining -rain and snow would be considered a composite weather type. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    Number of Unique Coverages/Probabilites
    -
    -
    Fill Pattern
    -
    -
    Composite Weather Type
    -
    -
    Color
    -
    1Based on entries in WeatherCoverage_names and -WeatherCoverage_fillPatterns.  -Only one fill pattern will be used based on the coverage/probability -term.NoFirst looks in  WeatherTypeInten_names and -WeatherTypeInten_colors -to look for a type and intensity match.  If not found, looks in -WeatherType_names -and WeatherType_colors for a match.  If not found, then assigns a -color from WeatherGeneric_colors.
    1Based on entries in WeatherCoverage_names and -WeatherCoverage_fillPatterns.  -Only one fill pattern will be used based on the coverage/probability -term.YesFirst looks in  WeatherTypeInten_names and -WeatherTypeInten_colors -to look for a composite type and intensity match.  If not found, -looks -in WeatherType_names and WeatherType_colors for a match.  If not -found, -then assigns a color from WeatherGeneric_colors.
    2Based on entries in WeatherCoverage_names and -WeatherCoverage_fillPatterns.  -The fill pattern is determined for both of the unique -coverages/probabilities.  -The pattern is overlapped on the display.NoFor each unique coverage/probability, first looks in  -WeatherTypeInten_names -and WeatherTypeInten_colors to look for a type and intensity -match.  -If not found, looks in WeatherType_names and WeatherType_colors for a -match.  -If not found, then assigns a color from WeatherGeneric_colors. The -result -is two colors on the display each with different fill patterns.
    2Based on entries in WeatherCoverage_names and -WeatherCoverage_fillPatterns.  -The fill pattern is determined for both of the unique -coverages/probabilities.  -The pattern is overlapped on the display.YesFor each unique coverage/probability, first looks in  -WeatherTypeInten_names -and WeatherTypeInten_colors to look for a composite type and intensity -match.  If not found, looks in WeatherType_names and -WeatherType_colors -for a match.  If not found, then assigns a color from -WeatherGeneric_colors. -The result is two colors on the display each with different fill -patterns.
    3 or moreSolid fill pattern is always used.N/AUses a color from WeatherGeneric_colors.  The solid -pattern denotes -a "complex" set of weather.
    -

    -Weather -Coverage -Fill Patterns

    -WeatherCoverage_names and WeatherCoverage_fillPatterns are -parallel lists of values and must be the same size.  For each -possible -weather coverage, the fill patterns array defines the fill pattern to -use.  -There are only a few allowed fill patterns and line patterns that may -be -used. If additional patterns are designed, you will need to contact the -developers. The available fill patterns are: -
  • WHOLE
  • -
  • WIDE
  • -
  • SCATTERED
  • -
  • WIDE_SCATTERED
  • -
  • ISOLATED
  • -
  • TRANS_25PC_45DEG
  • -
  • TRANS_25PC_135DEG
  • -
  • SELECTED_AREA
  • -
  • DUALCURVE
  • -
  • CURVE
  • -
  • VERTICAL
  • -
  • CROSS
  • -
  • HORIZONTAL
  • -
    -You can view examples of these fill -patterns -here. -

    For example, if "Iso" coverage is in the 1st entry of the list and -ISOLATED -appears in the first entry of the fill patterns, the for Iso coverage, -the fill pattern ISOLATED will be used. -

    -

    WeatherCoverage_names = ["Iso", "WSct", "Sct", "Num", "Wide", -"Ocnl", "SChc", -
    -"Chc", "Lkly", "Def", "Patchy", "<NoCov>"] -
    -WeatherCoverage_fillPatterns = ["ISOLATED", "WIDE_SCATTERED", -"SCATTERED", "WIDE", "WIDE", "TRANS_25PC_45DEG", "ISOLATED", -"WIDE_SCATTERED", -"SCATTERED", "WIDE", "SCATTERED", "WHOLE"] -
    -  -

    -

    Defining -Color Entries for Weather Types and Intensities

    -With the set of WeatherType and WeatherTypeInten lists, the user may -specify -different color combinations for different weather types.  An -example -of this is shown in the following table: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    Weather Type/Intensity
    -
    -
    Desired Color
    -
    Snow regardless of intensityWhite
    Rain, all intensities other than heavyGreen
    Rain, heavycyan
    FogYellow
    Rain and Snow MixedPurple
    Freezing RainOrange
    Thunderstorms (TRW)Red
    Strong Thunderstorms (T+RW)Red1
    No weatherGray40
    -The entries in the two lists would be as follows: -

    WeatherType_names = ["S", "R", "F", "RS", "ZR", "TRW", -"<NoWx>"] -
    -WeatherType_colors = ["white", "green", "yellow", "purple", -"orange", "red", "gray40"] -
    -WeatherTypeInten_names = ["T+RW", "R+"] -
    -WeatherTypeInten_colors = ["red1", "cyan"] -

    -

    The weather type entries are parallel lists of values and -must -be the same size.  The user defines the color desired for a -particular -composite weather type.  The color names may be X colors either in -named color or #rrggbb format. This list does not contain intensity -descriptors -and is searched after the WeatherTypeInten_names and -WeatherTypeInten_colors. -

    -

    The weather type intensity entries are parallel lists of values and -must be the same size. The user defines the color desired for a -particular -composite weather type and intensity. -
    -  -

    -

    Weather Generic -Colors

    -Weather Generic colors are used for any types that are not defined in -the -WeatherType_names or WeatherTypeInten_names.  The set of generic -colors -are also used for complex weather patterns, where 3 or more different -probabilities/coverages -are present in a grid cell.  The colors in this list will be used -before a "random" color is chosen. -

    WeatherGeneric_colors = ["Coral", "CadetBlue2", "Aquamarine", -"DarkKhaki", -
    -"DodgerBlue", "IndianRed1", "PaleGreen", "MistyRose", -"chartreuse3", -"PapayaWhip"]
    -

    -

    -
    - -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/gfeConfig_Zoom.html b/cave/com.raytheon.viz.gfe/help/gfeConfig_Zoom.html deleted file mode 100644 index 81a08596f0..0000000000 --- a/cave/com.raytheon.viz.gfe/help/gfeConfig_Zoom.html +++ /dev/null @@ -1,303 +0,0 @@ - - - - - - gfeConfig - Dialog and Menu Configuration - - -
    -
    -

    GFE/ifpIMAGE Configuration File
    -Dialog and Menu Configuration

    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    GFE Configuration Item
    -
    -
    Applicable to GFE
    -
    -
    Applicable to ifpIMAGE
    -
    -
    Notes
    -
    Set Pickup Value Dialog Zoom -ConfigurationYESNO
    -
    Maximum Set Delta Dialog ValuesYESNO
    -
    Interpolate Dialog ModeYESNO
    -
    List of Publish -Dialog Time -PeriodsYESNO
    -
    Preselected -Publish Dialog Weather Element GroupYESNO
    -
    Create From Scratch -Dialog DefaultsYESNO
    -
    Interpolation Dialog -DefaultsYESNO
    -
    Wx/Discrete: Show DescriptionYES
    -
    NO
    -

    -
    Weather -Set Value Dialog Default Values
    -
    YES
    -
    NO
    -

    -
    -
    -
    -

    -

    Set Pickup Value -Dialog -Zoom Configuration

    -The pickup value dialog is used to enter values for use in the assign -value -edit tool.  This dialog was previously called "set value."  -The -pickup value dialog has the ability of a one-level zoom factor.  -Clicking -button 1 over the dialog will zoom in or zoom out only one level, i.e., -either you see the entire parameter range, or you see the zoomed in -range.  -The amount of zoom is defined by the zoom factors specified in this -section.  -The software can be configured to provide an overall zoom for all -parameters -with individual overrides for certain weather elements. -

    The SetValue_zoom defines the factor to use by all weather -elements, -if they aren't explicitly specified by weather element.  The value -can be intrepreted as the visible range in the dialog.  A value of -4 indicates that 1/4 of the weather element's maximum range will be -displayed -when the dialog is zoomed in. For example, if temperature bounds are --30 -to +130 degrees, which is a range of 160 degrees, and the zoom factor -is -4, then the dialog will only show 40 degree range when zoomed in.

    -

    Individual weather elements can specify different zoom -factors.  -The format of this entry is weatherElementName_SetValue_zoom.  For -those weather elements that are not surface-based, the format is -weatherElementName_level_SetValue_zoom. -An example for QPF is shown below:

    -

    SetValue_zoom = 4
    -QPF_SetValue_zoom = 10
    -

    -

     

    -

    Maximum Set Delta Dialog -Values

    -The default range of the Set Discrepancy Dialog is 20% of the weather -element's -range.  This may be changed on a per weather element basis using -this -configuration item.  The item specified is the maximum value that -appears in the dialog.  The format of the entry is -weName_MaxDeltaDialogValue.  -For those weather elements that are not surface-based, the format is -weatherElementName_level_MaxDeltaDialogValue. -

    Sky_MaxDeltaDialogValue = 40.0
    -

    -

     

    -

    Interpolate Dialog -Mode

    -The Interpolate Dialog Mode has two options, "Gaps" and "Edited".  -These correspond to the entries on the InterpolateDialog, -"By Gaps", and "Based on Edited Data".  The default if not -specified -is to bring up the dialog with the "By Gaps" selected.  This -behavior -can be changed using this configuration item. -

    InterpolateDialogMode = "Gaps"


    -

    List -of Publish -Dialog Time Periods

    -The list of entries that appear on the Publish -Dialog are listed in this field.  The entries must be valid user-defined -Time Ranges or they will be ignored. -

    PublishTimes = ['example1']
    -

    -

     

    -

    Preselected -Publish Dialog Weather Element Group

    -

    The weather elements in the  group named in this entry will -be -highlighted upon initial startup of the Publish Dialog.  The -default -is that none is specified, so that the currently loaded weather -elements -are selected.

    -

    PublishDialogInitialWEGroup = "Public"
    -

    -

     

    -

    Interpolation -Dialog -Defaults

    -The Interpolation -Dialog -provides the specification of the interval and duration.  These -two -entries in the configuration file will change the defaults of the -interval -and duration. -

    By default, the dialog is shown with a minimum interval and -duration.  -This can be changed. If the duration is specified, then the interval -must -also be specified. The units are hours and must range between 1 and 24. -

    -

    InterpolateDefaultInterval = 1
    -InterpolateDefaultDuration = 1
    -

    -

     

    -

    Create -from Scratch -Dialog Defaults

    -The Create from -Scratch Dialog provides the specification of the interval and -duration.  -These two entries in the configuration file will change the defaults of -the interval and duration. -

    By default, the dialog is shown with a minimum interval and -duration.  -This can be changed. If the duration is specified, then the interval -must -also be specified. The units are hours and must range between 1 and 24. -

    -CreateScratchDefaultInterval = 1
    -CreateScratchDefaultDuration = 1
    -
    -
    -
    -Wx/Discrete: -Show Description
    -
    -

    Controls the default setting for the -"show description"  option for the Weather Set -Value Dialog and Discrete Set -Value Dialogs.   In addition to the two dialogs, the -Spatial Editor Color Bar and Temporal Editor Data Pane's MB3 Popup Menu -items Set -Common Values To, Set Recent Values To..., and Set Session Values To... -also will contain the descriptive information. 

    -

    The option may be interactively set -through the GFE -> -View Preferences -> Wx/Discrete: Show Description menu item.
    -

    -WxDiscrete_Description = 1
    -
    -
    -
    -
    -

    Weather -Set Value -Dialog Default Values

    -This section of the configuration file controls the default intensity -and -coverage/probability values that will be displayed on the weather set -value -(pickup value) dialog when creating a new weather key.  If not -specified -in the gfe configuration file, the intensity and coverage/probability -values -are defaulted to the first intensity and coverage/probability values -defined -in the serverConfig.py's -Weather Definition.   The format of these entries is -weatherTypeSymbol_defaultCoverage -and weatherTypeSymbol_defaultIntensity. -

    R_defaultCoverage = "Wide"
    -RW_defaultCoverage = "Sct"
    -S_defaultCoverage = "Wide"
    -SW_defaultCoverage = "Sct"

    -

    R_defaultIntensity = "-"
    -RW_defaultIntensity = "-"
    -S_defaultIntensity = "-"
    -SW_defaultIntensity = "-"

    -
    -
    -

    - -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/gfeConfig_commonValue.html b/cave/com.raytheon.viz.gfe/help/gfeConfig_commonValue.html deleted file mode 100644 index 048468874d..0000000000 --- a/cave/com.raytheon.viz.gfe/help/gfeConfig_commonValue.html +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - gfeConfig - Common Values - - -
    -
    GFE/ifpIMAGE Configuration -File
    -Weather/Discrete Common Value Definitions
    -
    -
    -
    -
    The weather/discrete common value definitions are the -common types that -appear on the temporal editor popup and the spatial editor color bar -popup -menus.  For WEATHER weather elements, the format of the string is -a list of "ugly" weather keys, prefixed with cascade indicators.  -Refer to other documentation for the weather key format -specifics.  -The general format of a weather key consists of one or more subkeys -separated -by a caret ('^').  The subkey consists of five parts: -coverage/probability, -weather type, intensity, visibility, and optional attributes. Each of -these -sections are separated by a colon (':').  The optional attributes, -if any, are separated by commas (',').  The allowable coverages, -type, -intensities, visibilities, and attributes are defined by GFE -in its serverConfig.py -file. -

    For DISCRETE weather elements, the format of the string is the -discrete -key string. DISCRETE keys are simplier than weather keys in that they -are -representated by strings.  Multiple keys are separated by a caret -('^').

    -

    An ugly string by itself will be placed on the top-level cascade -menu -on the GFE.  You can also make these entries appear on cascade -menus -by prefixing the ugly string with a cascade indicator.  The -indicator -separator is the vertical bar (|).  For example, the string -"Winter|Wide:S:--:<NoVis>:<NoAttr>" -will place the widespread snow under a 2nd level cascade named -Winter.  -To do a 3rd level cascade, use an additional vertical bar, such as -"Winter|Snow|Wide:S:+:<NoVis>:<NoAttr>"

    -

    The name of the configuration item is parmName_commonValues, and -can -be used for both WEATHER and DISCRETE type of weather elements.

    -

    Wx_commonValues = [ \
    -  "<NoCov>:<NoWx>:<NoInten>:<NoVis>:<NoAttr>", -
    -  "Wide:R:-:<NoVis>:<NoAttr>",
    -  "Wide:S:--:<NoVis>:<NoAttr>",
    -  "Wide:R:-:<NoVis>:<NoAttr>^Wide:S:-:<NoVis>:<NoAttr>", -
    -  "Sct:RW:-:<NoVis>:<NoAttr>",
    -  "Sct:SW:-:<NoVis>:<NoAttr>",
    -  "Sct:T:<NoInten>:<NoVis>:<NoAttr>^Sct:RW:-:<NoVis>:<NoAttr>", -
    -  "Patchy:F:<NoInten>:<NoVis>:<NoAttr>"]

    -
    -
      -
    -
    -

    Back To TOC

    -
    -
    -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/gfeConfig_font.html b/cave/com.raytheon.viz.gfe/help/gfeConfig_font.html deleted file mode 100644 index 9d1b2e401b..0000000000 --- a/cave/com.raytheon.viz.gfe/help/gfeConfig_font.html +++ /dev/null @@ -1,252 +0,0 @@ - - - - - - gfeConfig - Fonts - - -
    -
    GFE/ifpIMAGE Configuration -File
    -GFE Font Sizes
    -
    -
    -
    -The fonts for the GFE and ifpIMAGE -programs -can be overridden from their defaults by enabling entries in this -section -of the configuration file.  If you want to change fonts for the -display -of a particular weather element, such as contour label size, refer to -the weather -element font specifier section. -

    The numbers used in this section refer to the five fonts (numbered -0 -through 4).

    -

    You can change the font sizes for the following components in the -GFE -and ifpIMAGE:

    -
  • Spatial Editor Color Bar Scale font (for scalar and -vector-type -elements)
  • -
  • Spatial Editor Color Bar Label font (for weather-type elements)
  • -
  • Spatial Editor Color Bar Pickup Value font
  • -
  • Spatial Editor Legend font
  • -
  • Temporal Editor Data Selector font
  • -
  • Temporal Editor Sample font
  • -
  • Spatial Editor Sample font
  • -
  • Spatial Editor Marker font
  • -
  • Grid Manager weather element identifier font
  • -
  • Grid Manager source identifier (single character within a grid -block) -font
  • -
  • Time Scale font
  • -
  • Pickup Value Dialog label font (for scalar and vector-type -elements)
  • -
  • Pickup Value Dialog pickup value font
  • -
    -The format for all of the entires is componentName_font = fontSize, -where -fontSize is a number from 0 through 4.  The number identifies the -font (TextFont0 through TextFont4) to use for the writing of text to -the -display. -

    The following table defines the various components, their entries, -and -the software default.

    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
     
    -
    -
    Component
    -
    -
    Config Entry Name
    -
    -
    Software Default
    -
    -
    Notes
    -
    Spatial Editor Color Bar Scale Font (scalar and vector)ColorBarScale_font1
    -
    Spatial Editor Color Bar Scale Font (weather)ColorBarWxLabel_font2
    -
    Spatial Editor Color Bar Pickup Value IndicatorColorBarPickUp_font3
    -
    Spatial Editor LegendSELegend_font3
    -
    Spatial Editor SamplesSESample_font2
    -
    Spatial Editor MarkerSEMarker_font3
    -
    Temporal Editor Data Selector (weather element name)TEDataSelector_font1For best results, use fontSizes 0-3
    Temporal Editor Sample Font (used in the display of the data -values)TESample_font1
    -
    Grid Manager Weather Element identifierTimeBlockLabel_font3
    -
    Grid Manager Grid Source fontTimeBlockSource_font1For best results, use fontSizes 0-1
    Time Scale (scale labels)TimeScale_font2For best results, use fontSizes 0-3
    Pickup Value Dialog label (scalar and vector)SetValueContLabel_font2
    -
    Pickup Value Dialog pickup value labelSetValuePickUp_font3
    -
    -
     
    -
    -ColorBarScale_font = 1
    -ColorBarWxLabel_font = 2
    -ColorBarPickUp_font = 3
    -SESample_font = 2
    -SEMarker_font = 3
    -SELegend_font = 3
    -TEDataSelector_font = 1
    -TESample_font = 1
    -TimeBlockLabel_font = 3
    -TimeBlockSource_font = 1
    -TimeScale_font = 2
    -SetValueContLabel_font = 2
    -SetValuePickUp_font = 3 -

    The default fonts used for the display of meteorological data can -also -be set in the configuration file. The user can control the fonts used -in -the following types of displays:

    -
  • bounded area visualization of weather
  • -
  • map background labels
  • -
  • contour labeling
  • -
  • contour tool "white" lines labeling
  • -
    -The format for all of the entires is displayType_font = fontSize, where -fontSize is a number from 0 through 4.  The number identifies the -font (TextFont0 through TextFont4) to use for the writing of text to -the -display. -

    The following table defines the various display types, their -entries, -and the software default.

    - - - - - - - - - - - - - - - - - - - - - - - - - -
     
    -
    -
    Display Type
    -
    -
    Config Entry Name
    -
    -
    Software Default
    -
    Bounded Area labels (weather)BoundedArea_font2
    Contour labels (scalar)Contour_font2
    Contour Tool "White" lines labelingCline_font2

    -BoundedArea_font = 2
    -Cline_font = 2
    -Contour_font = 2
    -
    -
    -
    -
    -

    Back To TOC

    -
    -
    -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/gfeConfig_formatterLauncher.html b/cave/com.raytheon.viz.gfe/help/gfeConfig_formatterLauncher.html deleted file mode 100644 index 2ef77fa26a..0000000000 --- a/cave/com.raytheon.viz.gfe/help/gfeConfig_formatterLauncher.html +++ /dev/null @@ -1,366 +0,0 @@ - - - - - - gfeConfig - Formatter Launcher - - -
    -
    -

    GFE/ifpIMAGE Configuration File
    -Formatter Launcher
    -

    -These configurable items define the formatter launcher, zone combiner, -and product output options:
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    GFE Configuration Item
    -
    -
    Applicable to GFE
    -
    -
    Applicable to ifpIMAGE
    -
    -
    Notes
    -
    Zone Combiner Height and Width
    -
    YESNO
    -
    Call to Action Dialog Height and Width
    -
    YESNO
    -
    Zone Combiner Background Color
    -
    YESNO
    -
    Zone Combiner -NoZone Color
    -
    YES
    -
    NO
    -

    -
    Processor -ValueYES
    -
    NO
    -

    -
    Product -Output Font, Foreground and Background ColorsYES
    -
    NO
    -

    -
    Product Output -Wrap Mode and Wrap Length, and Wrap Mode by Products
    -
    YES
    -
    NO
    -

    -
    Product -Output Text Lock Color
    -
    YES
    -
    NO
    -

    -
    Product -Output Text Framing Color
    -
    YES
    -
    NO
    -

    -
    Product Output -Text Insert Color
    -
    YES
    -
    NO
    -

    -
    Zone -Combiner Label Zones
    -
    YES
    -
    NO
    -

    -
    Zone -Combiner Label Groups
    -
    YES
    -
    NO
    -

    -
    Product -Editor Directory
    -
    YES
    -
    NO
    -

    -
    -
    -
    -
    -


    -

    -

    Zone Combiner Height and Width
    -

    -The initial height and width of the zone combiner dialog can be -specified in pixels.  If not specified, the height/width is set to -80% of the available display space.
    -

    ZoneCombiner_height = 400
    -ZoneCombiner_width = 400
    -

    -

    Zone Combiner Background -Color
    -

    -The background color for the zone combiner is 'gray40', unless -overridden by a gfe configuration entry.  The background color is -used for areas outside of the map background. -

    ZoneCombiner_backgroundColor = 'gray40'

    -


    -

    -

    Zone Combiner NoZone Color
    -

    -The NoZone color for the zone combiner is 'black', unless -overridden by a gfe configuration entry.  The no zone color is -used to indicate those zones which are not included within the -combinations file at all; i.e., products will not be formatted for this -area.
    -
    -ZoneCombiner_noZoneColor = 'black'
    -
    -
    -

    Processor Mode
    -

    -
    -

    Default setting for the  Processor -Mode.  Options are "Server" and "Local".  It -is recommended that "Server" be used for better performance on the GFE. -

    -FormatterLauncherDialog_Processor = -"Server"
    -

    -
    -
    -
    -
    -
    -Product -Output Dialog Font, Background and -Foreground Colors -

    Controls the font and colors in the Product Output Dialog.
    -

    -ProductOutputDialog_font -= "-b&h-lucidatypewriter-bold-*-sans-14-*"
    -ProductOutputDialog_fgColor -= "#000000"
    -ProductOutputDialog_bgColor -= "#d0d0d0"
    -
    -
    -
    -
    Product -Output Dialog Wrap Mode and Wrap Length, Wrap Mode by Products
    -

    -Controls the default setting of the wrap mode, and the default wrap -length.  The default setting of the wrap mode only applies if the -product is not found in the list of "wrapPils" and "nonWrapPils".
    -
    -ProductOutputDialog_wrapMode = -0  #0=off, 1=on
    -ProductOutputDialog_wrapSize = 66

    -
    -
    In addition to -the default wrap mode, a specific wrap mode may be set based on the -product's pil category ("NNN").  There are two lists in the gfe -configuration file, one that defines the product pils that should have -wrap mode enabled, and one with word wrap disabled.
    -
    -ProductOutputDialog_wrapPils = -['ZFP','CWF']
    -ProductOutputDialog_nonWrapPils = -['AFM','PFM','FWF']

    -
    -
    Product -Output Text Lock Color
    -

    -Sets the product editor text lock color.  Defaults to blue.
    -
    -ProductOutputDialog_lockColor = -'blue'
    -
    -

    -
    -Product -Output Text Framing Color
    -

    -Sets the product editor text framing color.  This is the color -used to denote the range of text between the framing characters.  -Defaults to red.
    -
    -ProductOutputDialog_frameColor -= -'red'
    -
    -Product -Output Text Insert Color
    -

    -Sets the product editor text insert color.  This is the color that -indicates the end of the headline, and where text may be inserted to -modify the headline.
    -
    -ProductOutputDialog_insertColor -= -'cyan'
    -
    -
    Zone -Combiner - Label Zones
    -
    -

    Sets the default initial state for the zone combiner.  If -enabled, then the zone names will be labeled on the zone combiner map. -0 for disabled, 1 for enabled.
    -

    -ZoneCombiner_LabelZones -= 0
    -

    -
    -Zone -Combiner - Label Groups
    -
    -

    Sets the default initial state for the zone combiner.  If -enabled, then the zone group numbers will be shown on the zone combiner -map. 0 for disabled, 1 for enabled.
    -

    -ZoneCombiner_LabelGroups -= 1
    -

    -
    -

    -
    Product Editor Directory
    -
    -

    The Product Editor Directory configuration is used with the Formatter Launcher's Product Editor.   -When the user presses the "Save File..." button, the default value -appearing in the Save File dialog is one of several items:
    -

    -

    1) If the product definition contains Definition['outputFile'], then -that value is used in the Save File Dialog as the default.
    -

    -

    2) If the product definition does not contain -Definition['outputFile'], then the software will use the value defined -in the ProductEditorDirectory for the initial directory opened in the -file browser.
    -

    -

    3) If the product definition does not contain -Definition['outputFile'] and ProductEditorDirectory is not defined in -the gfe configuration file, then the default is {prddir}, which is -defined as the .../products directory.
    -

    -

    The default value for ProductEditorDirectory is not defined in the -configuration file.
    -

    -ProductEditorDirectory -= "/tmp"
    -
    -
    - -

    Call To Action Dialog Height and Width
    -

    -The initial height and width of the Call To Action dialog can be -specified in pixels.  If not specified, the height/width is set to -the default values show below.
    -

    -ProductOutputDialog_CTAWidth = 575
    -ProductOutputDialog_CTAHeight = 300
    -

    -

    -

    - -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/gfeConfig_heading.html b/cave/com.raytheon.viz.gfe/help/gfeConfig_heading.html deleted file mode 100644 index 54e5cb398f..0000000000 --- a/cave/com.raytheon.viz.gfe/help/gfeConfig_heading.html +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - gfeConfig - Main Page - - -
    -
    -

    GFE/ifpIMAGE Configuration -File
    -
    Heading
    -

    -
    -
    -
    -The heading section defines macros for the specific server -host and -port.  -These settings are actually obtained from the server's siteConfig.py -file. -There should be no reason to change these settings in this file. -

    import siteConfig
    -GFESUITE_HOME = siteConfig.GFESUITE_HOME
    -GFESUITE_SERVER = siteConfig.GFESUITE_SERVER
    -GFESUITE_PORT = siteConfig.GFESUITE_PORT
    -GFESUITE_SITEID = siteConfig.GFESUITE_SITEID
    -GFESUITE_PRDDIR = siteConfig.GFESUITE_PRDDIR
    -GFESUITE_MHSID = siteConfig.GFESUITE_MHSID
    -GFESUITE_LOGDIR = siteConfig.GFESUITE_LOGDIR
    -yes = 1
    -no  = 0

    -
    -
    -
    -
    -

    Back To TOC

    -
    -
    -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/gfeConfig_hiding.html b/cave/com.raytheon.viz.gfe/help/gfeConfig_hiding.html deleted file mode 100644 index a5a3e38821..0000000000 --- a/cave/com.raytheon.viz.gfe/help/gfeConfig_hiding.html +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - gfeConfig - Main Page - - -
    -
    -

    GFE/ifpIMAGE Configuration -File
    -
    Hiding the Configuration File

    -
    -

    -
    -By default, all gfe configuration files are shown in the GFE Start Up -Dialog.  -Individual configuration files can be "hidden" from the list by adding -the HideConfigFile definition to the configuration file. Note, the -"HideConfigFile" -is not inherited from file to file (BASE->SITE->USER), thus you -must place -this entry in EVERY configuration file that you want to hide.  The -actual value assigned to the HideConfigFile variable is not -important.  -If HideConfigFile appears in the configuration file and isn't commented -out, the configuration file will be hidden.  This variable is -applicable -to the GFE and ifpIMAGE configuration files. -

    HideConfigFile = 1

    -
    -
    -
    -
    -

    Back To TOC

    -
    -
    -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/gfeConfig_nonWECol.html b/cave/com.raytheon.viz.gfe/help/gfeConfig_nonWECol.html deleted file mode 100644 index 33bcdb904b..0000000000 --- a/cave/com.raytheon.viz.gfe/help/gfeConfig_nonWECol.html +++ /dev/null @@ -1,319 +0,0 @@ - - - - - - gfeConfig - Default (non-weather) Color Table Algorithm -Configuration - - -
    -
    -

    GFE/ifpIMAGE Configuration File
    -Default (Non-Weather) Color Table Algorithm Configuration

    -
    -
    -
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    GFE Configuration Item
    -
    -
    Applicable to GFE
    -
    -
    Applicable to ifpIMAGE
    -
    -
    Notes
    -
    Default Color Table -SpectrumYESYES
    -
    Weather Element -Default -Color TablesYESYES
    -
    Logrithmetic Color TablesYESYES
    -
    Default Color Table RangeYESYES
    -
    Color Bar Label -SpecificationYESYESLabels must be entered as floats for all parameters.
    -
    -
    -
    -
    -


    -

    -

    Default -Color Table -Spectrum

    -If not specified, all scalar and vector weather elements will be -assigned -the "--DEFAULT--" color table algorithm.  This algorithm is a -smooth -spectrum of colors, usually from purple to red.  Three entries -define -the minimum wavelength, maximum wavelength, and number of colors that -the -default color table uses. -

    Depending upon the hardware graphics capability in use, you may not -want to increase the number of colors too far. -

    -

    The left wavelength defines the left side value for the color in -nanometers. -380 is roughly purple. The right wavelength defines the right side -value -for the color in nanometers. 650 is red. The number of colors indicate -the number of color bins that will be used when the default color table -is displayed. -

    -

    DefaultColorTable_leftWavelength = 380.0 -
    -DefaultColorTable_rightWavelength = 650.0 -
    -DefaultColorTable_numColors = 70 -


    -

    Weather -Element -Default Color Tables

    -The default color table entries define the initial color table to use -for -a particular weather element.  The format is -parmName_defaultColorTable.  -For non-surface based elements, the format is -parmName_level_defaultColorTable. -The user should ensure that the color tables are "known" tables, i.e., -they exist on the server. The user can determine the list of color -tables -by starting the GFE, displaying any weather element, as an image, and -using -the popup menu over the legend to see a list of color tables. If a -default -color table is not defined for a parameter, then the spectrum defined -in -DefaultColorTable* will be used for the parameter.
    -

    Note: In AWIPS2 this list is greatly expanded. See gfeConfig.py -for full list.

    -

    T_defaultColorTable="midrange enhanced" -
    -Td_defaultColorTable="midrange enhanced" -
    -MaxT_defaultColorTable="midrange enhanced" -
    -MinT_defaultColorTable="midrange enhanced" -
    -Sky_defaultColorTable="cloud" -
    -Wind_defaultColorTable="lowrange enhanced" -
    -PoP_defaultColorTable="gridded data" -
    -QPF_defaultColorTable="gridded data" -
    -  -

    -

    Logrithmetic -Color -Tables

    -Some weather elements may be displayed as an image using a logrithmetic -color table.  The assignment of color slots to values is -logrithmetic, -rather than the normal case of linear.  The format of these -entries -are parmName_LogFactor.  For non surface-based elements, the -format -is parmName_level_LogFactor. The value given must be greater than -0.  -The closer the value is to zero, the steeper the log curve will appear. -Values greater than 1 will result in an almost linear assignment of -values -to color slots.  Values approaching zero will result in an -emphasis -of the values near the weather element's minimum possible value. -

    The following table illustrates the percent of color table entries -that -are used for the first 50% of the weather element's range.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    Factor Value
    -
    -
    Percent of Color Table Entries used in the first 60% -of the -weather element range
    -
    -
    1.0
    -
    -
    58%
    -
    -
    0.5
    -
    -
    62%
    -
    -
    0.1
    -
    -
    75%
    -
    -
    0.05
    -
    -
    78%
    -
    -
    0.01
    -
    -
    85%
    -
    -  -
    -For example, if QPF ranges from 0" to 5", the color table has 70 -entries -in it, and the factor is set to 0.01, then 59 color slots will be used -between 0" and 2.50" and 11 color slots between 2.50" and 5.00".  -If a factor entry was not made for QPF, then 35 color slots would be -used -between 0" and 2.50" and 35 additional color slots between 2.50" and -5.00". -

    QPF_LogFactor = 0.03 -
    -SnowAmt_LogFactor = 0.6
    -

    -


    -

    -

    Default Color -Table -Range

    -By default, the color table spectrum is linearly spread from the -minimum -possible value to the maximum possible value in the weather element as -defined by the Weather -Element Configuration Section in serverConfig.py. The user can -control -the initial range of the color table spectrum based on the weather -element -name by adding a pair of entries for each weather element into the gfe -configuration file.  The format is parmName_minColorTableValue and -parmName_maxColorTableValue.  For non surface-based elements, the -format is parmName_level_maxColorTableValue and -parmName_level_minColorTableValue. -The user should ensure that the values have a decimal point in -them.  -When the weather elements are first displayed as an image, the color -spectrum -will be displayed based on the supplied min and max values, rather than -those in the database. -

    T_maxColorTableValue = 120.0 -
    -T_minColorTableValue = -30.0
    -WetBulb_maxColorTableValue = 50.0
    -WetBulb_minColorTableValue = 20.0
    -

    -

    The user may also specify that the initial color table is calculated -based on the "fit to data" algorithm.  All of the grid values are -examined and the color table assigned from the minimum to maximum -observed -value in all of the grids.  The format of this entry is -parmName_fitToDataColorTable.  -For non surface-based elements, the format is -parmName_level_fitToDataColorTable. -Through the GFE GUI, there are four types of fit to data that are -available, -'All Grids', 'All Grids over Area', 'Single Grid', and 'Single Grid -over -Area'.  Of these,  all of them are available to the ifpIMAGE -program, but only the 'All Grids' and 'All Grids over Area' are -recognized -by the GFE.   The area used is the current edit area for the -GFE.  Note that the ifpIMAGE program can specify an edit area to -use -for the 'All Grids over Area', and 'Single Grid over Area' -algorithms.  -See the Png_fitToDataArea -entry. -

    -

    T_fitToDataColorTable = "None"
    -

    -

    -

    -

    Color -Bar Label -Specification

    -Comfigure the desired labels on the SE Color Bar on a per-parameter -basis.  -The format is parmName_ColorBarLabels.  For non surface-based -elements, -the format is parmName_level_ColorBarLabels. Given the example -below,  -the  Temperature color bar would be labeled at 10, 40, 60 and -90.  -Note that the values need to be entered as floats.  This variable -does not apply to Weather data types, only scalar and vector. -

    T_ColorBarLabels = [10.00, 40.00, 60.00, 90.00]
    -

    -
    -


    -

    - -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/gfeConfig_process.html b/cave/com.raytheon.viz.gfe/help/gfeConfig_process.html deleted file mode 100644 index 3040ef4e36..0000000000 --- a/cave/com.raytheon.viz.gfe/help/gfeConfig_process.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - gfeConfig - Background Processing - - -
    -
    -

    GFE/ifpIMAGE Configuration File
    -Background Processing
    -

    -These configurable items define the background processing -characteristics of the GFE.
    -
      - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    GFE Configuration Item
    -
    -
    Applicable to GFE
    -
    -
    Applicable to ifpIMAGE
    -
    -
    Notes
    -
    Process Monitor Max Lines
    -
    YESNO
    -
    Process Monitor Max Old Tasks
    -
    YESNO
    -
    Process Monitor Max Tasks
    -
    YESNO
    -
    -
    -
    -
    -


    -

    -

    Process Monitor Max Lines
    -

    -This item defines the number of lines that are held in the terminal -window displayable from the Process Monitor -Dialog, before scrolling off.  If you aren't able to capture -as much of the process output as desired, then you should increase this -number.  This affects the capacity of the terminal window only.
    -

    ProcessMonitorMaxLines = 2000

    -

    Process Monitor Max Old -Tasks

    -This item defines the number of "finished" tasks that will be kept -around as available in the Process Monitor Dialog.  -As long as the finished task is available in the dialog, the output -from the task is available.
    -
    - - -

    ProcessMonitorMaxOldTasks = 10
    -
     

    -

    Process Monitor Max Tasks
    -

    -This item defines the maximum number of background processes that can -be simultaneously executed, based on the automatic scheduling of -background processes.  A user can always start any process that is -in the pending state by using the Process Monitor Dialog, -even if starting a process would exceed this threshold. -

    ProcessMonitorMaxTasks = 1
    -
    -

    -
    -
    -
    -

    -
    - -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/gfeConfig_sysTR.html b/cave/com.raytheon.viz.gfe/help/gfeConfig_sysTR.html deleted file mode 100644 index 3d976a977f..0000000000 --- a/cave/com.raytheon.viz.gfe/help/gfeConfig_sysTR.html +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - gfeConfig - Time Range - - -
    -
    -

    GFE/ifpIMAGE Configuration -File
    -
    System Time Range Configuration
    -

    -
    -

    -The system time range configuration defines the range of the temporal -editor -and grid manager in time.  If no grids are present in any of the -weather -elements, then the temporal editor and grid manager will use the -default -starting and ending times based on the current system time.  Units -are in hours For example, if the beforeCurrentTime is set to 48 (2 -days) -and the afterCurrentTime is set to 168 (7 days), then the grid manager -scroll limits will be 2 days in the past and 7 days into the future. -

    The actual scollable limits are modified if there are grids and/or -locks -present. The scrollable limits will be expanded by the inventory of -grids -and the occurance of locks (for the mutable database).

    -

    These varables are applicable to the GFE configuration file only.

    -

    SystemTimeRange_beforeCurrentTime = 48
    - SystemTimeRange_afterCurrentTime = 168

    -
    -
    -
    -
    -
    -

    Back To TOC

    -
    -
    -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/gfeConfiguration.html b/cave/com.raytheon.viz.gfe/help/gfeConfiguration.html deleted file mode 100644 index a7ba1cba9f..0000000000 --- a/cave/com.raytheon.viz.gfe/help/gfeConfiguration.html +++ /dev/null @@ -1,252 +0,0 @@ - - - - - - - GFE Configuration Information - - - -

    -GFE Configuration Information

    - - - -

    -Overview

    - -
    The gfe may be started with different configuration -files.  Some of these files may be overridden by the site or by individual -users.  The GFE configuration files define many of the display characteristics -of weather elements, such as color tables, contour intervals, user interface -fonts, as well as default modes for many of the tool states. -

    By default, the GFE uses a configuration file called gfeConfig.py. -This is provided as an installed file in BASE, and can be overridden by -the site or individual users.  At no -time should the files that are sent with the software release or install -be modified directly.  These will be overwritten with the next upgrade. -

    The technique to modify or create new gfe configuration -files is through the GFE -- not by hand editing. -

    Sites will need to create alternative GFE configuration -files for use with the ifpIMAGE program.  -That program uses the GFE in background mode to generate Portable Network -Graphics imagery. -

    The format of the GFE -configuration file is documented here.

    - -
    -
    - -

    -GFE Configuration Modification Options

    -There are several scenarios for modifying the standard gfe configuration -option.  The recommended option is partial site overrides and user -overrides from the installed base.  You can override all entries in -the gfe configuration file. -The configuration overrides described below describe the actual locations -of the files.  Normally you would define -a new configuration file by using the GFE GUI. -

    The technique for the GFE to pick up configuration files uses the standard -BASE, -SITE, USER concept.  With this concept, files can be merged using -the Python "import statement" since GFE configuration files contain Python -code. -

    The basic rule is that using the same name as an existing file "up the -tree", e.g., from SITE or USER,  will result in a complete override -of the definitions "up the tree".  If your site or user files are -of a different name, then you can import the symbols from the site or base -files with the result that your configuration file simply contains overrides. -

    -No Changes From Installed Files

    -This is the default case.  There is nothing you need to do. -
      -

    -Partial Site Override of Standard GFE Configuration (recommended)

    -Start the Localization perspective from the main menu by selecting -GFE->Define Config and ifpIMAGE Files. Create a new gfe configuration file -with just the entries you want to override.  The filename must be -different from the base configuration file since you will be importing -all of the definitions from the base configuration file. This should be -a small file.  Save the file in SITE, which puts it in the SITE area of the -server.  The advantage of partial overrides is that new BASE files -can be installed and your overrides will still work. Be sure to include -the appropriate Python "import" statement. -
      -

    -Partial User Override of Site's or Standard GFE Configuration (recommended)

    -Start the Localization perspective from the main menu by selecting -GFE->Define Config and ifpIMAGE Files for the user for whom you want to create a -new configuration. Create a new gfe configuration file with just -the entries you want to override, but use a different name. Be sure to -use the Python import statement to include all of the definitions from -the SITE or BASE files. (Note: the list of all of the available files are -presented to you when you start the GFE.) The created file should be a -small file.  Save the file for your user name, which puts it at the user's customized -location in the server.  The advantage of partial overrides is that -new BASE or SITE  files can be installed and your overrides will still -work. -
    -

    -Complete Site Override of Standard GFE Configuration (not -recommended)

    -The GFE will not let you do this directly since when you try to edit the -original BASE file, it will be displayed as a read-only version.  -In order to completely override the standard GFE configuration, you must -go into the server directories and copy the gfe configuration file from -the original location (leave the original -one there) to the site's customized location.  -The filename should remain the same. The disadvantage of this situation -is that you will need to do a careful comparison between newly upgraded -files and your modified files after each upgrade, and you will not be able -to import files of the same name. -
    -

    -Complete User Override of Standard GFE Configuration (not -recommended)

    -The GFE will not let you do this directly since when you try to edit the -original BASE file, it will be displayed as a read-only version.  -In order to completely override the standard GFE configuration, you must -go into the server directories and copy the gfe configuration file  -from the original location (leave the -original one there) to the user's customized -location. The filename should remain the same. The disadvantage of -this situation is that you will need to do a careful comparison between -newly upgraded files and your modified files after each upgrade, and you -will not be able to import files of the same name. -
    - -
    - -

    -How the GFE Gets Its Configuration

    -The GFE and ifpIMAGE programs get their configuration through the standard -BASE, -SITE, USER file access scheme. Only those items that you wish changed -are necessary to place in the SITE and USER directories since you can refer -to the files at the higher level using the "import" statement. -

    The method you use to place files at the SITE and USER level is to access -the Localization perspective either through GFE, or directly and save the -created files to the SITE/USER levels as desired. -You then access the define gfe configuration file through the main menu -entry GFE->Define -Config and ifpIMAGE filesPlease -do not modify the files directly in the server directories; instead -use the GFE. -

    The illustration shows how the access is performed: -
    -

    In the above picture, configuration file "d" imports "c" which imports -"b".  Only a few items need to be overridden in files "c" and "d" -to result in a gfe configuration file that resembles b+c+d.  File -"a" in the USER imports "b" in the BASE so the result is a+b.  Note -that since there is a file "a" in the USER that it completely hides the -"a" in BASE. -

    The following examples illustrates this merging concept for configration -file "d".  Only portions of the configuration files are shown. -

    -BASE file (b)

    -The comments have been removed from this example.  Only a portion -of the configuration file is shown.  Three entries are shown : the -default sample set, the default map backgrounds, and the default color -table for weather element "T".  For this example, we are assuming -that the base gfe configuration file is named BASEgfeConfig. -

    ..... -
    DefaultSamples = ['DefaultSamples'] -
    MapBackgrounds_default = ['CWA','States'] -
    T_defaultColorTable="midrange enhanced" -
    .... -
      -

    -SITE file (c)

    -This is the entire configuration file ( 4 lines).  A DefaultSamples -is shown, as well as a default color table for weather element "Td". -

    from b import * -
    DefaultSamples = ['CitySamples','ObsSamples'] -
    Td_defaultColorTable="mid temp enhanced" -
      -

    -USER file (d)

    -This is the entire configuration file (4 lines).  The user has defined -the default map backgrounds and contour font.  It is assumed that -the site configuration file is called SITEgfeConfig. -

    from c import * -
    MapBackgrounds_default = ['CWA_Zones'] -
    Contour_font = 4 -

    The following shows the effective composite configuration file for the -USER (keeping in mind there are other entries in the BASE file that are -not shown): -

    DefaultSamples = ['DefaultSamples'] -
    MapBackgrounds_default = ['CWA','States'] -
    T_defaultColorTable="midrange enhanced" -
    DefaultSamples = ['CitySamples','ObsSamples'] -
    Td_defaultColorTable="mid temp enhanced" -
    MapBackgrounds_default = ['CWA_Zones'] -
    Contour_font = 4 -

    which simplifies to: -

    T_defaultColorTable="midrange enhanced" -
    DefaultSamples = ['CitySamples','ObsSamples'] -
    Td_defaultColorTable="mid temp enhanced" -
    MapBackgrounds_default = ['CWA_Zones'] -
    Contour_font = 4 -

    -


    - -

    -Location of Files

    -The gfe configuration files are served out of EDEX. As -a result, you should NEVER edit these files directly.  -The location of the gfe configuration files are shown for your convenience, -but not for you to edit directly: -
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    File PurposePart of Std. Rel.AWIPS File Location, directory
    Base gfe configuration files -
    YES
    -
    /awips2/cave/etc/gfe/userPython/gfeConfig
    Site modified gfe configuration filesNO/awips2/edex/data/utility/cave_static/site/SITE_ID/gfe/userPython/gfeConfig
    Customized user gfe configuration filesNO/awips2/edex/data/utility/cave_static/user/USER/gfe/userPython/gfeConfig
    -* USER is the user name -

    -


    - -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/ghETN.html b/cave/com.raytheon.viz.gfe/help/ghETN.html deleted file mode 100644 index 210d7afdfe..0000000000 --- a/cave/com.raytheon.viz.gfe/help/ghETN.html +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - ghETN User's Guide - - -

    ghETN User's Guide

    -
    September 30, 2007
    -

    Table of Contents

    -

    Overview

    -

    Running the ghETN Program

    -

    Example Output

    -

    -

    Overview

    -
    The ghETN is a utility program to output the -maximum ETN found in the VTEC active table for a specified office, -phenenomenon, and significance. For further information on the -meaning of the codes within the VTEC active table, refer to the GFESuite VTEC Guide.
    -

    -

    Running the ghETN Program

    -
    The command line syntax is:
    -
    ghETN -w siteid -p phenomenon -s -significance [-n tableName] [-h serverhost] [-r serverport]
    -
    ghETN -w siteid -p phenomenon -s -significance -f VTECfilename
    -
    -
    A sample command line is:
    -
    ghETN -w KGSP -p SB -s Y
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Option SyntaxOptional or MandatoryDescription
    -w wfoidMandatoryDefines the WFOID filter. If not specified, then all records from -all sites will be output.
    -p phenomenonMandatoryDefines the VTEC phenomenon filter, e.g., "WS". If not specified, -then all phenomena will be output.
    -s significanceMandatoryDefines the VTEC significance filter, e.g., "A". If not specified, -then all significances will be output.
    -n tableNameOptionalDetermines the name of the active table to dump. Default is -"active".
    -f VTECfilenameOptionalSpecifies the filename of the active table to dump. -Note: use this option without the -h and -r options. No file locking is -used for this scheme and the VTEC file is opened directly, i.e., the -program does not use the ifpServer.
    -h serverhostOptionalDefines the server (ifpServer) host name. Ignored if the -f switch -is used. Default is the configured ifpServer host.
    -r serverportOptionalDefines the server (ifpServer) port. Ignored if the -f switch is -used. Default is the configured ifpServer port.
    -
    -
    -

    Example Execution

    -
    The following shows an example of running the -ghETN program: -

    bart > ghETN -w KGSP -p SB -s Y -
    6 -
    bart >

    -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/ifpAG.html b/cave/com.raytheon.viz.gfe/help/ifpAG.html deleted file mode 100644 index 75123ff439..0000000000 --- a/cave/com.raytheon.viz.gfe/help/ifpAG.html +++ /dev/null @@ -1,995 +0,0 @@ - - - - - - ASCII Grid Format and ifpAG Program - - -

    -ifpAG User's Guide

    -
    January 4, 2012
    -
    -Table of Contents -

    -Overview

    -

    -Terminology and -Concepts of GFESuite Gridded Data

    - - - - - - - - - - -

    -Running the ifpAG Program

    - - -

    -Special -Use of ifpAG to exchange grids between different resolutions of GFESuite

    -

    -Example Data

    - -
    -
    -

    -Overview

    -
    The ifpAG (ASCII grid) program is part of the -GFESuite -of product generation software. -
    -
    -
    The current EDEX (common data server) -currently -uses a Java interface to store and retrieve grids in the database. While -this works well for the Graphical Forecast Editor and initialization -processes, -it makes it difficult for field sites to store and retrieve data into the -database.
    -
      -
    -The ASCII grid format, along with its associated program, allows the -user to store and retrieve grids that are specified in a special ASCII -format. This format is chosen to make it easy for users who program in -basic, Fortran, or C to read and write this format.
    -
      -
    -Another use of the ifpAG program is to transfer -grids between different resolutions of GFESuite.  The format -of -the output of ifpAG has been preserved between software builds.  -The -program will automatically translate grid resolutions and domains when -storing and retrieving data.  For example, you can use the ifpAG -program -to take 5 kilometer resolution grids from GFESuite and populate another -GFESuite running at 2.5 kilometer resolution.  Of course, data -resolution -will be lost. Obviously there are some cases where -grids -cannot be transferred, such as the input and output domains don't -overlap -at all or the projection is different (e.g., Grid211).
    -
    -

    -Terminology -and -Concepts of GFESuite Gridded Data

    -
    In order for you to understand how to interpret -the -output, or format the input, to ifpAG, you need to understand these -basic -GFESuite concepts.
    -

    -Server Configuration

    -
    The GFE configuration file (serverConfig -and localConfig) define all parameters, -types of databases, and their attributes. The configuration file is -tailored -by the site. See the server -configuration -manual for further information.
    -

    -Data Types

    -
    GFE supports four different data types: -SCALAR, VECTOR, WEATHER, and DISCRETE. SCALAR is used for parameters -whose -values can be represented by a single value. VECTOR is used for -parameters -who values are represented by a vector (magnitude and direction). -WEATHER -is a special format for describing the precipitation and obstructions -to -vision.  DISCRETE is for categorical weather elements, such as -headline -grids.
    -

    -Weather Element Identifier

    -
    A parameter identifier is used to uniquely -identify -an element in the database. A parameter identifier consists of two -parts: parameter name, and database identifier. A complete -identifier (in ASCII) may appear like the following in the ASCII grid -file:

    -
    Wind
    -
    BOU
    -
    <notype>
    -
    MRF
    -
    19980506_1200
    -
      -
    -The first line indicates the parameter name, the second the site -identifier, -the third is the optional type of the database, the fourth is the model -name, and the last line is the model run time in the form of yyyymmdd_hhmm. -The example above indicates that the parameter is Wind. It is from (or -derived from) 1the May 6, 1998 1200z eta model. The optional type is -blank -in the above case.
    -
    -
    -There may be some databases which always exist, i.e., are not model -time based. Typically the forecast database is handled this way. -An example identifier for the forecast database is shown below:

    -
    T
    -
    BOU
    -
    <notype>
    -
    Fcst
    -
    00000000_0000
    -
    -
    -The date-time group of all zeros indicate that the database is -persistent -and therefore does not have a model run time associated with it. -A full list of parameters, site identifiers, and -model names supported by GFE is available in the server -configuration -files. Refer to the server -configuration -manual for details. This server configuration files may be -tailored -by each site. -

    Note that the parameter name may contain a level.  Many of the -parameters are surface-based, but for those that are not, the parameter -definition is in the form of name_level, such as Wind_MB500 for the -500MB Wind.

    -
    -

    -Time Range (Valid time of grid)

    -
    Time is defined as a TimeRange which consists of -a starting and ending time. A TimeRange contains all times from and -including the starting time up to but not including the -ending -time. For example, a TimeRange of 1:00pm to 2:00pm contains all times -from 1:00pm including 1:00pm up to but not including -2:00pm.
    -
    -
    -All data stored in the database uses this time definition. The duration -of data is calculated by taking subtracting the starting time -from the ending time. Note that a duration of zero -means a snapshot in time. Durations of zero are illegal for the -database since a forecast field must have a valid time range.
    -
    -
    -The format of the time is in yyyymmdd_hhmm. For example,

    -
    19980518_1300

    -
    indicates May 18, 1998 at 1300z.
    -
    -

    Geographical -Location Information

    -
    Associated with each grid is geographical -location -which is used to position the grid on the earth's surface.The placement -of the grid in the world coordinate system is based on -three -items:
    -
      -
    •     projection identifier
    • -
    •     grid domain
    • -
    •     grid size
    • -
    -
    All of these items are defined in the individual -database configuration files. An example of these values are shown -below -for the Boulder WFO area:
    -
      -
    •     projection identifier = -Grid211 (AWIPS Conus)
    • -
    •     grid domain - origin is -(37.0, 27.0), extent is -(9.0, -9.0)
    • -
    •     grid size - 73 x 73
    • -
    -
    This is interpreted as a 73 x 73 point grid whose -lowest-left grid point is at the world coordinate (37, 27) on the AWIPS -world coordinate projection and whose uppermost-right -grid -point is at the world coordinate (37+9, 27+9) as shown in the diagram below:
    -
    -

    -Time Independent Parm

    -
    The time independent parm flag (0 for false, -non-zero -for true) indicates that this parameter has no valid time associated -with -it, therefore only one grid, which is valid forever may be stored into -the database. In almost all cases, 0 for not time independent parm will -be set.
    -

    -Data Precision

    -
    The number of significant decimal points for the -data. A value of 0 indicates that integer values are all that is -important -(even if there is more precision indicated by the data). A value of 1 -indicates -that the precision is 10 -1 or 0.1.
    -

    -Parameter Units

    -
    The parameter units field indicates the units -used -by the data.
    -

    -Descriptive Name

    -
    The descriptive name field provides a more -detailed -description of the parameter.
    -

    -Time Constraints

    -
    The time constraints consist of three elements: -starting -time, duration, and repeat interval. These values indicate the time -limits -that the parameter must obey. All grids for the parameter must be -aligned -on the specified time constraints. The starting time indicates the time -of the first possible grid after 0000z. The duration indicates the -length -of the grid. The repeat interval defines how often the grid can repeat. -All of the units are in seconds. For example, the illustration below shows the -possible -grid boundaries for a time constraint of starting time of 0, duration -of -6 hours, and repeat interval of 6 hours:
    -
    -
    In the above example, grids can be a minimum of 6 -hours long, but could be 12 or 18 or even 24 hours in length just as -long -as the starting and ending time of the grid falls on one of the defined -above. A time constraint can be defined to have gaps in -the data. For example, a 24-hour summary of daytime maximum temperature -may have a constraint of starting time 900z, duration of 18 hours, and -a repeat interval of 24 hours:
    -
    -
    Most parameters are defined in the database with -a one hour constraint (start time = 0000z, repeat = 1 hour, duration = -1h). Therefore the highest temporal resolution of the grids is one hour:
    -

    -

    -

    A special case exists which defines no constraints. -This is the situation with a start time, repeat, and duration values -all set to 0. The temporal resolution of the grids can be one second. -
    -

    -

    Data Format

    -
    The format of the data depends upon whether the -data -is SCALAR, VECTOR, WEATHER, or DISCRETE.
    -

    -Scalar Data Format

    -
    There are nx*ny lines of data in the file, with -each -line representing one data gridpoint. The values are floating-point.
    -

    -Vector Data Format

    -
    There are nx*ny lines of data in the file, with -each -line representing one data gridpoint. There are two floating-point -values -on each line. The first is the magnitude and the second the direction.
    -

    -Weather Data Format

    -
    There are nx*ny lines of data in the file, with -each -line representing one data gridpoint. There is a string of characters -on -each line. The characters define the type of weather and/or -obstructions -to vision that are present for that gridpoint. The entire set of -characters -on a single line is called a weather key. A weather key is comprised of -weather sub keys.
    -
    -
    -A weather subkey consists of four parts and one additional optional -part:
    -
        weather type (e.g., rain)
    -
        coverage or probability (e.g., -scattered or slight chance)
    -
        intensity (e.g., light)
    -
        visibility (e.g., 25 m)
    -
        attributes (e.g., "in -mountains")
    -
    -
    -The general format of a single weather sub key is: -coverage:type:intensity:visibility:attributes
    -
      -
    -The coverage is a special coverage string of characters that denote -the precipitation or obstruction to vision coverage. The type is the -precipitation -type or obstruction as a string of characters. The intensity field is a -string of characters that denote an intensity. The visibility string -denotes -the character. The list of optional attributes are comma deliminated.
    -
    -
    -Multiple weather sub keys are separated by the caret (^) character -like this:
    -
    coverage1:type1:intensity1:visibility1:attribute1,attribute2^coverage2:type2:intensity2:visibility2:attribute3
    -
      -
    -There is no (practical) limit to the number of types of weather. -Multiple -weather types at a single grid point require a weather key that -contains -multiple groupings. A typical weather key is shown below:
    -

    ISO:T:+:1/4sm:HvyRain^ISO:A:<NoInten>:<NoVis>:SmA -

    -

    which is decoded as isolated intense thunder with -1/4 -sm visibility, isolated small hail. -

    -

    No precipitation or obstructions is indicated by: -

    -

    <NoCov>:<NoType>:<NoInten>:<NoVis>: -

    -

    The server -configuration -files define the allowable values of the weather key.  Refer -to -the weather -configuration -section of the serverConfig documentation for further details. -
    -  -

    -

    Discrete Data Format

    -
    There are nx*ny lines of data in the file, with -each -line representing one data gridpoint. There is a string of characters -on -each line. The characters define the discrete key(s) that are present -for -that gridpoint. The entire set of characters on a single line is called -a discrete key. A discrete key may be  comprised of discrete sub -keys.  -Subkeys are separated by the '^' character.
    -
    A typical discrete key is shown below:
    -

    WintStmWRN^HiWndWRN -

    -

    which is decoded as Winter Storm Warning and High -Wind -Warning. -

    -

    No discrete key is typically denoted by: -

    -

    <None> -

    -

    The server -configuration -files define the allowable values of the weather key.  Refer -to -the weather -element configuration section of the serverConfig documentation for -further details. -
    -
    -

    -

    Organizational Order of the Grid

    -
    Grids are organized from lower-left across and -then -by row, with the very last point being the upper right gridpoint as -shown:
    -
    -
    -
    -

    -Running the ifpAG Program

    -
    The program is capable of both storing and -retrieving -grids from EDEX. -

    Note: when running ifpAG in the normal -environment, -the -h and the -r switches are preset to the values defined by your -installation, -and thus the -h and -r switches are not needed. If you are -connecting -to a different EDEX than configured, then you will need the -h and --r switches.

    -
    -

    -Output Mode

    -
    The command line syntax is:
    -
    ifpAG -o outputFile -h hostname -r -rpcPortNumber --d databaseID [-p parmID] [-s startTime] [-e endTime] [-u username] [-c -domainConfiguration]
    -
    A sample command line is:
    -
    ifpAG -o testIt -h dx3-oax -r -9581 --d TEST_GRID__Fcst_00000000_0000 -p Temp -s 19980604_1200 -e -19980605_0000
    -
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Option SyntaxOptional or MandatoryDescription
    -o filenameMandatorySpecifies the name of the output file. If "-" is used, -output -will go to standard out.
    -h hostnameMandatory (See Note)Specifies the host, upon which EDEX is running
    -r portMandatory (See Note)Specifies the port, upon which EDEX is running
    -d databaseidMandatorySource, a.k.a. database identifier, from which to get the -data. -There may be several databaseIDs (several -d's) specified.  The -format of the database identifier is: -site_GRID_optType_modelName_modelRunTime. -An example is DEN_GRID__eta_19980604_1200.
    -p weatherElementNameOptionalIf no -p switches are present, then all weather elements in -the specified -databases will be processed.  There may be several -p switches -present -if desired.  The weather element name can include a level, if -desired, -such as T_3K. By default if the level is not specified, it is -assumed -to be SFC.
    -u usernameOptionalThe user running the program.
    -s startTimeOptional -
    Specifies the start time for the range of -grids to -extract. If no time is specified, then assume "from the beginning of -time". -Format is yyyyMMDD_HHMM or 19980604_1200.
    -
    -e endTimeOptional -
    Specifies the ending time for the range of -grids -to extract. If no time is specified, then assume "to the end of -time".  -Format is yyyyMMDD_HHMM or 19980604_1200.
    -
    -c domainConfigurationOptionalBy default, the grids are output in the same projection, -domain, and -grid resolution as they are stored in GFE. You can -override -the domain configuration by specifying an encoded string in -quotes.  -The format is "xgridSize ygridSize projectionId xorigin yorigin xextent -yextent". An example is "35 35 Grid211 28.0 14.0 9.0 9.0".
    -Note: that when running ifpAG within the -standard -GFESuite environment, the -h and -r switches are automatically filled -in for the configured EDEX and port. -

    Input Mode

    -
    The command line syntax is:
    -
    ifpAG -i inputFile -h hostname -r -rpcPortNumber [-u username]
    -
    A sample command line is:
    -
    ifpAG -i testIt -h dx3-oax -r 9581 -u jsmith

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Option SyntaxOptional or MandatoryDescription
    -i filenameMandatory Specifies the name of the input file. If "-" is used, input will -come from standard in.
    -h hostnameMandatory (See Note)Specifies the host, upon which EDEX is running
    -r portMandatory (See Note)Specifies the port, upon which EDEX is running
    -u usernameOptionalSpecifies the user running the program
    -Note: that when running ifpAG within the -standard -GFESuite environment, the -h and -r switches are automatically filled -in -for the configured EDEX and port. -
    -
    -

    -Special -Use of ifpAG to exchange grids between different resolutions of GFESuite

    -
    ifpAG can be used to communicate with different -servers of GFESuite that are running different resolutions. To transfer -all data in the Fcst database from -one server to the other server, you will use a command line similar to -that below:
    -

    ifpAG -o - -h dx3-oax -r 9581 -d -BOU_GRID__Fcst_00000000_0000 -| ifpAG -i - -h dx3-oax -r 9581 -

    -

    -
    -

    Example Data

    -
    The following shows example data files and how it -is interpreted. More than one GRID may be contained in a single file.
    -

    -Scalar

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ASCIIGRIDIdentifies the following structure as an ASCIIGRID
    SCALARData Type (SCALAR, VECTOR, WEATHER, DISCRETE)
    TWeather Element Name
    DENDatabase site identifier
    <notype>Database optional type
    FcstDatabase model name
    00000000_0000Database time (denotes no model time associated with it when -all zeros, -normally yyyymmdd_hhmm)
    Grid211Projection Identifier
    73 73 25 13 9 9Domain information. XGridSize, YGridSize, Minimum X world -coordinate -domain, Minimum Y world coordinate domain, X domain extent, y domain -extent
    FUnits
    Surface TempDescriptive Name
    -50 130 0 0Minimum possible value, maximum possible value, data -precision, time -independent parameter
    0 3600 3600Time constraints (startTime, duration, repeat interval).
    19980518_1200 19980518_1500Valid time range for grid (start time, ending time) in format -of yyyymmdd_hhmm
    51First grid point  - Grid(0,0)
    52Next grid point - Grid(1,0)
    54Grid(2,0)
    52Grid(3,0)
    ...continues for a total of nx*ny grid points
    59Grid (upper right corner)
    -

    - Vector

    -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ASCIIGRIDIdentifies the following structure as an ASCIIGRID
    VECTORData Type (SCALAR, VECTOR, WEATHER, DISCRETE)
    WindWeather Element Name
    DENDatabase site identifier
    <notype>Database optional type
    FcstDatabase model name
    00000000_0000Database time (denotes no model time associated with it when -all zeros, -normally yyyymmdd_hhmm)
    Grid211Projection Identifier
    73 73 25 13 9 9Domain information. XGridSize, YGridSize, Minimum X world -coordinate -domain, Minimum Y world coordinate domain, X domain extent, y domain -extent
    KnotsUnits
    Surface WindDescriptive Name
    0 125 0 0Minimum possible value, maximum possible value, data -precision, time -independent parameter
    0 3600 3600Time constraints (startTime, duration, repeat interval).
    19980518_1200 19980518_1500Valid time range for grid (start time, ending time) in format -of yyyymmdd_hhmm
    5 90First grid point  - Grid(0,0) with magnitude first, -followed by -direction
    6 92Next grid point - Grid(1,0)
    11 88Grid(2,0)
    9 85Grid(3,0)
    ...continues for a total of nx*ny grid points
    15 270Grid (upper right corner)
    -

    -Weather

    -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ASCIIGRIDIdentifies the following structure as an ASCIIGRID
    WEATHERData Type (SCALAR, VECTOR, WEATHER, DISCRETE)
    WxWeather Element Name
    DENDatabase site identifier
    <notype>Database optional type
    FcstDatabase model name
    00000000_0000Database time (denotes no model time associated with it when -all zeros, -normally yyyymmdd_hhmm)
    Grid211Projection Identifier
    73 73 25 13 9 9Domain information. XGridSize, YGridSize, Minimum X world -coordinate -domain, Minimum Y world coordinate domain, X domain extent, y domain -extent
    discreteUnits
    Weather and ObstructionsDescriptive Name
    0 1 0 0Minimum possible value, maximum possible value, data -precision, time -independent parameter
    0 3600 3600Time constraints (startTime, duration, repeat interval).
    19980518_1200 19980518_1500Valid time range for grid (start time, ending time) in format -of yyyymmdd_hhmm
    <NoCov>:<NoWx>:<NoInten>:<NoVis>:First grid point  - Grid(0,0) - coded weather key
    -
    Ocnl:R:--:<NoVis>:
    -
    Next grid point - Grid(1,0)
    -
    Ocnl:R:--:<NoVis>:
    -
    Grid(2,0)
    -
    Iso:T:++1/4sm:HvyRain
    -
    Grid(3,0)
    ...continues for a total of nx*ny grid points
    <NoCov>:<NoWx>:<NoInten>:<NoVis>:Grid (upper right corner)
    -

    -Discrete Data Format

    -
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ASCIIGRIDIdentifies the following structure as an ASCIIGRID
    DISCRETEData Type (SCALAR, VECTOR, WEATHER, DISCRETE)
    HighlightsWeather Element Name
    DENDatabase site identifier
    <notype>Database optional type
    FcstDatabase model name
    00000000_0000Database time (denotes no model time associated with it when -all zeros, -normally yyyymmdd_hhmm)
    Grid211Projection Identifier
    73 73 25 13 9 9Domain information. XGridSize, YGridSize, Minimum X world -coordinate -domain, Minimum Y world coordinate domain, X domain extent, y domain -extent
    highlightsUnits
    W/W/A HighlightsDescriptive Name
    0 1 0 0Minimum possible value, maximum possible value,  data -precision, -time independent parameter
    0 3600 3600Time constraints (startTime, duration, repeat interval).
    19980518_1200 19980518_1500Valid time range for grid (start time, ending time) in format -of yyyymmdd_hhmm
    <None>First grid point  - Grid(0,0) - coded weather key
    -
    <None>
    -
    Next grid point - Grid(1,0)
    -
    WntrStmWRN
    -
    Grid(2,0)
    -
    WntrStmWRN^HiWndWRN
    -
    Grid(3,0)
    ...continues for a total of nx*ny grid points
    <None>Grid (upper right corner)
    -
    -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/ifpBreakAllLocks.html b/cave/com.raytheon.viz.gfe/help/ifpBreakAllLocks.html deleted file mode 100644 index e16a4b3444..0000000000 --- a/cave/com.raytheon.viz.gfe/help/ifpBreakAllLocks.html +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - - ifpBreakAllLocks - - -

    -ifpBreakAllLocks User's Guide

    -January 4, 2012 -

    -The ifpBreakAllLocks program is part of the GFESuite software. -It can be used to break all the locks on all the Weather Elements in -the identified GFE. -WARNING: This operation may result in the loss of -data so the program should be used with caution. -
    -
    -

    Running the program

    -

    -Command Line Switches

    -The command line syntax is: -

    ifpBreakAllLocks -h hostname -p rpcPortNumber -s siteID [-a] [-d -databaseID]
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Command SwitchOptional or Mandatory?Description
    -hMandatory (see Note)Host name upon which EDEX is running
    -pMandatory (see Note)RPC port upon which EDEX is running
    -sMandatorySite id for which GFE is running
    -a
    -
    Optional
    -
    Specifies that all databases -will have their locks removed. Either the -a or -d switch is -required.
    -
    -d databaseID
    -
    Optional
    -
    Specifies the database that will -have the locks removed. There may be more than one -d switch -present. Either the -a or -d switch is required.
    -
    -Note: The -h and -p switches are predefined -when running in an installed GFESuite environment. They are defined -to the values specified when installing the software. If you wish -to connect to a different EDEX, then the switches will need to be -specified. -

    -
    -

    Sample Output

    - -


    -17:01:04 ifpBreakAllLocks.py INFO: Break All Locks starting
    -17:01:12 ifpBreakAllLocks.py INFO: No locks found
    -17:01:12 ifpBreakAllLocks.py INFO: Break All Locks Finished
    -
    -

    -

    -

    -Return to TOC - - diff --git a/cave/com.raytheon.viz.gfe/help/ifpIMAGE.html b/cave/com.raytheon.viz.gfe/help/ifpIMAGE.html deleted file mode 100644 index e52b698c83..0000000000 --- a/cave/com.raytheon.viz.gfe/help/ifpIMAGE.html +++ /dev/null @@ -1,1942 +0,0 @@ - - - - - - - ifpIMAGE User's Manual - - -

    -The ifpIMAGE User's Guide

    -
    January 4, 2012
    -
    -
    -

    Table Of Contents

    -Overview -
    -Configuring ifpIMAGE -
    -Running ifpIMAGE -
    -Can I Test My Configuration? -
    -Sample ifpIMAGE -Configuration -File -
    -How Do I Control the Weather Elements -to be Generated? -
    -I Only Want a Single -Image Per Weather Element, How Do I Do This? -
    -Can I produce smoothed images? -
    -Can I produce smooth, -clipped images? -
    -How Do I Control Whether a Weather Element -is an Image or a Graphic? -
    -Can I Overlay More Than One Weather Element? -
    -Can I Add Contours or Wind -Barbs to My Image? -
    -How Do I Change the Color Table? -
    -Can I Control the Color Bar Labeling on -the Output PNG? -
    -How Do I Change the Size -of the Output PNG? -
    -Can I Control -the Size of the Border around the Grid? -
    -Can I Put Samples on the Display? -
    -Can I Mask Certain Areas of the -Display? -
    -How Do I Define the Set of Map -Backgrounds? -
    -Can I Change the Appearance -of the Map Backgrounds? -
    -Can I Change the -Appearance -of the Graphics? -
    -Can I Specify the Time Range for Which -to Generate PNGs? -
    -Can I Change the Appearance of the "Wx" Weather -Element When Displayed as an Image? -
    -Can I change the Weather Sample Label -Text to something more descriptive? -
    -Can I Disable the Color Bar? -
    -Can I Always Have a Standard Set of Wx Labels -on the Color Bar? -
    -Can I Disable the Legend? -
    -Can I Change the Legend from Local Time to -Zulu Time? -
    -Can I Switch Between the simple Weather -Element -Name and a more descriptive Name, or turn the name off completely? -
    -Can I Format The Legend? -
    -Can I Use Snapshot -Timestamps in the Legend? -
    -Can I Change the Background -Color? -
    -Can I Control the output -filename? -
    -What does the "info" file -contain? -
    -Can I add the NWS and NOAA logos?
    -
    -
    -

    -Overview

    -
    The ifpIMAGE program is used to generate imagery of -grids from the GFESuite.  The program is really the GFE running in -a special background mode in which the display is not written to the -screen, -but rather to a PNG image.  Due to this architecture, virtually -anything -displayable on the GFE spatial editor, can be made into a PNG -image.  -Some of the basic characteristics of the ifpIMAGE program are:
    -
      -
    • Zero or one weather elements can be displayed as an -image;
    • -
    • Zero or more weather elements can be display as a -graphic (e.g., wind -barbs, -wind arrow, contours);
    • -
    • There is one PNG image generated for each time step -in the data;
    • -
    • Graphics and images may be overlaid;
    • -
    • Legends can be toggled off or on,  and shown -in local time format -or zulu time format;
    • -
    • PNG sizes may be specified;
    • -
    • Color tables and ranges may be specified;
    • -
    • Sample sets may be specified;
    • -
    • The grids may be clipped to a particular geographic -region;
    • -
    • The set of map backgrounds to be displayed may be -specified; and
    • -
    • An "Info" file containing descriptive information -about the grids -displayed -for each PNG image.
    • -
    • The NOAA and NWS logos can be placed on the PNG -imagery.
    • -
    -
    -
    -
    -The configuration of the ifpIMAGE program is not done through command -line switches.  Instead it uses a GFE configuration file which is -identical in format to the standard gfe -configuration file.  There are several command line switches -that -can be used to specify the configuration file to be used,  the user -name (which defaults to SITE), and optionally the base -time. -

    -
    -
    When the ifpIMAGE program is executed, the program -reads -the specified configuration file, sets up the GFE in background mode, -loads -the specified data and generates images.  By default, images are -generated -for all available grids for the given parameters. Each output PNG -is named with a unique timestamp to help sort out the many PNG -images. -In addition, an "info" file is generated for each PNG which contains -descriptive -information about the PNG.
    -
    -
    -

    -Configuring ifpIMAGE

    -
    ifpIMAGE is configured through a  gfe -configuration file. These custom configuration files should -be -SITE-based, not USER-based since the ifpIMAGE is a product generation -program -for site use.  It is not recommended that -you -use the standard gfe configuration file name for ifpIMAGE configuration -files due to conflicts with the GFE. More information about how -the BASE, SITE, and USER configuration capability can be found in the Base, -Site, and User Concept Guide. -

    NOTE: ifpIMAGE by default uses -configuration -files that are defined for SITE. If you create a configuration file -at USER level, then run the -ifpIMAGE program, the ifpIMAGE probably will not generate any -images. -This is caused by storing the configuration file under USER and not -SITE, -and the ifpIMAGE program is looking for your configuration file in -SITE. -You can override this behavior using the -u switch to ifpIMAGE. -

    -

    Creation of the ifpIMAGE configuration file is done through the GFE -main menu item: GFE->Define -Config and ifpIMAGE Files menu entry. Be sure to create/modify -these -files at SITE level to ensure that the custom configuration -files end up in the SITE directory. -

    -
    -
    -

    Running ifpIMAGE

    -The command line options for ifpIMAGE are: -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    OptionOptionalMeaning
    -h hostnameNO (see note)Name of the host on which the server is running
    -p portnumberNO (see note)Port number for the server
    -c configNameNOConfiguration filename
    -u usernameYESUserName, defaults to "SITE"
    -o outputDirNameNO (see note)Name of output directory
    -b baseTimeYESBase time, used in determining filenames.  Basetime is -in the -yyyymmdd_hhmm format.  See the filename -naming section of this document. 
    -s startTimeYESSpecifies the starting time range from which to generate PNG -images.  -Format is in the yyyymmdd_hhmm format.  Only images that have a -time -equal to or after this specified time will be generated.
    -e endTimeYESSpecifies the ending time range from which to generate PNG -images.  -Format is in the yyyymmdd_hhmm format.  Only images that have a -time -before this specified time will be generated.
    -t userDefinedTimeRangeYESSpecifies a user defined time range to be used to define the -range -of times from which images should be generated.  Example is: -t -"Day -3". This will generate images for any grids that overlap the definition -of "Day 3".  Note that these definitions change at midnight local -time or 0000z.
    -

    Note: When running ifpIMAGE in a normally -configured -system, the -h and -p switches are not needed since they will be -brought -in from your configured installation.  The -o switch defaults to -your -/awips2/cave/etc/gfe/products/IMAGE directory. If you want to connect to a different -server than the configured EDEX, then the -h and -p switches are -needed. -If the default destination isn't correct for your purpose, then you -will need to specify an -o switch.   -If environment variables ${CDSHOST} or -${CDSPORT} are defined, then the default server and port will be -determined from the environment variables, unless overridden with the -user specified -h and -p switches. -

    -
    -

    Can I Test My Configuration?

    -Yes.  You can test your configuration by running the GFE -with the specified user and configuration filename.  Then you can -step frames or animate and the spatial editor will show you the -expected -results (e.g., colors and other appearance features). -

    NOTE: ifpIMAGE by default uses -configuration -files that are defined at SITE level. If you create a configuration file at USER level, -then run the -ifpIMAGE program, the ifpIMAGE probably will not generate any -images. -This is caused by storing the configuration file at USER level and not -SITE, and the ifpIMAGE program is looking for your configuration file in -SITE. -You can override this behavior using the -u switch to ifpIMAGE. -
    -

    -
    -

    Sample ifpIMAGE -Configuration -File

    -The following complete configuration file uses the standard -delivered -gfe configuration file and overrides certain features.  This -configuration -file does the following: -
      -
    • creates PNGs of temperature and wind, with temperature as an -image and -wind as wind barbs
    • -
    • the PNG has a local time label on it
    • -
    • the temperature image color table ranges from 20 degrees to 90 -degrees, -rather than the GFE default
    • -
    • has the States map background present
    • -
    • clips the data to the BOU WFO area, which is identified by a edit -area -called "BOU"
    • -
    -Example ifpIMAGE configuration file -
    -

    How Do I Control the Weather -Elements -to be Generated?

    -The user can control which weather elements should be generated.  -The weather elements that are generated on each PNG can be controlled -directly -through the gfe configuration file using the Png_parms -entry.  The GFE configuration file has an entry to specify the -set of png weather elements for display.  The entries are -coded -and the user is required to know the weather element name, its level, -the -database model name, its optional type, and the sequence number if -model -data is being presented. -

    Here are the steps to take: -

    -
    1. Decide which weather elements you want overlaid on your -PNG imagery.
    -2. Create a GFE configuration file that will be used to generate PNG -imagery. Edit the gfe configuration file to define the Png_parms -entry.
    -Note that Topography is available for the png image by using the Png_parms -entry and specifying "Topo". -

    Example ifpIMAGE configuration file -
    -

    -
    -

    I Only Want a -Single -Image Per Weather Element, How Do I Do This?

    -Your -Png_parms -entry,  should contain just one weather element.  You will -also -want to modify the entry in the GFE -configuration file to indicate the name of that element so it will -display as an image. -

    -

    The modifications to the GFE configuration file to make this an -image -are: -

    -

    Png_image -= 'T' -

    -

    Png_parms -has been defined to contain: 'T_SFC:_Official -1'. -

    -

    If you wanted to make a set of temperature images, dew point images, -and wind images, you will need three different GFE configuration files. -

    -

    Example ifpIMAGE configuration -file -

    -

    -

    -Can I -Produce -Smoothed Images? -

    A smooth image can be produced via a configuration file change for a -scalar -or vector weather element only: -

    -

    Png_smoothImage = -1 (smoothing enabled0 -
    -Png_smoothImage -= 0 (smoothing disabled) -

    -

    Note that if you are filtering -the displayed data by site identifier or site plus weather element name -(e.g., BOU_mask = "CWA, BOU_T_mask = "BOU", T_mask = "BOU", or mask = "BOU"),  your smoothed -image -will also be smooth, clipped.    Click -here for just smooth, clipping options. -
    -  -

    -

                       -ipfIMAGE-noSmooth.png -
    -

    -

                        -ifpIMAGE-Smooth.png -
    -

    -

    Example ifpIMAGE configuration file -
    -

    -

    -Can -I Produce Smoothed, Clipped Images? -

    To produce a smooth, clipped area, as opposed to just providing a display -filter or masking, use: -

    -

    Png_smoothClip = -0 -

    -

    The following rules apply if both Png_smoothImage and Png_smoothClip -are used. -
    -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    DataType
    -
    -
    Png_smoothImage
    -
    -
    Png_smoothClip
    -
    -
    Result
    -
    -
    SCALAR/VECTOR
    -
    -
    0
    -
    -
    0
    -
    No data smoothing, no -smooth clipping
    -
    SCALAR/VECTOR
    -
    -
    0
    -
    -
    1
    -
    No data smoothing, clipped -to the -pixel level of the display -filter (mask) indicated, uses the nearest "grid box" for the data
    -
    SCALAR/VECTOR
    -
    -
    1
    -
    -
    0
    -
    Data smoothing, clipped to the -pixel -level of the display filter (mask) -indicated, uses bi-linear interpolation for the data values
    -
    SCALAR/VECTOR
    -
    -
    1
    -
    -
    1
    -
    Data smoothing, clipped to the -pixel -level of the display filter (mask) -indicated, uses bi-linear interpolation for the data values
    -
    WEATHER/DISCRETE
    -
    -
    0
    -
    -
    0
    -
    No data smoothing, no -smooth clipping
    -
    WEATHER/DISCRETE
    -
    -
    0
    -
    -
    1
    -
    No data smoothing, clipped to -the -pixel level of the display filter -(mask) indicated, uses the nearest "grid box" for the data
    -
    WEATHER/DISCRETE
    -
    -
    1
    -
    -
    0
    -
    No data smoothing, no -smooth clipping
    -
    WEATHER/DISCRETE
    -
    -
    1
    -
    -
    1
    -
    No data smoothing, clipped -to the -pixel level of the display filter -(mask) indicated, uses the nearest "grid box" for the data
    -
    -  -

    -
    -

    -
    - - - - - - - - -
    -
    No Smoothing, -Clipped Smooth, -Clipped No Smoothing, Clipped, -Wx
    -
    -
     
    -
    -
     
    -
    -

    Example ifpIMAGE configuration -file -
    -

    -
    -

    How Do I Control Whether a Weather -Element -is an Image or a Graphic?

    -By default, a weather element is displayed as a graphic.  Only one -weather element may be displayed as an image per configuration file. -You -can specify the name of this weather element through the PNG -image name field in the gfe configuration file. -

    The following pictures illustrate the effect of denoting Sky to be -an -image or a graphic. -

    -

    -

    The modifications to the GFE configuration file to make alternate -between -a graphic and image are a single line: -

    -

    Png_image -= 'Sky' -

    -

    If you want it a graphic, be sure not to include the line Png_image. -

    -

    Example ifpIMAGE configuration file -

    -

    -
    -

    Can I Overlay More Than one Weather Element?

    -You may overlay as many weather elements as you desire.  This is -accomplished -by creating a weather element group with multiple entries through the -use -of the Weather Element Browser from the GFE.  Alternatively, you -can -use the Png_parms -field to define the weather elements.  Only one of the weather -elements may be displayed as an image, which is specified in the PNG -image name field in gfe configuration file.  All of the other -weather elements will be displayed as a graphic. -

    -

    The type of graphic can be controlled through the visual -type fields in the gfe configuration file. -

    -

    Example ifpIMAGE configuration file -
    -

    -
    -

    Can I Add Contours or -Wind -Barbs to My Image?

    -If you want graphics on top of your image field for the same weather -element, -such as a temperature image with temperature contours overlaid, then -you -can control this through the visual -type fields in the gfe configuration file.  For scalar data, -you -only can display graphics as contours.  For wind data, you can -display -the graphic as wind barbs or wind arrows.  For weather data, your -only choice is bounded areas.  You would make an entry in the -categories -of image and spatial editor for the visual -type. -

    -

    The changes made to the configuration file consisted of modifying -(or -adding) a line that specifies that T (temperature) for the spatial -editor -image should include contours: -

    -

    from: T_spatialImageType = [ "Image" ] -
    -to: T_spatialImageType = [ "Image", "Contour" ] -

    -

    Example ifpIMAGE configuration -file -

    -

    -
    How Do I -Change -the Color Table?

    -Color table mapping can be changed for scalar and vector weather -elements. -See the weather color table section to -change -the color mapping for the Wx element. -

    The user can specify: -

    -
    1.  The color -table name to be used for an individual weather element (e.g., -Linear). -If not specified, then the color table is the default smooth rainbow -spectrum.  -You can change -the characteristics of this default rainbow spectrum.
    -2.  The color -table range mapping (e.g., minimum and maximum values).  By -default, -the mapping is performed from the minimum possible value to the maximum -possible value as defined in serverConfig.py.
    -3.  Whether the color table mapping should be linear or -logarithmic.  -The logarithmic -scaling factor is specified in the gfe configuration file.
    -A new color spectrum may be created in the GFE using the Color -Table Editor Dialog , saved with a new filename and configured in -ifpIMAGE. -

    Example ifpIMAGE configuration -file -

    -

    Defining the Color Table Name

    -The following two images show the same data set, but with different -color -enhancement curves (e.g., color tables). -

    -

    The changes made to the configuration file consisted of modifying -(or -adding) a line that specifies T's (temperature) color table: -

    -

    from: T_defaultColorTable="colorTable1" -
    -to: T_defaultColorTable="tColorTable" -
    -  -

    -

    Changing the Color Table Range Mapping

    -The user can also change the color table range mapping.  The -following -two images show the same data set, with the same color enhancement -curve, -but mapped to different starting and ending values. -

    -

    The changes made to the configuration file consisted of modifying -(or -adding) two lines that specifies T's (temperature) color table value -mapping: -

    -

    to: T_maxColorTableValue = 50.0 -
    -to: T_minColorTableValue = 0.0 -
    -  -

    -

    Applying a Logarithmic Scaling Factor

    -Most color table algorithms are linear.  The user may change this -to a logrithmetically-scaled mapping if desired.  The following -two -images show the same data set with the same enhancement curve, but one -has a linear and the other a logrithmetic scaling.  Note that the -color bar scale is still linear, but the number of colors assigned are -squeezed into the lower ranges. -


    -  -

    -

    The changes made to the configuration file consisted of modifying -(or -adding) a line that specifies T's (temperature) color table should be -mapped -logrithmetically: -

    -

    to: T_LogFactor = 0.01 -
    -  -
    -  -

    -

    Using a Fit To Data Color Table Algorithm

    -The user may specify that a color table be calculated using the "fit -to data" algorithm.  The program will examine all of the grids -associated with the weather element to calculate the minimum and -maximum -observed value. The color table spectrum is then mapped to these -values. -There are four different algorithms that can be used: -
      -
    • All Grids
    • -
    • All Grids over Area
    • -
    • Single Grid
    • -
    • Single Grid over Area
    • -
    -If "All Grids" or "All Grids over Area" is specified, then all data -grids -for the weather element are examined to determine the color table -mapping -range. If "Single Grid" or "Single Grid over Area" is specified, then -the -fit to data algorithm is applied to each image, thereby resulting in -different -color tables for each image.  The one of the algorithms, "... over -Area", is specified, then the fit to data algorithms will only look at -data contained within the edit area defined by Png_fitToDataArea. -

    -

    The changes made to the configuration file consisted of modifying -(or -adding) a line that specifies MaxT's (maximum temperature) color table -should be mapped with the "fit to data" algorithm: -

    -

    to: MaxT_fitToDataColorTable = "All Grids" -

    -

    To change the algorithm to look at all grids, but only use data -values -contained in your CWA (e.g., CYS), then the following two entries would -be needed.  Note that the "... over Area" algorithm is generally -only -used when masking data. -

    -

    to: -
    -MaxT_fitToDataColorTable = "All Grids over Area" -
    -Png_fitToDataArea = "CYS" -

    -

    -
    -

    Can I Control the Color Bar Labeling -on -the Output PNG?

    -By default, the labels on the color bar are automatically calculated -and -plotted.  The user can override the automatic set with a defined -set -through the gfe -configuration file's entry Color Bar Labels.  Tick marks and -labels -will be plotted only at those values specified.  This option -applies -only to scalar and vector data. -

    To change the Maximum Temperature's color bar labels to 32, 40, 50, -60, the following entry would be made in the gfe configuration file: -

    -

    add: -
    -MaxT_ColorBarLabels = [32.0, 40.0, 50.0, 60.0] -
    -  -

    -

    -
    -

    How Do I Change the -Size of -the Output PNG?

    -The size of the output PNG -is specified in the gfe configuration file.  You only need to -specify -the horizontal or the vertical since the other dimension is -automatically -calculated. -

    The following illustrates making the same data as a thumbnail -(100x100) -and large (600x600). -
    -

    -

    The changes made to the configuration file consisted of modifying -the -lines that specifies T's (temperature) color table should be mapped -logrithmetically: -

    -

    for the small image: Png_height = 100 -
    -for the large image: Png_height = 600 -

    -

    Example ifpIMAGE configuration file -
    -

    -
    -

    Can I -control -the size of the border around the grid?

    -The size of the border around the grid may be specified in each of the -four directions as a percentage of the grid size.  The entries are -specified in the Office -Domain expand section of the configuration file. -

    -

    The changes made to the configuration file consisted of modifying -(or -adding) several lines to adjust the size of the space around the grid: -

    -

    from: -
    -OfficeDomain_expandLeft = 10 -
    -OfficeDomain_expandRight = 10 -
    -OfficeDomain_expandTop = 10 -
    -OfficeDomain_expandBottom = 10 -
    -to: -
    -OfficeDomain_expandLeft = 5 -
    -OfficeDomain_expandRight = 20 -
    -OfficeDomain_expandTop = 10 -
    -OfficeDomain_expandBottom = 30 -

    -

    Example ifpIMAGE configuration file -

    -

    -
    -

    Can I Put Samples on the Display?

    -Samples may be put on the display.  Note that if you have multiple -weather elements displayed, then you will see multiple samples at each -sample point.  This can be changed through the Limiting -Samples to Specific Weather Elements entry. The set of samples is -defined -in a sample set.  The name of that sample set is defined as the default -sample set in the gfe configuration file. -

    If the samples are too small or too large, changes can be made -through -the sample font entry -in the gfe configuration file. The illustration below shows samples for -Temperature and Wind.  The white entry matches the image, -Wind;  -the green entries match the Temperature. -

    -

    -

    The procedure for adding samples to the PNG image is to create a -sample -set in the GFE and save it.  Then modify the PNG configuration -file -to identify that sample set: -

    -

    DefaultSamples = ['pngSamples'] -

    -

    The format -of -the samples for vector data may also be changed to one of the -following -formats: -

    -
      -
    • ddff
    • -
    • 8pt compass direction
    • -
    • 16pt compass direction
    • -
    • d/f
    • -
    -By default, samples are shadowed, i.e., double characters are written -in -the primary color and black to increase constrast on light-colored -images.  -The sample shadowing may be turned off, if desired, through the gfe -configuration -file.  Refer to the sample -shadow configuration. -

    The offset from the sample anchor point to the sample values may -also -be set.  Refer to Sample -Label Offsets in the gfe configuration documentation. -

    -

    By default, the values displayed at each sample point comprise -values -from all of the visual weather elements. For example, if T, Td, and -Wind -are visible, then each sample will display the values from T, Td, and -Wind.  -You can change this behavior through the Limiting -Samples to Specific Weather Elements entry in the gfe configuration -file. -

    -

    You may also change the color associated with a sample. The default -is that the sample color will match the graphic color for that weather -element.  Use the parmName_Sample_color -in the gfe configuration file to explictly set a color for the -sample.  -For example, to change the sample color for Temperature (T) to green, -do -the following: -

    -

    add: -
    -T_Sample_color = "green" -

    -

    Example ifpIMAGE configuration file -
    -

    -
    -

    Can I Mask Certain Areas of -the -Display?

    -Masking or clipping is possible with ifpIMAGE.  This is actually a -feature that can be used with the GFE as well.  The -masking/clipping -is defined using an edit area (or reference set).  The mask -field in the gfe configuration file specifies the name of the edit -area to be used as a mask.  Note that the output graphic will -automatically -be zoomed in to this area. -

    The user can choose to mask all weather elements the same on the -image, -or choose to mask just certain ones.  Refer the the mask -field definition in gfe configuration file for details. -

    -

    -

    The changes made to the configuration file consisted of modifying -(or -adding) a line that specifies the clipping mask for the site (BOU in -this -case). (There are alternative forms available as well.)  The edit area is "BOU": -

    -

    BOU_mask = "BOU" -

    -

    Example ifpIMAGE configuration file -

    -

    Note that when the user specifies a mask, that the ifpIMAGE display -will automatically be zoomed in to show just that area.  This -feature -may be disabled through the use of the Png_wholeDomain -configuration item. -

    -

    Smooth clipping may -be applied when using a mask. -
    -

    -
    -

    How Do I Define the Set of -Map Backgrounds?

    -Zero or more map backgrounds may be shown on the output PNG.  The -default -map background names are specified in the gfe configuration file. -

    -

    The changes made to the configuration file consisted of modifying -the -lines that the default map backgrounds: -

    -

    from: MapBackgrounds_default = ['States', 'CWA'] -
    -to: MapBackgrounds_default = ['States', 'Counties'] -

    -

    Example ifpIMAGE configuration file -
    -

    -
    -

    Can I Change the -Appearance -of the Map Backgrounds?

    -The appearance of the map backgrounds may be changed in various ways -with -each map background being separately configurable: -
      -
    • All map backgrounds can be changed to the same color by changing -the -first -entry in the available map background color entry in the gfe -configuration -file;
    • -
    • Individual -colors -may be specified per map background; and
    • -
    • The map background line -width and line -pattern may be specified per each map background.
    • -
    • The labels -for -each -map background may be selected from a list of available shapefile -attributes.  -It is recommended that you start the GFE, load the appropriate map -background, -and explore the MB3 over the Map -Legends -for the available shapefile attributes.
    • -
    -


    -

    -

    The changes made to the configuration file consisted of modifying or -adding the following lines: -

    -

    States_graphicColor = 'red' -
    -States_lineWidth = 3 -
    -CWA_graphicColor = 'green' -
    -CWA_linePattern = "DOTTED" -

    -

    Example ifpIMAGE configuration file -
    -

    -
    -

    Can I Change the -Appearance -of the Graphics?

    -You can control the following through the gfe configuration file: - -


    -

    -

    The following changes were made to the configuration file: -

    -

    Contour_font = 4 -
    -T_graphicColor = 'blue' -
    -Wind_graphicColor = 'red' -
    -Wind_fontOffset = 2 -
    -Wind_density = 20 -
    -T_density = -2 -

    -

    Example ifpIMAGE configuration -file -
    -

    -
    -

    Can I Specify the Time Range for -Which -to Generate PNGs?

    -There are three ways to specify the time range for which to generate -PNGs.  -The first method specifies the creation of the images on a fixed -interval, -with or without an offset (i.e., a different starting time), rather -than -the default. The second method limits the creation of PNGs to within a -specified time range.  The third method uses a user-defined time -range -to determine the limit of creation. -
    -  -

    Generating PNGs on a Regular Interval

    -By default, ifpIMAGE automatically generates PNGs for every possible -time -step that results in a changed display of data.  All of the -possible -permutations are considered when generating PNGs with differing valid -times. -The configuration items are Png_interval -and Png_intervalOffset. -

    You can change this behavior and force ifpIMAGE to generate images -at -specific time intervals.  These time intervals are specified in -units -of hours and will cover all grids from the beginning to the end of the -database that match the hour interval.  Note that you may also -want -to specify Png_snapshotTime -in order for the legends to indicate the interval time, rather than the -grid valid time. -

    -

    For example, specifying an interval of 6 hours will always generate -images for 00z, 06z, 12z, and 18z.  The following changes would be -made to the configuration file for an interval of 6 hours: -

    -

    Png_interval = 6 -

    -

    To generate images that begin at a starting time other than 00z, you -can specify an interval offset using a configuration -option.   -For example, specifying an interval offset of 1 and an interval of 6 -(i.e., -Png_interval = 6) will generate images at 01z,  07z, 13z and -19z.  -The default for Png_intervalOffset is 0. -

    -

    Png_intervalOffset = 1 -

    -

    -

    Example ifpIMAGE configuration file -

    -

    Refer to the gfe -configuration -file documentation for more details on the interval item. -
    -  -

    -

    Specifying via the command line the start/end limits of generation

    -The -s and -e switches on the command line can be used to limit the -generation -of PNG images.  The format of the entries are YYYYMMDD_HHMM.  -If a grid of a PNG image falls within the starting -and ending time range specified, then the image will be generated. -
    -  -

    Specifying via the command line a user-defined time range

    -The -t switch on the command line specifies a user-defined -named time range.  If a grid of a PNG image falls within the -calculated -starting and ending time, then the image will be generated. -

    -
    -

    Can I Change the Appearance of the "Wx" -Weather -Element When Displayed as an Image?

    -The Wx weather element uses combinations of fill -patterns and colors -to denote the weather. This can be controlled through the gfe -configuration -file.  The weather -image algorithm is described in the gfe configuration file. -
    -  -

    -

    The configuration file was modified to change the mapping from -patterns -to coverages, and from colors to weather types.  The entries that -were changed are highlighted for clarity. -

    -

    from: -
    -WeatherCoverage_names = ["Iso", "WSct", "Sct", "Num", "Wide", -"Ocnl", -"SChc", -
    -                         -"Chc", "Lkly", "Def", "Patchy", "<NoCov>"] -
    -WeatherCoverage_fillPatterns = ["OCNL", "WIDE_SCATTERED", -
    -                                -"SCATTERED", "LKLY", "WIDE", "OCNL", -
    -                                -"WIDE_SCATTERED", "SCATTERED", "LKLY", -
    -                                -"WIDE", "SCATTERED", "WHOLE"] -
    -WeatherType_names = ["<NoWx>", "T", "A", "R", "RW", "L", -"ZR", -"ZL", -
    -                     -"S", "SW", "IP", "F", "H", "BS", "K", "BD", -
    -                     -"SA", "LC", "FR", "AT", "TRW"] -
    -WeatherType_colors = ["brown", "red3", "DeepPink", "ForestGreen", -
    -                      -"ForestGreen", "CadetBlue1", "darkorange1", -
    -                      -"goldenrod1", "gray70", "Grey65", "plum1", -
    -                     -"khaki4", "Gray75", "snow", "grey30", "Brown", -
    -                      -"blue1", "coral1", "pale turquoise", "DeepPink", -
    -                      -"red3"] -

    -

    to: -
    -WeatherCoverage_names = ["Iso", "WSct", "Sct", "Num", "Wide", -"Ocnl", -"SChc", -
    -                         -"Chc", "Lkly", "Def", "Patchy", "<NoCov>"] -
    -WeatherCoverage_fillPatterns = ["OCNL", "WIDE_SCATTERED", -
    -                                -"SCATTERED", "LKLY", "WHOLE", "OCNL", -
    -                                -"WIDE_SCATTERED", "SCATTERED", "LKLY", -
    -                                -"WIDE", "SCATTERED", "WHOLE"] -
    -WeatherType_names = ["<NoWx>", "T", "A", "R", "RW", "L", -"ZR", -"ZL", -
    -                     -"S", "SW", "IP", "F", "H", "BS", "K", "BD", -
    -                     -"SA", "LC", "FR", "AT", "TRW"] -
    -WeatherType_colors = ["brown", "red3", "DeepPink", "Green", -
    -                      -"ForestGreen", "CadetBlue1", "darkorange1", -
    -                      -"goldenrod1", "blue", "Grey65", "plum1", -
    -                     -"khaki4", "Gray75", "snow", "grey30", "Brown", -
    -                      -"blue1", "coral1", "pale turquoise", "DeepPink", -
    -                      -"red3"] -

    -

    Example ifpIMAGE configuration file -

    -

    -
    -

    Can I change the Weather Sample -Label -Text to something more descriptive?

    -The Weather Sample label text may be changed to something more -descriptive.  -You use the AltWxSampleLabels_prettyWx -and AltWxSampleLabels_label -entries in the configuration file.  This is a simple string -substitution.  -For example if you wanted to change several labels as shown in the -following -table: -
    -  - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Pretty Wx String (plotted by default)Desired Sample Label
    Sct RW-Rain Showers
    Sct SW-Snow Showers
    Lkly S-Snow
    Wide S-Snow
    <NoWx>(blank)
    -

    then your entries in the configuration file would contain: -

    -

    AltWxSampleLabels_prettyWx = ['Sct RW-', 'Sct SW-', 'Lkly S-', -'Wide -S-', '<NoWx>'] -
    -AltWxSampleLabels_label = ['Rain Showers', 'Rain Showers', 'Snow', -'Snow', ''] -
    -

    -
    -

    Can I Disable the Color Bar?

    -Yes.  Use the Png_omitColorBar -entry in the configuration file: -

    Png_omitColorBar = 1 -

    -

    You can control the label -sizes on the color bar. -
    -

    -
    -

    Can I Always Have a Standard Set of Wx -Labels -on the Color Bar?

    -By default, the color bar for Wx consists of entries that are currently -in the data.  For example, if Snow and Rain are the only values -present -in the grid, then the color bar will only have entries of snow and rain -on them.  The user may specify a set of weather labels that will -always -appear in the color bar, regardless of the types of weather data in the -grid. The configuration item is Wx_AdditionalColorBarLabels. -
    -  -

    -
    -

    Can I Disable the Legend?

    -Yes. The legend -visibility -can be controlled through the gfe configuration file. -


    -  -

    -

    The changes made to the configuration file consisted of modifying -(or -adding) a line that specifies T's (temperature) color table: -

    -

    from: Png_legend = 1 -
    -to:   Png_legend = 0 -

    -

    Example ifpIMAGE configuration file -
    -

    -
    -

    Can I Change the Legend From Local -Time to -Zulu Time?

    -Yes. The legend time -zone -format can be controlled through the gfe configuration file. -

    -

    The changes made to the configuration file consisted of modifying -(or -adding) a line that specifies T's (temperature) color table: -

    -

    from: Png_localTime = 0 -
    -to: Png_localTime = 1 -

    -

    Example ifpIMAGE configuration -file -
    -

    -
    -

    Can I Switch Between the simple Weather Element Name and a more -descriptive -Name, or turn the name off completely?

    -Yes. There is an option -in the gfe configuration file to specify whether the no name, -simple, -or more descriptive weather element name should be used in the legend. -

    -

    The changes made to the configuration file consisted of modifying -(or -adding) a line that enables this option: -

    -

    from: Png_descriptiveWeName = "SHORT" -
    -to: Png_descriptiveWeName = "LONG" -

    -

    Example ifpIMAGE configuration -file -

    -

    You can also set Png_descriptiveWeName -to "ALT" which lets you define your own weather element string.  -If -you use "ALT", then you use the Png_wxelem_AltName to define the string -you want to use, where wxelem is the name of the weather element.  -For example, to change the "Maximum Temperature" string to "High -Temps", -you would enter the following two strings: -

    -

    Png_descriptiveWeName = "ALT" -
    -Png_MaxT_AltName = "High Temps" -

    -

    -
    -

    Can I Format the Legend?

    -The legend may be formatted to include/exclude certain time and -duration -elements.  Refer to the gfe -configuration documentation for details on how it can be changed. A -separate format string may be set for the duration, start time, and -ending -time for both the local time display and the Zulu time display. -

    The order of the legend is always the weather element name, -duration, -start time, and ending time.  Any of the duration, start time and -ending time may be omitted. -

    -

    -

    from: -
    -Png_legendFormat_LT_dur = "" -
    -Png_legendFormat_LT_start = "%b %d %I:%M %p %Z to " -
    -Png_legendFormat_LT_end = "%b %d %I:%M %p %Z" -

    -

    to: -
    -Png_legendFormat_LT_dur = "%H hours " -
    -Png_legendFormat_LT_start = " " -
    -Png_legendFormat_LT_end = "ending %a %b %d, %Y %I:%M %p" -

    -

    The units can be placed on the legend by including the special -phrase -"[UNITS]" in one of the legend format strings.  For example, if -you -wanted the units to appear right before the duration in the above -example, -you would define the Png_legendFormat_LT_dur string to be: -

    -

    Png_legendFormat_LT_dur = "([UNITS]) %H hours " -

    -

    Example ifpIMAGE configuration -file -
    -

    -
    Can -I Use Snapshot Timestamps in the Legend? -
    -  -


    -  -
    -  -

    -

    To indicate a snapshot time instead of the valid time of the grid, -use -the Png_snapshotTime -option. -

    -

    add: -
    -Png_snapshotTime = 1 -

    -

     The default format of the snapshot Zulu time is -"%b%d%H%MZ".  -To change this format -

    -

    add: -
    -Png_legendFormat_Zulu_snapshot = "%b%d%H%MZ" -

    -

    The default format of the snapshot itme if the Png_snapshotTime = 1 -and Png_localTime = 1 is "%d %b %I:%M %p% Z" .  To change this -format -

    -

    add: -
    -Png_legendFormat_LT_snapshot = "%I:%M %p %Z" (for example) -
    -  -

    -

    Refer to the gfe -configuration -documentation for details on how formats can be changed. -

    -

    Example ifpIMAGE configuration -file -
    -

    -
    -

    Changing the Legend Language

    -You can also change the default language associated with the -legend.  -Normally it is in English, but can be changed to French or -Spanish.  -Refer to the Png_legendLanguage -item in the gfe configuration file.  For example, to have the -date/time -group formatted in Spanish, use the following in your configuration -file: -

    add: -
    -Png_legendLanguage = "spanish" -
    -  -

    -

    Changing the Legend Color

    -Be default, the color of the legend matches the color of the -graphic.  -You can override this behavior using the parmName_Legend_color -entry in the configuration file.  For example, to always have a -red -label for "T": -

    add: -
    -T_Legend_color = "red" -
    -  -

    -

    -
    -

    Can I Change the -Background -Color?

    -The background color of the PNG images may be changed.  This is -accomplished -through the background color for drawing panes in the gfe configuration -file.  Note that additional entries will also need to be modified -in the configuration file in some cases depending upon the color -chosen.   -The legends normally write the image label in "white" and the samples -are -painted in "white".  The entries for sample -color and image -legend -color control these entries.  The color of the labels for the -colors bar can be controlled through the Color -Bar Tick/Text Colors entry. -

    -

    from: -
    -bgColor = 'black' -
    -ImageLegend_color = "white" -

    -

    to: -
    -bgColor = 'white' -
    -ImageLegend_color = "blue" -

    -

    Example ifpIMAGE configuration -file -
    -  -
    -  -

    -

    -
    -

    Can I Control the -Output Filename?

    -The directory location for the output pngs is specified on the command -line using the -o switch. By default, the output filename of -the -imagery is in the form of yyyymmdd_hhmm.png.  This can be -modified -in several ways as described below. -
    -  -

    Adding a Prefix to the -Filename

    -The Png_filenamePrefix entry in the  configuration file can be -used -to specify a prefix to the filename.  Prefixes can be used to help -catagorize the set of imagery that is created.  For example, if -you -run ifpIMAGE twice with different configuration files to generate a set -of Temperature images and Wind images, all of the images will end up in -the same output directory, and may have the same name.  By using -the -Png_filenamePrefix entry, you can assign prefixes for each ifpIMAGE -configuration. -

    To prefix all of the filenames with "T_Official_", use the following -entry in the  configuration file: -

    -

    Png_filenamePrefix = 'T_Official_' -

    -

    The result will be that all of the generated filenames will be in -the -form of T_Official_yyyymmdd_hhmm.png. -

    -

    Example ifpIMAGE configuration file -
    -  -

    -

    Changing the Date String

    -The date/time string defaults to the absolute time as determined by the -grids contained within the image.  The default format of the date -string is yyyymmdd_hhmm.  An alternative approach involves -running the ifpIMAGE program with the -b command line switch -followed -by a base time specification.  The base time specification is also -in the standard yyyymmdd_hhmm format. -

    When the -b switch is given to ifpIMAGE, the date string is changed -to this format: -

    -

    basetime_Fproj -

    -

    where basetime is that specified on the command line with the -b -switch, -and proj is calculated as the number of hours offset from the basetime -for the valid time of the image. -

    -

    For example, if the basetime is specified as 20010313_1200, and the -valid time of the image is 20010313_2100, then the png filename -(assuming -no prefix) will be: -

    -

    20010313_1200_F9.png -

    -

    The Png_baseTimeFormat entry also allows you to change the -formatting -of the date string.  This works with or without the -b command -line -switch.  The base time format is in the identical format to the -legend -formatting strings.   Refer to the gfe -configuration documentation for the available options. For example, -if you wanted the output filenames to only contain the forecast -projection -time, then you would run the ifpIMAGE with the -b switch and specifying -the base time, and you would use the following syntax in the gfe -configuration -file: -

    -

    Png_baseTimeFormat = '' -

    -

    If you wanted to include just the day of the week, then followed by -the projection time, then use the -b switch, specify the base time, and -use the following syntax in the gfe configuration file: -

    -

    Png_baseTimeFormat = "%a_" -

    -

    which would produce filenames such as Tue_18.png. -

    -

    If you don't specify the -b switch, then the base time formatting is -for the valid time of the grid.  A format such as: -

    -

    Png_baseTimeFormat = "%a_%H" -

    -

    would result in filenames such as: Mon_18.png, Mon_21.png, -Tue_00.png, -Tue_03.png. -

    -

    -
    -

    What does the "info" file -contain?

    -An "info" file is generated for each "png" image.  The "info" file -contains descriptive information about the generated image.  It -includes -the following information: -
      -
    • valid time of grid
    • -
    • number of grids displayed
    • -
    • for each grid:
    • -
        -
      • weather element identifier, in the format of -parmName:siteID_GRID_optType_model_modelTime
      • -
      • start time of the grid, in the format of yyyymmdd_hhmm
      • -
      • ending time of the grid, in the format of yyyymmdd_hhmm
      • -
      • color assigned to the grid, may be a RGB hexidecimal value or a -color -name.
      • -
      • display type of the grid, either IMAGE or GRAPHIC
      • -
      -
    -The color assigned to an IMAGE grid is not valid. -

    If an IMAGE is displayed as both an IMAGE and GRAPHIC (such as -temperature -image with contours), the info file will have two entries for that grid --- one IMAGE and one GRAPHIC. -

    -

    The form of the weather element identifier has the following -attributes: -
    -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    NameDescriptionExample
    Weather Element Namename of the weather elementT
    Site identifiersite identifier for the databaseBOU
    Formatformat of the weather element, always GRIDGRID
    Optional database typeOptional database type for the database''
    ModelModel NameFcst
    ModelTimeValid time of the model, in form of yyyymmdd_hhmm20010301_1200
    -

    -

    Each of the sections are separated by an underscore character, -except -for the weather element name, which is always followed by a colon (:). -

    -

    Example "info" file -

    -

    -
    -

    Can I add the NWS and NOAA logos?

    -The standard NWS and NOAA logos can be added to the bottom of your PNG -imagery by toggling the Png_logo -entry in the configuration file.  You can also define the text -string that will appear between the two logos through the Png_logoString -entry. -

    -

    The above was accomplished by the following two statements in the -configuration -file: -

    -

    to: -
    -Png_logo = 1 -
    -Png_logoString = "NWS Timbuktoo" -

    -

    Example ifpIMAGE configuration file -

    -

    -
    -

    Back to TOC -
    -

    - - diff --git a/cave/com.raytheon.viz.gfe/help/ifpServerNETCDF.html b/cave/com.raytheon.viz.gfe/help/ifpServerNETCDF.html deleted file mode 100644 index 2e5550d820..0000000000 --- a/cave/com.raytheon.viz.gfe/help/ifpServerNETCDF.html +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - EDEX HDF5 Format - - -

    -EDEX D2D HDF5 File Format

    -March 28, 2012 -
    - -
    -This document describes the format of the HDF5 file that is: -
      -
    • -read by EDEX as a D2D database
    • -
    -If you are interested in the format of the netCDF files generated from -the ifpnetCDF product formatter, or -read -by the iscMosaic program , then refer to -the -netCDF File Format Document. -

    -When data arrives over the SBN, the EDEX JVM ingest thread reads the next available message in AMQP queue -from the QPID message broker. It compares against the distribution XML files loaded into memory on EDEX -startup from /awips2/edex/data/utility/edex_static/base/distribution. If no pattern matches, nothing is -done. Otherwise a metadata record is generated in the appropriate table of the metadata database, and -an HDF5 file is written to /awips2/edex/data/hdf5/grib/MODEL_NAME on dx1. SmartInit is kicked off by -EDEX and generates data in /awips2/edex/data/hdf5/gfe/SITE_ID. You can access the -metadata database on dx1 as user awips. You can view the contents of HDF5 files using either the -free HDFView utility, or h5dump (installed in /awips2/tools/bin).

    -
    -

    About h5dump

    -OPTIONS
    -

    -h, --help          Print a usage message and exit
    --B, --userblock     Print the content of the user block
    --H, --header        Print the header only; no data is displayed
    --i, --object-ids    Print the object ids
    --V, --version       Print version number and exit
    --a P, --attribute=P Print the specified attribute
    --d P, --dataset=P   Print the specified dataset
    --g P, --group=P     Print the specified group and all members
    --l P, --soft-link=P Print the value(s) of the specified soft link
    --o F, --output=F    Output raw data into file F
    --t P, --datatype=P  Print the specified named data type
    --w N, --width=N     Set the number of columns of output
    --x, --xml           Output in XML
    --D U, --xml-dtd=U   Use the DTD at U -

    Subsetting is available by using the following options with a dataset -attribute. Subsetting is done by selecting a hyperslab from the data. -Thus, the options mirror those for performing a hyperslab selection. -The START and COUNT parameters are mandatory if you do subsetting. -The STRIDE and BLOCK parameters are optional and will default to 1 in -each dimension.

    --s L, --start=L     Offset of start of subsetting selection
    --S L, --stride=L    Hyperslab stride
    --c L, --count=L     Number of blocks to include in selection
    --k L, --block=L     Size of block in hyperslab

    -P - is the full path from the root group to the object.
    -F - is a filename.
    -N - is an integer greater than 1.
    -L - is a list of integers the number of which are equal to the
    -    number of dimensions in the dataspace being queried
    -U - is a URI reference

    -Examples:
    -
    -  1) Attribute foo of the group /bar_none in file quux.h5
    -

    -    h5dump -a /bar_none/foo quux.h5
    -

    -  2) Selecting a subset from dataset /foo in file quux.h5
    -

    -    h5dump -d /foo -s "0,1" -S "1,1" -c "2,3" -k "2,2" quux.h5 -
    -

    -
    -

    Diagnosing Model Problems

    -If you point the volume browser to a D2D directory and the model is not -appearing, verify that: -
      -
    • EDEX started up without any errors that would affect gfe, i.e., all - configurations loaded normally.
    • -
    • Ingest processes started normally and are up and running.
    • -
    • PyPies are up and running on dx1.
    • -
    • -the file name is in the standard format of yyyymmdd_hhmm, which is the -model base time
    • -
    • -that the file contains all of the required variables, dimensions, and -attributes -as outlined above
    • -
    • -that there isn't more than ONE directory in the D2DDIRS -configuration containing files that have an variable called "model" -with -the same name
    • -
    -If all else fails, you can turn on the debugging logging option in EDEX. -In this mode EDEX will log all problems it finds -with model data files. To turn on this feature, perform the following steps: -
      -
    1. -Edit the file /awips2/edex/conf/log4j-ingest.xml to set level value = "DEBUG" -for the appender ThreadBasedLog. Refer -to the log files document for details.
    2. -
    3. -Stop and restart EDEX.
    4. -
    5. -Look in the server log files. It will show the problems for all -files -it finds. If it doesn't identify your file or directory, re-check -your D2DDIRS -to be sure you have set it up correctly.
    6. -
    -


    -

    - - diff --git a/cave/com.raytheon.viz.gfe/help/ifpServerSatelliteNETCDF.html b/cave/com.raytheon.viz.gfe/help/ifpServerSatelliteNETCDF.html deleted file mode 100644 index af3b82c8d0..0000000000 --- a/cave/com.raytheon.viz.gfe/help/ifpServerSatelliteNETCDF.html +++ /dev/null @@ -1,339 +0,0 @@ - - - - - - ifpServer Satellite netCDF Format - - -

    -ifpServer D2D Satellite netCDF File Format

    -November 12, 2003
    -
    -
    -This document describes the format of the netCDF file that is: -
      -
    • read by the ifpServer as a D2D satellite database.
      -
    • -
    -

    Table of Contents -
    -netCDF Required Dimensions -
    -netCDF Variable Names -
    -netCDF Variable Attributes -
    -netCDF Global Attributes -
    -Diagnosing Access Problems -
    -Example of ncdump -

    -

    -
    -

    netCDF Required Dimensions

    -Each netCDF file is required to contain the following set of -dimensions: -
    -  - - - - - - - - - - - - - - - - - - -
    DimensionDescriptionRequired by GFESuite?
    xX-dimension of the satellite image
    -
    Yes
    yY-dimension of thje
    -
    Yes
    -

    -

    -

    -  -

    netCDF Variable Names

    -Each netCDF variable name represents a set of grids, plus additional -information: -
    -  - - - - - - - - - - - - - - - - - -
     
    Variable Name
    -
    Data TypeDimensionsDescriptionRequired by GFESuite?
    image
    -
    2-D array of bytes
    -
    (y,x)Contains the satellite data, ranged from 0-255 (might be seen -as -127 to +127)
    -
    Yes
    -
    -

    netCDF variable Attributes

    -
    There are no variable attributes that -are used by GFESuite in the D2D satellite data files.
    -
    -
    -
    -

    netCDF Global Attributes

    -
      -
    -The following netCDF global attributes are required in order for the -ifpServer to recognize the netCDF file as valid: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
     
    AttributeDescriptionRequired by GFESuite?
    projNameContains the projection name.  Must be one of the -following: LAMBERT_CONFORMAL, -MERCATOR, STEREOGRAPHIC, LATLON, CYLINDRICAL_EQUIDISTANTYes
    lon00Longitude in degrees of lower-left grid point (0, 0)Yes
    lat00Latitude in degrees of lower-left grid point (0, 0)Yes
    latNxNyLatitude in degrees of upper-right grid point (maxX, maxY)Yes
    lonNxNyLongitude in degrees of upper-right grid point (maxX, maxY)Yes
    centralLonCenter longitude for the mercator projection, where the -mercator projection -is parallel to the Earth's surface. Center longitude for the polar -stereographic -and Lambert Conformal projections, where the projection has north as -straight -up.Yes
    centralLatCenter latitude for the polar stereographic and Lambert -Conformal projections, -where the plane intersects the Earth's surface.Yes
    -
    -
    -  -

    Diagnosing Access Problems

    -If you point the ifpServer to a D2D satellite directory and the data is -not -appearing, -verify that: -
      -
    • the file name is in the standard format of yyyymmdd_hhmm, which -is the image valid time
    • -
    • that the file contains all of the required variables, dimensions, -and -attributes -as outlined above
    • -
    • that there isn't more than ONE directory in the SATDIRS -configuration containing files that have an variable called "model" -with -the same name
    • -
    -If all else fails, you can turn on the debugging logging option in the -ifpServer.  In this mode the ifpServer will log all problems it -finds -with model data files.  To turn on this feature, perform the -following -steps: -
      -
    1. Edit the file release/etc/BASE/logPref/ifpServer.logPref, where release -is the installation directory. On AWIPS-baseline equipment this file is -located at /awips/GFESuite/primary/etc/BASE/logPref/ifpServer.logPref.  Add the -following -line in the middle of the file (before the prefix section).  Refer -to the log files document for details. Add -an entry:     all  D2DFile.C  file debug -= on
    2. -
    3. Stop and restart the ifpServer.
    4. -
    5. Look in the server log files.  It will show the problems for -all -files -it finds.  If it doesn't identify your file or directory, recheck -your SATDIRS -to be sure you have set it up correctly.
    6. -
    -


    -

    -
    -

    Example of ncdump

    -

    This is an example ncdump from a water vapor D2D file; each directory -contains one band (wavelength), each file contains one image:
    -
    -netcdf 20031112_2130 {
    -dimensions:
    -        -y = 640 ;
    -        -x = 550 ;
    -variables:
    -        -byte image(y, x) ;
    -        -double validTime ;
    -                -validTime:units = "seconds since 1970-1-1 00:00:00.00 0:00" ;
    -                -validTime:long_name = "Valid Time" ;
    -        -byte valid100thSecs ;
    -                -valid100thSecs:units = "centiseconds" ;
    -                -valid100thSecs:long_name = "Valid 100th of a second" ;
    -
    -// global attributes:
    -                -:channel = "6.7 micron" ;
    -                -:depictorName = "westConus@17659725" ;
    -                -:projIndex = 3 ;
    -                -:projName = "LAMBERT_CONFORMAL" ;
    -                -:centralLat = 25.f ;
    -                -:centralLon = -95.f ;
    -                -:rotation = 25.f ;
    -                -:xMin = -0.2556496f ;
    -                -:xMax = 0.01474848f ;
    -                -:yMin = -0.8768771f ;
    -                -:yMax = -0.5622397f ;
    -                -:lat00 = 54.53548f ;
    -                -:lon00 = -152.8565f ;
    -                -:latNxNy = 17.51429f ;
    -                -:lonNxNy = -92.71996f ;
    -                -:dxKm = 7.871384f ;
    -                -:dyKm = 7.869175f ;
    -                -:latDxDy = 39.25658f ;
    -                -:lonDxDy = -117.4858f ;
    -}
    -
    -data:
    -
    - image =
    -  0, -70, -70, -71, -70, --70, -70, -70, -71, -71, -71, -70, -70, --70, -69,
    -    -70, -71, -70, --70, -71, -71, -71, -71, -70, -69, --70, -71, -71, -72,
    -    -71, -71, -71, --71, -72, -72, -71, -71, -71, -72, --72, -71, -71, -70,
    -    -71, -72, -72, --72, -73, -73, -72, -72, -71, -70, --71, -71, -71, -70,
    -    -70, -70, -69, --69, -69, -69, -69, -69, -69, -69, --69, -69, -69, -69,
    -    -68, -68, -67, --69, -69, -68, -68, -67, -67, -67, --67, -67, -67, -67,
    -    -67, -66, -66, --67, -67, -67, -68, -68, -68, -68, --68, -68, -68, -68,
    -    -68, -68, -68, --68, -68, -68, -68, -68, -68, -67, --67, -66, -67, -66,
    -    -65, -64, -64, --63, -63, -62, -63, -62, -60, -61, --61, -61, -61, -61,
    -    -60, -61, -61, --61, -61, -61, -60, -61, -61, -60, --61, -62, -61, -60,
    -    -60, -60, -60, --60, -60, -59, -60, -61, -61, -61, --60, -60, -60, -60,
    -    -60, -59, -59, --59, -59, -58, -58, -58, -59, -58, --58, -57, -56, -57,
    -    -57, -57, -57, --56, -56, -56, -55, -55, -55, -55, --55, -55, -55, -56,
    -    -55, -55, -56, --56, -56, -56, -57, -57, -57, -57, --58, -58, -59, -59,
    -    -59, -59, -59, --60, -60, -61, -61, -61, -61, -61, --61, -61, -61, -61,
    -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/ifpServerStartup.html b/cave/com.raytheon.viz.gfe/help/ifpServerStartup.html deleted file mode 100644 index 7bbd9f8a1b..0000000000 --- a/cave/com.raytheon.viz.gfe/help/ifpServerStartup.html +++ /dev/null @@ -1,341 +0,0 @@ - - - - - - ifpServer Startup - - -

    -ifpServer Startup Information

    -January 3, 2006
    -
    -Table of Contents -
    -
    -Starting the ifpServer -
    -ifpServer Check Configuration -Files Mode -
    -Problems starting the ifpServer -
    -Stopping the ifpServer -
    -Starting the ifpServer automatically on reboot -
    -Automatic Configuration of Text Products -
    -
    -

    Starting the ifpServer

    -The ifpServer is started with the "runIFPServer" script, which is -located -in the release/bin directory, normally /awips/GFESuite/primary/bin -or /awips/GFESuite/svcbck/bin -on AWIPS-baselined equipment. -

    runIFPServer [-D] [-n] [-t] -[-i] [-b] [-a alternateA2Afile]
    -  -
    -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Command Line OptionOptional?Meaning
    -DYESRuns the ifpServer as a daemon.  Normal use of the -server is to -run it as a daemon. The runIFPServer script will add this option -automatically.
    -nYESRuns the ifpServer in a "check" configuration files -mode.  The -server checks the configuration files, reports any errors, and exits.
    -tYESRuns the ifpServer in a "terminal" mode, indicating that the -ifpServer -will not be run as a daemon.  The messages will be output to the -terminal -and the server will not be run in background.
    -iYESRuns the ifpServer in a setup mode only. ifpServer will -generate the -map backgrounds, edit areas, and configure the text products. The -server -will then stop. No network connections are brought up.
    -b
    -
    YES
    -
    Runs the ifpServer in a BASELINE -mode only.  The localConfig, localMaps, localWxConfig are ignored.
    -
    -a alternateA2AFile
    -
    YES
    -
    Configure the text products -using the specified afos2awips.txt file.  Normally this switch is -only used for testing purposes.
    -
    -

    -

    Note: the -t switch overrides the -D switch.  The -n -switch -overrides the -D switch. -
    -Note: on IFPS systems, there is another script that is run that starts -all of the necessary IFPS servers.  That script calls the -runIFPServer -script. -
    -

    -

    It is -somewhat dangerous to run the ifpServer in BASELINE mode as data may be -lost.   Any local weather elements defined will no longer -exist.  This may cause local product generation scripts to fail -and the user may be forced to run the baseline versions of the text -formatters.
    -

    -

    -  -

    ifpServer Check -Configuration -Files Mode

    -Starting the ifpServer with "runIFPServer -n" will place the ifpServer -into a check configuration file mode.  The server will simply -check -the files and then exit.  The following files are checked: -
      -
    • serverConfig.py
    • -
    • localConfig.py
    • -
    • Maps.py
    • -
    • MapFiles.py
    • -
    • localMaps.py
    • -
    • localWxConfig.py
    • -
    -In the event of an error, output in the log file and on the console -will -be output showing the file and the location of the Python error.  -The check script handles syntax errors, but cannot detect all errors. -

    Here is an example with no errors: -

    -

    14:42:47.193 ifpServer.C 152 EVENT: IFP Data Server Starting -
    -14:42:47.195 ifpServer.C 153 EVENT: Version: Build Date: Wed Mar -27 14:37:52 2002 Built By: mark On: camper.fsl.noaa.gov (linux2) -Version: -development -
    -14:42:47.283 ifpServer.C 162 EVENT: Checking for server -configuration -python errors -
    -14:42:47.284 ifpServer.C 706 EVENT: Loading server configuration -info -
    -14:42:49.069 ifpServer.C 168 EVENT: No python syntax errors found -
    -14:42:49.070 ifpServer.C 172 EVENT: IFP Data Server Stopped. -
    -  -
    -  -

    -

    If an error has occurred, then the messages displayed on the console -will be similar to this; typically the last line or two will point out -the location of the error and the line number: -

    -

    14:45:12.649 ifpServer.C 152 EVENT: IFP Data Server Starting -
    -14:45:12.651 ifpServer.C 153 EVENT: Version: Build Date: Wed Mar -27 14:37:52 2002 Built By: mark On: camper.fsl.noaa.gov (linux2) -Version: -development -
    -14:45:12.775 ifpServer.C 162 EVENT: Checking for server -configuration -python errors -
    -14:45:12.776 ifpServer.C 706 EVENT: Loading server configuration -info -
    -14:45:13.109 ifpServer.C 711 PROBLEM: Failed to load one of the -following -
    -serverConfig.py, localConfig.py, or localWxConfig.py -
    -Python error: -
    -Traceback (most recent call last): -
    -  File "/scratch/head/GFESuite/etc/serverConfig.py", line -817, in ? -
    -    import localConfig -
    -  File "<string>", line 1 -
    -     from serverConfig 8mport * -
    -                       -^ -
    - SyntaxError: invalid syntax -

    -

    14:45:13.889 ifpServer.C 690 PROBLEM: Error in Maps.py or -localMaps.py -file: -
    -Traceback (most recent call last): -
    -  File "/scratch/head/GFESuite/etc/Maps.py", line 161, in -? -
    -    import localMaps -
    -  File "/scratch/head/GFESuite/etc/localMaps.py", line 5, -in ? -
    -    maps.remove(Cwamzones) -
    -NameError: name 'Cwamzones' is not defined -

    -

    14:45:13.890 ifpServer.C 172 EVENT: IFP Data Server Stopped. -

    -

    The above information indicates there is a problem in importing -"localConfig", -line 1.  The traceback shows the error location.  The second -error was found in the localMaps.py file, the name "Cwamzones" was not -defined, probably due to a misspelling. -

    -

    -
    -

    Problems Starting the -ifpServer

    -The ifpServer does some checks before it is fully functional.  If -any of these checks fail, then the server will not come up and will -shut -itself down: -
      -
    • Checks configuration files for syntax problems.  The files -are -serverConfig.py, -localConfig.py, localWxConfig.py, Maps.py, MapFiles.py, and -localMaps.py. -In the event of a problem, then the server will abort.
    • -
    • If the server is running under "root", the server will -abort.  -Running -under "root" can really hose up the file system.
    • -
    • Scans the file system and checks the owner and group of all files -under -release/data/databases, typically /awips/GFESuite/data/databases on the -AWIPS-baselined systems.  If the owner/group of any file is not -the -same as the running ifpServer's owner/group, then the server will -stop.  -This is to prevent problems having a server corrupting files.  -Messages -in the log file will indicate the problem file/directory.
    • -
    • Checks to see if there is another server running on the same RPC -port.
    • -
    -If the server does not come up, then look in the log files for -problems.  -The logfiles are in release/data/logfiles/yyyymmdd/ifpServer*, -typically /awips/GFESuite/primary/data/logfiles/yyyymmdd/ifpServer*, -where -yyyymmdd -is the date-time group. -

    -
    -

    Stopping the ifpServer

    -Stopping the ifpServer is accomplished with the following command: -

    stopIFPServer -

    -

    which is located in the release/bin, typically -/awips/GFESuite/primary/bin -on -the AWIPS-baselined systems. -

    -

    -
    -

    Starting the ifpServer automatically upon -reboot

    -If you do not want to invoke the runIFPServer script manually each time -the machine is rebooted, you can arrange for it to be run each time the -
    -machine is rebooted.  Perform the following step (you will need -to be logged in as the "root" user): -
    -  -
  • Edit the file  /etc/rc.d/rc.local.  Add the -following -shell code, replacing the values assigned to GFEHOME and GFEUSER with -values -that match your installation.:
  • -
    -  -
    # Change GFEHOME and GFEUSER to match your setup
    - GFEHOME='/where/you/installed/the/gfe/suite'
    - GFEUSER='ifps'
    - if [ -x $GFEHOME/bin/runIFPServer ]; then
    -     su -c $GFEHOME/bin/runIFPServer $GFEUSER
    - fi
    -The typical setup for NWS AWIPS baselined machines where /awips/GFESuite/primary -is the installation directory would be: -
    -  -
     # Change GFEHOME and GFEUSER to match your setup -
    - GFEHOME='/awips/GFESuite/primary'
    - GFEUSER='ifps'
    - if [ -x $GFEHOME/bin/runIFPServer ]; then
    -     su -c $GFEHOME/bin/runIFPServer $GFEUSER
    - fi
    -


    -Now the server will be started when the machine is booted. -
    -  -

    -
    -

    Automatic Configuration of Text Products

    -When the ifpServer is started, the text formatter COMBINATION files are -automatically created, as is the required AreaDictionary. This -information -is based on map background shapefile information. -

    The text formatters templates are also automatically configured when -the ifpServer is started. Although there is no need to manually -run the configure text products script anymore, it is still available. -Refer to configureTextProducts -script. -
    -  -

    - - diff --git a/cave/com.raytheon.viz.gfe/help/ifpServerStats.html b/cave/com.raytheon.viz.gfe/help/ifpServerStats.html deleted file mode 100644 index e87622f7e1..0000000000 --- a/cave/com.raytheon.viz.gfe/help/ifpServerStats.html +++ /dev/null @@ -1,560 +0,0 @@ - - - - - - ifpServerStats User's Guide - - -

    -ifpServerStats User's Guide

    -
    May 13, 2004
    -
    -

    -Table of Contents

    -

    -Overview

    -

    -Running the ifpServerStats Program

    -

    -Example Output

    -
    -
    -

    -Overview

    -
    The ifpServerStats program is a utility to output -certain statistics about the ifpServer.  The output includes -information -about the network transactions, database sizes, and BASE/SITE/USER -configurations.  -The output is sent to stdout and may be rerouted to a file if desired.
    -
    -
    - -
    -
    -

    -Running the ifpServerStats Program

    -
     
    -
    The command line syntax is:
    -
    ifpServerStats -h hostname -p rpcPortNumber --t --d -f -c -q
    -
    A sample command line is:
    -
    ifpServerStats -h abc.fsl.noaa.gov -p -98000000 --q -c
    -
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Option SyntaxOptional or MandatoryDescription
    -h hostnameMandatory (see note)Specifies the host, upon which the ifpServer is running
    -p portMandatory (see note)Specifies the port, upon which the ifpServer is running
    -tOptionalIf specified, outputs the transaction information.
    -dOptionalIf specified, outputs the database sizing information.
    -fOptionalIf specified, outputs the base/site/user configuration -information.
    -cOptionalIf specified, outputs the client connection information
    -qOptionalIf specified, outputs the client queue information
    -Note: If none of the -t, -d -f, -q, or -c switches are given, then all -information will be output. -
    -Note: The -h and -p switches are predefined to -match your GFESuite installation, such that they will point to the -ifpServer -specified on installation.  Thus the -h and -p switches are not -necessary -for normal running of this program.  However, if you wish to -connect -to a different server, then you will need to specify the -h and --p.   If environment variables -${CDSHOST} or -${CDSPORT} are defined, then the default server and port will be -determined from the environment variables, unless overridden with the -user specified -h and -p switches. -
    -
    -
    -  -

    Example Data

    -
    The following shows some example output and how -it -is interpreted. The output is divided into four sections: network, -client, -database sizing, and base/site/user configuration. -

    ifpServerStats -h abc.fsl.noaa.gov -p 98000000 -
    -  -

    -

    Network Information

    -The first section displays the network message types, the number of -calls -made since 0000Z, the average, minimum, and maximum time in seconds for -each call. -

    IFPSERVER STATISTICS INFORMATION as of Feb 08 01 20:53:08 GMT -
    --------------------------------------------------------- -
    -WsId: 389696393:mark:ifpServer:10342:0 -
    -Protocol Version: 20010105 -
    -Network Process Statistics -
    ----Rpc Message Type----   NumCall  AveTime  -MinTime  MaxTime -
    -Register -Client                 -1   0.0005   0.0005   0.0005 -
    -Get Map -Projections             -1   0.0155   0.0155   0.0155 -
    -
    -

    -

    Network Statistics -
    --------Network -Event-------           -Number -
    -RPC: -Success                                 -2 -

    -

    Port Identifier: 98000044 -
    -  -

    -

    Client Information

    -


    -The Client Table displays information about each connection to the -server, how many notifications are queued, and the length of the queue -in messages and time. -

    -

    Connection Statistics -
    - FD NR  ConnDurat  QueueDur  Workstation -Identifier -
    - -- --  ---------  --------  ----------------------- -
    -  9  0  0.00:00:00 00:00:00 -mark@camper.fsl.noaa.gov:ifpServerStats:14689:0 -

    -

    Client Table -
    -______ _____ -
    -[** Connection ** wsid= 389696393:mark:ifpServerStats:10361:0 -
    - fd= 5 notifyRequested=0 -
    - connDuration=0 queueDuration=0 -

    -

    Previous Queue Statistics: -
    -QueueName   TotalQueued  MaxOnQueue  -MaxTimeQueued -MinTimeQueued AveTimeQueued -
    -  -Lock             -0           -0        -0.0000         -0.0000       -0.0000 -
    -  -Grid             -0           -0        -0.0000         -0.0000       -0.0000 -
    -  -DbInv            -0           -0        -0.0000         -0.0000       -0.0000 -
    -  -Sample           -0           -0        -0.0000         -0.0000       -0.0000 -
    -  Reference        -0           -0        -0.0000         -0.0000       0.0000 -
    -  -Color            -0           -0        -0.0000         -0.0000       -0.0000 -
    -  TextFile         -0           -0        -0.0000         -0.0000       -0.0000 -

    -

    Current Queue Statistics: -
    -QueueName   TotalQueued  MaxOnQueue  -MaxTimeQueued -MinTimeQueued AveTimeQueued -
    -  -Lock             -0           -0        -0.0000         -0.0000       -0.0000 -
    -  -Grid             -0           -0        -0.0000         -0.0000       -0.0000 -
    -  -DbInv            -0           -0        -0.0000         -0.0000       -0.0000 -
    -  -Sample           -0           -0        -0.0000         -0.0000       -0.0000 -
    -  Reference        -0           -0        -0.0000         -0.0000       0.0000 -
    -  -Color            -0           -0        -0.0000         -0.0000       -0.0000 -
    -  TextFile         -0           -0        -0.0000         -0.0000       -0.0000 -

    -

    Queue Contents: -
    -LOCK Queue: [ ] -
    -GRID Queue: [ ] -
    -DBINV Queue: [ ] -
    -SAMPLE Queue: [ ] -
    -REFERENCE Queue: [ ] -
    -COLOR Queue: [ ] -
    -TEXTFILE Queue: [ ] -

    -

     ] -
    -  -

    -

    Client Queue Information

    -The client queue information displays information about each connected -client that has notifications enabled.  It shows the current, and -the total number of notifications processed for the client, as well as -the length of time that queue entries have been available. -

    Client Queue Statistics -
    ------------------------ -
    -Client #:0 -
    - wsid= mark@camper.fsl.noaa.gov:gfe:7482:0 -
    - fd= 7 protocolVer= 20030223 notifyReq=1 connDur=0.00:31:03 -queueDur=00:00:00 -

    -

    Previous Queue Statistics: -
    -QueueName   TotalQueued  MaxOnQueue  -MaxTimeQueued -MinTimeQueued AveTimeQueued -
    -  -Lock            -57           -6        -2.9953         -0.0769       -1.5776 -
    -  -Grid           -327         -112        -2.8861         -0.0008       -0.9391 -
    -  -DbInv            -1           -1        -0.0224         -0.0224       -0.0224 -
    -  -UserMsg          -4           -1        -2.8678         -1.8457       -2.3077 -

    -

    Current Queue Statistics: -
    -QueueName   TotalQueued  MaxOnQueue  -MaxTimeQueued -MinTimeQueued AveTimeQueued -
    - ----- No Current Queue ----- -
    -  -
    -  -
    -  -

    -

    Database Sizing Information

    -


    -The database sizing statistics display information about each GRID -database, the size of the grids for the storage araas, the number of -grid -slots in the database, number used, and the percent full of each -database.  -Databases will automatically increase in size.  The D2D-style -databases -will show the number of inventory slots vs. the number of grids in the -database. -

    -

    Database Sizing Statistics -
    - Database -Identifier                       -Storage Area Name   Total Used %Full -
    - -------------------                       ------------------   ----- ---- ----- -
    -BOU_GRID_D2D_AVN_20030307_0600            -D2D netCDF           -1242 1214  97.7% -
    -BOU_GRID_D2D_AVN_20030307_1200            -D2D netCDF           -1242  992  79.9% -
    -BOU_GRID_D2D_ETA12_20030307_1200          -D2D -netCDF            -318  209  65.7% -
    -BOU_GRID_D2D_ETA_20030307_0000            -D2D netCDF           -1968 1431  72.7% -
    -BOU_GRID_D2D_ETA_20030307_1200            -D2D netCDF           -1968 1431  72.7% -
    -BOU_GRID__Fcst_00000000_0000              -byte37x37              -17    7  41.2% -
    -BOU_GRID__Fcst_00000000_0000              -float37x37            -227   61  26.9% -
    -BOU_GRID__Fcst_00000000_0000              -byte37x37               -0    0   0.0% -
    -BOU_GRID__Fcst_00000000_0000              -float37x37              -0    0   0.0% -
    -BOU_GRID__Fcst_00000000_0000              -HistoryUse            -214   62  29.0% -
    -BOU_GRID__Fcst_00000000_0000              -WxUse                  -17    7  41.2% -
    -
    -  -

    -

    Base/Site/User Configuration

    -


    -The Base/Site/User configuration details goes through each data -type in the server and displays the user name (e.g., BASE, SITE, mark), -the name of the file, the coded filename, and whether the file -overrides -the BASE or SITE configuration. -

    -

    BASE/SITE/USER Configuration Details -
    -**** Configuration Files for [TEXT/SELECTTR] **** -

    -

      Files in [BASE] -
    -                                                                   -BASE SITE -
    -     -name                    -coded -filename                         -Override -
    -  ------------------        ----------------                        ----- ---- -
    -  Day -3                    -Day_CA3.SELECTTR -
    -  Day -4                    -Day_CA4.SELECTTR -
    -  Day -5                    -Day_CA5.SELECTTR -
    -  -Today                    -Today.SELECTTR -
    -  -Tomorrow                 -Tomorrow.SELECTTR -
    -  Tomorrow -Night           -Tomorrow_CANight.SELECTTR -
    -  -Tonight                  -Tonight.SELECTTR -

    -

    **** Configuration Files for [TEXT/BUNDLE] **** -

    -

      Files in [BASE] -
    -                                                                   -BASE SITE -
    -     -name                    -coded -filename                         -Override -
    -  ------------------        ----------------                        ----- ---- -
    -  -FireWx                   -FireWx.BUNDLE -
    -  -Gweight                  -Gweight.BUNDLE -
    -  -Public                   -Public.BUNDLE -

    -
    -


    -  -

    -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/ifpServerText.html b/cave/com.raytheon.viz.gfe/help/ifpServerText.html deleted file mode 100644 index 600b6f78fe..0000000000 --- a/cave/com.raytheon.viz.gfe/help/ifpServerText.html +++ /dev/null @@ -1,400 +0,0 @@ - - - - - - ifpServerText User's Guide - - -

    -ifpServerText User's Guide

    -
    January 6, 2012
    -
    -
    -Table of Contents -

    Overview

    -

    -Running the ifpServerText Program

    -

    -Example Execution

    - -
    -
    -

    -Overview

    -
    The ifpServerText is a program to allow reading, -writing, deleting, and inventorying text data in EDEX. -It is an easy way to store items such as smart tools directly into EDEX. -The following data types are supported: -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    CategoryDescription
    ToolSmart tools
    ProcedureProcedures
    UtilityUtilities for smart tools and procedures
    TextUtilityUtilities for text products
    TextProductText product definitions
    EditAreaEdit areas
    EditAreaGroupEdit area group definitions
    WeatherElementGroupWeather element groups
    SelectTRUser-defined selection time ranges
    SampleSetSample Sets
    ColorTableColor Tables
    Combinations
    -
    Zone Combiner Active Combination -Files
    -
    -
    -
    -
    -

    -

    -

    Running the ifpServerText -Program

    -
    The command line syntax is:
    -
    ifpServerText -h hostname -p portnumber -o siteID [-u -user] -[-s -n name -f filename -c class] [-d -n name [-c class]] [-i [-c -class] -[-g -f filename -n name [-c class]] [-m infoType]
    -
    -
    -A sample command line to store data is: -
    -ifpServerText -h dx3-oax -p 9581 -o LWX -s -n MaxT_Tool -f /tmp/maxt.py --c Tool
    -
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Option SyntaxOptional or MandatoryDescription
    -h hostnameMandatory (See Note)Specifies the host, upon which EDEX is running.
    -p portMandatory (See Note)Specifies the port, upon which EDEX is running.
    -o siteIDMandatorySpecifies the site ID for which EDEX is running.
    -u userOptionalThe connection to EDEX will be made using this user, -which defaults to the UNIX login user.
    MetaData Mode:
    -

    -
    -m infoTypeMandatory for meta modeinfoType specifies the type of data to be obtained.  -Choices are -"site", "sitetimezone", "domain", and "singleton". The "site" -will -list the site for which EDEX is configured. The -"sitetimezone" -lists the site and the timezone for EDEX. The -"singleton" -lists all of the databases that are configured as singletons. The -"domain" -lists the common database domain information.
    -f filenameOptionalIndicates the name of the file to contain the output -information.
    Save Mode:
    -

    -
    -sMandatory for save modeIndicates SAVE mode, requires the -n, -f, and -c switches.
    -n nameMandatoryIndicates the name to store the file under in EDEX
    -f filenameMandatoryIndicates the filename source for the operation.
    -c classMandatoryIndicates the type of the file.  Must be one of: -Config, -"Tool", "Procedure", "Utility", "TextUtility",  -"TextProduct", -"EditArea", "EditAreaGroup", "WeatherElementGroup", ColorTable", -"SampleSet", -"SelectTR", "Combinations".
    Delete Mode:
    -

    -
    -dMandatory for delete modeIndicates DELETE mode, requires the -n switch.  The -c -switch -is used only for the class type of Config.
    -n nameMandatoryIndicates the name of the entry to be deleted from EDEX.
    -c classMandatoryIndicates the type of the file.  Must be one of: -Config, -"Tool", "Procedure", "Utility", "TextUtility",  -"TextProduct", -"EditArea", "EditAreaGroup", "WeatherElementGroup", ColorTable", -"SampleSet", -"SelectTR", "Combinations".
    Inventory Mode:
    -

    -
    -iMandatory for inventory modeIndicates INVENTORY mode.  The -c switch is used only -for the -class type of Config.
    -c classMandatoryIndicates the type of the file.  Must be one of: -Config, -"Tool", "Procedure", "Utility", "TextUtility",  -"TextProduct", -"EditArea", "EditAreaGroup", "WeatherElementGroup", ColorTable", -"SampleSet", -"SelectTR", "Combinations"
    Get Mode:
    -

    -
    -gMandatory for get modeIndicates GET mode, requires the -n switch. The -f -switch is -used to output the resulting file to another file, otherwise the output -goes to the terminal. The -c switch is used only for the class -type -of Config.
    -f filenameOptionalIf present, the retrieved file will be written to the -specified location.
    -c classMandatoryIndicates the type of the file. Must be one of: -Config, -"Tool", "Procedure", "Utility", "TextUtility", -"TextProduct", -"EditArea", "EditAreaGroup", "WeatherElementGroup", ColorTable", -"SampleSet", -"SelectTR", "Combinations".
    -Note: The -h serverhost and -p port are -predefined -based on your installation configuration of GFESuite. The -h and --r -will be defined for the server host and port specified during -installation. -If you wish to connect to another server, then these switches will be -necessary. -
    -
    -

    -Example Execution

    -
    Note that in the following examples, the -h and --p -switches are not included. They will default to the currently -installed EDEX configuration. Also in AWIPS2 the site switch becomes mandatory.
    -

    -Saving Data

    -camper> ifpServerText -o LWX -s -n MyMaxTool -f -../examples/smartTools/Td_SmartTool.py --c Tool -

    Obtaining an Inventory

    -camper > ifpServerText -c Tool -i -o LWX
    -

    Getting Data

    -camper > ifpServerText -g -c Tool -n Assign_Value -f -1.txt -o LWX -

    Deleting Data

    -camper > ifpServerText -c Tool -d -n MyTool -o LWX -

    -
    -

    Output Formats

    -The output formats for each of the classes are described in this -section. -
    -

    Tool, Procedure, Utility, TextUtility, TextProduct, Config, -Combinations
    -

    -The output format is the exact copy of the file in EDEX. -
    -

    EditArea

    -

    In AWIPS2 edit areas are now stored in xml format.

    -<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    -< referenceData xmlns:ns2="group">
    - < polygons > MULTIPOLYGON (((-100.74059659999995 39.56791216000005, -100.73749659999999 - 39.56791216000005, -100.72409659999994 39.56801216000008, -100.72139659999999 - 39.56801216000008, -100.72009659999998 39.56571216000003, -100.72009659999998 - 39.56201216000005, -100.71999659999994 39.55391216000004, -100.72009659999998 - 39.54661216000005, -100.71999659999994 39.53941216000004, -100.71999659999994 - 39.53111216000008, -100.71999659999994 39.524712160000036, -100.72009659999998 - 39.520412160000035, -100.72019659999995 39.513312160000055, -100.72019659999995 - 39.50911216000003)))</polygons >
    - </referenceData >
    -
    -

    EditAreaGroup

    -The output consists of a list of edit area names, one per line, that -are -contained within the edit area group, such as: -

    1
    -PPLN1HW
    -
    -

    -

    WeatherElementGroup

    -

    In AWIPS2 weather element groups are stored in xml files:

    -

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    -< WEGroup name="FireWx" xmlns:ns2="group" xmlns:ns3="http://www.example.org/productType">
    - < WEItem relativeCycleNumber="-1" parmID="Hazards_SFC:OAX_GRID__Fcst_00000000_0000"/>
    - < WEItem relativeCycleNumber="-1" parmID="PoP_SFC:OAX_GRID__Fcst_00000000_0000"/>
    - < WEItem relativeCycleNumber="-1" parmID="QPF_SFC:OAX_GRID__Fcst_00000000_0000"/>
    - < WEItem relativeCycleNumber="-1" parmID="RH_SFC:OAX_GRID__Fcst_00000000_0000"/>
    - < WEItem relativeCycleNumber="-1" parmID="Sky_SFC:OAX_GRID__Fcst_00000000_0000"/>
    - < WEItem relativeCycleNumber="-1" parmID="T_SFC:OAX_GRID__Fcst_00000000_0000"/>
    - < WEItem relativeCycleNumber="-1" parmID="Td_SFC:OAX_GRID__Fcst_00000000_0000"/>
    -</WEGroup >
    -
    -

    -

    SelectTR

    -The output consists of the identical format of the user-defined -selection -time range in EDEX, such as: -

    54 78 -

    -

    SampleSet

    -

    In AWIPS2 sample sets are stored in xml files:

    -<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    -< sampleData xmlns:ns2="group">
    - -95.2074,41.009
    - -95.6972,41.0414
    - -96.4373,41.4339
    - -96.6898,41.8389
    - -98.0257,42.7388
    - -96.75,40.86
    - -95.9,41.3
    - -97.43,41.98
    - -95.92,40.95
    -</sampleData>
    -
    -

    ColorTable

    -

    In AWIPS2 color tables are stored in xml files:

    -< colorMap >
    - < color r="0" g="0" b="0" a="1" />
    - < color r="0.00392156862745098" g="0.00392156862745098" b="0.00392156862745098" a="1" />
    - < color r="0.00784313725490196" g="0.00784313725490196" b="0.00784313725490196" a="1" />
    - < color r="0.0117647058823529" g="0.0117647058823529" b="0.0117647058823529" a="1" />
    - < color r="0.0156862745098039" g="0.0156862745098039" b="0.0156862745098039" a="1" />
    - < color r="0.0196078431372549" g="0.0196078431372549" b="0.0196078431372549" a="1" />
    - < color r="1" g="1" b="1" a="1" />
    -</colorMap >

    -

    - - diff --git a/cave/com.raytheon.viz.gfe/help/ifpnetCDF.html b/cave/com.raytheon.viz.gfe/help/ifpnetCDF.html deleted file mode 100644 index 405542d88f..0000000000 --- a/cave/com.raytheon.viz.gfe/help/ifpnetCDF.html +++ /dev/null @@ -1,536 +0,0 @@ - - - - - - - - - - ifpnetCDF Formatter User's Guide - - -

    -ifpnetCDF Formatter User's Guide

    -
    January 6, 2012
    -
    -


    -

    -

    Table of Contents

    -Overview -

    Running the ifpnetCDF Program

    -

    -Organization of the Gridded Data

    -Additional Data Fields -

    Converting to real values from the "-k -krunch" -option -
    -

    -

    Configuration -Interval File
    -

    -
    -

    Overview

    -
    The ifpnetCDF program reads gridded -data -from EDEX that you specify and writes the data to a netCDF -file. -In addtion to the forecast grids, a topography -grid, -latitude -grid, or longitude grid can be written to the file using the -g -option. -Virtually all of the data describing each weather element is written to -the file as well, including the grid size, projection and domain -information, -units, and valid times for each grid. The following sections describe -how -to use this program and document the structure of the resulting netCDF -file. A special switch is available (-k) to "squish" down the -formats -of the data file to as compact as possible.
    -
    -A special configuration file may be used to "sample" the grids and not -take each grid in the inventory.  This has the benefit of -dramatically cutting down on the bandwidth required to transmit the -netCDF file when only a portion of the inventory is required.
    -
    -


    -

    -
    -

    Running the ifpnetCDF Program

    -
    The program is capable of both storing -and retrieving grids from EDEX.
    -
    The command line syntax is:
    -
    ifpnetCDF -o outputFile -h hostname --r rpcPortNumber -d databaseID [-p parmID] [-s startTime] [-e endTime] -[-m editAreaName] [-u user] [-g] [-t] [-C configurationIntervalName]
    -
    -
    A sample command line is:
    -
    ifpnetCDF -o myGridFile -h dx3-oax --r 9581 -d TEST_GRID__Fcst_00000000_0000 -p T -s 19980604_1200 -e -19980605_0000 --m BOU -g -c -t -C cdfSample
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Option SyntaxOptional or MandatoryDescription
    -o filename -
    Optional
    -
    Specifies the name of the output file. If no output file is -specified -the data will be written to the file ifpnetCDFFile.cdf
    -h hostname -
    Mandatory (See Note)
    -
    Specifies the EDEX host from which the data will be -extracted.
    -r port -
    Mandatory (See Note)
    -
    Specifies the EDEX host from which the data will be -extracted.
    -u user -
    Optional
    -
    Specifies the user for connection to the server. Defaults to -SITE. -Important only when using edit area masks and the mask hasn't been -defined -in BASE or SITE.
    -d databaseID -
    Mandatory
    -
    Source database identifier from which to get the data.  -There -may be only one databaseID specified.  The format of the database -identifier is: site_GRID_optType_modelName_modelRunTime. For example: -DEN_GRID__eta_19980604_1200. -(Note double underscore after GRID for databases that don't have the -optional -type)
    -p weatherElementName -
    Optional
    -
    If no -p switches are present, then all weather elements in -the specified -databases will be processed.  There may be several -p switches -present -if desired. For example: -p T -p Td -p Wind.  The weather element -name refers to the SFC level, unless the weather element name contains -an underscore.  To specify a level other than SFC, use the format -weatherElementName_level, such as T_3K.
    -s startTime -
    Optional
    -
    Specifies the start time for the range of grids to extract. -If no time -is specified, then assume "from the beginning of time". Format is -yyyyMMDD_HHMM -or 20010604_1200.
    -e endTime -
    Optional
    -
    Specifies the ending time for the range of grids to extract. -If no -time is specified, then assume "to the end of time". Format is -yyyyMMDD_HHMM -or 20010604_1200.
     -m mask -
    Optional
    -
    Specifies an edit area outside of which the grids are clipped -with -a fill value. If the edit area is not specified -or is not found in EDEX, the entire grid will be written to -the file unclipped.
     -g -
    Optional
    -
    When specified, a grid of topography, latitude, and longitude -are also -written to the netCDF file.
    -c -
    Optional
    -
    When specified, the output will be compressed. The -compression factor -to gzip defaults to 6; this can be changed through the -f switch.
    -f factor -
    Optional
    -
    When specified with the -c switch, this defines the gzip -factor to -be applied to the compression. Defaults to 6. Can range from 1 to 9 -with -9 being the maximum, but slowest, compression.
    -t -
    Optional
    -
    When specified, data values will be "trimmed" or rounded to -the precision -of the data, as defined by EDEX.
    -k -
    Optional
    -
    The -t switch must also be given if the -k functionality is -desired.  -The -k switch reformats the data values into smaller units, as as -converting -a 32-bit float into a 8-bit byte, in order to save space.  When -the --k switch is given and the data has been reformatted, two new -attributes -provided (dataMultipler and dataOffset) which are used to convert the -data -back into real numbers.
    -C configIntervalName
    -
    Optional
    -
    Specifies a configuration interval file which -controls the interval/spacing of the grids.  The name identifies a -file within the EDEX textUtilities directory and must be a Python -file in the correct format.
    -
    -Note: The -h and -r switches are predefined if -you -are running ifpnetCDF in the GFESuite installed environment.  The -values specified in the installation are picked up automatically. You -only -need to specify them if you want to connect to a different EDEX.   If -environment variables ${CDSHOST} or -${CDSPORT} are defined, then the default server and port will be -determined from the environment variables, unless overridden with the -user specified -h and -r switches. -


    -

    -

    -

    -

    -Organization of the Gridded -Data in the netCDF file

    -
    The organization of the data is -described -in the netCDF -format documentation.
    -
    -
    -

    Additional Data Fields

    -
    -

    -Topography

    -
    The ifpnetCDF program will optionally -store -a topography grid along with the weather elements that you specify. -This -grid contains similar attributes and is in units of feet above sea -level.
    -

    -Latitude, Longitude

    -
    The ifpnetCDF program will optionally -store -grids of latitude and longitude at each grid point.  Remember that -longitude is expressed as a negative number, if the domain is in the -Western -Hemisphere.  If the -k switch is given, then you will need to -multiply -the data values by the dataMultiplier and add the dataOffset, per the -format -of the netCDF attributes.
    -


    -

    -
    -

    Converting to real values from the "-k -krunch" -option

    -If the -k krunch value has been given, then the data values in the file -need to be converted to actual values through the use of a -formula.  -The attributes dataMultiplier and dataOffset provide the required -information.  -If these values are not present, then you may interpret the values -directly. -
    -

    data value = (netCDF value * dataMultiplier) + dataOffset
    -

    -
    -
    -

    Configuration Interval File

    -The configuration interval file is an optional capability of -ifpnetCDF.   It can be used to select certain grids to be -placed in the ifpnetCDF output file, rather than all grids in the -inventory.  For example, you can choose to only include 3-hrly -temperature grids out to 24 hours, then 6-hrly temperature grids out to -72 hours, and then no temperature grids past 72 hours.   You -can control this capability on a per weather element basis.  The -definition determines a set of explicit times.  If there is a grid -that contains that explicit time, then the grid is included in the -output.
    -
    -The configuration interval file is a python file and must reside in the -EDEX textUtilities directory.  You can create the file -through the use of the GFE, with the GFE->Define Text Products menu, -or by using a conventional text editor and the ifpServerText utility.
    -
    -Here is an example configuration interval file for the ifpnetCDF -program, which samples the dew point (Td) with basetimes of 3z and 15z, -which takes 6 hrly grids of Td up to 72 hours, then no Td grids after -that point.  All other weather elements use basetimes of 0z and -12z, and take 3hr grids out to 24hr, 6 hrly grids out to 96 hr, and -then 12 hrly grids past this point:
    -
    -The format is:
    -SampleDef[weNameAndLevel] -= ([listOfbasetimes], [list of offset/intervals]), where
    -listOfBasetimes is [basetime1, -basetime2, basetime3, ...] and
    -listOfOffset/Intervals is [(offset1, -interval1), (offset2, interval2), (offset3, interval3), ...]
    -
    -HR=3600
    -
    -SampleDef = {}
    -SampleDef['default'] -= (
    -   -[0*HR, 12*HR],       #first tuple is -basetimes
    -    -[                   -#2nd tuple is list of offset from basetime, interval
    -     -(0*HR,  -3*HR),            -#start at basetime, take every 3 hours
    -     -(24*HR, -6*HR),           -#24h+ from basetime, take every 6 hours
    -     -(96*HR, 12*HR),          -#96h+ from basetime, take every 12 hours
    -    -])
    -
    -SampleDef['Td_SFC'] -= (
    -   -[3*HR, 15*HR],        #basetimes of -3z and 15z
    -    -[
    -     -(0*HR,  -6*HR),            -#start at basetime, take every 6 hours
    -     -(72*HR, 1000*HR),         -#don't take anything past 72Hr
    -    -])
    -
    -The file is a Python dictionary.  A mandatory key is 'default', -which applies to all weather elements that are not explicitly -specified.  Each entry consists of a tuple.  The first tuple -is a list of basetimes, the second tuple is a list of (offset, -interval) values.
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Item
    -
    Example
    -
    Description
    -
    SampleDef = {}
    -
    SampleDef = {}
    -
    Mandatory sampling definition, -defines the dictionary.  The ifpnetCDF program looks for the -SampleDef variable name.
    -
    BaseTimes
    -
    [0*HR, 12*HR]
    -
    List of times relative to -0000z.  The values are specified in seconds, thus be sure to -convert the value to hours.  The basetime values should not be -negative and must be less than 24*HR.   The basetimes define -the "base" of the offset / interval calculations.  For example, if -the basetime is set to 0000z, and the offset/interval is set to -(0*HR,3*HR), that includes grids that are aligned with 0z, 3z, 6z, 9z, -...   If the basetime was set to 0200z, and the -offset/interval set to (0*HR, 3*HR), then grids would be included that -are aligned with 2z, 5z, 8z, 11z, ...   There may be more -than one basetime specified.
    -
    Offset/Interval Times
    -
    [(0*HR, 3*HR), (24*HR, 6*HR)]
    -
    Defines the interval as a series -of offset and interval tuples.  The offset is the starting time, -offset from the most recent basetime.  The 2nd portion of the -tuple defines the interval to use for the grids.
    -
    'default'
    -
    SampleDef['default'] = -(basetimeList, offset/Interval list))
    -
    Defines the interval for all -weather elements, unless specified weather elements have their own -definition.
    -
    'Td_SFC'
    -
    SampleDef['Td_SFC'] = -(basetimeList, offset/interval list)
    -
    Defines the interval for weather -element "Td_SFC", which is a weather element name, followed by an -underscore character, followed by the weather element level.
    -
    -
    -

    Common Offset/Interval Examples

    -
    - - - - - - - - - - - - - - - - - - - - - - - -
    Definition
    -
    Basetime -Definition
    -
    Offset/Interval -Definition
    -
    Hourly Grids up to 72 hr from -basetime, then no more grids.
    -
    [0*HR]
    -
    [(0*HR, 1*HR), (72*HR, 1000*HR)]
    -
    Hourly Grids up to 12 hr, 3 hrly -grids to 24 hr, 6 hrly grids after 24hr
    -
    [0*HR]
    -
    [(0*HR, 1*HR), (12*HR, 3*HR), -(24*HR, 6*HR)]
    No grids for first 24 hours, -then 3 hrly grids through 72 hours, then 6 hrly grids.
    -
    [0*HR]
    -
    [(24*HR, 3*HR), (72*HR, 6*HR)]
    -
    -
    -
    -


    -

    -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/images/Adjust.jpg b/cave/com.raytheon.viz.gfe/help/images/Adjust.jpg deleted file mode 100644 index 65a6f4439f..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Adjust.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Adjust1.png b/cave/com.raytheon.viz.gfe/help/images/Adjust1.png deleted file mode 100644 index 6a6c637b9d..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Adjust1.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Adjust10.png b/cave/com.raytheon.viz.gfe/help/images/Adjust10.png deleted file mode 100644 index 632347c9d3..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Adjust10.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Adjust11.png b/cave/com.raytheon.viz.gfe/help/images/Adjust11.png deleted file mode 100644 index 4e37999121..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Adjust11.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Adjust12.png b/cave/com.raytheon.viz.gfe/help/images/Adjust12.png deleted file mode 100644 index a292cc461e..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Adjust12.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Adjust13.png b/cave/com.raytheon.viz.gfe/help/images/Adjust13.png deleted file mode 100644 index dd8c8901f1..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Adjust13.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Adjust2.png b/cave/com.raytheon.viz.gfe/help/images/Adjust2.png deleted file mode 100644 index 4bca8c0d7c..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Adjust2.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Adjust3.png b/cave/com.raytheon.viz.gfe/help/images/Adjust3.png deleted file mode 100644 index 16edeed73b..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Adjust3.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Adjust4.png b/cave/com.raytheon.viz.gfe/help/images/Adjust4.png deleted file mode 100644 index 60e1353844..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Adjust4.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Adjust5.png b/cave/com.raytheon.viz.gfe/help/images/Adjust5.png deleted file mode 100644 index 61d3742b15..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Adjust5.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Adjust6.png b/cave/com.raytheon.viz.gfe/help/images/Adjust6.png deleted file mode 100644 index c76304c862..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Adjust6.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Adjust7.png b/cave/com.raytheon.viz.gfe/help/images/Adjust7.png deleted file mode 100644 index e3898829b9..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Adjust7.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Adjust8.png b/cave/com.raytheon.viz.gfe/help/images/Adjust8.png deleted file mode 100644 index 8bc8068c76..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Adjust8.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Adjust9.png b/cave/com.raytheon.viz.gfe/help/images/Adjust9.png deleted file mode 100644 index ce7592356f..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Adjust9.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ButtonBar1.jpg b/cave/com.raytheon.viz.gfe/help/images/ButtonBar1.jpg deleted file mode 100644 index b8e1dcd514..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ButtonBar1.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/CallToActions.png b/cave/com.raytheon.viz.gfe/help/images/CallToActions.png deleted file mode 100644 index d03fe5cafa..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/CallToActions.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/CheckTandTdGrid.jpg b/cave/com.raytheon.viz.gfe/help/images/CheckTandTdGrid.jpg deleted file mode 100644 index c7e12d315b..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/CheckTandTdGrid.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/CheckTandTdUI.jpg b/cave/com.raytheon.viz.gfe/help/images/CheckTandTdUI.jpg deleted file mode 100644 index 3adb20e25b..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/CheckTandTdUI.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ColorChooser.gif b/cave/com.raytheon.viz.gfe/help/images/ColorChooser.gif deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/cave/com.raytheon.viz.gfe/help/images/ColorChooser.jpg b/cave/com.raytheon.viz.gfe/help/images/ColorChooser.jpg deleted file mode 100644 index e5925d620f..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ColorChooser.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ColorTableEditor.jpg b/cave/com.raytheon.viz.gfe/help/images/ColorTableEditor.jpg deleted file mode 100644 index c9cdcd767e..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ColorTableEditor.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/CombinedSegments.png b/cave/com.raytheon.viz.gfe/help/images/CombinedSegments.png deleted file mode 100644 index e8f6d1b7a4..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/CombinedSegments.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DFC.gif b/cave/com.raytheon.viz.gfe/help/images/DFC.gif deleted file mode 100644 index b59e6ecd13..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DFC.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DFCInterface.gif b/cave/com.raytheon.viz.gfe/help/images/DFCInterface.gif deleted file mode 100644 index 1ca0219880..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DFCInterface.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DFCMenuSelector.gif b/cave/com.raytheon.viz.gfe/help/images/DFCMenuSelector.gif deleted file mode 100644 index a921321f35..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DFCMenuSelector.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DFCPicture.jpg b/cave/com.raytheon.viz.gfe/help/images/DFCPicture.jpg deleted file mode 100644 index 65ad016fa3..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DFCPicture.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogAbout.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogAbout.jpg deleted file mode 100644 index 5de7054690..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogAbout.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogAboutCAVE.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogAboutCAVE.jpg deleted file mode 100644 index 83e7696eff..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogAboutCAVE.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogAutoSaveInterval.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogAutoSaveInterval.jpg deleted file mode 100644 index bd59d9bd48..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogAutoSaveInterval.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogBreakLock.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogBreakLock.jpg deleted file mode 100644 index 08f97bcc4b..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogBreakLock.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogColorTableBrightness.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogColorTableBrightness.jpg deleted file mode 100644 index 90facb9081..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogColorTableBrightness.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogColorTableDiscrete.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogColorTableDiscrete.jpg deleted file mode 100644 index 05f420f90d..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogColorTableDiscrete.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogColorTableRange.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogColorTableRange.jpg deleted file mode 100644 index fe3fd10c43..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogColorTableRange.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogComboColors.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogComboColors.jpg deleted file mode 100644 index a0f02a28f7..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogComboColors.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogCopyAllGrids.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogCopyAllGrids.jpg deleted file mode 100644 index 73d1f4e9fe..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogCopyAllGrids.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogCopySelectedGrids.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogCopySelectedGrids.jpg deleted file mode 100644 index b09c55013e..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogCopySelectedGrids.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogCreateFromScratch.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogCreateFromScratch.jpg deleted file mode 100644 index a3c8f08e7e..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogCreateFromScratch.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogDTR.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogDTR.jpg deleted file mode 100644 index 7440d9a757..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogDTR.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogDefineConfig.png b/cave/com.raytheon.viz.gfe/help/images/DialogDefineConfig.png deleted file mode 100644 index e96186b012..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogDefineConfig.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogDefineProcedures.png b/cave/com.raytheon.viz.gfe/help/images/DialogDefineProcedures.png deleted file mode 100644 index 804e78bb9b..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogDefineProcedures.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogDefineText.png b/cave/com.raytheon.viz.gfe/help/images/DialogDefineText.png deleted file mode 100644 index 81329cddfc..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogDefineText.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogDeleteCombo.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogDeleteCombo.jpg deleted file mode 100644 index 5aa34ab0a4..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogDeleteCombo.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogDeleteSamples.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogDeleteSamples.jpg deleted file mode 100644 index 0136413588..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogDeleteSamples.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogDeleteUser.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogDeleteUser.jpg deleted file mode 100644 index 80aa6f4584..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogDeleteUser.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogDeleteWeatherElementGroup.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogDeleteWeatherElementGroup.jpg deleted file mode 100644 index 25cff2a672..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogDeleteWeatherElementGroup.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogDelta.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogDelta.jpg deleted file mode 100644 index ad566df299..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogDelta.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogDiscrepancy.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogDiscrepancy.jpg deleted file mode 100644 index 5df6f88aa7..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogDiscrepancy.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogDiscreteContains.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogDiscreteContains.jpg deleted file mode 100644 index 6bdd9702ab..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogDiscreteContains.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogDisplayAttributes.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogDisplayAttributes.jpg deleted file mode 100644 index 0a1499fd5e..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogDisplayAttributes.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogDisplayInfo.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogDisplayInfo.jpg deleted file mode 100644 index 4b44229506..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogDisplayInfo.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogDisplayInfo1.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogDisplayInfo1.jpg deleted file mode 100644 index 285f8194aa..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogDisplayInfo1.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogDisplayInfo2.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogDisplayInfo2.jpg deleted file mode 100644 index 342fbaaf4d..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogDisplayInfo2.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogDisplayInfo3.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogDisplayInfo3.jpg deleted file mode 100644 index d240f99469..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogDisplayInfo3.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogDisplayInfo4.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogDisplayInfo4.jpg deleted file mode 100644 index 0e18250ccb..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogDisplayInfo4.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogDisplayInfo5.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogDisplayInfo5.jpg deleted file mode 100644 index 54629beab4..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogDisplayInfo5.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogDisplayInfo6.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogDisplayInfo6.jpg deleted file mode 100644 index 2ca9cfa65b..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogDisplayInfo6.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogEditAction.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogEditAction.jpg deleted file mode 100644 index 6efdb799c8..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogEditAction.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogEditAction1.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogEditAction1.jpg deleted file mode 100644 index 67a957831a..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogEditAction1.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogEditArea.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogEditArea.jpg deleted file mode 100644 index 6626435522..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogEditArea.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogEditAreaAppearance.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogEditAreaAppearance.jpg deleted file mode 100644 index 0cf2728439..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogEditAreaAppearance.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogEditAreaDelete.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogEditAreaDelete.jpg deleted file mode 100644 index 60289c4336..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogEditAreaDelete.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogEditAreaDeleteGroup.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogEditAreaDeleteGroup.jpg deleted file mode 100644 index f54dada0a4..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogEditAreaDeleteGroup.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogEditAreaSave.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogEditAreaSave.jpg deleted file mode 100644 index 888112c29d..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogEditAreaSave.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogEditAreaSaveGroup.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogEditAreaSaveGroup.jpg deleted file mode 100644 index 2e43d005b8..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogEditAreaSaveGroup.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogExamineCombo.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogExamineCombo.jpg deleted file mode 100644 index 9f7de4971f..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogExamineCombo.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogExitGFE.png b/cave/com.raytheon.viz.gfe/help/images/DialogExitGFE.png deleted file mode 100644 index 4c82e1f942..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogExitGFE.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogFuzz.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogFuzz.jpg deleted file mode 100644 index 064b4cfc13..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogFuzz.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogInterpAlgorithm.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogInterpAlgorithm.jpg deleted file mode 100644 index 70fc3b7d40..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogInterpAlgorithm.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogInterpolation.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogInterpolation.jpg deleted file mode 100644 index 5ea69eb7ac..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogInterpolation.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogLoadSamples.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogLoadSamples.jpg deleted file mode 100644 index 02e973b183..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogLoadSamples.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogLocalFormatter.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogLocalFormatter.jpg deleted file mode 100644 index fa7b9ef189..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogLocalFormatter.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogLoopProperties.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogLoopProperties.jpg deleted file mode 100644 index 3f83936436..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogLoopProperties.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogManageHiddenWE.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogManageHiddenWE.jpg deleted file mode 100644 index 91e4fc7614..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogManageHiddenWE.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogMoveParameter.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogMoveParameter.jpg deleted file mode 100644 index 14f9ccf3e4..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogMoveParameter.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogPickUpValueDiscrete.png b/cave/com.raytheon.viz.gfe/help/images/DialogPickUpValueDiscrete.png deleted file mode 100644 index 464e3a8428..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogPickUpValueDiscrete.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogPickUpValueScalar.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogPickUpValueScalar.jpg deleted file mode 100644 index 87cd60afe1..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogPickUpValueScalar.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogPickUpValueVector.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogPickUpValueVector.jpg deleted file mode 100644 index ff48f5bb2c..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogPickUpValueVector.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogPickUpValueWeather.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogPickUpValueWeather.jpg deleted file mode 100644 index 2e323e21c6..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogPickUpValueWeather.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogProcessMonitor1.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogProcessMonitor1.jpg deleted file mode 100644 index cc3c2238f5..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogProcessMonitor1.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogProcessMonitor2.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogProcessMonitor2.jpg deleted file mode 100644 index faf7f1af28..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogProcessMonitor2.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogProcessMonitor3.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogProcessMonitor3.jpg deleted file mode 100644 index 3dfac72475..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogProcessMonitor3.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogProcessMonitor4.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogProcessMonitor4.jpg deleted file mode 100644 index 85801d5451..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogProcessMonitor4.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogProcessMonitor5.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogProcessMonitor5.jpg deleted file mode 100644 index 0baadb4aa2..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogProcessMonitor5.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogProdGen.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogProdGen.jpg deleted file mode 100644 index fb0f248f87..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogProdGen.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogPublish.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogPublish.jpg deleted file mode 100644 index 2c9fb934cf..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogPublish.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogRequestISC.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogRequestISC.jpg deleted file mode 100644 index 499aedcdf9..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogRequestISC.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogRevertFcst.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogRevertFcst.jpg deleted file mode 100644 index fb78b47548..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogRevertFcst.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogSTR.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogSTR.jpg deleted file mode 100644 index 0820b70684..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogSTR.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogSamplesLatLon.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogSamplesLatLon.jpg deleted file mode 100644 index 457c646260..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogSamplesLatLon.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogSaveCombos.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogSaveCombos.jpg deleted file mode 100644 index 66a89dc25e..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogSaveCombos.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogSaveFcst.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogSaveFcst.jpg deleted file mode 100644 index 1a72fc548a..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogSaveFcst.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogSaveSamples.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogSaveSamples.jpg deleted file mode 100644 index 806e90f4e0..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogSaveSamples.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogSaveWeatherElementGroup.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogSaveWeatherElementGroup.jpg deleted file mode 100644 index 6e2d70ec6b..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogSaveWeatherElementGroup.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogScripts.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogScripts.jpg deleted file mode 100644 index 5ebaf9cd33..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogScripts.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogSendISC.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogSendISC.jpg deleted file mode 100644 index 92fd9fc7ef..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogSendISC.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogSendISC1.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogSendISC1.jpg deleted file mode 100644 index 84e943f8f8..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogSendISC1.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogSetWeather.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogSetWeather.jpg deleted file mode 100644 index a7fa3b7187..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogSetWeather.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogTEStatisticsMode.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogTEStatisticsMode.jpg deleted file mode 100644 index 193896ca8c..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogTEStatisticsMode.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogTimeScaleDisplayedPeriods.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogTimeScaleDisplayedPeriods.jpg deleted file mode 100644 index 3b1a2ae520..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogTimeScaleDisplayedPeriods.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogTimeShift.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogTimeShift.jpg deleted file mode 100644 index 2bd99aaf89..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogTimeShift.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogWeatherContains.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogWeatherContains.jpg deleted file mode 100644 index bd9f441848..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogWeatherContains.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/DialogZoneShuffle.jpg b/cave/com.raytheon.viz.gfe/help/images/DialogZoneShuffle.jpg deleted file mode 100644 index 892ac7df9d..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/DialogZoneShuffle.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/EGT.jpg b/cave/com.raytheon.viz.gfe/help/images/EGT.jpg deleted file mode 100644 index 3f8add3759..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/EGT.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ERQCcheck.png b/cave/com.raytheon.viz.gfe/help/images/ERQCcheck.png deleted file mode 100644 index be3333e684..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ERQCcheck.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/EditAreaButtons.gif b/cave/com.raytheon.viz.gfe/help/images/EditAreaButtons.gif deleted file mode 100644 index 6b9bb67711..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/EditAreaButtons.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Enhanced_Wx.png b/cave/com.raytheon.viz.gfe/help/images/Enhanced_Wx.png deleted file mode 100644 index d7191d328d..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Enhanced_Wx.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ExitGFEDialog.png b/cave/com.raytheon.viz.gfe/help/images/ExitGFEDialog.png deleted file mode 100644 index df0544d187..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ExitGFEDialog.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Extrapolate.jpg b/cave/com.raytheon.viz.gfe/help/images/Extrapolate.jpg deleted file mode 100644 index 1890740e79..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Extrapolate.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Extrapolate1.jpg b/cave/com.raytheon.viz.gfe/help/images/Extrapolate1.jpg deleted file mode 100644 index 9c6e9cb24e..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Extrapolate1.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Fill_BIGCROSS.jpg b/cave/com.raytheon.viz.gfe/help/images/Fill_BIGCROSS.jpg deleted file mode 100644 index 3def00694f..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Fill_BIGCROSS.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Fill_CROSS.jpg b/cave/com.raytheon.viz.gfe/help/images/Fill_CROSS.jpg deleted file mode 100644 index d2e53b8e50..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Fill_CROSS.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Fill_CURVE.jpg b/cave/com.raytheon.viz.gfe/help/images/Fill_CURVE.jpg deleted file mode 100644 index fc8a39d880..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Fill_CURVE.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Fill_DUALCURVE.jpg b/cave/com.raytheon.viz.gfe/help/images/Fill_DUALCURVE.jpg deleted file mode 100644 index 785f8057ca..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Fill_DUALCURVE.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Fill_HORIZONTAL.jpg b/cave/com.raytheon.viz.gfe/help/images/Fill_HORIZONTAL.jpg deleted file mode 100644 index de0a446aa2..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Fill_HORIZONTAL.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Fill_LKLY.jpg b/cave/com.raytheon.viz.gfe/help/images/Fill_LKLY.jpg deleted file mode 100644 index 9e1a91a8b5..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Fill_LKLY.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Fill_OCNL.jpg b/cave/com.raytheon.viz.gfe/help/images/Fill_OCNL.jpg deleted file mode 100644 index 28904c43bf..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Fill_OCNL.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Fill_SCT.jpg b/cave/com.raytheon.viz.gfe/help/images/Fill_SCT.jpg deleted file mode 100644 index 420e1de2e0..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Fill_SCT.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Fill_SELECTED_AREA.jpg b/cave/com.raytheon.viz.gfe/help/images/Fill_SELECTED_AREA.jpg deleted file mode 100644 index 327e70bf1c..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Fill_SELECTED_AREA.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Fill_TRANS_25PC_135DEG.jpg b/cave/com.raytheon.viz.gfe/help/images/Fill_TRANS_25PC_135DEG.jpg deleted file mode 100644 index 01c0ea49d7..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Fill_TRANS_25PC_135DEG.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Fill_TRANS_25PC_45DEG.jpg b/cave/com.raytheon.viz.gfe/help/images/Fill_TRANS_25PC_45DEG.jpg deleted file mode 100644 index 5fbcf6de5a..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Fill_TRANS_25PC_45DEG.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Fill_VERTICAL.jpg b/cave/com.raytheon.viz.gfe/help/images/Fill_VERTICAL.jpg deleted file mode 100644 index 87d376e3d1..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Fill_VERTICAL.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Fill_WHOLE.jpg b/cave/com.raytheon.viz.gfe/help/images/Fill_WHOLE.jpg deleted file mode 100644 index 7bbd85afd1..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Fill_WHOLE.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Fill_WIDE.jpg b/cave/com.raytheon.viz.gfe/help/images/Fill_WIDE.jpg deleted file mode 100644 index ce75b15e1b..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Fill_WIDE.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Fill_WIDE_SCATTERED.jpg b/cave/com.raytheon.viz.gfe/help/images/Fill_WIDE_SCATTERED.jpg deleted file mode 100644 index 516bf44978..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Fill_WIDE_SCATTERED.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ForcedSegmentsWSW.png b/cave/com.raytheon.viz.gfe/help/images/ForcedSegmentsWSW.png deleted file mode 100644 index 066d8b9f7b..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ForcedSegmentsWSW.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/FormatterLauncher.png b/cave/com.raytheon.viz.gfe/help/images/FormatterLauncher.png deleted file mode 100644 index 315f384878..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/FormatterLauncher.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/FormatterLauncher1.png b/cave/com.raytheon.viz.gfe/help/images/FormatterLauncher1.png deleted file mode 100644 index 5058931afb..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/FormatterLauncher1.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/FormatterLauncher10.png b/cave/com.raytheon.viz.gfe/help/images/FormatterLauncher10.png deleted file mode 100644 index 8cc9914581..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/FormatterLauncher10.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/FormatterLauncher11.png b/cave/com.raytheon.viz.gfe/help/images/FormatterLauncher11.png deleted file mode 100644 index d0e44e590f..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/FormatterLauncher11.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/FormatterLauncher12.png b/cave/com.raytheon.viz.gfe/help/images/FormatterLauncher12.png deleted file mode 100644 index 89f6a19ef8..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/FormatterLauncher12.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/FormatterLauncher14.png b/cave/com.raytheon.viz.gfe/help/images/FormatterLauncher14.png deleted file mode 100644 index dedf1ea853..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/FormatterLauncher14.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/FormatterLauncher15.png b/cave/com.raytheon.viz.gfe/help/images/FormatterLauncher15.png deleted file mode 100644 index b8715cadf5..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/FormatterLauncher15.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/FormatterLauncher16.png b/cave/com.raytheon.viz.gfe/help/images/FormatterLauncher16.png deleted file mode 100644 index 0e153bae7e..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/FormatterLauncher16.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/FormatterLauncher17.png b/cave/com.raytheon.viz.gfe/help/images/FormatterLauncher17.png deleted file mode 100644 index 43ff26bb93..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/FormatterLauncher17.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/FormatterLauncher18.png b/cave/com.raytheon.viz.gfe/help/images/FormatterLauncher18.png deleted file mode 100644 index 65f3160582..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/FormatterLauncher18.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/FormatterLauncher2.png b/cave/com.raytheon.viz.gfe/help/images/FormatterLauncher2.png deleted file mode 100644 index e694bea703..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/FormatterLauncher2.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/FormatterLauncher3.png b/cave/com.raytheon.viz.gfe/help/images/FormatterLauncher3.png deleted file mode 100644 index 6cdb66a9d2..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/FormatterLauncher3.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/FormatterLauncher4.png b/cave/com.raytheon.viz.gfe/help/images/FormatterLauncher4.png deleted file mode 100644 index 19688ef025..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/FormatterLauncher4.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/FormatterLauncher5.png b/cave/com.raytheon.viz.gfe/help/images/FormatterLauncher5.png deleted file mode 100644 index a9cd5c0f89..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/FormatterLauncher5.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/FormatterLauncher6.png b/cave/com.raytheon.viz.gfe/help/images/FormatterLauncher6.png deleted file mode 100644 index 909a8089ae..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/FormatterLauncher6.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/FormatterLauncher7.png b/cave/com.raytheon.viz.gfe/help/images/FormatterLauncher7.png deleted file mode 100644 index fad41b98be..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/FormatterLauncher7.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/FormatterLauncher8.png b/cave/com.raytheon.viz.gfe/help/images/FormatterLauncher8.png deleted file mode 100644 index 3f773681e0..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/FormatterLauncher8.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/GFE.gif b/cave/com.raytheon.viz.gfe/help/images/GFE.gif deleted file mode 100644 index 7682dc716b..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/GFE.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/GFEPracticeMode.png b/cave/com.raytheon.viz.gfe/help/images/GFEPracticeMode.png deleted file mode 100644 index 8e499b8ff2..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/GFEPracticeMode.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/GFEStartup1.jpg b/cave/com.raytheon.viz.gfe/help/images/GFEStartup1.jpg deleted file mode 100644 index fcd7a0c4e5..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/GFEStartup1.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/GFEStartup1.png b/cave/com.raytheon.viz.gfe/help/images/GFEStartup1.png deleted file mode 100644 index dfd19dfa87..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/GFEStartup1.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/GFEStartup2.jpg b/cave/com.raytheon.viz.gfe/help/images/GFEStartup2.jpg deleted file mode 100644 index 0a48ecb079..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/GFEStartup2.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/GFEStartup2.png b/cave/com.raytheon.viz.gfe/help/images/GFEStartup2.png deleted file mode 100644 index 525512f978..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/GFEStartup2.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/GFEStartup3.jpg b/cave/com.raytheon.viz.gfe/help/images/GFEStartup3.jpg deleted file mode 100644 index ba4bbf519a..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/GFEStartup3.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/GFEStartup3.png b/cave/com.raytheon.viz.gfe/help/images/GFEStartup3.png deleted file mode 100644 index b968dd0984..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/GFEStartup3.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/GFEStartup4.jpg b/cave/com.raytheon.viz.gfe/help/images/GFEStartup4.jpg deleted file mode 100644 index 19b09c5a8a..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/GFEStartup4.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/GFEStartup4.png b/cave/com.raytheon.viz.gfe/help/images/GFEStartup4.png deleted file mode 100644 index d96cb13338..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/GFEStartup4.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/GFETestMode.png b/cave/com.raytheon.viz.gfe/help/images/GFETestMode.png deleted file mode 100644 index d9d9bedc18..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/GFETestMode.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/GFETraining-1.gif b/cave/com.raytheon.viz.gfe/help/images/GFETraining-1.gif deleted file mode 100644 index b1d50e3506..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/GFETraining-1.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/GFETraining-15.gif b/cave/com.raytheon.viz.gfe/help/images/GFETraining-15.gif deleted file mode 100644 index b9dc47c6ab..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/GFETraining-15.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/GFETraining-16.gif b/cave/com.raytheon.viz.gfe/help/images/GFETraining-16.gif deleted file mode 100644 index 2646dfdea0..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/GFETraining-16.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/GFETraining-17.gif b/cave/com.raytheon.viz.gfe/help/images/GFETraining-17.gif deleted file mode 100644 index 8ea47e4a66..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/GFETraining-17.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/GFETraining-29.gif b/cave/com.raytheon.viz.gfe/help/images/GFETraining-29.gif deleted file mode 100644 index cf010946a0..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/GFETraining-29.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/GFETraining-30.gif b/cave/com.raytheon.viz.gfe/help/images/GFETraining-30.gif deleted file mode 100644 index cb59a162fc..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/GFETraining-30.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/GFETraining-5.gif b/cave/com.raytheon.viz.gfe/help/images/GFETraining-5.gif deleted file mode 100644 index b540e89558..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/GFETraining-5.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/GFEWaterColorIMage.jpg b/cave/com.raytheon.viz.gfe/help/images/GFEWaterColorIMage.jpg deleted file mode 100644 index c7afcc3fd4..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/GFEWaterColorIMage.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/GFEcontour.gif b/cave/com.raytheon.viz.gfe/help/images/GFEcontour.gif deleted file mode 100644 index 31d87da388..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/GFEcontour.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/GHGMonitor.png b/cave/com.raytheon.viz.gfe/help/images/GHGMonitor.png deleted file mode 100644 index fea3492342..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/GHGMonitor.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/GHGMonitor1.png b/cave/com.raytheon.viz.gfe/help/images/GHGMonitor1.png deleted file mode 100644 index abc6d3448c..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/GHGMonitor1.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/GHGMonitor10.png b/cave/com.raytheon.viz.gfe/help/images/GHGMonitor10.png deleted file mode 100644 index a42eec3224..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/GHGMonitor10.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/GHGMonitor11.png b/cave/com.raytheon.viz.gfe/help/images/GHGMonitor11.png deleted file mode 100644 index 7d38dbc909..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/GHGMonitor11.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/GHGMonitor12.png b/cave/com.raytheon.viz.gfe/help/images/GHGMonitor12.png deleted file mode 100644 index 4770eca455..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/GHGMonitor12.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/GHGMonitor13.png b/cave/com.raytheon.viz.gfe/help/images/GHGMonitor13.png deleted file mode 100644 index b2cbe83edd..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/GHGMonitor13.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/GHGMonitor14.png b/cave/com.raytheon.viz.gfe/help/images/GHGMonitor14.png deleted file mode 100644 index aa97ae6f06..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/GHGMonitor14.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/GHGMonitor15.png b/cave/com.raytheon.viz.gfe/help/images/GHGMonitor15.png deleted file mode 100644 index 5caa5cf8e1..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/GHGMonitor15.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/GHGMonitor16.png b/cave/com.raytheon.viz.gfe/help/images/GHGMonitor16.png deleted file mode 100644 index 6edcdbe503..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/GHGMonitor16.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/GHGMonitor17.png b/cave/com.raytheon.viz.gfe/help/images/GHGMonitor17.png deleted file mode 100644 index b179648585..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/GHGMonitor17.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/GHGMonitor18.png b/cave/com.raytheon.viz.gfe/help/images/GHGMonitor18.png deleted file mode 100644 index 8316f56f66..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/GHGMonitor18.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/GHGMonitor19.png b/cave/com.raytheon.viz.gfe/help/images/GHGMonitor19.png deleted file mode 100644 index fe0a673964..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/GHGMonitor19.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/GHGMonitor2.png b/cave/com.raytheon.viz.gfe/help/images/GHGMonitor2.png deleted file mode 100644 index 54fe04b834..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/GHGMonitor2.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/GHGMonitor20.png b/cave/com.raytheon.viz.gfe/help/images/GHGMonitor20.png deleted file mode 100644 index d72c6f61ed..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/GHGMonitor20.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/GHGMonitor21.png b/cave/com.raytheon.viz.gfe/help/images/GHGMonitor21.png deleted file mode 100644 index 596b46609d..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/GHGMonitor21.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/GHGMonitor22.png b/cave/com.raytheon.viz.gfe/help/images/GHGMonitor22.png deleted file mode 100644 index b32ac56920..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/GHGMonitor22.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/GHGMonitor3.png b/cave/com.raytheon.viz.gfe/help/images/GHGMonitor3.png deleted file mode 100644 index 84f950596f..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/GHGMonitor3.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/GHGMonitor4.png b/cave/com.raytheon.viz.gfe/help/images/GHGMonitor4.png deleted file mode 100644 index 7a6a3c25b0..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/GHGMonitor4.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/GHGMonitor5.png b/cave/com.raytheon.viz.gfe/help/images/GHGMonitor5.png deleted file mode 100644 index bb59e16f86..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/GHGMonitor5.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/GHGMonitor6.png b/cave/com.raytheon.viz.gfe/help/images/GHGMonitor6.png deleted file mode 100644 index 86574e3197..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/GHGMonitor6.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/GHGMonitor7.png b/cave/com.raytheon.viz.gfe/help/images/GHGMonitor7.png deleted file mode 100644 index 80219f958f..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/GHGMonitor7.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/GHGMonitor8.png b/cave/com.raytheon.viz.gfe/help/images/GHGMonitor8.png deleted file mode 100644 index 8e6dae94f9..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/GHGMonitor8.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/GHGMonitor9.png b/cave/com.raytheon.viz.gfe/help/images/GHGMonitor9.png deleted file mode 100644 index 2b154fa6df..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/GHGMonitor9.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/GMButtons.jpg b/cave/com.raytheon.viz.gfe/help/images/GMButtons.jpg deleted file mode 100644 index d2246faa96..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/GMButtons.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/GMModeButton.jpg b/cave/com.raytheon.viz.gfe/help/images/GMModeButton.jpg deleted file mode 100644 index 16770feb55..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/GMModeButton.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/GMSaveMode.png b/cave/com.raytheon.viz.gfe/help/images/GMSaveMode.png deleted file mode 100644 index 5be1c2b24e..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/GMSaveMode.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/GenerateCycloneUI.png b/cave/com.raytheon.viz.gfe/help/images/GenerateCycloneUI.png deleted file mode 100644 index eaaa05fbb0..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/GenerateCycloneUI.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/HazardRecoveryMenu.png b/cave/com.raytheon.viz.gfe/help/images/HazardRecoveryMenu.png deleted file mode 100644 index 41330fd156..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/HazardRecoveryMenu.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/HazardRecoveryWarning.png b/cave/com.raytheon.viz.gfe/help/images/HazardRecoveryWarning.png deleted file mode 100644 index 08e4eec275..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/HazardRecoveryWarning.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ISCOverview2.png b/cave/com.raytheon.viz.gfe/help/images/ISCOverview2.png deleted file mode 100644 index 256214cb84..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ISCOverview2.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ISCSpatialMosaic.png b/cave/com.raytheon.viz.gfe/help/images/ISCSpatialMosaic.png deleted file mode 100644 index 63e5a71403..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ISCSpatialMosaic.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ISCTemporalMosaic.png b/cave/com.raytheon.viz.gfe/help/images/ISCTemporalMosaic.png deleted file mode 100644 index 20f4f86f73..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ISCTemporalMosaic.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ISC_new.jpg b/cave/com.raytheon.viz.gfe/help/images/ISC_new.jpg deleted file mode 100644 index b669dae0ae..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ISC_new.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ISC_new1.jpg b/cave/com.raytheon.viz.gfe/help/images/ISC_new1.jpg deleted file mode 100644 index b0656f044c..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ISC_new1.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/IntOffset1Hr.png b/cave/com.raytheon.viz.gfe/help/images/IntOffset1Hr.png deleted file mode 100644 index 1d40a6ec97..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/IntOffset1Hr.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/IntOffset7Hr.png b/cave/com.raytheon.viz.gfe/help/images/IntOffset7Hr.png deleted file mode 100644 index eba6607a8a..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/IntOffset7Hr.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/IntrasiteCoordination.png b/cave/com.raytheon.viz.gfe/help/images/IntrasiteCoordination.png deleted file mode 100644 index 31f800425a..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/IntrasiteCoordination.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/IntrasiteCoordination2.png b/cave/com.raytheon.viz.gfe/help/images/IntrasiteCoordination2.png deleted file mode 100644 index 10d706a86e..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/IntrasiteCoordination2.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/IntrasiteCoordination3.png b/cave/com.raytheon.viz.gfe/help/images/IntrasiteCoordination3.png deleted file mode 100644 index ac5a20177f..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/IntrasiteCoordination3.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/LimitValues.png b/cave/com.raytheon.viz.gfe/help/images/LimitValues.png deleted file mode 100644 index 1254437510..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/LimitValues.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/LimitValues1.png b/cave/com.raytheon.viz.gfe/help/images/LimitValues1.png deleted file mode 100644 index 1a247681d9..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/LimitValues1.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/LimitValues2.png b/cave/com.raytheon.viz.gfe/help/images/LimitValues2.png deleted file mode 100644 index d6ae6e10f3..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/LimitValues2.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/LimitValues3.png b/cave/com.raytheon.viz.gfe/help/images/LimitValues3.png deleted file mode 100644 index 0278825b29..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/LimitValues3.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/LimitValues4.png b/cave/com.raytheon.viz.gfe/help/images/LimitValues4.png deleted file mode 100644 index 958e98598f..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/LimitValues4.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/MakeHazardConfig.png b/cave/com.raytheon.viz.gfe/help/images/MakeHazardConfig.png deleted file mode 100644 index 0a83918d89..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/MakeHazardConfig.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/MakeHazardForcedSeg1.png b/cave/com.raytheon.viz.gfe/help/images/MakeHazardForcedSeg1.png deleted file mode 100644 index f8a6732efd..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/MakeHazardForcedSeg1.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/MakeHazardForcedSeg2.png b/cave/com.raytheon.viz.gfe/help/images/MakeHazardForcedSeg2.png deleted file mode 100644 index 5790e93e81..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/MakeHazardForcedSeg2.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/MakeHazardHazGrid.png b/cave/com.raytheon.viz.gfe/help/images/MakeHazardHazGrid.png deleted file mode 100644 index edc4ea0057..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/MakeHazardHazGrid.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/MakeHazardTempGrid.png b/cave/com.raytheon.viz.gfe/help/images/MakeHazardTempGrid.png deleted file mode 100644 index c032ab75bb..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/MakeHazardTempGrid.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/MakeHazards.png b/cave/com.raytheon.viz.gfe/help/images/MakeHazards.png deleted file mode 100644 index 54dc739855..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/MakeHazards.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/MakeHazards2.png b/cave/com.raytheon.viz.gfe/help/images/MakeHazards2.png deleted file mode 100644 index cab16eeafc..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/MakeHazards2.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/MakeHazards3.png b/cave/com.raytheon.viz.gfe/help/images/MakeHazards3.png deleted file mode 100644 index 0e1ce8c0aa..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/MakeHazards3.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/MakeHazards4.png b/cave/com.raytheon.viz.gfe/help/images/MakeHazards4.png deleted file mode 100644 index 4a195bbe9f..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/MakeHazards4.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/MakeHazardsMenu.png b/cave/com.raytheon.viz.gfe/help/images/MakeHazardsMenu.png deleted file mode 100644 index 7b400032f4..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/MakeHazardsMenu.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/MergeHazardsDialog.png b/cave/com.raytheon.viz.gfe/help/images/MergeHazardsDialog.png deleted file mode 100644 index d4a9247853..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/MergeHazardsDialog.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/MergeHazardsMenu.png b/cave/com.raytheon.viz.gfe/help/images/MergeHazardsMenu.png deleted file mode 100644 index 3ae72a6c39..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/MergeHazardsMenu.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ModelBlend1.jpg b/cave/com.raytheon.viz.gfe/help/images/ModelBlend1.jpg deleted file mode 100644 index fe6fc8c800..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ModelBlend1.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ModelBlend10.jpg b/cave/com.raytheon.viz.gfe/help/images/ModelBlend10.jpg deleted file mode 100644 index 2a127d76cb..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ModelBlend10.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ModelBlend11.jpg b/cave/com.raytheon.viz.gfe/help/images/ModelBlend11.jpg deleted file mode 100644 index ef401b4e91..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ModelBlend11.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ModelBlend12.jpg b/cave/com.raytheon.viz.gfe/help/images/ModelBlend12.jpg deleted file mode 100644 index 9683ac0172..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ModelBlend12.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ModelBlend13.jpg b/cave/com.raytheon.viz.gfe/help/images/ModelBlend13.jpg deleted file mode 100644 index 538097660f..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ModelBlend13.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ModelBlend14.jpg b/cave/com.raytheon.viz.gfe/help/images/ModelBlend14.jpg deleted file mode 100644 index afae7245a8..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ModelBlend14.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ModelBlend15.jpg b/cave/com.raytheon.viz.gfe/help/images/ModelBlend15.jpg deleted file mode 100644 index 34881e9aef..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ModelBlend15.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ModelBlend16.jpg b/cave/com.raytheon.viz.gfe/help/images/ModelBlend16.jpg deleted file mode 100644 index 365e6b59cd..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ModelBlend16.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ModelBlend17.jpg b/cave/com.raytheon.viz.gfe/help/images/ModelBlend17.jpg deleted file mode 100644 index ceaadd4aad..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ModelBlend17.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ModelBlend18.jpg b/cave/com.raytheon.viz.gfe/help/images/ModelBlend18.jpg deleted file mode 100644 index 1a2ccebb1d..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ModelBlend18.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ModelBlend19.jpg b/cave/com.raytheon.viz.gfe/help/images/ModelBlend19.jpg deleted file mode 100644 index 01c63772ca..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ModelBlend19.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ModelBlend2.jpg b/cave/com.raytheon.viz.gfe/help/images/ModelBlend2.jpg deleted file mode 100644 index a1d7800a1e..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ModelBlend2.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ModelBlend20.jpg b/cave/com.raytheon.viz.gfe/help/images/ModelBlend20.jpg deleted file mode 100644 index e2a7a8d2a3..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ModelBlend20.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ModelBlend21.jpg b/cave/com.raytheon.viz.gfe/help/images/ModelBlend21.jpg deleted file mode 100644 index cd5831d45b..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ModelBlend21.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ModelBlend22.jpg b/cave/com.raytheon.viz.gfe/help/images/ModelBlend22.jpg deleted file mode 100644 index b31c436968..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ModelBlend22.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ModelBlend23.jpg b/cave/com.raytheon.viz.gfe/help/images/ModelBlend23.jpg deleted file mode 100644 index 1db9d69a1a..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ModelBlend23.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ModelBlend3.jpg b/cave/com.raytheon.viz.gfe/help/images/ModelBlend3.jpg deleted file mode 100644 index a5e0a0c674..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ModelBlend3.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ModelBlend4.jpg b/cave/com.raytheon.viz.gfe/help/images/ModelBlend4.jpg deleted file mode 100644 index 8be5985362..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ModelBlend4.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ModelBlend5.jpg b/cave/com.raytheon.viz.gfe/help/images/ModelBlend5.jpg deleted file mode 100644 index 10d75b376b..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ModelBlend5.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ModelBlend6.jpg b/cave/com.raytheon.viz.gfe/help/images/ModelBlend6.jpg deleted file mode 100644 index 9e01acd229..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ModelBlend6.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ModelBlend7.jpg b/cave/com.raytheon.viz.gfe/help/images/ModelBlend7.jpg deleted file mode 100644 index 13f6d13c74..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ModelBlend7.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ModelBlend8.jpg b/cave/com.raytheon.viz.gfe/help/images/ModelBlend8.jpg deleted file mode 100644 index 02a670167e..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ModelBlend8.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ModelBlend9.jpg b/cave/com.raytheon.viz.gfe/help/images/ModelBlend9.jpg deleted file mode 100644 index a3758c8c98..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ModelBlend9.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Mosaic.AltMask1.jpg b/cave/com.raytheon.viz.gfe/help/images/Mosaic.AltMask1.jpg deleted file mode 100644 index dd9d3a3087..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Mosaic.AltMask1.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Mosaic.PUB_CWA.jpg b/cave/com.raytheon.viz.gfe/help/images/Mosaic.PUB_CWA.jpg deleted file mode 100644 index d72e566ba6..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Mosaic.PUB_CWA.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Mosaic_AltMask0.jpg b/cave/com.raytheon.viz.gfe/help/images/Mosaic_AltMask0.jpg deleted file mode 100644 index 6d2412dba1..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Mosaic_AltMask0.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Mosaic_AltMask2.jpg b/cave/com.raytheon.viz.gfe/help/images/Mosaic_AltMask2.jpg deleted file mode 100644 index 2051307b97..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Mosaic_AltMask2.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Mosaic_BOUCYSPUB.jpg b/cave/com.raytheon.viz.gfe/help/images/Mosaic_BOUCYSPUB.jpg deleted file mode 100644 index 10c837731a..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Mosaic_BOUCYSPUB.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Mosaic_BOU_CWA.jpg b/cave/com.raytheon.viz.gfe/help/images/Mosaic_BOU_CWA.jpg deleted file mode 100644 index 6faf425e04..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Mosaic_BOU_CWA.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Mosaic_BOU_Orig.jpg b/cave/com.raytheon.viz.gfe/help/images/Mosaic_BOU_Orig.jpg deleted file mode 100644 index b2a868adc2..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Mosaic_BOU_Orig.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Mosaic_Blank0.jpg b/cave/com.raytheon.viz.gfe/help/images/Mosaic_Blank0.jpg deleted file mode 100644 index fa2eafcea8..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Mosaic_Blank0.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Mosaic_Blank1.jpg b/cave/com.raytheon.viz.gfe/help/images/Mosaic_Blank1.jpg deleted file mode 100644 index 09b28ab329..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Mosaic_Blank1.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Mosaic_Blank2.jpg b/cave/com.raytheon.viz.gfe/help/images/Mosaic_Blank2.jpg deleted file mode 100644 index ac898ba3c0..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Mosaic_Blank2.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Mosaic_Blank3.jpg b/cave/com.raytheon.viz.gfe/help/images/Mosaic_Blank3.jpg deleted file mode 100644 index b14aef5cad..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Mosaic_Blank3.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Mosaic_CYS_CWA.jpg b/cave/com.raytheon.viz.gfe/help/images/Mosaic_CYS_CWA.jpg deleted file mode 100644 index ec4b583c65..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Mosaic_CYS_CWA.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Mosaic_CYS_Orig.jpg b/cave/com.raytheon.viz.gfe/help/images/Mosaic_CYS_Orig.jpg deleted file mode 100644 index e6d25fa02e..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Mosaic_CYS_Orig.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Mosaic_Loop.gif b/cave/com.raytheon.viz.gfe/help/images/Mosaic_Loop.gif deleted file mode 100644 index 502ec2e8f5..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Mosaic_Loop.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Mosaic_NoMask.jpg b/cave/com.raytheon.viz.gfe/help/images/Mosaic_NoMask.jpg deleted file mode 100644 index de2e9f5c31..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Mosaic_NoMask.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Mosaic_PUB_CWA.jpg b/cave/com.raytheon.viz.gfe/help/images/Mosaic_PUB_CWA.jpg deleted file mode 100644 index 60dfb6d178..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Mosaic_PUB_CWA.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Mosaic_PUB_Orig.jpg b/cave/com.raytheon.viz.gfe/help/images/Mosaic_PUB_Orig.jpg deleted file mode 100644 index cd7369152f..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Mosaic_PUB_Orig.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Mosaic_Replace.jpg b/cave/com.raytheon.viz.gfe/help/images/Mosaic_Replace.jpg deleted file mode 100644 index 1b8a1fda31..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Mosaic_Replace.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Mosaic_Replace0.jpg b/cave/com.raytheon.viz.gfe/help/images/Mosaic_Replace0.jpg deleted file mode 100644 index 7ea4b0d536..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Mosaic_Replace0.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Mosaic_Temporal.png b/cave/com.raytheon.viz.gfe/help/images/Mosaic_Temporal.png deleted file mode 100644 index 20f4f86f73..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Mosaic_Temporal.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/NDFD_QPF_Checks.png b/cave/com.raytheon.viz.gfe/help/images/NDFD_QPF_Checks.png deleted file mode 100644 index 8a78c0d52d..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/NDFD_QPF_Checks.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/NDFD_QPF_Checks1.png b/cave/com.raytheon.viz.gfe/help/images/NDFD_QPF_Checks1.png deleted file mode 100644 index 7f164cdd50..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/NDFD_QPF_Checks1.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/NDFD_QPF_Checks10.png b/cave/com.raytheon.viz.gfe/help/images/NDFD_QPF_Checks10.png deleted file mode 100644 index 23d74a26f0..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/NDFD_QPF_Checks10.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/NDFD_QPF_Checks2.png b/cave/com.raytheon.viz.gfe/help/images/NDFD_QPF_Checks2.png deleted file mode 100644 index 1a7a224a3d..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/NDFD_QPF_Checks2.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/NDFD_QPF_Checks3.png b/cave/com.raytheon.viz.gfe/help/images/NDFD_QPF_Checks3.png deleted file mode 100644 index 28da223a66..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/NDFD_QPF_Checks3.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/NDFD_QPF_Checks4.png b/cave/com.raytheon.viz.gfe/help/images/NDFD_QPF_Checks4.png deleted file mode 100644 index 7eb0543b6a..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/NDFD_QPF_Checks4.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/NDFD_QPF_Checks5.png b/cave/com.raytheon.viz.gfe/help/images/NDFD_QPF_Checks5.png deleted file mode 100644 index 3ce3609710..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/NDFD_QPF_Checks5.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/NDFD_QPF_Checks6.png b/cave/com.raytheon.viz.gfe/help/images/NDFD_QPF_Checks6.png deleted file mode 100644 index 3dd9305609..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/NDFD_QPF_Checks6.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/NDFD_QPF_Checks7.png b/cave/com.raytheon.viz.gfe/help/images/NDFD_QPF_Checks7.png deleted file mode 100644 index 286b92c465..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/NDFD_QPF_Checks7.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/NDFD_QPF_Checks8.png b/cave/com.raytheon.viz.gfe/help/images/NDFD_QPF_Checks8.png deleted file mode 100644 index 6f71b4184b..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/NDFD_QPF_Checks8.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/NDFD_QPF_Checks9.png b/cave/com.raytheon.viz.gfe/help/images/NDFD_QPF_Checks9.png deleted file mode 100644 index 10ae82c0ed..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/NDFD_QPF_Checks9.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Normal.jpg b/cave/com.raytheon.viz.gfe/help/images/Normal.jpg deleted file mode 100644 index 79f2980009..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Normal.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Normal0.png b/cave/com.raytheon.viz.gfe/help/images/Normal0.png deleted file mode 100644 index 196d4d5169..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Normal0.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/PlotSPCDialog.png b/cave/com.raytheon.viz.gfe/help/images/PlotSPCDialog.png deleted file mode 100644 index cdbfde3e79..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/PlotSPCDialog.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/PlotSPCWatchesMenu.png b/cave/com.raytheon.viz.gfe/help/images/PlotSPCWatchesMenu.png deleted file mode 100644 index 2cba8dcf7a..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/PlotSPCWatchesMenu.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/PlotSPCWatches_GUI.jpg b/cave/com.raytheon.viz.gfe/help/images/PlotSPCWatches_GUI.jpg deleted file mode 100644 index a3a3725b85..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/PlotSPCWatches_GUI.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/PlotSPCWatches_Procedure.png b/cave/com.raytheon.viz.gfe/help/images/PlotSPCWatches_Procedure.png deleted file mode 100644 index 1f96d40448..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/PlotSPCWatches_Procedure.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/PlottedWatches.png b/cave/com.raytheon.viz.gfe/help/images/PlottedWatches.png deleted file mode 100644 index fe30f7f02b..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/PlottedWatches.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Populate.jpg b/cave/com.raytheon.viz.gfe/help/images/Populate.jpg deleted file mode 100644 index 6889d36f17..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Populate.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Populate1.jpg b/cave/com.raytheon.viz.gfe/help/images/Populate1.jpg deleted file mode 100644 index d791f86e57..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Populate1.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Populate10.png b/cave/com.raytheon.viz.gfe/help/images/Populate10.png deleted file mode 100644 index 05a79b76ab..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Populate10.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Populate11.jpg b/cave/com.raytheon.viz.gfe/help/images/Populate11.jpg deleted file mode 100644 index 8a63dc46f7..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Populate11.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Populate13.jpg b/cave/com.raytheon.viz.gfe/help/images/Populate13.jpg deleted file mode 100644 index 514d01bec0..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Populate13.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Populate2.jpg b/cave/com.raytheon.viz.gfe/help/images/Populate2.jpg deleted file mode 100644 index 7e899c4f11..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Populate2.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Populate3.jpg b/cave/com.raytheon.viz.gfe/help/images/Populate3.jpg deleted file mode 100644 index 9fba73236c..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Populate3.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Populate4.jpg b/cave/com.raytheon.viz.gfe/help/images/Populate4.jpg deleted file mode 100644 index 7c8a7016ab..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Populate4.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Populate5.png b/cave/com.raytheon.viz.gfe/help/images/Populate5.png deleted file mode 100644 index 6fd112f676..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Populate5.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Populate6.jpg b/cave/com.raytheon.viz.gfe/help/images/Populate6.jpg deleted file mode 100644 index 41644140ea..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Populate6.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Populate7.jpg b/cave/com.raytheon.viz.gfe/help/images/Populate7.jpg deleted file mode 100644 index 0f2a4ba057..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Populate7.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Populate8.jpg b/cave/com.raytheon.viz.gfe/help/images/Populate8.jpg deleted file mode 100644 index 0274c5000c..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Populate8.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Populate9.jpg b/cave/com.raytheon.viz.gfe/help/images/Populate9.jpg deleted file mode 100644 index b9bbf76ed3..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Populate9.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ProgressBar.jpg b/cave/com.raytheon.viz.gfe/help/images/ProgressBar.jpg deleted file mode 100644 index cad5db8529..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ProgressBar.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Python1.jpg b/cave/com.raytheon.viz.gfe/help/images/Python1.jpg deleted file mode 100644 index 1c9dd9b6c9..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Python1.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/RFCsending.png b/cave/com.raytheon.viz.gfe/help/images/RFCsending.png deleted file mode 100644 index c7e4980b3c..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/RFCsending.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/RemoveWx.png b/cave/com.raytheon.viz.gfe/help/images/RemoveWx.png deleted file mode 100644 index fbdf2d713c..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/RemoveWx.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/RemoveWx1.png b/cave/com.raytheon.viz.gfe/help/images/RemoveWx1.png deleted file mode 100644 index 284d619342..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/RemoveWx1.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/RemoveWx2.png b/cave/com.raytheon.viz.gfe/help/images/RemoveWx2.png deleted file mode 100644 index cd738ac396..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/RemoveWx2.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/RemoveWx3.png b/cave/com.raytheon.viz.gfe/help/images/RemoveWx3.png deleted file mode 100644 index ce0cfe9ee2..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/RemoveWx3.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/RemoveWx4.png b/cave/com.raytheon.viz.gfe/help/images/RemoveWx4.png deleted file mode 100644 index a5bb223c46..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/RemoveWx4.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/RemoveWx5.png b/cave/com.raytheon.viz.gfe/help/images/RemoveWx5.png deleted file mode 100644 index 82fbba2c81..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/RemoveWx5.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SELegend.gif b/cave/com.raytheon.viz.gfe/help/images/SELegend.gif deleted file mode 100644 index d554fedfe2..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SELegend.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SSa1.gif b/cave/com.raytheon.viz.gfe/help/images/SSa1.gif deleted file mode 100644 index 948f75773a..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SSa1.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SSa10.gif b/cave/com.raytheon.viz.gfe/help/images/SSa10.gif deleted file mode 100644 index 056ba4d924..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SSa10.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SSa11.gif b/cave/com.raytheon.viz.gfe/help/images/SSa11.gif deleted file mode 100644 index 18d43c1a7a..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SSa11.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SSa12.gif b/cave/com.raytheon.viz.gfe/help/images/SSa12.gif deleted file mode 100644 index 8a41193fae..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SSa12.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SSa13.gif b/cave/com.raytheon.viz.gfe/help/images/SSa13.gif deleted file mode 100644 index c594ec5672..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SSa13.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SSa14.gif b/cave/com.raytheon.viz.gfe/help/images/SSa14.gif deleted file mode 100644 index b3a292e8a1..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SSa14.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SSa15.gif b/cave/com.raytheon.viz.gfe/help/images/SSa15.gif deleted file mode 100644 index debe3721f2..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SSa15.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SSa16.gif b/cave/com.raytheon.viz.gfe/help/images/SSa16.gif deleted file mode 100644 index c719f8db32..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SSa16.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SSa17.gif b/cave/com.raytheon.viz.gfe/help/images/SSa17.gif deleted file mode 100644 index 99d18735ec..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SSa17.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SSa18.gif b/cave/com.raytheon.viz.gfe/help/images/SSa18.gif deleted file mode 100644 index c7d1fd32ac..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SSa18.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SSa19.gif b/cave/com.raytheon.viz.gfe/help/images/SSa19.gif deleted file mode 100644 index 072946f5f4..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SSa19.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SSa2.gif b/cave/com.raytheon.viz.gfe/help/images/SSa2.gif deleted file mode 100644 index eaf8bb8722..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SSa2.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SSa20.gif b/cave/com.raytheon.viz.gfe/help/images/SSa20.gif deleted file mode 100644 index 409847251f..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SSa20.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SSa21.gif b/cave/com.raytheon.viz.gfe/help/images/SSa21.gif deleted file mode 100644 index 5808b9f758..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SSa21.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SSa22.gif b/cave/com.raytheon.viz.gfe/help/images/SSa22.gif deleted file mode 100644 index 1859d6b547..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SSa22.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SSa23.gif b/cave/com.raytheon.viz.gfe/help/images/SSa23.gif deleted file mode 100644 index e01b818fdb..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SSa23.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SSa24.gif b/cave/com.raytheon.viz.gfe/help/images/SSa24.gif deleted file mode 100644 index dc54204a0d..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SSa24.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SSa25.gif b/cave/com.raytheon.viz.gfe/help/images/SSa25.gif deleted file mode 100644 index 70a26630aa..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SSa25.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SSa26.gif b/cave/com.raytheon.viz.gfe/help/images/SSa26.gif deleted file mode 100644 index f45f7675a7..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SSa26.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SSa27.gif b/cave/com.raytheon.viz.gfe/help/images/SSa27.gif deleted file mode 100644 index 8e541b82d6..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SSa27.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SSa28.gif b/cave/com.raytheon.viz.gfe/help/images/SSa28.gif deleted file mode 100644 index 90b8e8577b..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SSa28.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SSa29.gif b/cave/com.raytheon.viz.gfe/help/images/SSa29.gif deleted file mode 100644 index 63e5cc9247..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SSa29.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SSa3.gif b/cave/com.raytheon.viz.gfe/help/images/SSa3.gif deleted file mode 100644 index 36c3dff9e9..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SSa3.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SSa30.gif b/cave/com.raytheon.viz.gfe/help/images/SSa30.gif deleted file mode 100644 index 407e99528b..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SSa30.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SSa31.gif b/cave/com.raytheon.viz.gfe/help/images/SSa31.gif deleted file mode 100644 index 75674a852e..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SSa31.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SSa32.gif b/cave/com.raytheon.viz.gfe/help/images/SSa32.gif deleted file mode 100644 index e81dee6af8..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SSa32.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SSa33.gif b/cave/com.raytheon.viz.gfe/help/images/SSa33.gif deleted file mode 100644 index 75e3183358..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SSa33.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SSa34.gif b/cave/com.raytheon.viz.gfe/help/images/SSa34.gif deleted file mode 100644 index 9a2af25e14..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SSa34.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SSa35.gif b/cave/com.raytheon.viz.gfe/help/images/SSa35.gif deleted file mode 100644 index e3050f9dd8..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SSa35.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SSa36.gif b/cave/com.raytheon.viz.gfe/help/images/SSa36.gif deleted file mode 100644 index ddfdc915c9..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SSa36.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SSa37.gif b/cave/com.raytheon.viz.gfe/help/images/SSa37.gif deleted file mode 100644 index 980ae9d413..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SSa37.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SSa38.gif b/cave/com.raytheon.viz.gfe/help/images/SSa38.gif deleted file mode 100644 index 2f6b0d625b..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SSa38.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SSa39.gif b/cave/com.raytheon.viz.gfe/help/images/SSa39.gif deleted file mode 100644 index 7377603f9a..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SSa39.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SSa4.gif b/cave/com.raytheon.viz.gfe/help/images/SSa4.gif deleted file mode 100644 index d7f12d1c3a..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SSa4.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SSa40.gif b/cave/com.raytheon.viz.gfe/help/images/SSa40.gif deleted file mode 100644 index 59546c8d5f..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SSa40.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SSa41.gif b/cave/com.raytheon.viz.gfe/help/images/SSa41.gif deleted file mode 100644 index e007079e3e..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SSa41.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SSa42.gif b/cave/com.raytheon.viz.gfe/help/images/SSa42.gif deleted file mode 100644 index 76e784d945..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SSa42.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SSa43.gif b/cave/com.raytheon.viz.gfe/help/images/SSa43.gif deleted file mode 100644 index 838715cc21..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SSa43.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SSa44.gif b/cave/com.raytheon.viz.gfe/help/images/SSa44.gif deleted file mode 100644 index c3b03b73a5..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SSa44.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SSa45.gif b/cave/com.raytheon.viz.gfe/help/images/SSa45.gif deleted file mode 100644 index eb02c87a1d..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SSa45.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SSa5.gif b/cave/com.raytheon.viz.gfe/help/images/SSa5.gif deleted file mode 100644 index 6b8ca3cc5d..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SSa5.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SSa50.gif b/cave/com.raytheon.viz.gfe/help/images/SSa50.gif deleted file mode 100644 index 6cbe381d60..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SSa50.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SSa6.gif b/cave/com.raytheon.viz.gfe/help/images/SSa6.gif deleted file mode 100644 index 2578df57de..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SSa6.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SSa7.gif b/cave/com.raytheon.viz.gfe/help/images/SSa7.gif deleted file mode 100644 index 46a21ca0e1..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SSa7.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SSa8.gif b/cave/com.raytheon.viz.gfe/help/images/SSa8.gif deleted file mode 100644 index 79c19445d7..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SSa8.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SSa9.gif b/cave/com.raytheon.viz.gfe/help/images/SSa9.gif deleted file mode 100644 index bc0277ba6e..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SSa9.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SaveDialog.png b/cave/com.raytheon.viz.gfe/help/images/SaveDialog.png deleted file mode 100644 index f06205ef56..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SaveDialog.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SeparateHazardTemp1.png b/cave/com.raytheon.viz.gfe/help/images/SeparateHazardTemp1.png deleted file mode 100644 index cb8393b220..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SeparateHazardTemp1.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SeparateHazardsMenu.png b/cave/com.raytheon.viz.gfe/help/images/SeparateHazardsMenu.png deleted file mode 100644 index 124198a4b4..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SeparateHazardsMenu.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SeparateHazardsRecombined.png b/cave/com.raytheon.viz.gfe/help/images/SeparateHazardsRecombined.png deleted file mode 100644 index cf27020b8f..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SeparateHazardsRecombined.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SeparateHazardsTemp2.png b/cave/com.raytheon.viz.gfe/help/images/SeparateHazardsTemp2.png deleted file mode 100644 index 5ebf197f7f..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SeparateHazardsTemp2.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SeperateHazardsInit.png b/cave/com.raytheon.viz.gfe/help/images/SeperateHazardsInit.png deleted file mode 100644 index 640716c74c..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SeperateHazardsInit.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ServerStats.png b/cave/com.raytheon.viz.gfe/help/images/ServerStats.png deleted file mode 100644 index 7c17d3c9bc..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ServerStats.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SetDiscreteDialog.png b/cave/com.raytheon.viz.gfe/help/images/SetDiscreteDialog.png deleted file mode 100644 index 391122450a..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SetDiscreteDialog.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SetWeatherDialog.png b/cave/com.raytheon.viz.gfe/help/images/SetWeatherDialog.png deleted file mode 100644 index 49087f2bf6..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SetWeatherDialog.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ShowISCa.png b/cave/com.raytheon.viz.gfe/help/images/ShowISCa.png deleted file mode 100644 index a0d98ad6a6..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ShowISCa.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ShowISCb.png b/cave/com.raytheon.viz.gfe/help/images/ShowISCb.png deleted file mode 100644 index 9f0bd45847..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ShowISCb.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ShowISCc.png b/cave/com.raytheon.viz.gfe/help/images/ShowISCc.png deleted file mode 100644 index f674bc1e89..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ShowISCc.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ShowISCd.png b/cave/com.raytheon.viz.gfe/help/images/ShowISCd.png deleted file mode 100644 index e178c82349..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ShowISCd.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ShowISCe.png b/cave/com.raytheon.viz.gfe/help/images/ShowISCe.png deleted file mode 100644 index 187a92836a..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ShowISCe.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ShowISCf.png b/cave/com.raytheon.viz.gfe/help/images/ShowISCf.png deleted file mode 100644 index cc7c0fe528..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ShowISCf.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ShowISCg.png b/cave/com.raytheon.viz.gfe/help/images/ShowISCg.png deleted file mode 100644 index 832af9719a..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ShowISCg.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ShowISCh.png b/cave/com.raytheon.viz.gfe/help/images/ShowISCh.png deleted file mode 100644 index f674bc1e89..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ShowISCh.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SignificantMessage.png b/cave/com.raytheon.viz.gfe/help/images/SignificantMessage.png deleted file mode 100644 index f06861ef13..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SignificantMessage.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SmartTools-1.gif b/cave/com.raytheon.viz.gfe/help/images/SmartTools-1.gif deleted file mode 100644 index b1d50e3506..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SmartTools-1.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SmartTools-2.gif b/cave/com.raytheon.viz.gfe/help/images/SmartTools-2.gif deleted file mode 100644 index e09b0ab8d3..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SmartTools-2.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SmartTools-4.gif b/cave/com.raytheon.viz.gfe/help/images/SmartTools-4.gif deleted file mode 100644 index 3544def90a..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SmartTools-4.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SmartTools-5.gif b/cave/com.raytheon.viz.gfe/help/images/SmartTools-5.gif deleted file mode 100644 index 481ea07a0a..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SmartTools-5.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SmartTools-6.gif b/cave/com.raytheon.viz.gfe/help/images/SmartTools-6.gif deleted file mode 100644 index 058ac7f767..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SmartTools-6.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SmartTools-7.jpg b/cave/com.raytheon.viz.gfe/help/images/SmartTools-7.jpg deleted file mode 100644 index 7cbd6b9460..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SmartTools-7.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SmartTools-8.jpg b/cave/com.raytheon.viz.gfe/help/images/SmartTools-8.jpg deleted file mode 100644 index ad550c626e..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SmartTools-8.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SmartTools-9.jpg b/cave/com.raytheon.viz.gfe/help/images/SmartTools-9.jpg deleted file mode 100644 index 7a4bba80ab..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SmartTools-9.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Smooth0Clip1.png b/cave/com.raytheon.viz.gfe/help/images/Smooth0Clip1.png deleted file mode 100644 index c88dfb72e8..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Smooth0Clip1.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Smooth0Clip1Wx.png b/cave/com.raytheon.viz.gfe/help/images/Smooth0Clip1Wx.png deleted file mode 100644 index 43e2a5bc2b..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Smooth0Clip1Wx.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/Smooth1Clip1.png b/cave/com.raytheon.viz.gfe/help/images/Smooth1Clip1.png deleted file mode 100644 index 7a2e74cd08..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/Smooth1Clip1.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SmoothImg.jpg b/cave/com.raytheon.viz.gfe/help/images/SmoothImg.jpg deleted file mode 100644 index bba0574a22..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SmoothImg.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/SpatialEditor.gif b/cave/com.raytheon.viz.gfe/help/images/SpatialEditor.gif deleted file mode 100644 index 37de28155c..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/SpatialEditor.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/StatusBar.jpg b/cave/com.raytheon.viz.gfe/help/images/StatusBar.jpg deleted file mode 100644 index 1c779da5aa..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/StatusBar.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/StoreDialog.png b/cave/com.raytheon.viz.gfe/help/images/StoreDialog.png deleted file mode 100644 index bc52bf9698..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/StoreDialog.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/TCMWindToolRankine.png b/cave/com.raytheon.viz.gfe/help/images/TCMWindToolRankine.png deleted file mode 100644 index b578ad01ab..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/TCMWindToolRankine.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/TCMWindToolUI.png b/cave/com.raytheon.viz.gfe/help/images/TCMWindToolUI.png deleted file mode 100644 index 0b67d9a95c..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/TCMWindToolUI.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/TEStatisticsVisual.jpg b/cave/com.raytheon.viz.gfe/help/images/TEStatisticsVisual.jpg deleted file mode 100644 index d9fb3a1ee9..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/TEStatisticsVisual.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/TF1.png b/cave/com.raytheon.viz.gfe/help/images/TF1.png deleted file mode 100644 index e080e5a591..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/TF1.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/TF10.png b/cave/com.raytheon.viz.gfe/help/images/TF10.png deleted file mode 100644 index 7cdb9e9c59..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/TF10.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/TF2.png b/cave/com.raytheon.viz.gfe/help/images/TF2.png deleted file mode 100644 index c8bfa79db1..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/TF2.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/TF3.png b/cave/com.raytheon.viz.gfe/help/images/TF3.png deleted file mode 100644 index 32bfa0f122..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/TF3.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/TF4.png b/cave/com.raytheon.viz.gfe/help/images/TF4.png deleted file mode 100644 index 269b1e6390..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/TF4.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/TF5.png b/cave/com.raytheon.viz.gfe/help/images/TF5.png deleted file mode 100644 index 32b4a070d3..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/TF5.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/TF6.png b/cave/com.raytheon.viz.gfe/help/images/TF6.png deleted file mode 100644 index cf93f2ec1f..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/TF6.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/TF7.png b/cave/com.raytheon.viz.gfe/help/images/TF7.png deleted file mode 100644 index dda747fa43..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/TF7.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/TF8.png b/cave/com.raytheon.viz.gfe/help/images/TF8.png deleted file mode 100644 index 9f13a611c1..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/TF8.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/TF9.png b/cave/com.raytheon.viz.gfe/help/images/TF9.png deleted file mode 100644 index 86b7c87db2..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/TF9.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/TOA_500_Hazards_Grid.jpg b/cave/com.raytheon.viz.gfe/help/images/TOA_500_Hazards_Grid.jpg deleted file mode 100644 index bb780cc695..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/TOA_500_Hazards_Grid.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/TPCEventsMenu.png b/cave/com.raytheon.viz.gfe/help/images/TPCEventsMenu.png deleted file mode 100644 index f9094ba85c..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/TPCEventsMenu.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/TPCNotify.png b/cave/com.raytheon.viz.gfe/help/images/TPCNotify.png deleted file mode 100644 index 572fcaf382..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/TPCNotify.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/TPCOutput.png b/cave/com.raytheon.viz.gfe/help/images/TPCOutput.png deleted file mode 100644 index e6fb1f91d7..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/TPCOutput.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/TemporalEditor.gif b/cave/com.raytheon.viz.gfe/help/images/TemporalEditor.gif deleted file mode 100644 index c57789f7f3..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/TemporalEditor.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/TextFormatter-5.gif b/cave/com.raytheon.viz.gfe/help/images/TextFormatter-5.gif deleted file mode 100644 index c22356b58e..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/TextFormatter-5.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/TimeScale.gif b/cave/com.raytheon.viz.gfe/help/images/TimeScale.gif deleted file mode 100644 index ab924278c9..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/TimeScale.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/TransmitDialog.png b/cave/com.raytheon.viz.gfe/help/images/TransmitDialog.png deleted file mode 100644 index e354b82549..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/TransmitDialog.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/UnsmoothedImg.jpg b/cave/com.raytheon.viz.gfe/help/images/UnsmoothedImg.jpg deleted file mode 100644 index b1dcf9534a..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/UnsmoothedImg.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/UrgentMessage.jpg b/cave/com.raytheon.viz.gfe/help/images/UrgentMessage.jpg deleted file mode 100644 index e60ca5dda0..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/UrgentMessage.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/UrgentMessage.png b/cave/com.raytheon.viz.gfe/help/images/UrgentMessage.png deleted file mode 100644 index 96fa157b18..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/UrgentMessage.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/VTECFlow.png b/cave/com.raytheon.viz.gfe/help/images/VTECFlow.png deleted file mode 100644 index 6c07aeb294..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/VTECFlow.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/VTECFlowT.png b/cave/com.raytheon.viz.gfe/help/images/VTECFlowT.png deleted file mode 100644 index f8de31575d..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/VTECFlowT.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/VTECMerge.png b/cave/com.raytheon.viz.gfe/help/images/VTECMerge.png deleted file mode 100644 index 2e553c9350..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/VTECMerge.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ViewMessage.jpg b/cave/com.raytheon.viz.gfe/help/images/ViewMessage.jpg deleted file mode 100644 index de1ba8fdca..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ViewMessage.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ViewWCLChoice.png b/cave/com.raytheon.viz.gfe/help/images/ViewWCLChoice.png deleted file mode 100644 index dfc93a81af..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ViewWCLChoice.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ViewWCLMenu.png b/cave/com.raytheon.viz.gfe/help/images/ViewWCLMenu.png deleted file mode 100644 index 866c355944..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ViewWCLMenu.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ViewWCL_Procedure.jpg b/cave/com.raytheon.viz.gfe/help/images/ViewWCL_Procedure.jpg deleted file mode 100644 index e87e972a95..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ViewWCL_Procedure.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/VirtualISC1.png b/cave/com.raytheon.viz.gfe/help/images/VirtualISC1.png deleted file mode 100644 index 5045a04ca3..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/VirtualISC1.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/VirtualISC2.png b/cave/com.raytheon.viz.gfe/help/images/VirtualISC2.png deleted file mode 100644 index 715bb31e1d..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/VirtualISC2.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/VirtualISC2T.png b/cave/com.raytheon.viz.gfe/help/images/VirtualISC2T.png deleted file mode 100644 index f7528fec6e..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/VirtualISC2T.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/VisualMap.jpg b/cave/com.raytheon.viz.gfe/help/images/VisualMap.jpg deleted file mode 100644 index 2b59c8ba59..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/VisualMap.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/VisualSEBoundedArea.jpg b/cave/com.raytheon.viz.gfe/help/images/VisualSEBoundedArea.jpg deleted file mode 100644 index be29b6029c..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/VisualSEBoundedArea.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/VisualSEContour.jpg b/cave/com.raytheon.viz.gfe/help/images/VisualSEContour.jpg deleted file mode 100644 index 67f4b4b9c2..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/VisualSEContour.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/VisualSEImage.jpg b/cave/com.raytheon.viz.gfe/help/images/VisualSEImage.jpg deleted file mode 100644 index 03dbb61646..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/VisualSEImage.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/VisualSEWindArrow.jpg b/cave/com.raytheon.viz.gfe/help/images/VisualSEWindArrow.jpg deleted file mode 100644 index 9a0320a29c..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/VisualSEWindArrow.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/VisualSEWindBarb.jpg b/cave/com.raytheon.viz.gfe/help/images/VisualSEWindBarb.jpg deleted file mode 100644 index 8b7a49a5b2..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/VisualSEWindBarb.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/VisualTEColorBar.jpg b/cave/com.raytheon.viz.gfe/help/images/VisualTEColorBar.jpg deleted file mode 100644 index 8a89287811..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/VisualTEColorBar.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/VisualTEColorRangeBar.jpg b/cave/com.raytheon.viz.gfe/help/images/VisualTEColorRangeBar.jpg deleted file mode 100644 index b5f4f88c86..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/VisualTEColorRangeBar.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/VisualTERangeBar.jpg b/cave/com.raytheon.viz.gfe/help/images/VisualTERangeBar.jpg deleted file mode 100644 index 56b1f5ea0b..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/VisualTERangeBar.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/VisualTETimeBar.jpg b/cave/com.raytheon.viz.gfe/help/images/VisualTETimeBar.jpg deleted file mode 100644 index 825933767f..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/VisualTETimeBar.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/VisualTEWindArrow.jpg b/cave/com.raytheon.viz.gfe/help/images/VisualTEWindArrow.jpg deleted file mode 100644 index 03d613e357..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/VisualTEWindArrow.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/VisualTEWindBarb.jpg b/cave/com.raytheon.viz.gfe/help/images/VisualTEWindBarb.jpg deleted file mode 100644 index 4d77332129..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/VisualTEWindBarb.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/WCL.png b/cave/com.raytheon.viz.gfe/help/images/WCL.png deleted file mode 100644 index fecbc147e3..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/WCL.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/WCLDialog.jpg b/cave/com.raytheon.viz.gfe/help/images/WCLDialog.jpg deleted file mode 100644 index 3fedb241d2..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/WCLDialog.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/WCLGrid.png b/cave/com.raytheon.viz.gfe/help/images/WCLGrid.png deleted file mode 100644 index af3eb91e2d..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/WCLGrid.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/WCLGrid2.png b/cave/com.raytheon.viz.gfe/help/images/WCLGrid2.png deleted file mode 100644 index 5e1eda4628..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/WCLGrid2.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/WCLMainDialog.jpg b/cave/com.raytheon.viz.gfe/help/images/WCLMainDialog.jpg deleted file mode 100644 index 71a21ff5df..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/WCLMainDialog.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/WCLNotify.png b/cave/com.raytheon.viz.gfe/help/images/WCLNotify.png deleted file mode 100644 index 7aac325aae..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/WCLNotify.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/WCL_Grid.jpg b/cave/com.raytheon.viz.gfe/help/images/WCL_Grid.jpg deleted file mode 100644 index 5623b945df..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/WCL_Grid.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/WCL_Notify.jpg b/cave/com.raytheon.viz.gfe/help/images/WCL_Notify.jpg deleted file mode 100644 index 65f6046554..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/WCL_Notify.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/WCN_Product.jpg b/cave/com.raytheon.viz.gfe/help/images/WCN_Product.jpg deleted file mode 100644 index 19dcf6982f..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/WCN_Product.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/WCN_Product.png b/cave/com.raytheon.viz.gfe/help/images/WCN_Product.png deleted file mode 100644 index 7ff8c08174..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/WCN_Product.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/WEBrowser.jpg b/cave/com.raytheon.viz.gfe/help/images/WEBrowser.jpg deleted file mode 100644 index 887483987d..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/WEBrowser.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/WEBrowserDialog.png b/cave/com.raytheon.viz.gfe/help/images/WEBrowserDialog.png deleted file mode 100644 index efdbd2db2a..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/WEBrowserDialog.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/WFOsending.png b/cave/com.raytheon.viz.gfe/help/images/WFOsending.png deleted file mode 100644 index d0b6335914..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/WFOsending.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/WOU_Notify.png b/cave/com.raytheon.viz.gfe/help/images/WOU_Notify.png deleted file mode 100644 index f2770366f4..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/WOU_Notify.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/WxDesign.png b/cave/com.raytheon.viz.gfe/help/images/WxDesign.png deleted file mode 100644 index 1470437713..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/WxDesign.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/alertViz.jpg b/cave/com.raytheon.viz.gfe/help/images/alertViz.jpg deleted file mode 100644 index 93d41a8695..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/alertViz.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/appLauncher.jpg b/cave/com.raytheon.viz.gfe/help/images/appLauncher.jpg deleted file mode 100644 index 58f0617e2c..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/appLauncher.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/back0.gif b/cave/com.raytheon.viz.gfe/help/images/back0.gif deleted file mode 100644 index d005a0d404..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/back0.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/baseSiteUserMultipleRetrieval.jpg b/cave/com.raytheon.viz.gfe/help/images/baseSiteUserMultipleRetrieval.jpg deleted file mode 100644 index 900c1fcf02..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/baseSiteUserMultipleRetrieval.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/baseSiteUserMultipleStorage.jpg b/cave/com.raytheon.viz.gfe/help/images/baseSiteUserMultipleStorage.jpg deleted file mode 100644 index 350a5c55ff..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/baseSiteUserMultipleStorage.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/baseSiteUserPythonRetrieval.jpg b/cave/com.raytheon.viz.gfe/help/images/baseSiteUserPythonRetrieval.jpg deleted file mode 100644 index 2a9027fc4e..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/baseSiteUserPythonRetrieval.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/baseSiteUserRetrieval.jpg b/cave/com.raytheon.viz.gfe/help/images/baseSiteUserRetrieval.jpg deleted file mode 100644 index c904846c3f..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/baseSiteUserRetrieval.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/baseSiteUserStorage.jpg b/cave/com.raytheon.viz.gfe/help/images/baseSiteUserStorage.jpg deleted file mode 100644 index e8dfda445b..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/baseSiteUserStorage.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/bullet.gif b/cave/com.raytheon.viz.gfe/help/images/bullet.gif deleted file mode 100644 index c7bb357bc2..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/bullet.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/buttonBar.jpg b/cave/com.raytheon.viz.gfe/help/images/buttonBar.jpg deleted file mode 100644 index 7b4d3faa80..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/buttonBar.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/checkmark.jpg b/cave/com.raytheon.viz.gfe/help/images/checkmark.jpg deleted file mode 100644 index 86bcbfd630..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/checkmark.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/clearEa.jpg b/cave/com.raytheon.viz.gfe/help/images/clearEa.jpg deleted file mode 100644 index 06ac803f65..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/clearEa.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/clearRefset0.gif b/cave/com.raytheon.viz.gfe/help/images/clearRefset0.gif deleted file mode 100644 index accac17a30..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/clearRefset0.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/contour.jpg b/cave/com.raytheon.viz.gfe/help/images/contour.jpg deleted file mode 100644 index 3b329ab05b..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/contour.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/contourTool0.gif b/cave/com.raytheon.viz.gfe/help/images/contourTool0.gif deleted file mode 100644 index 14922bf86a..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/contourTool0.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/contract0.gif b/cave/com.raytheon.viz.gfe/help/images/contract0.gif deleted file mode 100644 index 10893b30e9..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/contract0.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/contractTimeScale.jpg b/cave/com.raytheon.viz.gfe/help/images/contractTimeScale.jpg deleted file mode 100644 index 00af69e623..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/contractTimeScale.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/current0.gif b/cave/com.raytheon.viz.gfe/help/images/current0.gif deleted file mode 100644 index 6c754b5874..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/current0.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/defineRefset0.gif b/cave/com.raytheon.viz.gfe/help/images/defineRefset0.gif deleted file mode 100644 index 3550b4fd03..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/defineRefset0.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/deselectAll.jpg b/cave/com.raytheon.viz.gfe/help/images/deselectAll.jpg deleted file mode 100644 index c2a97c52d7..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/deselectAll.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/deselectAll0.gif b/cave/com.raytheon.viz.gfe/help/images/deselectAll0.gif deleted file mode 100644 index c068651728..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/deselectAll0.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/directoryDFC.jpg b/cave/com.raytheon.viz.gfe/help/images/directoryDFC.jpg deleted file mode 100644 index 5f91091aa5..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/directoryDFC.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/directoryHPUX.png b/cave/com.raytheon.viz.gfe/help/images/directoryHPUX.png deleted file mode 100644 index d1c2a68492..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/directoryHPUX.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/directoryStructureBin.jpg b/cave/com.raytheon.viz.gfe/help/images/directoryStructureBin.jpg deleted file mode 100644 index 852850bf92..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/directoryStructureBin.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/directoryStructureData.jpg b/cave/com.raytheon.viz.gfe/help/images/directoryStructureData.jpg deleted file mode 100644 index 410dc2db96..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/directoryStructureData.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/directoryStructureDoc.jpg b/cave/com.raytheon.viz.gfe/help/images/directoryStructureDoc.jpg deleted file mode 100644 index 5d291930e0..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/directoryStructureDoc.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/directoryStructureEtc.jpg b/cave/com.raytheon.viz.gfe/help/images/directoryStructureEtc.jpg deleted file mode 100644 index 9094dc1a33..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/directoryStructureEtc.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/directoryStructureExamples.jpg b/cave/com.raytheon.viz.gfe/help/images/directoryStructureExamples.jpg deleted file mode 100644 index 5e6a891a0f..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/directoryStructureExamples.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/directoryStructurePatch.jpg b/cave/com.raytheon.viz.gfe/help/images/directoryStructurePatch.jpg deleted file mode 100644 index 4275f40b02..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/directoryStructurePatch.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/directoryStructureProducts.jpg b/cave/com.raytheon.viz.gfe/help/images/directoryStructureProducts.jpg deleted file mode 100644 index 22b0dbd4e8..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/directoryStructureProducts.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/directoryStructureTop.jpg b/cave/com.raytheon.viz.gfe/help/images/directoryStructureTop.jpg deleted file mode 100644 index 98234a67b0..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/directoryStructureTop.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/directoryTop.jpg b/cave/com.raytheon.viz.gfe/help/images/directoryTop.jpg deleted file mode 100644 index a697778dbe..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/directoryTop.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/dumpAT.png b/cave/com.raytheon.viz.gfe/help/images/dumpAT.png deleted file mode 100644 index b13cb0b961..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/dumpAT.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/eaButtons.jpg b/cave/com.raytheon.viz.gfe/help/images/eaButtons.jpg deleted file mode 100644 index 34d42867ae..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/eaButtons.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/eaMode.jpg b/cave/com.raytheon.viz.gfe/help/images/eaMode.jpg deleted file mode 100644 index 81e0f42240..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/eaMode.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/eachDatabaseStructure.png b/cave/com.raytheon.viz.gfe/help/images/eachDatabaseStructure.png deleted file mode 100644 index f6eaeb4937..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/eachDatabaseStructure.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/editAction.jpg b/cave/com.raytheon.viz.gfe/help/images/editAction.jpg deleted file mode 100644 index 976e789249..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/editAction.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/editActions0.gif b/cave/com.raytheon.viz.gfe/help/images/editActions0.gif deleted file mode 100644 index 2eaab87c91..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/editActions0.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/editArea.jpg b/cave/com.raytheon.viz.gfe/help/images/editArea.jpg deleted file mode 100644 index 4c5f7abed4..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/editArea.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/editModeMenu0.jpg b/cave/com.raytheon.viz.gfe/help/images/editModeMenu0.jpg deleted file mode 100644 index 9ba4a333e4..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/editModeMenu0.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/expand0.gif b/cave/com.raytheon.viz.gfe/help/images/expand0.gif deleted file mode 100644 index b0794a4e45..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/expand0.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/expandTimeScale.jpg b/cave/com.raytheon.viz.gfe/help/images/expandTimeScale.jpg deleted file mode 100644 index 7c25d41a6f..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/expandTimeScale.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/f1200figc1.jpg b/cave/com.raytheon.viz.gfe/help/images/f1200figc1.jpg deleted file mode 100644 index 687ef5206e..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/f1200figc1.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/f1200figc5.jpg b/cave/com.raytheon.viz.gfe/help/images/f1200figc5.jpg deleted file mode 100644 index a7c8bed7a0..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/f1200figc5.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/f1200figf1.jpg b/cave/com.raytheon.viz.gfe/help/images/f1200figf1.jpg deleted file mode 100644 index d64fd46386..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/f1200figf1.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/f1200figh4.jpg b/cave/com.raytheon.viz.gfe/help/images/f1200figh4.jpg deleted file mode 100644 index ade329e44d..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/f1200figh4.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/first0.gif b/cave/com.raytheon.viz.gfe/help/images/first0.gif deleted file mode 100644 index 8e2beb9b35..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/first0.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/fragment.jpg b/cave/com.raytheon.viz.gfe/help/images/fragment.jpg deleted file mode 100644 index d8bc5074f1..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/fragment.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/fwd0.gif b/cave/com.raytheon.viz.gfe/help/images/fwd0.gif deleted file mode 100644 index 82eb13fbfe..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/fwd0.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/gfe2d2d.png b/cave/com.raytheon.viz.gfe/help/images/gfe2d2d.png deleted file mode 100644 index feaaaaac5d..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/gfe2d2d.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/gfeConfigRetrieval.jpg b/cave/com.raytheon.viz.gfe/help/images/gfeConfigRetrieval.jpg deleted file mode 100644 index a989ee1bf0..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/gfeConfigRetrieval.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/gfeMainMenu.jpg b/cave/com.raytheon.viz.gfe/help/images/gfeMainMenu.jpg deleted file mode 100644 index 90b5d89a10..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/gfeMainMenu.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/gfeMainMenuSmall.jpg b/cave/com.raytheon.viz.gfe/help/images/gfeMainMenuSmall.jpg deleted file mode 100644 index 0a2169c0d0..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/gfeMainMenuSmall.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/gfeStartMenu.jpg b/cave/com.raytheon.viz.gfe/help/images/gfeStartMenu.jpg deleted file mode 100644 index 7bf1518144..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/gfeStartMenu.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/gfecancel.gif b/cave/com.raytheon.viz.gfe/help/images/gfecancel.gif deleted file mode 100644 index 9704f324b0..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/gfecancel.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/gfeedit.gif b/cave/com.raytheon.viz.gfe/help/images/gfeedit.gif deleted file mode 100644 index d5894c29ad..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/gfeedit.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/gfepmunuon.gif b/cave/com.raytheon.viz.gfe/help/images/gfepmunuon.gif deleted file mode 100644 index b01ffa342c..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/gfepmunuon.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/gferun.gif b/cave/com.raytheon.viz.gfe/help/images/gferun.gif deleted file mode 100644 index 3c722160d3..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/gferun.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/gfestop.gif b/cave/com.raytheon.viz.gfe/help/images/gfestop.gif deleted file mode 100644 index 7c0a654758..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/gfestop.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/gfeterm.gif b/cave/com.raytheon.viz.gfe/help/images/gfeterm.gif deleted file mode 100644 index 338e7ab59b..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/gfeterm.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ghETN.png b/cave/com.raytheon.viz.gfe/help/images/ghETN.png deleted file mode 100644 index a0c3bdc9fe..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ghETN.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/gmHistory.jpg b/cave/com.raytheon.viz.gfe/help/images/gmHistory.jpg deleted file mode 100644 index 0e45a1c797..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/gmHistory.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/gmModified.jpg b/cave/com.raytheon.viz.gfe/help/images/gmModified.jpg deleted file mode 100644 index baae097780..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/gmModified.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/gmNormal.jpg b/cave/com.raytheon.viz.gfe/help/images/gmNormal.jpg deleted file mode 100644 index c5170aa3a1..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/gmNormal.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/gmPublished.jpg b/cave/com.raytheon.viz.gfe/help/images/gmPublished.jpg deleted file mode 100644 index 0aab6ef8b4..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/gmPublished.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/gmSaved.jpg b/cave/com.raytheon.viz.gfe/help/images/gmSaved.jpg deleted file mode 100644 index bab80b87da..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/gmSaved.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/gmSent.jpg b/cave/com.raytheon.viz.gfe/help/images/gmSent.jpg deleted file mode 100644 index 9ffd1d9993..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/gmSent.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/gmTe0.gif b/cave/com.raytheon.viz.gfe/help/images/gmTe0.gif deleted file mode 100644 index 803e7365d1..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/gmTe0.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/gmTe1.gif b/cave/com.raytheon.viz.gfe/help/images/gmTe1.gif deleted file mode 100644 index c78b2a0e1d..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/gmTe1.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/gridManagerNormal.jpg b/cave/com.raytheon.viz.gfe/help/images/gridManagerNormal.jpg deleted file mode 100644 index d6760d04f0..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/gridManagerNormal.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/gridStructure.jpg b/cave/com.raytheon.viz.gfe/help/images/gridStructure.jpg deleted file mode 100644 index e6997db46a..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/gridStructure.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/history0.gif b/cave/com.raytheon.viz.gfe/help/images/history0.gif deleted file mode 100644 index 1f795500ad..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/history0.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/horizontal0.gif b/cave/com.raytheon.viz.gfe/help/images/horizontal0.gif deleted file mode 100644 index e7178a9718..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/horizontal0.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ifpAG-4.gif b/cave/com.raytheon.viz.gfe/help/images/ifpAG-4.gif deleted file mode 100644 index 485248ada7..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ifpAG-4.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ifpAG-5.gif b/cave/com.raytheon.viz.gfe/help/images/ifpAG-5.gif deleted file mode 100644 index e7c75a8400..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ifpAG-5.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ifpAG-6.gif b/cave/com.raytheon.viz.gfe/help/images/ifpAG-6.gif deleted file mode 100644 index 252d61fa8e..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ifpAG-6.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ifpAG-7.gif b/cave/com.raytheon.viz.gfe/help/images/ifpAG-7.gif deleted file mode 100644 index 61be1d8f72..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ifpAG-7.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ifpAG-8.gif b/cave/com.raytheon.viz.gfe/help/images/ifpAG-8.gif deleted file mode 100644 index 09e7dc9063..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ifpAG-8.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ifpAG.jpg b/cave/com.raytheon.viz.gfe/help/images/ifpAG.jpg deleted file mode 100644 index 5acd29f5b6..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ifpAG.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGEImgCntr.png b/cave/com.raytheon.viz.gfe/help/images/ifpIMAGEImgCntr.png deleted file mode 100644 index a19ffcc1f2..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGEImgCntr.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGELogo.png b/cave/com.raytheon.viz.gfe/help/images/ifpIMAGELogo.png deleted file mode 100644 index 1088537fe0..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGELogo.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGENoLogo.png b/cave/com.raytheon.viz.gfe/help/images/ifpIMAGENoLogo.png deleted file mode 100644 index b62741f03a..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGENoLogo.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGEOverlay.png b/cave/com.raytheon.viz.gfe/help/images/ifpIMAGEOverlay.png deleted file mode 100644 index 913271085c..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGEOverlay.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGESimple.png b/cave/com.raytheon.viz.gfe/help/images/ifpIMAGESimple.png deleted file mode 100644 index b557f4748e..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGESimple.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGESkyGraphic.png b/cave/com.raytheon.viz.gfe/help/images/ifpIMAGESkyGraphic.png deleted file mode 100644 index 03a9ed20ae..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGESkyGraphic.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGESkyImage.png b/cave/com.raytheon.viz.gfe/help/images/ifpIMAGESkyImage.png deleted file mode 100644 index e8be74e459..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGESkyImage.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGE_base1.png b/cave/com.raytheon.viz.gfe/help/images/ifpIMAGE_base1.png deleted file mode 100644 index b4f0b0684a..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGE_base1.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGE_base2.png b/cave/com.raytheon.viz.gfe/help/images/ifpIMAGE_base2.png deleted file mode 100644 index a1a26d85c2..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGE_base2.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGE_base3.png b/cave/com.raytheon.viz.gfe/help/images/ifpIMAGE_base3.png deleted file mode 100644 index 3569bf51d6..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGE_base3.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGE_bkg.png b/cave/com.raytheon.viz.gfe/help/images/ifpIMAGE_bkg.png deleted file mode 100644 index a2a8b40a0c..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGE_bkg.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGE_domainExpand.png b/cave/com.raytheon.viz.gfe/help/images/ifpIMAGE_domainExpand.png deleted file mode 100644 index 4f84f63e57..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGE_domainExpand.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGE_fitToData.png b/cave/com.raytheon.viz.gfe/help/images/ifpIMAGE_fitToData.png deleted file mode 100644 index b208c0da57..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGE_fitToData.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGE_legendFormat1.png b/cave/com.raytheon.viz.gfe/help/images/ifpIMAGE_legendFormat1.png deleted file mode 100644 index 23b7bf5b78..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGE_legendFormat1.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGE_legendFormat2.png b/cave/com.raytheon.viz.gfe/help/images/ifpIMAGE_legendFormat2.png deleted file mode 100644 index f9488d1e9e..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGE_legendFormat2.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGE_longName.png b/cave/com.raytheon.viz.gfe/help/images/ifpIMAGE_longName.png deleted file mode 100644 index dfca019baa..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGE_longName.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGEadjG.png b/cave/com.raytheon.viz.gfe/help/images/ifpIMAGEadjG.png deleted file mode 100644 index a7278d5e99..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGEadjG.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGEaltmap.png b/cave/com.raytheon.viz.gfe/help/images/ifpIMAGEaltmap.png deleted file mode 100644 index b73e5012a0..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGEaltmap.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGEbaseG.png b/cave/com.raytheon.viz.gfe/help/images/ifpIMAGEbaseG.png deleted file mode 100644 index 6d5694b155..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGEbaseG.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGEclipped.png b/cave/com.raytheon.viz.gfe/help/images/ifpIMAGEclipped.png deleted file mode 100644 index bf243971a1..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGEclipped.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGEct.png b/cave/com.raytheon.viz.gfe/help/images/ifpIMAGEct.png deleted file mode 100644 index 389cad0d75..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGEct.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGEctLOG.png b/cave/com.raytheon.viz.gfe/help/images/ifpIMAGEctLOG.png deleted file mode 100644 index 5da45b0343..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGEctLOG.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGEctR.png b/cave/com.raytheon.viz.gfe/help/images/ifpIMAGEctR.png deleted file mode 100644 index e502adbeef..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGEctR.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGElarge.png b/cave/com.raytheon.viz.gfe/help/images/ifpIMAGElarge.png deleted file mode 100644 index 60de942926..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGElarge.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGElocaltz.png b/cave/com.raytheon.viz.gfe/help/images/ifpIMAGElocaltz.png deleted file mode 100644 index 61bd6916f4..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGElocaltz.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGEmapcolor.png b/cave/com.raytheon.viz.gfe/help/images/ifpIMAGEmapcolor.png deleted file mode 100644 index 306754dc31..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGEmapcolor.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGEnolegend.png b/cave/com.raytheon.viz.gfe/help/images/ifpIMAGEnolegend.png deleted file mode 100644 index a71fcd3a59..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGEnolegend.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGEsamples.png b/cave/com.raytheon.viz.gfe/help/images/ifpIMAGEsamples.png deleted file mode 100644 index c8b4d80571..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGEsamples.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGEsmall.png b/cave/com.raytheon.viz.gfe/help/images/ifpIMAGEsmall.png deleted file mode 100644 index c1ef6a025f..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGEsmall.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGEtop.png b/cave/com.raytheon.viz.gfe/help/images/ifpIMAGEtop.png deleted file mode 100644 index 7cec83c7ea..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGEtop.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGEwx1.png b/cave/com.raytheon.viz.gfe/help/images/ifpIMAGEwx1.png deleted file mode 100644 index 90b3904bd8..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGEwx1.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGEwx2.png b/cave/com.raytheon.viz.gfe/help/images/ifpIMAGEwx2.png deleted file mode 100644 index f23796ff2d..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ifpIMAGEwx2.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ifpServerText.png b/cave/com.raytheon.viz.gfe/help/images/ifpServerText.png deleted file mode 100644 index 98340cb7f9..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ifpServerText.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ifpServerlog.png b/cave/com.raytheon.viz.gfe/help/images/ifpServerlog.png deleted file mode 100644 index 54be241164..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ifpServerlog.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ifpnetCDF1.gif b/cave/com.raytheon.viz.gfe/help/images/ifpnetCDF1.gif deleted file mode 100644 index d03891efbf..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ifpnetCDF1.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/ifpnetCDF2.gif b/cave/com.raytheon.viz.gfe/help/images/ifpnetCDF2.gif deleted file mode 100644 index 21c3da4d42..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/ifpnetCDF2.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/isc0.gif b/cave/com.raytheon.viz.gfe/help/images/isc0.gif deleted file mode 100644 index bb4f07704f..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/isc0.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/isc1.jpg b/cave/com.raytheon.viz.gfe/help/images/isc1.jpg deleted file mode 100644 index 9bb75651c7..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/isc1.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/isc10.jpg b/cave/com.raytheon.viz.gfe/help/images/isc10.jpg deleted file mode 100644 index 4abbd5a373..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/isc10.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/isc11.jpg b/cave/com.raytheon.viz.gfe/help/images/isc11.jpg deleted file mode 100644 index e5ad8fcacb..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/isc11.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/isc12.jpg b/cave/com.raytheon.viz.gfe/help/images/isc12.jpg deleted file mode 100644 index 3c19d2d2fb..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/isc12.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/isc13.jpg b/cave/com.raytheon.viz.gfe/help/images/isc13.jpg deleted file mode 100644 index ac1ebbc0ee..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/isc13.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/isc2.jpg b/cave/com.raytheon.viz.gfe/help/images/isc2.jpg deleted file mode 100644 index 7f82e708aa..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/isc2.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/isc3.jpg b/cave/com.raytheon.viz.gfe/help/images/isc3.jpg deleted file mode 100644 index 0e8934cfe9..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/isc3.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/isc4.jpg b/cave/com.raytheon.viz.gfe/help/images/isc4.jpg deleted file mode 100644 index ca0947f943..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/isc4.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/isc5.jpg b/cave/com.raytheon.viz.gfe/help/images/isc5.jpg deleted file mode 100644 index 64fe9c2a08..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/isc5.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/isc6.jpg b/cave/com.raytheon.viz.gfe/help/images/isc6.jpg deleted file mode 100644 index 220a5ca620..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/isc6.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/isc7.jpg b/cave/com.raytheon.viz.gfe/help/images/isc7.jpg deleted file mode 100644 index 036de2999d..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/isc7.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/isc8.jpg b/cave/com.raytheon.viz.gfe/help/images/isc8.jpg deleted file mode 100644 index b75a099656..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/isc8.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/isc_thumb.jpg b/cave/com.raytheon.viz.gfe/help/images/isc_thumb.jpg deleted file mode 100644 index d917e08461..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/isc_thumb.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/last0.gif b/cave/com.raytheon.viz.gfe/help/images/last0.gif deleted file mode 100644 index 8342c2523d..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/last0.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/loadDraft.gif b/cave/com.raytheon.viz.gfe/help/images/loadDraft.gif deleted file mode 100644 index 2cb4098f37..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/loadDraft.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/logging.jpg b/cave/com.raytheon.viz.gfe/help/images/logging.jpg deleted file mode 100644 index d0b471ce0f..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/logging.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/looping0.gif b/cave/com.raytheon.viz.gfe/help/images/looping0.gif deleted file mode 100644 index 16855c48f1..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/looping0.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/loopprop0.gif b/cave/com.raytheon.viz.gfe/help/images/loopprop0.gif deleted file mode 100644 index 607f89ee67..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/loopprop0.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/mainMenu.jpg b/cave/com.raytheon.viz.gfe/help/images/mainMenu.jpg deleted file mode 100644 index 728fa53e7e..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/mainMenu.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/minus.gif b/cave/com.raytheon.viz.gfe/help/images/minus.gif deleted file mode 100644 index 5e3a1a96b2..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/minus.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/modelFileStructure.jpg b/cave/com.raytheon.viz.gfe/help/images/modelFileStructure.jpg deleted file mode 100644 index 6bbe1a7275..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/modelFileStructure.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/moveCopy.jpg b/cave/com.raytheon.viz.gfe/help/images/moveCopy.jpg deleted file mode 100644 index 2824d6e642..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/moveCopy.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/movecopy0.gif b/cave/com.raytheon.viz.gfe/help/images/movecopy0.gif deleted file mode 100644 index 589fce61c5..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/movecopy0.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/netCDFImage.jpg b/cave/com.raytheon.viz.gfe/help/images/netCDFImage.jpg deleted file mode 100644 index d32038041f..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/netCDFImage.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/newspaper.gif b/cave/com.raytheon.viz.gfe/help/images/newspaper.gif deleted file mode 100644 index 832807708f..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/newspaper.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/next.jpg b/cave/com.raytheon.viz.gfe/help/images/next.jpg deleted file mode 100644 index df87ed2b96..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/next.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/padlock.gif b/cave/com.raytheon.viz.gfe/help/images/padlock.gif deleted file mode 100644 index 56970da687..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/padlock.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/pan.jpg b/cave/com.raytheon.viz.gfe/help/images/pan.jpg deleted file mode 100644 index d538c11962..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/pan.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/pencil.jpg b/cave/com.raytheon.viz.gfe/help/images/pencil.jpg deleted file mode 100644 index 641cfe7d04..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/pencil.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/pencilTool0.gif b/cave/com.raytheon.viz.gfe/help/images/pencilTool0.gif deleted file mode 100644 index 7b884bb41c..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/pencilTool0.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/plus.gif b/cave/com.raytheon.viz.gfe/help/images/plus.gif deleted file mode 100644 index f6cdf9ad30..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/plus.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/previous.jpg b/cave/com.raytheon.viz.gfe/help/images/previous.jpg deleted file mode 100644 index f9445538c5..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/previous.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/pythonHi.gif b/cave/com.raytheon.viz.gfe/help/images/pythonHi.gif deleted file mode 100644 index 7e7231c891..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/pythonHi.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/queryEa.jpg b/cave/com.raytheon.viz.gfe/help/images/queryEa.jpg deleted file mode 100644 index 84fdacc96d..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/queryEa.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/quick10.gif b/cave/com.raytheon.viz.gfe/help/images/quick10.gif deleted file mode 100644 index 404dcb1590..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/quick10.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/quick20.gif b/cave/com.raytheon.viz.gfe/help/images/quick20.gif deleted file mode 100644 index 2703b2fee7..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/quick20.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/quick30.gif b/cave/com.raytheon.viz.gfe/help/images/quick30.gif deleted file mode 100644 index b16a00a95c..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/quick30.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/quick40.gif b/cave/com.raytheon.viz.gfe/help/images/quick40.gif deleted file mode 100644 index c31d9e8584..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/quick40.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/quickSet1.jpg b/cave/com.raytheon.viz.gfe/help/images/quickSet1.jpg deleted file mode 100644 index 7a03b87905..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/quickSet1.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/quickSet2.jpg b/cave/com.raytheon.viz.gfe/help/images/quickSet2.jpg deleted file mode 100644 index e81da5acb3..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/quickSet2.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/quickSet3.jpg b/cave/com.raytheon.viz.gfe/help/images/quickSet3.jpg deleted file mode 100644 index c10286cda1..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/quickSet3.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/quickSet4.jpg b/cave/com.raytheon.viz.gfe/help/images/quickSet4.jpg deleted file mode 100644 index dda32b23c0..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/quickSet4.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/quickView0.gif b/cave/com.raytheon.viz.gfe/help/images/quickView0.gif deleted file mode 100644 index 37fbf09fcc..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/quickView0.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/quickset0.gif b/cave/com.raytheon.viz.gfe/help/images/quickset0.gif deleted file mode 100644 index 9db4b37ed6..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/quickset0.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/refset0.gif b/cave/com.raytheon.viz.gfe/help/images/refset0.gif deleted file mode 100644 index 1950153d9c..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/refset0.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/replace0.gif b/cave/com.raytheon.viz.gfe/help/images/replace0.gif deleted file mode 100644 index cf3f3a85cb..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/replace0.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/sample.jpg b/cave/com.raytheon.viz.gfe/help/images/sample.jpg deleted file mode 100644 index 04ce30b5ca..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/sample.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/samples0.gif b/cave/com.raytheon.viz.gfe/help/images/samples0.gif deleted file mode 100644 index 8b91bc5dc6..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/samples0.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/saveEa.jpg b/cave/com.raytheon.viz.gfe/help/images/saveEa.jpg deleted file mode 100644 index 3e5a8f9ae1..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/saveEa.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/saveFcst0.gif b/cave/com.raytheon.viz.gfe/help/images/saveFcst0.gif deleted file mode 100644 index b20b831bbf..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/saveFcst0.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/saveIcon.jpg b/cave/com.raytheon.viz.gfe/help/images/saveIcon.jpg deleted file mode 100644 index c9616c230d..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/saveIcon.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/sendGfeMessage.gif b/cave/com.raytheon.viz.gfe/help/images/sendGfeMessage.gif deleted file mode 100644 index e981f480cf..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/sendGfeMessage.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/snapshot.png b/cave/com.raytheon.viz.gfe/help/images/snapshot.png deleted file mode 100644 index bfd5cfae07..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/snapshot.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/temporalEditor.jpg b/cave/com.raytheon.viz.gfe/help/images/temporalEditor.jpg deleted file mode 100644 index ce0d422ea4..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/temporalEditor.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/textDiagram.jpg b/cave/com.raytheon.viz.gfe/help/images/textDiagram.jpg deleted file mode 100644 index 7fe1a73ed7..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/textDiagram.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/textInstallDirectoryStructure.jpg b/cave/com.raytheon.viz.gfe/help/images/textInstallDirectoryStructure.jpg deleted file mode 100644 index 78a15d2f9c..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/textInstallDirectoryStructure.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/timeconstraint.gif b/cave/com.raytheon.viz.gfe/help/images/timeconstraint.gif deleted file mode 100644 index eac519143e..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/timeconstraint.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/toggle1.jpg b/cave/com.raytheon.viz.gfe/help/images/toggle1.jpg deleted file mode 100644 index 651b02f093..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/toggle1.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/toggle2.jpg b/cave/com.raytheon.viz.gfe/help/images/toggle2.jpg deleted file mode 100644 index 60fa04e80b..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/toggle2.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/toggleEa.jpg b/cave/com.raytheon.viz.gfe/help/images/toggleEa.jpg deleted file mode 100644 index 18863738a1..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/toggleEa.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/toggleISC.jpg b/cave/com.raytheon.viz.gfe/help/images/toggleISC.jpg deleted file mode 100644 index fb6bfcf610..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/toggleISC.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/toggleQuickView.jpg b/cave/com.raytheon.viz.gfe/help/images/toggleQuickView.jpg deleted file mode 100644 index f35f1e4045..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/toggleQuickView.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/toggleRefset0.gif b/cave/com.raytheon.viz.gfe/help/images/toggleRefset0.gif deleted file mode 100644 index 468a624c17..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/toggleRefset0.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/topDatabaseDirectory.jpg b/cave/com.raytheon.viz.gfe/help/images/topDatabaseDirectory.jpg deleted file mode 100644 index fcf54b2525..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/topDatabaseDirectory.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/trashcan.gif b/cave/com.raytheon.viz.gfe/help/images/trashcan.gif deleted file mode 100644 index a66a994d6f..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/trashcan.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/undo.jpg b/cave/com.raytheon.viz.gfe/help/images/undo.jpg deleted file mode 100644 index 7c0e89cb70..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/undo.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/undoGridEdit0.gif b/cave/com.raytheon.viz.gfe/help/images/undoGridEdit0.gif deleted file mode 100644 index 1bdcf499f7..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/undoGridEdit0.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/upArrow.gif b/cave/com.raytheon.viz.gfe/help/images/upArrow.gif deleted file mode 100644 index c468364ccb..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/upArrow.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/vertHoriz1.gif b/cave/com.raytheon.viz.gfe/help/images/vertHoriz1.gif deleted file mode 100644 index 895d5aca4d..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/vertHoriz1.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/vertical0.gif b/cave/com.raytheon.viz.gfe/help/images/vertical0.gif deleted file mode 100644 index 895d5aca4d..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/vertical0.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/vtecCompare.png b/cave/com.raytheon.viz.gfe/help/images/vtecCompare.png deleted file mode 100644 index 2b7ed2d520..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/vtecCompare.png and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/vtecDirectoryStructure.jpg b/cave/com.raytheon.viz.gfe/help/images/vtecDirectoryStructure.jpg deleted file mode 100644 index 949614cc7f..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/vtecDirectoryStructure.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/weatherTEVisual.jpg b/cave/com.raytheon.viz.gfe/help/images/weatherTEVisual.jpg deleted file mode 100644 index 273a1eda1d..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/weatherTEVisual.jpg and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/images/worlddomain.gif b/cave/com.raytheon.viz.gfe/help/images/worlddomain.gif deleted file mode 100644 index ceda0f86f8..0000000000 Binary files a/cave/com.raytheon.viz.gfe/help/images/worlddomain.gif and /dev/null differ diff --git a/cave/com.raytheon.viz.gfe/help/iscMosaic.html b/cave/com.raytheon.viz.gfe/help/iscMosaic.html deleted file mode 100644 index dac26244cc..0000000000 --- a/cave/com.raytheon.viz.gfe/help/iscMosaic.html +++ /dev/null @@ -1,794 +0,0 @@ - - - - - - iscMosaic - User's Guide - - -

    -iscMosaic User's Guide

    -January 6, 2012
    -

    -

    -

    Table of Contents

    -Overview -
    -Running the iscMosaic Program -
    -    Command Line Switches -
    -    Restrictions -
    -Examples -
    -    Default Behavior -
    -    Blanking -
    -    Replace Only, Do -Not Merge -
    -    No Mask -
    -    Alternative Mask -
    -    Simple Storage of -Grids -
    -Required netCDF File Format -
    -Temporal Mosaicing -

    -
    -
    -

    Overview

    -The main use of the iscMosaic program is to merge and store grids -received -from the intersite coordination -of -grids routine into your database.  The iscMosaic program can -also -be used to merge other local data sets and for storing data, that is in -the appropriate netCDF format, into your database.  Refer to the ifpnetCDF -program's user guide for details on the required format of the -netCDF -file. -

    There are a variety of options available to iscMosaic.  In the -basic mode, the contents of the specified netCDF file is merged into -the -existing dataset.  Only those areas identified by the source site -identifier in the netCDF file are merged; the remainder of the existing -grids remain untouched.  Using the various options, you can limit -the time range scope of the merge, limit the processing to one or just -a few weather elements, define an alternative merge mask or bypass the -merge and replace the entire grid, and zero out the existing grid -inventory -before beginning. -

    -

    Merging of grids is generally achived through "masking".  The -mask -is an edit area.  Be default the edit area mask is defined by the -site identifier field in each weather element of the incoming netCDF -file.  -For example, if the grids in the netCDF were created by the ifpnetCDF -program at Cheyenne (CYS), and then the iscMosaic program was run -on -the data file at BOU, only the data defined by those grid points in the -Boulder's CYS edit area would be merged into the grids.  The mask -can be disabled, or redefined when the iscMosaic program is run. -

    -

    The format of the input netCDF file is described in the netCDF -Format documentation. -

    -

    The following three images are from BOU, CYS, and PUB, when merged -and -clipped to their CWA regions, the result is the fourth image. -
    -  - - - - - - - - - - - - - - - -
    Boulder, CO (BOU)Cheyenne, WY (CYS)Pueblo, CO (PUB)Merge of the three different office grids, each one clipped -on its -CWA.
    -

    -

    -
    -

    Running the iscMosaic Program

    -

    -Command Line Switches

    -The following command line switches are supported by iscMosaic: -
    -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    SwitchMandatoryDescription
    -h hostnameYES  (See Note)Identifies the hostname upon which EDEX is running.
    -r rpcportYES (See Note)Identifies the RPC port number upon which EDEX is -processing -requests.
    -u userNOIdentifies the user of the program for use in obtaining edit -areas -from the server. 
    -d outputDatabaseIDYES (See Note)Defines the destination database to store the grids.  -This is -a full database id, in the form of -"siteID_GRID_optType_modelName_modelDate_modelTime", -such as BOU_GRID__Fcst_00000000_0000.
    -p parmNOIf not present, then all weather elements found in the netCDF -file -that exist in the destination database will be stored.  If -present, -then only those weather elements will be stored.  There can be -multiple --p switches, in the form of -p wx1 -p wx2 -p wx3. The name refers to -SFC -weather elements, to denote a weather element for a different level, -use -the parmName_level format, such as T_3K.
    -f inputFileYESSpecifies the input netCDF file for processing.  This -file must -be in the same format as the output that ifpnetCDF -produces. There can be multiple -f switches, in the form of -f file1 -f -file2 -f file3.  See the restrictions -section -for more information about command switch compatibility with multiple --f -switches are given.
    -bNOBlanking Mode.  If enabled, then for all times, other -than the -times in the incoming grids, any existing grids will have the area -defined -by the area mask blanked, i.e., set to the minimum data value.  If -disabled, then no data within the area defined by the area mask will be -modified in time periods that are not contained within the incoming -grids.  -For purposes of intersite -coordination, -which always sends the complete weather element's inventory, the switch -must be specified. The -s and -e switches affect the overall time range -that ths operation is performed.
    -s startTimeNOStart Time. By default, the start time is set to January 1, -1970 at -0000Z.   Only incoming grids that contain the start time or -start -after the start time will be processed.  For purposes of intersite -coordination, the -s switch should not be specified.
    -e endTimeNOStop Time. By default, the stop time is set way into the -future.  -Only incoming grids that contain the ending time or end before the -ending -time will be processed.  For purposes of intersite -coordination, the -e switch should not be specified.
    -xNOReplace Mode.  By default, iscMosaic performs merges of -the incoming -data grids into any existing grids over the region defined by the area -mask.  If the -x switch is given, then iscMosaic will not perform -a merge, but instead will simply replace any existing grid with the -incoming -grid.  For purposes of intersite -coordination, the -x switch should not be specified.  The -s -and --e switches affect the overall time range that this operation is -performed.
    -zNOErase Inventory First. By default,  no grids are removed -from -the destination database.  If the -z switch is specified, then -before -any incoming grids are stored, any existing grids in the database are -removed.  -For purposes of intersite -coordination, -the -z switch should not be specified.  The -s and -e switches -affect -the overall time range that this operation is performed.
    -nNOIgnore Area Mask. Be default, the site identifier field in -the input -netCDF file is used to determine the area mask.  For example, if -the -netCDF file site id field is "CYS", then the program will attempt to -get -the edit area called "ISC_CYS" from EDEX and then only merge -those -grid points.  If the -n switch is present, then the area mask will -be ignored and all grid points in the input netCDF will be merged into -the database.  This mode is not quite identical to the -x replace -mode unless the input netCDF file and the destination database contain -the same domain (geographical information). There is another mask -within -the input netCDF file that cannot be disabled.  That mask defines -valid data points vs. invalid data points.  The software will not -store invalid data points, despite the absence of a mask.
    -a altMaskNOAlternative Mask. By default, the site identifier field in -the input -netCDF file is used to determine the area mask.  For example, if -the -netCDF file site id field is "CYS", then the program will attempt to -get -the edit area called "ISC_CYS" from EDEX and then only merge -those -grid points.  The -a switch identifies the name of the edit area -used -for masking.
    -w messageNOWarn/Alert all clients connected to EDEX that data -has been -processed.  This produces a message on the AlertViz -indicating -that "message" occurred.  The site identifier, number of grids, -valid -time range, and weather elements received are displayed in the message.
    -kNODelete the input file(s) after processing has been completed.
    -i parmNOIf not present, then all weather elements found in the netCDF -file -that exist in the destination database will be stored or those -specified -by the -p switch will be stored.  If present, the identified -weather -element, if found in the input file, will be skipped, even if a -p -switch -is given. There can be multiple -i switches, in the form of -i wx1 -i -wx2 --i wx3.  The name refers to SFC weather elements, to denote a -weather -element for a different level, use the parmName_level format, such as -T_3K.
    -lNOLock flag.  If set, then only one iscMosaic can run at a -time.  -This switch is used by the intersite coordination software and is not -needed -for routine use of ifpnetCDF.
    -D gridDelayNOGrid Delay. Specifies the delay between processing of grids. -Defaults -to 0.25 seconds. The delay is used to lessen the effect of ISC traffic -on the loading of EDEX, and hence affects the GFE performance. -The value -is in seconds, and can be fractional. To eliminate the delay, use the --D 0 -switch.
    -o
    -
    NO
    -
    Use the office type from EDEX. - Incoming weather elements will be renamed if the data -is from a different office type than your own. For example, -receiving QPF data from an RFC at a WFO will have QPF stored as QPFrfc.
    -
    -S
    -
    NO
    -
    Enables the "ISC Sending" for -this process.   Depending upon how the EDEX ISC -configuration is set, different behaviors may be observed.  If -"Send ISC On Save" is set, then the Fcst grids will be sent upon -saving.  If "Send ISC On Save" is not set, then the user must -manually send the grids via a procedure through the Send Intersite -Grids capability.
    -
    -T
    -
    NO
    -
    Enables the "translate" mode for -WEATHER and DISCRETE data. If incoming data is not -considered valid per EDEX definition, then the data keys will -be translated to simpler keys that is understood by EDEX. -See translation rules -for more details.
    -
    -Note: The -h serverhost, -r rpcport, and -d -outputDatabaseID -are predefined based on your installation configration of -GFESuite.  -The -h and -r will be defined for the server host and port specified -during -installation.  The -d output database identifier is preset to the -ISC (intersite coordination database) for the site installed.  If -you wish to connect to another server, then these switches will be -necessary.   If environment -variables ${CDSHOST} or -${CDSPORT} are defined, then the default server and port will be -determined from the environment variables, unless overridden with the -user specified -h and -r switches.
    -
    -


    -

    -

    -Restrictions

    -The following restrictions apply to running this program: -
      -
    • The -n and -a switches cannot be specified together since they -are -mutually -exclusive.
    • -
    • If more than one -f switch is given, then the -x switch should -not be -given, -since it will not perform a merge.
    • -
    • If more than one -f switch is given, then the -z switch cannot be -given.
    • -
    • For purposes of intersite coordination, the following switches -must not -be specified: -s, -e, -x, -z, -n, -a.  The following switch should -be specified: -b
    • -
    • The program ignores the database time constraints, so if the data -to be -stored does not fall within a valid time constraint, the grid will not -be stored.  This isn't a problem with the intersite coordination -database, -since its grids are stored into the ISC database, which has time -constraints -of 1 hour.
    • -
    • If the "-d" switch specifies a database that does not currently -exist, -it will not be automatically created for you and the program will fail.
    • -
    -
    -

    Examples

    -This section describes the behavior of the iscMosaic program with the -various -options. -

    Default Behavior

    -The default behavior, where the -h, -r, -d, and -f switches are given, -is to merge the grids in the input netCDF files into the destination -database. -

    The following illustrates the concept of merging.  Merging is -done -both temporally, and spatially. -
    -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -
    Original Grid, as viewed on the GFE at the remote site. Note -the inventory -for the grids.  The merging will also perform temporal merges.Grid, after it has been remapped and clipped to the -destination's grid -domain.
    BOU
    CYS
    PUB

    -

    -

    -
    -

    -

    The result of merging the grids is shown in the following -image.  -Note the grids contained within the grid manager for Temperature.  -The inventory is a temporal blend of the BOU, CYS, and PUB grids. -

    -

    -

    In the event that data is not available for a particular time period -from a site, the merged grid will contain missing data.  The -missing -data is denoted by the weather element's minimum value, such as -30 for -temperature, calm for winds, and <NoWx> for weather grids.  -Here -is an example of looping through a sequence of merged grids: -

    -

    -

    Blanking

    -Blanking is used when when the incoming grids represent the entire -inventory -of grids for that weather element.  Any grids, and any portions of -grids that do not overlap the incoming grids's valid times will be -blanked -when blanking is enabled.  If blanking is disabled, then the -non-overlapping -portions of the grids will not have their data modified. -

    The data written into a grid that has been "blanked" is basically -the -minimum data value or fill value over the area mask. -

    -

    Non-Blanking Situation: - - - - - - - - - - - - - -
    Original Grid before merging. Note the valid time of the grid -is 00z-07z.Merging results in two grids since the merged grid is valid -from 00z-01z.  -The two valid times are 00z-01z, and 01-07z.  This is the first -grid -which now consists of the merged CYS data.The second grid looks exactly the same as before the merge, -since the -incoming merged grid valid time (00-01z) does not overlap this grid -(01-07z). -This is the effect of blanking turned off.
    -

    -

    Blanking Situation: - - - - - - - - - - - - - -
    Original Grid before merging. Note the valid time of the grid -is 00z-07z.Merging results in two grids since the merged grid is valid -from 00z-01z.  -The two valid times are 00z-01z, and 01-07z.  This is the first -grid -which now consists of the merged CYS data.The second grid is different since blanking is enabled. Since -the incoming -merged grid valid time (00z-01z) does not overlap this grid's valid -time -(01-07z), the area defined by the CYS edit area is masked out (or set -to -the minimum value) to indicate there is no valid data available.
    -

    -

    Replace Only, Do Not Merge

    -If the replace only, do not merge flag is set via the command line, -then -an incoming grid will completely replace any overlapping existing grid, -rather than performing a merge. -

    Here is an example of an existing grid and the result of performing -a replace.  Note that the -a nor the -n switches were provided, -which -caused the grid to be masked over the PUB CWA: -
    -  -
    -  - - - - - - - - - - - -
    Merged Grid before the PUB grid has been added.Merged (Replaced) grid after the PUB grid has been -added.  The -PUB grid has completely replaced the CYS and BOU data sets since the -x -switch was used.
    -
    -  -

    -

    No Mask

    -The -n switch specifies that all valid data in the incoming grid will -be -used.  No mask will be applied.  Here is an example of -storing -a PUB grid using the -n switch.  A merge is performed, but since -there -wasn't data previously from CYS, that area is blanked out.  Note -the -blank area at the top of the grid; this area was not covered by PUB's -original -grid domain, and hence data values cannot be applied to it. -

    The use of no mask is generally used only when replacing grids; it -is -used in conjunction with the -x switch. -

    -


    -  -

    -

    Alternative Mask

    -The user may specifify an alternative mask, which is the name of an -edit -area. In this example, the original data before the merge is shown, the -edit area is outlined in the second image, and those data portions -within -the incoming file that are contained within the named edit area are -merged. -
    -  -
    -  - - - - - - - - - - - - - -
    Original Data set before merging.The incoming data set when masked to the specified -area.  -Note that some of the area is "blank", which was outside the original -grid's -domain. The result of the merge.
    -
    -  -

    Simple Storage of Grids

    -Another use for the iscMosaic program is to simply store grids from -netCDF -into the server.  Of course the format -of -the file must meet the appropriate standards for the iscMosaic -program -to recognize the data. -

    It is assumed that you will completely want to replace any existing -grids in the server. The following command line switches are normally -used -for this purpose: -
    -  -
    -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -h hostnameHostname upon which EDEX is running
    -r portNumberRPC port number upon which EDEX is handling requests
    -d databaseOutputIDName of the output database to store the grids
    -f inputFileName of the input netCDF file
    -xReplace grids, do not merge.
    -zErase all grids before storing.
    -nDo not mask the grids upon storage
    -

    -

    In addition, if you want to completely replace all existing data, -then -you will probably want to use all of the above switches. -

    -

    -
    -

    Required netCDF File Format

    -


    -The format of the netCDF file is in the netCDF -file format documentation. -
    -  -

    -

    -
    -

    Temporal Mosaicing

    - -
    -  -  -
    -

    Translation Rules

    -When the -T switch is specified and incoming data does not conform to -"known values" by the EDEX definition, iscMosaic will attempt to -translate the data into "known values". The iscMosaic -log file will indicate which values were translated. If the --w switch is present, then similar information will be sent to the GFEs -as alert (orange) messages on the ISC status bar.
    -
    -

    Discrete Data

    -
      -
    1. If "overlapping" data is input (as denoted by the key^key -format), and EDEX is not configured for this weather element -to have overlapping data, then only the first key is -used.    For example, "FW.A^SV.A" will translate into -"FW.A".
    2. -
    3. If data containing aux data fields is input and the field length -exceeds EDEX configuration, then the aux data field will be -dropped. For example, if the aux data field is configured -to be a maximum of 4 characters and "FW.A:12345" is input, it will be -translated into "FW.A".
    4. -
    5. If data containing an unknown key is input, then the data will be -translated into the first defined value in EDEX.   -For many configurations including Hazards, this value is -"<None>". For example, if "XY.Z" is input, it will be -translated into "<None>".
      -
    6. -
    -

    Weather Data

    -
      -
    1. If an unknown visibility is input, then the visibility will be -translated into the first configured visibility element in -EDEX, which is normally <NoVis>.   For example, -"Sct:RW:-:52M:" will translate into "Sct:RW:-:<NoVis>".
    2. -
    3. If an unknown type is input, then the type and all associated -fields will be translated into the first configured type element in -EDEX, which is normally <NoWx>. For example, -"Sct:ZZZ:+:<NoVis>:" will translate into -"<NoCov>:<NoWx>:<NoInten>:<NoVis>:".
    4. -
    5. If an unknown coverage is input, then the coverage will be -translated into the first configured coverage for that weather -type.   For example, "XXX:R:+:<NoVis>:" will translate -into "Wide:R:+:<NoVis>:".
    6. -
    7. If an unknown intensity is input, then the intensity will be -translated into the first configured intensity for that weather -type.  For example, "Wide:R:?:<NoVis>:" will translate into -"Wide:R:--:<NoVis>:".
    8. -
    9. If an unknown attribute is input, then the attribute will be -removed.   For examplle, -"Wide:T:<NoInten>:<NoVis>:DmgW,LgA,XYZ" will translate into -"Wide:T:<NoInten><NoVis>:DmgW,LgA".
      -
    10. -
    -
    -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/keys.html b/cave/com.raytheon.viz.gfe/help/keys.html deleted file mode 100644 index 2c0e2adb8e..0000000000 --- a/cave/com.raytheon.viz.gfe/help/keys.html +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - keys - - -

    GFE Keyboard Accelerators

    -December 30, 2011
    -
    -


    -The GFE includes many of the keyboard accelerators that are similar -to those implemented in the D2D system. -The table below lists each function with its corresponding key. -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -

    Function

    -
    -

    Key

    -
    Step Back
    -
    Left Arrow
    Step Backward
    -
    Right Arrow
    First FrameCtrl + Left Arrow
    Last FrameCtrl + Right Arrow
    Toggle ImageKeypad 0
    Toggle Overlays 1-9Keypad 1-9
    Toggle Overlays 10-19Shift + Keypad 1-9
    Legend Cycle
    -    1. Show Product Legends
    -    2. Show Map Legends
    -    3. Show Valid Time
    Keypad Enter
    Minimize GFECtrl + F4
    -

    -

    Notes
    -

    -
  • For the keypad keys to work properly, either the Num Lock state -must be set to on or the shift key must be depressed when you execute -the operation.
  • -
  • If any weather element is displayed as an image, that element is -not counted as a graphic overlay when you toggle an overly. For -example, if the second weather element from the bottom is displayed as -an image, the third entry in the legend (second graphic) is treated as -the second overlay graphic.
  • -
    -
    -Additional keyboard shortcuts may be defined to run smart tools, toggle -ISC mode, and a few other modes.  Refer to the Keyboard Shortcut -Configuration section of the gfe -configuration file guide.
    - - diff --git a/cave/com.raytheon.viz.gfe/help/localConfig.html b/cave/com.raytheon.viz.gfe/help/localConfig.html deleted file mode 100644 index 0d3a398410..0000000000 --- a/cave/com.raytheon.viz.gfe/help/localConfig.html +++ /dev/null @@ -1,1963 +0,0 @@ - - - - - - localConfig.py - - -
    -

    localConfig.py - Local Server Database Configuration

    -December 30, 2011
    -
    -
    -Table of Contents -
    -
    -Overview -
    -Adding Your Own -localConfig.py -File -
    -Testing Your localConfig.py File -
    -What -can you control from your custom localConfig.py file? -
    -Adding a new Weather Element -
    -Removing an existing -Weather -Element -
    -Modifying the -characteristics of a Weather Element -
    -Changing the Weather -Configuration -
    -Adding a new Projection -
    -Modifying an existing Projection -
    -Removing a Projection -
    -Adding a new Site -
    -Modify a -Site's -Domains, Resolution, TimeZone -
    -Removing a Site -
    -Adding a new Time Constraint -
    -Modifying an existing -Time Constraint -
    -Removing a Time Contraint -
    -Adding a new Database -
    -Modifying an existing Database -
    -Removing a Database -
    -Modifying existing Parm Groups -
    -Removing Parm Groups -
    -Modifying -the list of D2D directories for model access
    -Modifying the list of D2D directories for satellite -data access
    -Modifying the number of available D2D model -versions -
    -Modifying the list of initialization -modules -
    -Modifying the Number of Days to Keep Logs -
    -Defining Extra Precision for Certain Weather -Elements -
    -Defining D2D Accumulative Weather Elements
    -Automatic Configuration of NotifyTextProd
    -Intersite Coordination Grids Configuration
    -

    -
    -

    Overview

    -
    The localConfig.py file is one of several -configuration -files for GFE. The localConfig -file is optional, and is not provided with the install or -release. -It is added by the field site to override certain features of the GFE -database configuration that are defined in the serverConfig.py -file.  You should NEVER change the -original -serverConfig.py since your changes will be overwritten with the next -upgrade. -See the server -configuration overview for information on how to make changes that -are supported to the server. -

    The localConfig.py file can be used to override many of the -definitions -in serverConfig.py, but not all of -them. -This document will describe what you can, and what you cannot -override. -If you need to override an element that is not supported by -localConfig.py -or localWxConfig.py, then refer to -the -server -configuration overview for details. -

    -

    The localConfig.py file is not used to -override -the map background definitions, refer to the methods -of modifying map definitions to do this. -
    -

    -
    -

    Adding Your Own -localConfig.py -File

    -If you want to make changes to the server database definitions, then -you will want to add your own localConfig.py file. Refer to the server -configuration overview file location section for details on -where the localConfig.py file should be located. -

    The first lines of the localConfig.py must have the -following -format. Failure to do so will not let you refer to any of the -definitions -in serverConfig.py: -

    -

    from serverConfig import * -
    -import serverConfig -

    -

    The syntax appearing in localConfig.py varies depending whether you -are adding new definitions, or changing existing definitions. -Typically -when changing existing definitions you will need to prefix the -serverConfig -to the name of the variable. For example, -

    -

    var = (a,b,c,d) refers to a local copy of this definition -and -doesn't override the definition in serverConfig.py -

    -

    serverConfig.var = (a,b,c,d) refers to the variable in the -serverConfig and overrides it. -

    -

    The localConfig.py file can be created in the CAVE Localization perspective by expanding -GFE Server->Server Config Files, right clicking on serverConfig.py and selecting Override... -

    -

    Example localConfig.py file -
    -

    -
    -

    Testing Your localConfig.py File

    -The recommended way to test your localConfig.py file is to start -EDEX while running a tail command on the /awips2/edex/logs/edex-request-date.log. -If no exceptions result from the changes, you should be fine to proceed into GFE -for further testing. -

    -
    -

    What -can -you control from your custom localConfig.py file?

    -The following table describes what can be done using a custom -localConfig.py -file.  If the override capability is marked as "NO" and you still -need the modification, you will need to review methods -of modifying database configurations for alternative choices. -
    -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ItemlocalConfig.py overrideLink to serverConfig info
    Add a new weather element -
    YES
    -
    weather -element configuration
    Remove an -existing weather -element* -
    NO
    -
    weather -element configuration
    Modify -an existing -weather element's attributes (name, type, units, descriptive name, -maximum possible value, minimum possible value, precision) -
    YES
    -
    weather -element configuration
    Change the weather -configuration -(coverages, types, intensities, visibilities, optional attributes) -
    NO, but you can change this through localWxConfig.py
    -
    weather -configuration
    Add a new projection -
    YES
    -
    projection -configuraton
    Modify an existing -projection -
    NO
    -
    projection -configuraton
    Remove an existing projection* -
    NO
    -
    projection -configuraton
    Adding a new site (Grid Domain -Configuration -Section) -
    YES
    -
    grid -domain configuration
    Change -the -site's domains (grid sizes, grid location and extent, time zone, -projection, -adjusting the site's resolution) -
    YES
    -
    grid -domain configuration
    Removing a site* -
    NO
    -
    grid -domain configuration
    Adding a new time -constraint -
    YES
    -
    time -constraint -info
    Modifying an -existing -time constraint -
    YES
    -
    time -constraint -info
    Removing an -existing time -constraint* -
    NO
    -
    time -constraint -info
    Adding a database attribute -configuration -
    YES
    -
    database -attribute -configuration
    Modifying a database attribute -configuration -(name, singleton flag, official flag, number of versions to keep, purge -age) -
    YES
    -
    database -attribute -configuration
    Removing a database attribute -configuration* -
    NO
    -
    database -attribute -configuration
    Modifying -the list of D2D directories to search for model data -
    YES
    -
    D2D model -list
    Modifying the -list of D2D directories to search for satellite data
    -
    YES
    -
    SATDIRS list
    -
    Modifying the list of -initialization -modules -
    YES
    -
    Initialization -Modules
    Modifying the number of available D2D -databases -
    YES
    -
    D2D Model Database -Version Specification
    Adding Parm Groups (mapping -of weather -elements to time constraints)  -
    YES
    -
    Parm -Group configuration
    Modifying Existing -Parm Groups -
    YES
    -
    Parm -Group configuration
    Removing Existing Parm Groups* -
    NO
    -
    Parm -Group configuration
    Adding new Databases -(database configuration -and parm group mapping) -
    YES
    -
    database -groupings
    Modifying existing Databases -(other -than adding weather elements to Fcst/Official) -
    NO
    -
    database -groupings
    Removing existing Databases -
    NO
    -
    database -groupings
    Modifying the Number of Days to keep Logs -
    YES
    -
    Misc. -Configurations
    Defining Extra Precision for -Certain Weather -Elements -
    YES
    -
    weather -element configuration
    Defining D2D Accumulative Weather Elements -
    YES
    -
    D2D -Accumulative -Elements
    -
    Intersite -Coordination Grids Configuration
    -
    YES
    -
    Intersite -Coordination Configuration Items
    -
    -*There usually is no need to remove definitions from -serverConfig.py.  -They generally do not take up an significant space. -

    -
    -

    Adding a new Weather Element

    -

    -Defining the New Weather Element

    -You can define a new weather element to add to the Fcst and Official -database, -or add to a new database, or both.  You can also use -localConfig.py -to add a new weather element to the model databases, e.g., NAM. -

    The format of the entry in localConfig.py is identical to that -described -in the weather -element section of serverConfig.py. -

    -

    Example localConfig.py file -

    -

    The following example defines a relative humidity element with the -following -characteristics: -
    -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Element Name"RH", which defines "RH" at the SFC, this element name may -also be -written "RH_SFC".
    Data TypeSCALAR
    Units%
    Descriptive NameRelative Humidity
    Maximum Possible Value100.0
    Minimum Possible Value0.0
    Precision0
    Time ConstraintsTC1 (as defined in either serverConfig.py or localConfig.py)
    Rate-Dependent ParmNO
    -

    -

    rh =    ("RH", SCALAR, "%", "Relative Humidity", -100.0, 0.0, 0, NO) -

    -

    Simply defining the new weather element has no affect.  You -need -to add it to the Fcst/Official databases or a new database for that -weather -element to truly be created. -

    -

    The format of the weather element line is different for WEATHER and -DISCRETE-type weather elements.  In particular, DISCRETE type -elements -require a overlapping/non-overlapping flag, as well as the discrete key -definitions.  WEATHER and DISCRETE-type elements do not allow -specification -of a maximum possible value, minimum possible value, precision, or -rate-dependent -parm.  Here is an example entry for a new discrete element called -SevereWx, which has two possible values, YES and NO.  It is -non-overlapping, -since you can't have both YES and NO at the same time. We want an -auxiliary data field with a maximum of 2 characters in length: -
    -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Element Name"SevereWx"
    Data TypeDISCRETE
    Unitscat
    Descriptive NameSevere Weather
    Time ConstraintsTC1 (as defined in either serverConfig.py or localConfig.py)
    OverlappingNO
    DiscreteKeyYES, NO
    -
    AuxDataFieldSize
    -
    2
    -
    -

    -

    severewxKeys = [('NO', 'no'), ('YES', 'yes')] -
    -severewx =    ("SevereWx", DISCRETE, "cat", "Severe -Weather", NO, severewxKeys, 2) -
    -  -

    -

    Adding the New Weather Element to the Fcst and Official Databases

    -To add the new weather element to just the Fcst and Official databases, -include a line similar to that below after all of the weather element -definitions -(and any new time constraint -definitions). -The line is in the standard parm -grouping format, with the exception that the name of the parm group is -"parm".This format consists of a list of new weather elements and -their -time constraint.  The time constraint can be an existing one in -the -serverConfig.py, or a new one -defined -earlier in localConfig.py.  Be sure that -the name to the left of the entry is "parms". -

    parms = [([rh], TC1)] -

    -

    If you choose to add multiple parms using the same time constraint, -then the second line needs to be modified to be in this format: -

    -

    parms = [([parm1, parm2, parm3], tc1)] -

    -

    If you choose to add multiple parms using different time -constraints, -then the second line needs to be modified to be in this format: -

    -

    parms = [([parm1], tc1), ([parm2], tc2), ([parm3, parm4], tc3)] -

    -

    Note: There can only be one "parms =" line in the localConfig.py -file.  If you use more than one, then only the last one will be -used. -
    -  -

    -

    Adding the New Weather Element to a New Database

    -If you only want to add a new weather element for a new database, and -not -the Fcst and Official databases, then do not include your weather -element -in the parms statement.  However, if you add it to a new database, -then you will usually want to add it to the Fcst and Official databases -so you can edit it.  You will include the list of weather elements -when you define a new database. -

    Adding The New Weather Element to a New Database and the -Fcst/Official -Databases

    -If you want to add the new weather element to both new databases, and -the -Fcst/Official databases, then include the weather elements in the parms -line, and include it in the list of weather elements when you define -a new database. -
    -  -

    Adding the New Weather Element to one of the standard model -Databases

    -You can add new weather elements to one of the standard model -databases.  -The syntax is identical to that described above, except that the Python -object name is not "parms", instead it is different depending upon the -model you are modifying.  The following table relates the standard -models and the Python object name that is required: -
    -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Standard ModelPython Object Name
    Fcst, Official, Restoreparms
    NAM80parmsNAM80
    NAM40
    -
    parmsNAM40
    -
    NAM12
    -
    parmsNAM12
    -
    RAP40parmsRAP40
    GFS80
    -
    parmsGFS80
    GFS40
    -
    parmsGFS40
    GFS190
    -
    parmsGFS190
    -
    GFS75
    -
    parmsGFS75
    -
    LAPSparmsLAPS
    gfsLRparmsgfsLR
    GWWparmsGWW
    MSASparmsMSAS
    GLERLparmsGLERL
    AKWAVEparmsAKWAVE
    WNAWAVEparmsWNAWAVE
    MOSparmsMOS
    RFCQPF
    -
    parmsRFCQPF
    -
    HPCQPFparmsHPCQPF
    HPCGuideparmsHPCGuide
    HPCDeltaparmsHPCDelta
    TPCtcmparmsTCM
    SAT
    -
    parmsSAT
    -
    ISC
    -
    parmsISC
    -
    NAM95
    -
    parmsNAM95
    -
    MOSGuide
    -
    parmsMOSGuide
    -
    OPCTAFBE
    -
    parmsOPCWavE
    -
    OPCTAFBSW
    -
    parmsOPCWavSW
    -
    OPCTAFBNW
    -
    parmsOPCWavNW
    -
    -

    Keep in mind that adding a new element to one of the standard model -databases does not cause that field to be automatically generated by -the -initialization routines.  You will have to also write a smart -initialization -algorithm for that database.  Refer to the Smart -Initialization Configuration and User's Guide for more details. -

    -

    Here is an example of adding the relative humidity weather element -with -a three-hour time constraint to the NAM12 database: -

    -

    rh =    ("RH", SCALAR, "%", "Relative Humidity", -100.0, 0.0, 0, NO) -
    -parmsNAM12 = [([rh], TC3)] -

    -

    -
    -

    Removing an existing -Weather -Element

    -This is not supported through localConfig.py. -
    -
    -

    Modify an -existing -Weather Element's Attributes

    -An existing weather elements attributes can be modified by duplicating -the entry in serverConfig.py, modifying the particular attributes, and -prefixing 'serverConfig.' to the beginning of the definition: -

    serverConfig.Temp =    ("T", SCALAR, "F", -"Surface -Temperature", -
    -           120.0, --30.0, 0, NO) -

    -

    The entry above changes the definition of temperature to range from --30 to +120 degrees.  The minimum possible value was -changed.  -This will affect all databases that use the "Temp" weather element. -

    -

    You can modify the association between an existing weather element -and -its time constraints (parm groups) through localConfig.py.  If you -simply want to change the time constraints associated with an existing -weather element, refer to Modifying -Existing Parm Groups. -

    -

    Example localConfig.py file -
    -

    -
    -

    Changing the Weather -Configuration

    -The changing of the weather configuration is not supported through -localConfig.py -but is supported through localWxConfig.py. -If you do change the weather configuration, you may find that your -weather -grids are not compatible with weather grids from other sites. -
    -
    -

    Add a new Projection

    -Adding a new projection is straight forward once you figure out all of -the constants that are required.  Refer to the projection -configuration information in serverConfig.py for more details. -

    Here is an example of adding a Local211 projection, which is similar -to the Grid211 except that the 'North is up' has been changed from 95 -degrees -west longitude to 116 degrees west longitude: -

    -

    Local211 = ('Local211', LAMBERT_CONFORMAL, -
    -      (-133.459, 12.190), (-49.385, -57.290), -
    -      (-116.0, 25.0), 25.0, 25.0, (1, -1), (93, 65), 0.0, 0.0, 0.0) -
    -  -

    -

    If you do create your own projection, you should strive to name it -differently -from the standard projections provided with the system.  In the -above -example we created a Local211 projection and named it 'Local211' in the -first argument. -

    -

    Adding a new projection does no good unless you use it in a new or -modified -site definition.  Therefore if you add a new projection for your -site, -you also will want to update the site definition (grid size, location, -and projection) information. -

    -

    For example, changing Boise from Grid211 to the Local211 projection -would require the following lines in localConfig.py. -

    -

    from serverConfig import * -
    -import serverConfig -
    -Local211 = ('Local211', LAMBERT_CONFORMAL, -
    -      (-133.459, 12.190), (-49.385, -57.290), -
    -      (-116.0, 25.0), 25.0, 25.0, (1, -1), (93, 65), 0.0, 0.0, 0.0) -
    -SITES['BOI'] = ([45, 45], (25.00, 34.00), (11.0, 11.0), 'MST7MDT', -Local211)) -

    -

    Note that when changing a projection, you will also be changing the -AWIPS world coordinate systems as defined.  This can result in a -distorted -map background. -

    -

    Example localConfig.py file -
    -

    -
    -

    Modify an existing -Projection

    -Modifying an existing projection is not -supported. -Attempts to do so will result in EDEX failing to initialize GFE successfully. -
    -

    -
    -

    Remove a Projection

    -The removal of a projection is not supported through localConfig.py. -There -is no harm in leaving unused projections in the serverConfig.py file. -
    -
    -

    Adding a new Site

    -Adding a new site is not supported through localConfig.py.  You -should -use an existing entry and then reset its domain and grid size to that -appropriate -for your new site. -

    -
    -

    Changing -the -Site's Domains, Resolution, Time Zone, Office Type
    -

    -A existing site's definition may be changed in the localConfig.py -file.  -The format of the entry in localConfig.py is identical to that -described -in the grid domain -section of serverConfig.py. -

    The following example modifies a existing site's definition to the -following -characteristics: -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Site NameABQ
    Grid Sizex=70, y=70
    Grid Origin in AWIPS world coordinatesx=36.25, y=22.25
    Grid Extent in AWIPS world coordinatesx=8.5 y=8.5
    Time ZoneMST7MDT
    ProjectionGrid211
    Office Type
    -
    wfo
    -
    -

    -

    SITES['ABQ'] = ([70, 70], (36.25, 22.25), (8.5, 8.5), 'MST7MDT', -Grid211, 'wfo') -
    -  -

    -

    If your modified site is using a new or modified projection, then be -sure to define the new or modified projection BEFORE you redefine the -site's -characteristics. -
    -  -

    -

    Adjusting the Grid Resolution

    -The numbers that define the grid resolution are not particularily -obvious.  -The grid resolution is determined from the grid location on Earth -(defined -by Grid Origin, Grid Extent, and Projection), and the Grid Size.  -The nominal resolution of the common AWIPS projections are shown in the -table below.  They are equivilant to a grid box of (1,1) in -size.  -The approximate resolution of your domain entry can be figured by: -

    approx resolution = projectionResolution * (extent / (grid size -- 1)) -

    -

    Solving for your grid size results in the following equation; enter -your desired resolution: -

    -

    grid size = (projectionResolution * extent / desiredResolution) -+ 1 -

    -

    The resulting grid size defines the number of grid cells in each -direction -for the given resolution. For example, if you were on the Grid211 -projection -with an AWIPS world coordinate extent of 9.0, and would like a -resolution -of approximately 2.5 kilometers, the approximate grid size you would -use -would be: -

    -

    grid size = 80 * 9.0 / 5.0 + 1 -
    -grid size = 145 -

    -

    Therefore an example entry  would change from this: -

    -

    SITES['AAA'] = ([145, 145], (23.00, 22.00), (9.0, 9.0), -'MST7MDT', -Grid211, 'wfo') -

    -

    to this: -

    -

    SITES['AAA'] = ([289, 289], (23.00, 22.00), (9.0, 9.0), -'MST7MDT', -Grid211, 'wfo') -

    -

    You can get different resolutions in the x and y direction which is -generally not recommended.  To avoid this, make sure that the -ratio -of extent and grid size are identical. -
    -  -
    -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AWIPS ProjectionNominal Resolution (km)
    Grid21180
    Grid21240
    Grid21447
    Grid21080
    Grid20880
    Grid21520
    -

    -

    Example localConfig.py file -
    -

    -
    -

    Removing a Site

    -Removing a site is not possible through the localConfig.py. Generally -it -is not necessary to remove a site from serverConfig.py since the site -definitions -do not take up significant space. -
    -
    -

    Adding a new Time Constraint

    -Adding a new time constraint is straight forward.  It has the same -format as described in the time -constraint section of serverConfig.py.  You can make use of -the -localTC() script defined in serverConfig.py if desired. -

    The following line adds a new time constraint with the name of TC8, -that starts at 0200z, repeats every eight hours, and has a duration of -four hours.  The second line adds a new time constraint with the -name -of LT9 that starts at 900am local time, repeats every 24 hours, and has -a duration of 3 hours: -

    -

    TC8      = (2*HOUR, 8*HOUR, 4*HOUR) -
    -LT9 = localTC(9*HOUR, 24*HOUR, 3*HOUR, 0) -

    -

    Simply adding a new time constraint by itself provides no benefit, -unless -you also define new parm groupings and a database.  Any new time -constraints -to be used with new weather elements need to be defined before the -definition -is used. -

    -

    Example localConfig.py file -
    -

    -
    -

    Modifying an -existing Time -Constraint

    -Modifying an existing time constraint is fairly easy.  Simply copy -the definition from serverConfig.py and put it in localConfig.py, then -modify it.  This modifies the maximum temperature time constraint -so it starts at 500am local time and runs until 800pm local time -(start=5, -repeat=24, duration=15); the daylight savings flag is set to zero. -

    serverConfig.MaxTTC     = localTC(5*HOUR, -24*HOUR, -15*HOUR, 0) -

    -

    Modifying the TC6 time constraint to have grids every 6 hours, but -with -grid lengths of 2 hours (2 hour grid, 4 hour gap) is accomplished by: -

    -

    serverConfig.TC6      = (0, 6 * HOUR, -3*HOUR) -
    -  -

    -

    Modifying an existing time constraint can have -far-reaching effects.  Every subsequent use of this time -constraint -in serverConfig.py (and localConfig.py) will use this new definition. -This -can affect all of the model time constraints for all of the -models.  -Be sure you know what you are doing!  It is much better to simply -create -a new tme constraint and use it. -

    -

    -
    -

    Removing an existing -Time -Constraint

    -It is not possible to remove an existing time constraint through -localConfig.py.  -Having unused definitions of Time Constraints in serverConfig.py does -no -harm. -
    -
    -

    Adding a new Database

    -There are several steps to adding a new database: - -

    -Defining Database Attributes

    -The database attributes for the new database are defined in the same -format -as those in the serverConfig.py. -

    If you were adding a new database with the following characterstics: -
    -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Model NameClimo
    Format (always GRID)GRID
    Optional Type, simply used to filter viewable databases by -the GFE -through gfe -configuration file""
    SingletonYES
    OfficialNO
    Number of Versions 1
    Grid Purge Age48 hours
    -

    -

    then you would use the following syntax to define this database -attribute: -

    -

    Climo   = ('Climo',   GRID,   '', -YES, NO,  1, 48) -

    -

    However, if you are modifying an already defined database, then be -sure -to prefix your entry with serverConfig.  For example, to modify -the -NAM12 database to retain 4 versions, the entry in localConfig.py will -be: -

    -

    serverConfig.NAM12 = ('NAM12', GRID, '', NO,  NO, 4, 0) -
    -  -

    -

    Defining New Parm Groupings

    -Now you need to define the list of weather elements and their time -constraints.  -The list of weather elements can include previous definitions from -serverConfig -and your new definitions. The composite list of weather elements and -time -constraints is done in an identical manner to that described in serverConfig.py.  -Of course, you will first need to define any new time constraints that -you plan to use. -

    In this example, we have assumed to already add the definitions for -the the following weather elements: NormalMax, NormalMin.  We plan -to use existing local time definitions for max and min temperature so -we -don't need to redefine or define new ones. -

    -

    CLIMO_MODEL = [([NormalMax], MaxTTC), ([NormalMin], MinTTC)] -

    -

    Adding the -Database -to the list of new databases

    -The final step is to relate the parm groupings to the database -attributes -and then append those to a list of new databases.  This is done in -the simliar format to  database -groupings in serverConfig.py.  The Python variable that is -expected -is 'localDBs'. -

    dbs = [(Climo, CLIMO_MODEL)] -

    -

    If multiple local databases were required, the format of the entry -would -be: -

    -

    dbs = [(dbattr1, dbParmGroup1), (dbattr2, dbParmGroup2)] -

    -

    Example localConfig.py file -
    -

    -
    -

    Modifying a Database

    -There are only a limited number of items that can be changed on an -existing -database.  You can add new -weather -elements (to Fcst and Official databases, or any of the standard -model -databases), change -the weather element definitions, change the database -attribute information, and change -weather element time constraints using different methods outlined -in -this file.    If you really need to make additional -modifications, -then you will need to copy the entire serverConfig.py and make changes -to it as described in the server -configuration guide. -

    -
    -

    Removing a Database

    -The removal of databases are not supported through the -localConfig.py.  -If a database really needs to be removed, then you will need to make a -copy of the serverConfig.py and change it, and place it in the correct -directory.  See server -configuration options for details. -
    -
    -

    Modifying Existing Parm -Groups

    -Modification of existing parm groups through localConfig.py is used to -change the mapping between weather elements, and their time -constraints.  -You can  modify existing parm groups for the Fcst and Official -databases, -or any of the standard model databases,  through this method. -

    Modifying an existing parm group is accomplished by linking new or -existing -weather elements to new or existing time constraints.  This is -similar -to the technique in Adding A New -Weather -Element. -

    -

    To modify the existing parm group for the Fcst and Official -databases, -include a line similar to that below after all of the weather element -definitions -(and any new time constraint -definitions). -The line is in the standard parm -grouping format, with the exception that the name of the parm group is -"parm".This format consists of a list of new weather elements and -their -time constraint.  The time constraint can be an existing one in -the -serverConfig.py, or a new one -defined -earlier in localConfig.py.  Be sure that -the name to the left of the entry is "parms". -

    -

    parms = [([rh], TC1)] -

    -

    If you choose to add multiple parms using the same time constraint, -then the  line needs to be modified to be in this format: -

    -

    parms = [([parm1, parm2, parm3], tc1)] -

    -

     If you choose to add multiple parms using different time -constraints, -then the second line needs to be modified to be in this format: -

    -

    parms = [([parm1], tc1), ([parm2], tc2), ([parm3, parm4], tc3)] -

    -

    For example, if you want the T, Td, Wind, Wx, and Sky parameters to -all be 3 hours in length, with no gaps, you would use the existing -TC3NG -time constraint.  If you wanted the MaxT and MinT parameters to be -18 hours in length instead of 12, then you would need to create two new -time constraints. The lines that would be placed in localConfig.py -would -be: -

    -

    MaxTTC18 = localTC(4*HOUR, 24*HOUR, 18*HOUR, 0) -
    -MinTTC18 = localTC(16*HOUR, 24*HOUR, 18*HOUR, 0) -
    -parms = [([T, Td, Wind, Wx, Sky], TC3NG), ([MaxT], MaxTTC18), -([MinT], -MinTTC18)] -

    -

    Example localConfig file -

    -

    Note: There can only be one "parms =" line in the localConfig.py -file.  If you use more than one, then only the last one will be -used. -

    -

    Likewise, you can modify existing parm groupings for the models -through -localConfig.py.  Instead of the "parms =" statement, you need to -use -the correct statement for the model.  Refer to the table under Adding -a New Weather Element for the proper syntax for the parm groupings -for the models. -

    -

    For example, if you wanted to modify the RAP40 T (temperature) and -Td -(dew point) time constraint to TC1, then you would do the following. -

    -

    parmsRAP40 = [([T,Td], TC1)] -

    -

    -
    -

    Removing Parm Groups

    -The removal of parm groups is not supported through the -localConfig.py.  -There is no need to remove parm groups since by themselves, they do not -take up any storage space. -
    -
    -

    Modifying -the list of D2D Directories for model access

    -The standard list of D2D directories may not include all of the D2D -models -that you wish to use in the GFE.  The entry in serverConfig.py -can be overriden using the following syntax: -

    serverConfig.D2DMODELS = [('directory1', 'model')] -

    -

    This definition will completely override the one in serverConfig.py -so you will probably want to include those original definitions. -

    -

    Here is an example of adding an SREF model on -projection SREF12: -

    -

    serverConfig.D2DMODELS = [('SREF40', 'SREF')]
    -

    -

    Note that overridding the -complete D2DMODELS is not recommended, since you will -miss baseline updates with each release. Instead, you should use the -append feature to simply add a new entry without -modifying existing entries as: -

    -

    serverConfig.D2DDIRS.append(('CONUS212', 'NAM20')) -

    -

    Note that GFE simply cannot see and -intrepret every type of hdf5 file in existance. Even if the hdf5 -files are D2D-displayable, there may be some missing information in the -files that make GFE ignore the file. Refer to the EDEX -hdf5 format requirements document for more details. -

    -

    Example localConfig file -
    -

    -
    -

    Modifying -the list of D2D Directories for satellite data access

    -The standard list of D2D directories for satellite access may not -include all of the D2D directories -that you wish to use in the GFE, or may contain weather element names -that are not desirable. The entry in serverConfig.py -can be overriden using the following syntax: -

    serverConfig.SATDATA = [('directory1', 'weather element name -1'), ('directory2', 'weather element names 2')] -

    -

    This definition will completely override the one in serverConfig.py -so you will probably want to include those original definitions. -

    -

    Here is an example of redefining the complete list of SATDATA; this -technique is not the best, since you will miss updates to serverConfig -and is not recommended:
    -

    -

    serverConfig.SATDATA = -[("NESDIS/GOES-13(N)/East CONUS/Imager Visible", "visibleWest"),
    -           -("NESDIS/GOES-13(N)/East CONUS/Imager 6.7-6.5 micron IR (WV)", "waterVaporEast")]
    -

    -

    -

    You can also use the append feature to simply add a new entry -without -modifying existing entries as: -

    -

    serverConfig.SATDATA.append(("NESDIS/GOES-13(N)/East CONUS/Imager 3.9 micron IR", "ir39East")) -

    -Note that GFE simply cannot see and -intrepret every type of satellite hdf5 file in existance. Even -if the satellite hdf5 -files are D2D-displayable, there may be some missing information in the -files that make GFE ignore the file. Refer to the EDEX -satellite hdf5 format requirements document for more details. -

    -

    Example localConfig file

    -


    -

    -
    -

    D2D Model Database Version Specification

    -You can override the default number of retained (available) D2D -model versions through localConfig.py. This can also be used to define -the number of D2D Satellite images that can be seen through GFE. -Further information, including restrictions, -is provided in the serverConfig.py -D2D Model Database Version Specification section. The format to -override all entries (not recommended) is: -

    serverConfig.D2DDBVERSIONS = { -
    -    "modelname" : numberOfVersions, -
    -    "modelname2": numberOfVersions2 -
    -     } -

    -

    For example, to override the number of available NAM12 versions, -which -is called NAM12 on the D2D, and to set the available versions to 3, the -following -syntax is used: -

    -

    serverConfig.D2DDBVERSIONS = { -
    -    "NAM12" : 3 -
    -     } -

    -

    The above will completely overwrite all of the definitions of -D2DDBVERSIONS -in serverConfig.py, which may not be what you have intended.  The -preferred way to make a modification is by individual items. For -example, in -order to just affect the NAM12, you could do -this: -

    -

    serverConfig.D2DDBVERSIONS["NAM12"] = 3 -

    -

    -
    -

    Modifying the list of -Initialization -Modules

    -The standard list of initialization modules (smart initialization) may -be modified to include, or exclude certain models from producing -IFP-type -databases, or for adding new model databases or modifying algorithms -from -existing databases. You can also choose to skip certain model runs for -each model if desired. Refer to the Smart -Initialization -documentation for more details on smart initialization.  The -entry -in serverConfig.py can be completely overridden using the following -syntax (which is not recommended): -

    serverConfig.INITMODULES = { -
    -       moduleName : ["d2dmodelname", -"d2dmodelname"], -
    -         modulename : -["d2dmodelname"] -
    -       } -

    -

    An example is shown in the following example, where the NAM -initialization -(D2D modelname NAM12) is now going to be controlled by module name -MyNAM. -

    -

    serverConfig.INITMODULES = { -
    -    "NAM40" : ["NAM40", "NAM20"], -
    -    "RAP40" : ["RAP40"], -
    -    "GFS40" : ["GFS40"], -
    -    "MyNAM" : ["NAM12"], -
    -    "gfsLR" : ["gfsLR"] -
    -    } -

    -

    There are alternate ways of adding an entry, modifying an entry, or -deleting an entry.  -The method of completely redefining INITMODULES as shown above is not -recommended.
    -  -

    -

    Adding An Entry

    -The format is: -

    serverConfig.INITMODULES["newModuleName" = ["d2dmodel", -"anotherd2dmodel"] -

    -

    Example of adding a new initialization module for LAPS, which we -assume -that a user has created a LAPS.py and placed it into -/awips2/edex/data/utility/edex_static/site/SITE_ID/smartinit: -

    -

    serverConfig.INITMODULES["LAPS] = ["LAPS"] -

    -

    Modifying An Entry

    -Modifying an entry uses the adding and deleting entry syntax.  -First -you add the new initialization module, then you delete the old -one.  -In this example we are changing the initialization module from NAM12 to -MyNAM -for the NAM12 model: -

    serverConfig.INITMODULES["MyNAM"] = ["NAM12"] -
    -del serverConfig.INITMODULES["NAM12"] -

    -

    Deleting An Entry

    -The format is: -

    del serverConfig.INITMODULES[moduleName] -

    -

    Example of deleting the RUC is: -

    -

    del serverConfig.INITMODULES["RUC"] -
    -  -

    -

    Skipping Model Runs

    -The user can choose to skip model runs for any of the initialization -modules.  -The entry in serverConfig.py can be overriden using the following -syntax: -

    serverConfig.INITSKIPS = { -
    -       modelname : [skiptime1, -skiptime2, -skiptime3], -
    -       modelname : [skiptime1, -skiptime2], -
    -       } -

    -

    Note that unlike the INITMODULES, the key in this dictionary is the -modelname, and not the module name. An example is shown in the -following -example, where the RAP40 initialization is skipped except for every 3 -hours, -and the NAM40/NAM20 run is skipped for the 00z run: -

    -

    serverConfig.INITSKIPS = { -
    -    "NAM40" : [0], -
    -    "NAM20" : [0], -
    -    "RAP40" : -[1,2,4,5,7,8,10,11,13,14,16,17,19,20,22,23], -
    -    } -

    -

    There are alternate ways of adding an entry, modifying an entry, or -deleting an entry which are similar to that described above in the -INITMODULES -section which should be used.
    -

    -
    -

    Modifying the Number of Days to Keep Logs

    -You may override the serverConfig.py's definition of the number of days -to keep the GFESuite logs with this syntax: -

    serverConfig.LOG_FILE_PURGE_AFTER = 6 -
    -

    -

    -
    -

    Defining Extra Precision for Certain -Weather -Elements

    -Weather Elements are stored in their specified precision in GFE, -thus if you have the precision set to 0 for a weather element, it will -effectively be stored as integers.  Sometimes you might want -additional -precision available for certain weather elements in order to faciliate -computations on the data.  For those cases, where you don't want -to -specify a higher precision (which affects labeling, sampling, ISC data -sizes, etc.), you can use the ExtraWEPrecision entry.  The entry -is -a listing of weather elements that require extra precision.  The -effective -precision assigned to these elements is one more than that defined in -the -weather element configuration section in serverConfig, if the string -version -of the definition is used, or the precision increase value, if the -tuple -(wename, extraprecision) form is used..  To declare an additional -weather element to contain extra precision, use this format: -

    serverConfig.ExtraWEPrecision.append('parmname') -

    -

    serverConfig.ExtraWEPrecision.append(('parmname', extraPrec)) -

    -

    To redefine the entire list, use this format: -

    -

    serverConfig.ExtraWEPrecision = ['parmname1', 'parmname2', -'parmname3', -...] -

    -

    serverConfig.ExtraWEPrecision = [('parmname1', exPrec1), -'parmname2', -('parmname3', exPrec3), ...] -

    -

    The forms of 'parmname' and ('parmname', extraPrecAmount) may be -contained -in the same statement. -
    -

    -
    -

    Defining D2D Accumulative Weather Elements

    -The dictionary of accumulative weather elements is defined by model and -weather element.  If a weather element is declared, then the -software -will treat that element as a duration or accumulative element.  -The -model grid time will be considered as the ending time of the grid -rather -than a snapshot time.  Through localConfig.py, you can modify and -entry, add a new entry, or delete an entry.  You may also redefine -the entire dictionary.  The element names do not include the level -definition.
    -
    -It is recommended that you follow the technique to add, remove, and -modify entries, rather than redefining the entire dictionary.
    -

    To add a new model entry: -

    -

    serverConfig.D2DAccumulativeElements["modelName"] = ["elem1", -"elem2", -"elem3"] -

    -

    To remove an existing model entry: -

    -

    del serverConfig.D2DAccumulativeElements["modelName"] -

    -

    To modify an existing entry: -

    -

    serverConfig.D2DAccumulativeElements["modelName"] = ["elem1", -"elem2", -"elem3"] -

    -

    To redefine the entire dictionary: -

    -

    serverConfig.D2DAccumulativeElements= { -
    -    "GFS40": ["tp", "cp"], -
    -    "NAM80": ["tp", "cp"], -
    -    "RAP40": ["tp", "cp"], -
    -    "NAM40": ["tp", "cp"], -
    -    "NAM20": ["tp", "cp"], -
    -    "MSAS": ["tp", "cp"], -
    -    "LAPS": ["pc"], -
    -    "HPCQPF": ["tpHPC"], -
    -    "HPCdelta": ["pop"], -
    -    "NAM12": ["tp", "cp"], -
    -    } -
    -

    -
    -

    Automatic Configuration of -NotifyTextProd

    -NotifyTextProd is a AWIPS D2D process that routes certain text -bulletins to the VTECDecoder. The pattern file is automatically created when GFE -is loaded in EDEX and is customized to the configured site. This -reduces the amount of traffic being sent to the VTECDecoder by 90%.
    -
    -Due to the staging of the GFESuite and AWIPS softwares, a configuration -item is required to tell GFE to begin generating the custom -pattern file. This is done through a simple localConfig.py -addition:
    -
    -serverConfig.AUTO_CONFIGURE_NOTIFYTEXTPROD -= 1
    -
    -
    -

    Intersite -Coordination Grids Configuration -

    -The Intersite Coordination Grids configuration can be overridden in the -localConfig.py file. 
    -

    ISC Routing Table Address

    -The base url for the ISC Routing Table web server may be changed from -the default.  This is normally only done for isolated -testing.  The baseline value of this entry is sufficient.  -The value of None indicates no ISC Routing Web Service, which precludes -the transmission and reception of ISC data. To modify the default -value, use this syntax:
    -
    -serverConfig.ISC_ROUTING_TABLE_ADDRESS -= "http://exampleurl.nws.noaa.gov"
    -

    Requested ISC Sites

    -The default is to have EDEX calculate the list of sites to -request ISC data from based on the generated ISC_xxx edit -areas.   This is accomplished by setting the value to None. -If you wish to override this value, then use this syntax:
    -
    -serverConfig.REQUESTED_ISC_SITES -= ["CLE", "PBZ", "CTP", "BUF"]
    -
    -Be sure to always include your own site; if you don't you won't see -your own ISC data in the ISC database.
    -
    -

    Request ISC

    -Setting the value to 0 disables the request of ISC data and -EDEX will not register with the ISC Routing Table Web -Server. To enable the reception of ISC data, you use this -syntax in the localConfig.py file:
    -
    -serverConfig.REQUEST_ISC = 1
    -
    -

    Send ISC On Save

    -Setting the value to 0 disables sending of ISC data when data is saved -to the Fcst database.  Setting the value to 1 will send ISC data -when data is stored to the Fcst database.
    -
    -serverConfig.SEND_ISC_ON_SAVE = 1
    -
    -

    Send ISC On Publish

    -Setting the value to 0 disables sending of ISC data when data is -published -to the Fcst database.  Setting the value to 1 will send ISC data -when -data is stored to the publish database.
    -
    -serverConfig.SEND_ISC_ON_PUBLISH -= 1
    -
    -

    Requested ISC Parms

    -The default is to have EDEX calculate the list of weather -elements to be requested from the list of available weather elements in -the Fcst database. This is denoted by setting the variable to None. -  The site can override this and specify a list of weather -elements desired from ISC as a list. If you wish to override -this value, then use this syntax:
    -
    -serverConfig.REQUESTED_ISC_PARMS -= ["T_SFC", "Td_SFC", "Wx", "Wind"]
    -
    -You can just specify the weather element name (e.g., T), or the weather -element name and the level (e.g., T_SFC, T_MB700).
    -
    -

    Transmit Script

    -The transmit script is used to move the data from the server machine to -the destination.  For AWIPS, this is the msg_send -program.   For testing or other purposes, you can override -the entry and specify your own program.   The program you -specify should expect the following switches:
    -
      -
    • -s - subject line, normally ISCGRIDS
    • -
    • -a - address list, generates comma separated addressee list, such -as "CLE,PBZ,BUF"
      -
    • -
    • -i - id string, normally similar to TTAA0 KXXX 021232
    • -
    • -c - AWIPS MHS code, normally 11
    • -
    • -p - priority mode, 0 is lowest, 2 is highest
    • -
    • -e - enclosure list, such as "f1, f2, f3", containing the ISC -data compressed, and the ISC destination routing information
    • -
    -Use this syntax to specify a different program:
    -
    -serverConfig.TRANSMIT_SCRIPT = -"/awips/bin/msg_send"
    -
    -
    -

    Extra ISC Weather Elements
    -

    -The Extra ISC Weather Elements allows you to configure your ISC -database to store weather elements received from a different office -type, such as receiving rfc grids at a wfo.  You never need to add -an entry for your own "office type", just others.  Use this syntax -to specify the set of weather elements and office types:
    -
    -To completely replace the serverConfig definition:
    -
    -serverConfig.EXTRA_ISC_PARMS = -[([T,Wind], 'rfc')]
    -
    -
    To augment the serverConfig definition:
    -
    -extraISCparms = [([RH, QPF], 'rfc')]
    -
    -

    -
    - -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/localMapsConfig.html b/cave/com.raytheon.viz.gfe/help/localMapsConfig.html deleted file mode 100644 index 2856dafd2b..0000000000 --- a/cave/com.raytheon.viz.gfe/help/localMapsConfig.html +++ /dev/null @@ -1,222 +0,0 @@ - - - - - - - Map Background Configuration - - -

    -localMaps.py - Map Background Configuration Override -File

    -
    September 25, 2012
    -
    -

    Organization

    -Overview -
    -localMaps.py Format -
    -    Header -
    -    Adding new edit areas -
    -    Removing edit areas defined in -Maps.py -
    -    Modifying the characteristics -of existing edit areas -
    -Placement of the localMaps.py file -
    -Updating Map Shapefiles -
    -
    -

    Overview

    -The localMaps.py file provides a mechanism for a site to override entries -in the supplied Maps.py file. New edit areas -may be added, edit areas may be removed from the list, and existing edit area -attributes may be changed. -Refer to the Maps.py -for the definition of the edit area attributes and how they are used. -This document will explain how to add, remove, and modify edit areas. -

    See the server -configuration overview for information on how to make changes that -are supported to the map backgrounds. -

    -

    -
    -

    localMaps.py Format

    -Example localMaps.py configuration file -

    Header

    -The localMaps.py file must begin with the following line. This line -instructs the software to import all symbols from the primary Maps.py. -Failure to include this line will result in your modifications not being -recognized by the software: -

    from Maps import * -
    -  -

    -

    Adding New Edit Areas

    -New edit areas can be added through localMaps.py. Refer to -the syntax requirements of defining a map in the Maps.py -document. There is one additional line that is very important to -add (i.e., the append line) in order for the system to recognize the -new -edit areas. It is also important NOT to duplicate the Python variable -name -(i.e., the name left of the equals ("=") sign) of any Python variable -in -the Maps.py file. For example, if a -map is defined as "CWAzones = ..." in Maps.py, -do not create a variable that says "CWAzones = ..." in the localMaps.py -file. Note that this restriction is for adding new edit areas. If you -are overriding the characteristics of edit areas that are already -defined in Maps.py, then you will need to use the same Python variable -name. -

    Here is an example of including a set of automatic edit areas for counties in Wyoming in group -WYCounties): -

    -
    -WYcounties = ShapeTable('County')
    -WYcounties.name = 'WYCounties'
    -WYcounties.filter(lambda x : x['state'] == "WY") 
    -WYcounties.editAreaName = ['state','countyname'] 
    -WYcounties.groupName = 'WYCounties' 
    -maps.append(WYcounties)
    -
    -

    In the above example, edit areas will be generated for -all counties where attribute STATE equals "WY". The generated edit areas will have names of the form -STATE_COUNTYNAME -and will be part of the WYCounties edit area group. The very last -line appends this new definition to the list of edit areas to be -generated. -

    -

    Note that if your new map background is using a new shapefile, you -will also need to import the shape file into the maps database. -Refer to section Map Files - Map Background Shapefile Handling -

    -

    Example localMaps.py configuration -file -

    -

    Removing edit areas defined in Maps.py

    -Removing a map that is defined in Maps.py, -but not desired is easy. Find the Python variable name of the map -you wish to remove by examining Maps.py.  -The python variable name is the name to the left of the "equals" ('=') -sign. -

    For example, if you did not want to generate the marine -zones, -find the marine zones definition in Maps.py.  -There are actually two maps generated. The identifiers are CWAmzones -and -Mzones. The following text would be included within localMaps.py: -

    -

    maps.remove(CWAmzones) -
    -maps.remove(Mzones) -

    -

    Example localMaps.py -configuration -file -

    -

    Modifying the characteristics of -existing edit areas

    -You can modify the following characteristics of the map definition: -
      -
    • name of the database table (ShapeTable parameter)
    • -
    • name of the map background (.name line)
    • -
    • filtering (.filter line)
    • -
    • generation of edit areas (.editAreaName line)
    • -
    • group name of generated edit areas (.groupName)
    • -
    -

    -Database Table Name

    -

    If you want to change the name of the database table used for edit area generation, you will -need to remove the existing definition and create a completely new map definition.
    -

    -

    Name of the Map Background

    -The format of the line is identical to that found in Maps.py.  -Simply repeat the line you want to change and then put the new map name. -For example, if you want to change the CWAzones map name to MyCWAZones, -you would add the following line to localMaps.py: -
    -CWAzones.name = "MyCWAZones"
    -
    -Note: this name is only used in text formatter definitions in the mapNameForCombinations setting. -

    Filter Changes

    -The format of the line is identical to that found in Maps.py.  -Simply repeat the line you want to change and then put in the new filter string.  -For example, if you want to change the CWAzones filter from all zones for -the CWA to all zones for the state of Ohio, you would add the following -line to localMaps.py: -

    CWAzones.filter(lambda x : x['state'] == "OH") -

    -

    You can also use any of the alternate methods of specifying the filter -as described in Maps.py. This -shows much more complex types of filters than this file. -

    -

    If you want to turn filtering off completely for a map, you will need -to remove the existing definition and create a completely new map definition.
    -

    -

    Attribute names in the database are all stored in lower case.  -
    -

    -

    Generation of Edit Area Changes

    -
    -Name Changes
    -

    -The format of the line is identical to that found in Maps.py. -Simply repeat the line you want to change and then put in the new editAreaName definition. -For example if you want the edit areas to be named using the contents of the 'cwa' attribute -of the database record you would add the following line ot localMaps.py: -

    -CWAzones.editAreaName = 'cwa'
    -
    -

    -

    -For detailed examples of editAreaName configuration refer to Maps.py. -

    -

    -Note: if the generated edit area names are not unique undesirable results may occur. -

    -
    -Group Name for the Edit Areas
    -

    -To have the generated edit areas included in an edit area group simply supply the group name as a string.
    -

    CWAzones.groupName = 'MyZones'
    -

    -

    -If you don't want the edit areas to be included in a group supply an empty string: -

    CWAzones.groupName = ''
    -

    -

    Example localMaps.py configuration -file -
    -

    -
    -

    Placement of the localMaps.py file

    -The localMaps.py file should always be placed in the /awips2/edex/data/utility/edex_static/site/OAX/config/gfe/ -directory on dx3/dx4 -as explained here. -

    -

    -
    -

    Updating Map Shapefiles

    -Map shape file updates must be imported into the maps database using the importShapeFile.sh script on dx1. -Refer to section Map Files - Map Background Shapefile Handling
    -  -

    -

    -  -
    -  - - - diff --git a/cave/com.raytheon.viz.gfe/help/localVTECPartners.html b/cave/com.raytheon.viz.gfe/help/localVTECPartners.html deleted file mode 100644 index d6397490eb..0000000000 --- a/cave/com.raytheon.viz.gfe/help/localVTECPartners.html +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - localVTECPartners.py - - -

    localVTECPartners.py

    -
    December 30, 2011
    -
    -
    -

    Organization

    -Overview -
    -Format
    -Modification Technique
    -
    -
    -

    Overview

    -The localVTECPartners.py file is the site-level override for the VTEC -active table coordination.  This file overrides one or multiple -entries in the VTECPartners.py file.
    -
      -
    -
    -
    -

    Format
    -

    -The localVTECPartners file starts with the two import statements:
    -
    -import -VTECPartners
    -from -VTECPartners import *
    -
    -Modifications to individual entries are made by repeating the variable -name and providing a new definition.  For example, to -change the VTEC_MERGE_SITES, the user would add a line similar to the -following:
    -
    -VTEC_MERGE_SITES -= ['BOU', 'PUB', 'GJT']
    -
    -
    -
    -
    -

    Modification Technique

    -The modification technique requires the user to create a -localVTECPartners.py file in the CAVE Localization perspective by expanding -GFE Server->VTEC Partners, right clicking on VTECPartners.py and selecting Override... -just those elements required.  The localVTECPartners.py file must -have the two import statements in the file.  -For example, to override the coordination interval, called -VTEC_REMOTE_TABLE_FETCH_TIME, to one hour, the localVTECPartners.py -file would contain:
    -
    -import -VTECPartners
    -from -VTECPartners import *
    -VTEC_REMOTE_TABLE_FETCH_TIME -= 3600  #in seconds
    -
    - -

    - - - diff --git a/cave/com.raytheon.viz.gfe/help/localWxConfig.html b/cave/com.raytheon.viz.gfe/help/localWxConfig.html deleted file mode 100644 index 0e01225ffd..0000000000 --- a/cave/com.raytheon.viz.gfe/help/localWxConfig.html +++ /dev/null @@ -1,440 +0,0 @@ - - - - - - localWxConfig.py - - -
    -

    localWxConfig.py - Local Server Database Configuration (Weather -Definition)

    -December 30, 2011
    -
    - -
    -Table of Contents -

    Overview -
    -Adding Your Own -localWxConfig.py -File -
    -Testing Your localWxConfig.py File -
    -What -can you control from your custom localWxConfig.py file? -
    -Changing Visibilities -
    -Changing Coverages and Probabilities -
    -Changing Intensities -
    -Changing Optional Attributes -
    -Changing Weather Type Definition -
    -  -

    -

    -
    -

    Overview

    -
    The localWxConfig.py file is one of several -configuration -files for GFE. The localWxConfig -file is optional, and is not provided with the install or -release. -It is added by the field site to override certain features of the GFE -database configuration that are defined in the serverConfig.py -file. You should NEVER change the -original -serverConfig.py since your changes will be overwritten with the next -upgrade. -See the server -configuration overview for information on how to make changes that -are supported to the server. -

    The localWxConfig.py file can be used to override the weather -definitions -in serverConfig.py. This document -will describe what you can, and what you cannot override. If you -need to override an element that is not supported by localConfig.py -or localWxConfig.py, then refer to the server -configuration overview for details. -

    -

    Note: Changing weather definitions can -cause problems when sending these grids to other sites via Intersite -Coordination. -If another site receives grids that do not contain valid Weather -Definitions -at that site, the grid will be rejected. -

    -
    -

    Adding Your Own -localWxConfig.py -File

    -If you want to make changes to the server database weather definitions, -then you will want to add your own localWxConfig.py file. Refer -to the server -configuration -overview file location section for details on where the -localWxConfig.py -file should be located. -

    The first lines of the localWxConfig.py must have the -following -format. Failure to do so will not let you refer to any of the -definitions -in serverConfig.py: -

    -

    from serverConfig import * -
    -import serverConfig -

    -

    The syntax appearing in localWxConfig.py varies depending whether -you -are adding new definitions, or changing existing definitions. -Typically -when changing existing definitions you will need to prefix the -serverConfig -to the name of the variable. For example, -

    -

    var = (a,b,c,d) refers to a local copy of this definition -and -doesn't override the definition in serverConfig.py -

    -

    serverConfig.var = (a,b,c,d) refers to the variable in the -serverConfig and overrides it. -

    -

    The localWxConfig.py file is created through your favorite text -editor. -

    -

    Example localWxConfig.py file -

    -

    Note that the format of localWxConfig is difficult, due to the -fact -that the weather definition in serverConfig.py is a composite of many -different -objects.  This makes it more difficult to override or redefine -fields. -
    -

    -
    -

    Testing Your Own localWxConfig.py File

    -The recommended way to test your localWxConfig.py file is to start EDEX -while running a tail command on the /awips2/edex/logs/edex-request-date.log. -If no exceptions result from the changes, you should be fine to proceed into GFE for -further testing. -

    -
    -

    What -can -you control from your custom localWxConfig.py file?

    -The following table describes what can be done using a custom -localWxConfig.py -file. If the override capability is marked as "NO" and you still -need the modification, you will need to review methods -of modifying database configurations for alternative choices. -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ItemlocalWxConfig.py overrideLink to serverConfig info
    VisibilitiesYESPossible -Visibilities
    Coverages and ProbabilitiesYESPossible -Coverages and Probabilities
    Possible IntensitiesYESPossible -Intensities
    Optional AttributesYESOptional -Attributes
    Weather Type DefinitionYESWeather -Type Definitions
    -

    -

    -
    -

    Changing Visibilities

    -Visibilities are very easy to change.  Basically you redefine the -set of visibilities and prefix the entry with serverConfig.  For -example, -the following line changes the set of possible visibilities to values -without -the default "SM": -

    serverConfig.visibilities = ['<NoVis>', '0', '1/4', '1/2', -'3/4', -'1', '11/2', -
    -                -'2', '21/2', '3', '4', '5', '6', 'P6'] -

    -

    -
    -

    Changing Coverages and Probabilities

    -If you are adding a new coverage or probability, the syntax is straight -forward.  In order to use the new coverage or probability, you -will -need to also provide a new weather type definition.  Here is an -example -of adding a new coverage called "Sparse": -

    SPARSE = ('Sparse', 'Sparse') -

    -

    Note there is not a serverConfig. in front of the command.  -That -is because you are not overridding an existing definition. -

    -

    If you want to change an existing definition, the syntax is -basically -the same as above.  You will not need to put serverConfig. in -front -of it, but you will need to redefine all of the weather types -completely.  -Here is an example of modifying isolated coverage to use a different -symbol: -

    -

    ISOD = ('Isod', 'Isolated') -

    -

    This statement by itself will not do anything.  You will need -to -use the new definition later on in the file. -

    -

    In serverConfig.py, there are convenient groupings, such as COV, -that -group several coverages and probabilities together.  If you want -to -change the definition of those, or you want to change the definition of -a coverage or probability inside of those, then you have to completely -redefine the individual coverage (as shown above) and redefine the -grouping.  -In this case, we want to redefine the COV to contain SPARSE and our new -definition of ISOD. -

    -

    COV = [ISOD, SCT, NUM, WIDE, SPARSE] -

    -

    Note that ISOD is referring to the localWxConfig's definition of -ISOD, -and not the server config's definition.  Also note that COV is a -modified -local copy of the server's COV definition.  To use these -definitions, -you will have to refer to them later in the file. -
    -

    -
    -

    Changing Intensities

    -If you are adding a new intensity, the syntax is straight -forward.  -In order to use the new intensity, you will need to also provide a new -weather type definition.  Here is an example of adding a new -intensity -called "Super Heavy": -

    SUPERHEAVY = ('+++', "Super Heavy") -

    -

    Note there is not a serverConfig. in front of the command.  -That -is because you are not overridding an existing definition. -

    -

    If you want to change an existing definition, the syntax is -basically -the same as above.  You will not need to put serverConfig. in -front -of it, but you will need to redefine all of the weather types -completely.  -Here is an example of modifying isolated coverage to use a different -symbol: -

    -

    INTEN_MOD = ('mod', 'Moderate') -

    -

    This statement by itself will not do anything.  You will need -to -use the new definition later on in the file. -

    -

    In serverConfig.py, there are convenient groupings, such as -PCPINTEN, -that group several intensities together.  If you want to change -the -definition of those, or you want to change the definition of a -intensity -inside of those, then you have to completely redefine the individual -intensity -(as shown above) and redefine the grouping.  In this case, we want -to redefine the PCPINTEN to contain SUPERHEAVY and our new definition -of -INTEN_MOD. -

    -

    PCPINTEN = [INTEN_VERYLIGHT, INTEN_LIGHT, INTEN_MOD, -INTEN_HEAVY, -SUPERHEAVY] -

    -

    Note that INTEN_MOD is referring to the localWxConfig's definition -of -INTEN_MOD, and not the server config's definition, since serverConfig. -was not placed in front of it.  Also note that PCPINTEN is a -modified -local copy of the server's PCPINTEN definition.  To use these -definitions, -you will have to refer to them later in the file. -
    -

    -
    -

    Changing Optional Attributes

    -If you are adding a new optional attribute, the syntax is straight -forward.  -In order to use the new attribute, you will need to also provide a new -weather type definition.  Here is an example of adding a new -intensity -called "Lousy": -

    LOUSY = ('Lsy', 'Lousy') -

    -

    Note there is not a serverConfig. in front of the command.  -That -is because you are not overridding an existing definition. -

    -

    If you want to change an existing definition, the syntax is -basically -the same as above.  You will not need to put serverConfig. in -front -of it, but you will need to redefine all of the weather types -completely.  -Here is an example of modifying Frequent Lightning to use a different -symbol: -

    -

    FQTLTG = ('FqLt', 'Frequent Lightning') -

    -

    This statement by itself will not do anything.  You will need -to -use the new definition later on in the file. -

    -

    -
    -

    Changing Weather Type Definition

    -This is the section where all of the type definitions come -together.  -Based on what you enter in this section, you can remove, change, or add -new weather type definitions.  You will have to completely define -all of the weather types you need for the GFE in this section.  Do -not try to simply append or remove entries from the existing list. -

    The format of the entries are: -
    -TypeSymbol = ('Symbol', 'Description', [coverages], [intensities], -[optional attributes]) -

    -

    Remember to refer to symbols without serverConfig. in front of it to -refer to the modified or added values in your localWxConfig file.  -You can also refer to unchanged symbols from serverConfig in the same -manner.  -Normally you should not need to place serverConfig. in front of any -entry.  -The rule is if you are redefining a coverage/probability, intensity, -optional -attribute, or grouping of these, then you will use that symbol name in -the weather type definition. -

    -

    The next step is to define each weather type.  For example, we -want to keep the <NoWx> definition. Since we have not made any -modifications -to the possible coverages, intensities, attributes from what was in -serverConfig.py, -we can simply refer to it with NOWX.  We also want to allow just -RAIN -and SNOW.  These will need to be redefined to use our FQTLTG, -LOUSY, -PCPINTEN, and modified COV values.  Here are the entries: -

    -

    RAIN = ('R', 'Rain', COV, PCPINTEN, [FQTLTG]) -
    -SNOW = ('S', 'Snow', [WIDE, SPARSE], [INTEN_LIGHT, INTEN_HEAVY], -[LOUSY, OVRPASS]) -

    -

    Then tie it all together with the types command. Note -that the "types =" must be exactly that in order for serverConfig.py to -pick up your definitions: -

    -

    types = [NOWX, RAIN, SNOW] -

    -

    The result of the statements identified in this file is shown in the -following table: -
    -  - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Weather TypeCoveragesIntentitiesAttributes
    No Weather<NoCov><NoInten>none
    RainModified definition of Isolated with 'Isod', existing -serverConfig -definition of WSCT, SCT, NUM, WIDE, and new definition of SPARSE.Existing serverConfig definition of INTEN_VERYLIGHT, -INTEN_LIGHT, modified -definition of moderate ('mod'), serverConfig definition of INTEN_HEAVY, -and new definition of SUPERHEAVY.Modified attribute of FQTLTG.
    SnowExisting serverConfig definition of WIDE, new definition of -SPARSE.Existing serverConfig definition of INTEN_LIGHT and -INTEN_HEAVY.New definiton of LOUSY, existing serverConfig definition of -OVRPASS.
    -

    -

    In addition, the set of visibilities will be changed to: -['<NoVis>', -'0', '1/4', '1/2', '3/4', '1', '11/2', '2', '21/2', '3', '4', '5', '6', -'P6'] -

    -

    -
    -
    - -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/logFiles.html b/cave/com.raytheon.viz.gfe/help/logFiles.html deleted file mode 100644 index f325a1aaad..0000000000 --- a/cave/com.raytheon.viz.gfe/help/logFiles.html +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - LogFile Information - - -

    -logFile Information

    -March 27, 2012
    -
    -Table of Contents -
    -
    -Location of LogFiles -
    -Logging Preferences -
    -
    -

    Location of LogFiles

    -In AWIPS2 logfiles are stored in a number of locations for different operations. -EDEX logs are stored in /awips2/edex/logs on dx3/dx4; GFE utilities logs are in -/awips2/GFESuite/logs/SITE_ID on dx3/dx4; text formatter logs are in -~/caveData/etc/user/USER_ID/gfe/logs; CAVE logs are in ~/caveData/logs; AlertViz -logs are in ~/caveData/textLogs. All caveData logs are on the local workstation -where GFE is run. -

    EDEX logs can be configured by modifying the log4j files under /awips2/edex/conf. See -Software -System Design Description (SSDD) for implementation details.

    -
    -

    Logging Preferences

    -Logging preferences for EDEX can be changed by modifying the log4j.xml and log4j-ingest.xml -files for the setting "level value". Acceptable settings are TRACE, DEBUG, INFO, WARN, ERROR, -and FATAL. TRACE is lowest level and FATAL is highest level. A logger set to log at a -certain level will log that level and all higher levels. Example: logger set to WARN level -will log all WARN, ERROR, and FATAL messages, but not TRACE, DEBUG, or INFO levels. -EDEX must be restarted after any changes to the logging configuration. - - diff --git a/cave/com.raytheon.viz.gfe/help/mapConfig.html b/cave/com.raytheon.viz.gfe/help/mapConfig.html deleted file mode 100644 index 6ba816534f..0000000000 --- a/cave/com.raytheon.viz.gfe/help/mapConfig.html +++ /dev/null @@ -1,449 +0,0 @@ - - - - - - - Map Background Configuration - - -

    Maps.py - Map Background -Configuration

    -
    September 25, 2012
    -
    -

    Organization

    -Maps.py Format
    -   Site Information
    -   Map Definitions
    -   Putting it all togetherwith the maps list
    -   Importing localMaps
    -
    -

    Overview

    -The Maps.py file defines how edit areas are generated for each map. -When activated, the server processes the list of maps defined in the Maps.py file -and generates edit areas. -

    The edit area generation software uses the maps database tables as input. -These tables are populated by importing shape files provided by the National Weather Service. -These tables are filtered by domain (based on the site) and attributes. -There are different attributes available for each table. -Refer to the AWIPS Map Background Database provided by the National Weather Service -for details on the available shapefiles and the attributes contained within each -shapefile. -This information will be needed in order to tailor edit area generation for your site. -

    -

    The user can select which polygons will be converted into edit areas and -to which edit area groups they will be assigned. -

    -

    This information is provided for you to -help -you understand the format of Maps.py. You should NEVER change the -original Maps.py since your changes will be overwritten with the next -upgrade. -See the -server configuration overview -for information on how to make changes that are supported to the map backgrounds. -

    -

    To override definitions in Maps.py, use the localMaps.py -technique. -

    -

    To update the maps database, refer to the MapFiles -documentation, specifically the section on Updating -Shapefiles. -

    -

    -Software releases after Jan 1, 2006 separate the map shapefile from the -CORE GFE.   In some applications, such as AWIPS, the map -shapefile configuration becomes the responsibility of the site since -the map shapefiles will no longer be shipped with the GFE -software. A separate install is available for non-AWIPS -purposes and is posted with the software releases. If the -associated Map Shapefile is not installed at your site, then -sites will be responsible for:
    -

      -
    • Downloading updated shapefiles from the NOAA1 web server
    • -
    • Importing the downloaded shapefiles into the maps database
    • -
    • Creating/modifying the localMaps.py file to reference the appropriate database tables
    • -
    -

    -
    -

    Maps.py Format

    -

    -Site Information

    -Maps.py imports the siteConfig file which -provides the site identifier and the site's -specific grid domain. -
    -CWA = siteConfig.GFESUITE_SITEID
    -
    -

    Map Definitions

    -The map definition section defines each map for which edit area generation is desired. -Only a small portion of the Maps.py is shown here. Numerous examples with differing -capabilities are shown. -

    Basic Map with Automatically Generated Edit Areas

    -This definition is for a basic map, with no filtering of attributes and automatic creation -of edit areas. The edit areas will be included in the 'Misc' edit area group by default since -no edit area group is specified. -The ShapeTable object is created in the first line. The name of the maps database table -is passed as a parameter to the ShapeTable constructor. - -
    -CWAzones = ShapeTable('zone')
    -CWAzones.name = CWA + '_zones'
    -CWAzones.editAreaName = ['state','zone']
    -
    -The ifpServer can automatically generate edit areas based on the -information in the shapefiles. The user specifies the "editAreaName" in -the Maps.py or localMaps.py files, and the ifpServer uses that -information to determine the name of each edit area.   There -are three forms to the editAreaName line as shown:
    -
    - - - - - - - - - - - - - - - -
    mapVariable.editAreaName = -"string"
    -
    Single String Format
    -
    mapVariable.editAreaName = -["string1", "string2", "string3"]
    -
    List of Strings Format
    -
    mapVariable.editAreaName = -functionName
    -
    Function Format
    -
    -
    -
    Single String Format
    -In the example below, the name of each generated edit area is obtained -from the attribute zone specified in the field editAreaName. The program looks -up the value for the attribute zone in the database record for each polygon -and creates an edit area with that name. The example below uses the simple -format for the editAreaName, in which only one attribute is specified. -
    -CWAzones = ShapeTable('zone')
    -CWAzones.name = CWA + '_zones'
    -CWAzones.editAreaName = 'zone'
    -
    -

    Examples of the names of the edit areas generated from the above -snippet -is shown in the following table: -
    -  - - - - - - - - - - - - - - - - - - - - - - - -
    zone value from shapefilestate (not used in this example)Name of Edit Area
    034COzone034
    041COzone041
    041NEzone041
    -

    -

    Note that if a site's domain covers more than one state, this simple form of generating -edit area names will not work. The "NE" example above illustrates -that the same edit area name was generated even though the zones were -from different states. Also note that the naming of the edit area includes -the name "zone" only because the value of the zone value begins with a -number. -

    -

    NOTE: -Changing the default set of edit area names as supplied in the baseline -may render your text formatters and VTEC inoperable. The text -formatters and VTEC assume standard UGC-named edit areas, such as -COZ023 and UTC013.
    -

    -
    List of Strings Format
    -

    A second, more complex form of the editAreaName involves using -a Python list. The naming of an edit area is determined by -using more than one attribute. This example uses the more complex -form for the editAreaName, in which two attributes are specified. -

    -
    -CWAzones = ShapeTable('zone')
    -CWAzones.name = CWA + '_zones'
    -CWAzones.editAreaName = ['state','zone']
    -
    -

    Examples of the names of the edit areas generated from the above -snippet -is shown in the following table: -
    -  - - - - - - - - - - - - - - - - - - - - - - - -
    zone value from shapefilestate (not used in this example)Name of Edit Area
    034COCO_034
    041COCO_041
    041NENE_041
    -

    -

    The edit area name is determined from the value of the state -attribute, -followed by an underscore character, and then the value of the zone -attribute. -

    -

    Here is the software algorithm for naming of edit areas: -

    -
      -
    • the value for each of the attributes is extracted from the -shapefiles. -All spaces and non-alphanumeric characters are removed from the -value.
      -Example: "Washington Meadows" would be changed to "WashingtonMeadows" -
    • -
    • if any of the values results in an empty string, then the edit area is not generated. -
    • -
    • the values are put together with an underscore separator for each of the attributes.
      -Example: Attribute state has a value of "CO", Attribute zone has a value of "034". -Result is CO_034. -
    • -
    • if the leading character of the result begins with a number, then the name -of the first attribute is prefixed to the string.
      -Example: If the preceding string was 034 and its attribute was zone, then the resulting -edit area name becomes zone034. -
    • -
    -The ordering of the list of attributes can change the naming as shown -in -the following table, which assumes zone=034, state=CO, wfo=BOU, -name=Summit County/Mosquito Range/Indian Peaks: -
    -  - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    editAreaName stringName of Edit Area
    'zone'zone034
    ['zone','state']zone034_CO
    ['state','zone']CO_034
    ['wfo','name']BOU_SummitCountyMosquitoRangeIndianPeaks
    ['zone','name','state']zone034_SummitCountyMosquitoRangeIndianPeaks_CO
    -

    Note that specification of an attribute that doesn't exist will simply -use the name in the string. For example, if you are creating edit -areas and you want them of the form ISC_xxx, where xxx is the value of the wfo -attribute. -The editAreaName string would be the following: -

    -ISCareas.editAreaName = ['ISC', 'wfo'] 
    -
    -

    -

    - -NOTE: Changing the default set of edit area names as supplied in the baseline may -render your text formatters and VTEC inoperable. The text formatters -and VTEC assume standard UGC-named edit areas, such as COZ023 and UTC013. - -

    -
    Function Format
    -
    -

    -Occasionally there is a need to calculate a special edit area name and -the single or list of strings methods are not sufficient. The -function format requires the user to name a function and then define a -function. The function has one argument, which receives a -dictionary of attribute names and their values. The return -value of the function is a string which becomes the edit area name. -

    -

    -For example, lets say that we want edit area names based on the county -FIPS code. The desired format is stateCfips, such as COC013, for -Colorado County #13. The county shapefile has a 'STATE' -attribute, such as "CO", and it has a 'FIPS' attribute, such as 08013 -for Colorado County #13.   Using the list of strings format, -['STATE', 'C', 'FIPS'], you would end up with CO_C_08013, when we -really want COC013. -

    -This is how the code would be implemented: -
    -def cwaEAN(atts):
    -    fips = atts['fips'][-3:]        #take the last three characters from the FIPS code
    -    s = atts['state'] + "C" + fips  #assemble the name
    -    return s                        #return the complete edit area name
    -    
    -CWAcounties = ShapeTable('county')
    -CWAcounties.name = CWA + '_counties'
    -CWAcounties.editAreaName = cwaEAN
    -
    -The "atts" dictionary looks simlilar to the following: -
    -{'countyname': 'Delta', 
    - 'cwa': 'MQT'
    - 'fe_area': 'sr', 
    - 'fips': '26041', 
    - 'lat': 45.82085, 
    - 'lon': -86.909679999999994, 
    - 'state': 'MI', 
    - 'time_zone': 'E',
    -}
    -
    -and the final string is: MIC041
    -

    Basic Map with Automatically Generated Edit Areas with group -definition

    -An example of a basic map with automatically generated edit areas with -group definition: -This is identical to the Basic Map with Automatically Generated Edit -Areas case except that the user has specified a group name. All of -the generated edit areas will be placed in the edit area group called -'Zones'. -
    -CWAzones = ShapeTable('zone')
    -CWAzones.name = CWA + '_zones'
    -CWAzones.editAreaName = 'zone'
    -CWAzones.groupName = 'Zones'
    -
    -

    Filtered Map with Automatically Generated Edit Areas

    -This definition is for a filtered map with no automatic creation of edit -areas. The filter line performs the filtering. The basic format -of this line is as follows: -
    -pythonMapName.filter(lambda x : x['ATTRIBUTENAME'] = AttributeValue)
    -
    -

    where ATTRIBUTENAME is one of the attributes -in the shapefile, and AttributeValue is the value that must match in -the -shapefile for this shape to be kept in the map. Attributes for the NWS -shapefiles can be obtained from the AWIPS Map Catalog AWIPS -Map Background Database. -

    -
    -CWAzones = ShapeTable('Zone')
    -CWAzones.name = CWA + '_zones'
    -CWAzones.filter(lambda x : x['cwa'] == CWA)
    -CWAzones.editAreaName = cwazones
    -
    -

    The "lambda" function is a shortcut method of writing a function, -the code snippet below performs the identical function: -

    -
    -def cwaZoneFilt(x):
    -    return x['cwa'] == CWA
    -
    -CWAzones = ShapeTable('zone')
    -CWAzones.name = CWA + '_zones'
    -CWAzones.filter(cwaZoneFilt)
    -CWAzones.editAreaName = cwazones
    -
    -

    Since this is all Python code, there is another technique you can -use to write a filter function which is complex. Here is an example -of writing a filter that selects certain counties (Summit, Sandusky, -Huron, and Medina) from the county database table for a particular state (Ohio) and -cwa (Cleveland): -

    -
    -def exampleFilt(x):
    -    myCounties = ['Summit', 'Sandusky', 'Huron', 'Medina']
    -    return x['countyname'] in myCounties and x['st'] == "OH" and x['cwa'] = 'CLE'
    -
    -OHcounties = ShapeTable('county')
    -OHcounties.name = 'ExampleOHCounties'
    -OHcounties.filter(exampleFilt)
    -OHcounties.editAreaName = 'countyname'
    -
    -

    Filtered Map with Automatically Generated Edit Areas with group -definition

    -This is identical to the Filtered Map with Automatically Generated Edit -Areas case except that the user has specified a group name. All -of the generated edit areas will be placed in the edit area group called 'Zones'. -
    -CWAzones = ShapeTable('zone')
    -CWAzones.name = CWA + '_zones'
    -CWAzones.filter(lambda x : x['cwa'] == CWA)
    -CWAzones.editAreaName = ['state','zone']
    -CWAzones.groupName = 'Zones'
    -
    -

    Putting it all -Together with the map list

    -In order for the system to recognize the list of defined maps, they -must be put all together in a list. The list MUST be called -maps. This example list, shows that there are three maps defined. The -entries within the list are the Python variable names (name to the left of the -equal sign on the ShapeTable line). -
    -maps = [ CWAcounties, Counties, CWAzones ]
    -
    -

    Importing localMaps

    -The final section of the Maps.py file is the software that checks for a -localMaps configuration and uses it if it exists. Do not change -this -section of the file. -
    -# import the local maps file
    -try:
    -    import localMaps
    -except:
    -    pass
    -
    -
    - - - diff --git a/cave/com.raytheon.viz.gfe/help/moveGFEData.html b/cave/com.raytheon.viz.gfe/help/moveGFEData.html deleted file mode 100644 index a377e6403b..0000000000 --- a/cave/com.raytheon.viz.gfe/help/moveGFEData.html +++ /dev/null @@ -1,172 +0,0 @@ - - - - - - moveGFEData User's Guide - - -

    -moveGFEData User's Guide

    -
    January 9, 2012
    -
    -

    -Table of Contents

    -

    -Overview

    -

    -Running the moveGFEData Program

    -

    -Example Output

    -
    -
    -

    -Overview

    -
    The moveGFEData program is a utility to move or -copy -configuration files from one user to another. It can be used with -either one server, to copy/move files from user to user, or two -servers, -to copy/move files from one user on one server to another user on a -second -server.
    -
    -
    -

    -Running the moveGFEData Program

    -
    The command line syntax is:
    -
    moveGFEData -h hostname -p portnumber -s -sourceUser --d destUser [-c] [-a host2 -b port2] -w sourceSiteID [-x destSiteID]
    -
    A sample command line is: -
    -moveGFEData -h dx3-oax -p 9581 -s auser -d buser -w xxx

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Option SyntaxOptional or MandatoryDescription
    -h hostnameMandatory (See Note)Specifies the host, upon which the source EDEX is -running. -If -a and -b are not specified, then this also specifies the host upon -which the destination EDEX is running.
    -p portMandatory (See Note)Specifies the port, upon which the source EDEX is -running. If --a and -b are not specified, then this also specifies the port upon -which -the destination EDEX is running.
    -s sourceUserMandatorySpecifies the source user from which files will be moved from.
    -d destUserMandatorySpecifies the destination user to which files will be moved -to.
    -cOptionalIf specified, copy data only, do not move it.  By -default, the -data is moved.
    -a host2OptionalSpecifies the host, upon which the destination EDEX is -running. -This switch is not necessary if you are copying/moving files between -users -on the same server.
    -b port2OptionalSpecifies the port, upon which the destination EDEX is -running. -This switch is not necessary if you are copying/moving files between -users -on the same server.
    -w sourceSiteIDMandatorySpecifies the source site ID.
    -x dextSiteIDOptionalSpecifies the destination site ID.
    -Note: The -h serverhost and -p port are -predefined -based on your installation configuration of GFESuite. The -h and --p -will be defined for the server host and port specified during -installation. -If you wish to connect to another server, then these switches will be -necessary. -
    -
    -


    -The program will list the various categories that are valid. -The user chooses a category and an inventory is shown of the data owned -by the "sourceUser". The user chooses the file to move and the -program -moves the file. Then the program displays the updated inventory. -
    -

    -

    Example Execution

    -
    The following shows an example execution of -copying -data from user "jdynina" to user "jdynina1". User input is shown in -italics -and bold. The program moves the ISC_Tool from mark to mark1. -

    camper > moveGFEData -s jdynina -d jdynina1 -w LWX -

    -

    19:14:18 moveGFEData.py INFO: MoveGFEData from [jdynina] to [jdynina1]
    -******************* MoveGFEData ******************
    -SourceUser: jdynina
    -DestinationUser: jdynina1
    -
    -Enter type of data. Choose one of the options:
    -0 - exit
    -1 - Color Tables
    -2 - Edit Areas (Reference Areas)
    -3 - Sample Sets
    -4 - Weather Element Groups
    -5 - Edit Area Groups
    -6 - GFE/ifpIMAGE Configurations
    -7 - Selection Time Ranges
    -8 - Smart Tools
    -9 - Procedures
    -10 - Utilities
    -11 - Text Utilities
    -12 - Text Formatters
    -13 - Zone Combiner Saved Combos and Colors
    -14 - Zone Combiner Combination Files
    -8
    -
    -***** Smart Tools *****
    -No files available to move
    -
    -

    - - diff --git a/cave/com.raytheon.viz.gfe/help/netCDFFormat.html b/cave/com.raytheon.viz.gfe/help/netCDFFormat.html deleted file mode 100644 index 63e1d087f3..0000000000 --- a/cave/com.raytheon.viz.gfe/help/netCDFFormat.html +++ /dev/null @@ -1,686 +0,0 @@ - - - - - - netCDF Format - - -

    -netCDF File Format

    -January 3, 2012 -
    -
    -
    -This document describes the format of the netCDF file that is: - -In AWIPS1 ifpServer read netCDF files for gridded data. In AWIPS2 this format -has been replaced with HDF5 format. -

    Organization of the Gridded -Data in the netCDF file -
    -netCDF Variable Names -
    -

    -
    -

    Organization of the -Gridded -Data in the netCDF file

    -
    To fully understand this -section -you should know something about how netCDF files are structured in -general.  -See the netCDF web site at:
    -
    http://www.unidata.ucar.edu/packages/netcdf/
    -
    Each of the supported data types -(SCALAR, -VECTOR, and WEATHER) are stored in a slightly different way.  All -of the data types are stored as a cube as
    -
    illustrated by the figure below:
    - -
    -  -

    For weather elements of type SCALAR, all of the data are stored in -this -simple cube form.  For VECTOR weather elements,  two cubes -are -used, one for the magnitude, one for direction and they are coordinated -so that the first magnitude grid corresponds to the first direction -grid, -and so on.  For WEATHER, one cube is used to store byte values -that map into another structure that holds strings that represent the -weather -values.  The following illustration shows how this WEATHER grid -and WEATHER KEY should be used to extract a weather value. -

    -

    -

    The grid on the left illustrates the values of the byte values for -the -weather grid.  The list on the left shows the actual weather -values -expressed -as a text string.  In order to determine what the weather value -is at any given point, you will need both the weather byte grid and the -"weather -key".  Simply read the byte value in the grid and lookup that -value in the key list. -

    -
    -

    netCDF Variable Names

    -Each netCDF variable name represents a weather element set of grids, -plus -additional information: -
    -  -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -
    FormatExampleData TypeDimensionsDescription
    parmName_levelSky_SFCScalar Grid Data(#grids, ysize, xsize)Variable that contains scalar grids as floats, shorts, or -bytes. Attributes -are associated with this variable.
    parmName_level_GridHistorySky_SFC_GridHistoryGrid Data History for scalar, vector, and weather(# grids, string size)Variable that contains the coded grid data history for the -grid.  -The associated grid is specified in the first dimension. The data -format -is characters. More detail on the formatting of the history string is -shown - here -.
    parmName_Mag_levelWind_Mag_SFCVector Grid Data, magnitude component(#grids, ysize, xsize)Variable that contains the magnitude component of the gridded -data -as floats, shorts, or bytes.  Attributes are associated with this -variable.
    parmName_Dir_levelWind_Dir_SFCVector Grid Data, direction component(#grids, ysize, xsize)Variable that contains the direction component of the gridded -data -as floats, shorts, or bytes.  Attributes are associated with this -variable.  The direction is the "from" direction of the wind and -is -in degrees from true north.
    parmName_levelWx_SFCWeather Grid Data(#grids, ysize, xsize)Variable that contains the weather grid as bytes. Attributes -are associated -with this variable. You need the weather keys to determine the meaning -of each number in the grid.
    parmName_SFC_wxKeysWx_SFC_wxKeysWeather Key Data(#grids, #keys, #size of each key)Variable that contains the weather key mapping for each Wx -grid.  -The #keys refers to the key mapping index in the grid data.
    -
    -

    Weather Element Attributes

    -
    Every Weather Element variable in the -netCDF file has a collection of attributes.  In the table below, -we -briefly describe each attribute and its meaning.  For more -information -about a particular attribute, click on the link.
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -
    Attribute NameAttribute Description
    validTimesA list of start and end times for which the grids are -valid. -These are ordered start1, end1, start2, end2, etc.  The time is in -seconds from Jan 1, 1970 at 0000z.
    descriptiveNameThe descriptive name of the weather element.
    gridsizeThe number of grid cells in each grid for this weather -element -(x, y)
    domainOriginThe lower left corner of the grid domain in AWIPS -coordinates
    domainExtentThe extent of the domain in AWIPS coordinates
    minMaxAllowedValuesThe minimum and maximum values allowed, respectively -for this -weather element
    gridTypeThe type of grid.  The types are: SCALAR, VECTOR, -WEATHER
    databaseIDDatabase identifier from which the grids were -extracted.
    siteIDThe site ID of the database from which the grids were -extracted.
    unitsThe units of the values for these grids.
    levelThe level of the data.  For forecast data this is -always -"SFC"
    timeConstraintsThree integers that represent the time constraints for -the data.  -See GFE documentation for more details.
    precisionData precision for the gridded data. 
    projection info (12 -items)All the infomation needed to reconstruct the -projection on which -this grid is defined.
    fillValueData fill value which indicates that portions of the grid is -not valid.
    dataMultiplierData multiplier for the values contained in the grid.  -If not -specified, defaults to 1.
    dataOffsetData offset for the values contained in the grid.  If -not specified, -defaults to 0.
    -
    -

    VaildTimes

    -The valid times listed for a weather element define the start time and -end time for each grid in terms of seconds since 01 Jan 1970.  -This -is a -standard format for representing time on UNIX systems.  The times -listed are organized in pairs.  The first pair applies to the -start -time and -end time of the first grid.  The second pair applies to the start -time and end time of the second grid, and so on.  There should be -exacty the -same number of validTime pairs. -

    Descriptive Name

    -The descriptive name field provides a more detailed description of the -parameter. -
    -

    GridSize

    -The size of the grid in terms of grid cells expressed as a pair of -numbers -(x, y) -

    DomainOrigin

    -The (x, y) coordinate origin or lower-left corner of the grid domain in -AWIPS coordinates.  The AWIPS coordinates are expressed in terms -of -the -current projection (usually the AWIPS 211 projection). -

    DomainExtent

    -The (x, y) coordinate of the extent of the office domin expressed in -the -same coordinate system as the origin.  This is always the offset -from -the -origin.  Adding this coordinate to the origin give the upper-right -coordinate. -

    MinMaxAllowedValues

    -The minimum and maximum value allowed for this weather element -expressed -as a pair of numbers (min, max). -

    GridType

    -The data type for the grids.  Possible values are SCALAR, VECTOR, -and WEATHER. -

    DatabaseID

    -The database identifier from which the grid originated. It has the -format -CCC_GRID__Fcst_YYYYMMDD_HHMM where, -CCC is the site identifier, YYYY is the year, MM is the number of the -month, DD is the day, HH is the hour and MM is the minute -

    SiteID

    -The three letter identifier of the site from which the data originated. -

    Units

    -The parameter units field indicates the units used by the data. -
    -

    Level

    -The level for this weather element (e.g., 500MB).  All surface -data -have the level SFC. -

    Precision

    -The number of significant decimal points for the data. A value of 0 -indicates -that integer values are all that is important (even if there is more -precision -indicated by the data). A value of 1 indicates that the precision is 10 --1 or 0.1. -

    Time Constraints

    -
    The time constraints consist of three -elements: starting time, duration, and repeat interval. These values -indicate -the time limits that the parameter must obey. All grids for the -parameter -must be aligned on the specified time constraints. The starting time -indicates -the time of the first possible grid after 0000z. The duration indicates -the length of the grid. The repeat interval defines how often the grid -can repeat. All of the units are in seconds. -For example, the illustration below -shows -the possible grid boundaries for a time constraint of starting time of -0, duration of 6 hours, and repeat interval of 6 hours:
    -
    -
    In the above example, grids can be a -minimum of 6 hours long, but could be 12 or 18 or even 24 hours in -length -just as long as the starting and ending time of the grid falls on one -of -the defined above. -A time constraint can be defined to have gaps in the data. For example, -a 24-hour summary of daytime maximum temperature may have a constraint -of starting time 900z, duration of 18 hours, and a repeat interval of -24 -hours: -

    -

    Most parameters are defined in the database with a one hour -constraint -(start time = 0000z, repeat = 1 hour, duration = 1h). Therefore the -highest -temporal resolution of the grids is one hour: -

    -

    -

    A special case exists which defines no -constraints. This is the situation with a start time, repeat, and -duration -values all set to 0. The temporal resolution of the grids can be one -second.

    -
    -
    -

    -

    Data Multiplier and Data Offset

    -The data multiplier and data offset fields are only present when the -k -krunch switch is provided to ifpnetCDF.  This forces the data to -be -represented in few bits, if possible.  The 32-bit floats may be -converted -to 16-bit or 8-bit integers.  If converted, the netCDF attributes -dataMultiplier and dataOffset will be available.  The formula to -convert -the netCDF data values into real values is: -
    -

    data value = (netCDF value * dataMultiplier) + dataOffset

    -
    -

    -Projection Info

    -A series of values that allows one to -precisely reconstruct the projection and thus remap the data to any -other -projection.  These 12 values comprise all of the value required -to reconstruct any valid AWIPS projection.  Note that some are not -used by all projection types. The attributes are latLonLL, latLonUR, -gridPointLL, -gridPointUR, projectionType, latLonOrigin, stdParallelOne, -stdParallelTwo, -lonOrigin, lonCenter. -
    -
    -The grid represented in the netCDF file is usually smaller than the -projection information indicates.   The projection -information, along with the Grid Size, Domain Origin, and Domain -Extent information is used to define the location of the sub-grid -on the Earth's surface.
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -
    AttributeUsed ByDescription
    latLonLLall projectionsspecifies the latitude and longitude in degrees of -the lower-left -grid point in the projection.  Note that it is defined as -x=longitude, -y=latitude so that the entry is (lon, lat).
    latLonURall projectionsspecifies the latitude and longitude in degrees of the -lower-left grid -point in the projection.  Note that it is defined as x=longitude, -y=latitude so that the entry is (lon, lat).
    gridPointLLall projectionsspecifies the grid numbering system and the grid point number -for the -lower-left point in the projection. This is usually (1, 1)
    gridPointURall projectionsspecifies the grid numbering system and the grid point number -for the -upper-right most point in the projection.  This is specified as -(x,y).  -The projection grid size is gridPointUR-gridPointLL+1.
    projectionTypeall projectionsProjection types can be LAMBERT_CONFORMAL, -POLAR_STEREOGRAPHIC, LATLON, -or MERCATOR.
    latLonOriginLAMBERT_CONFORMAL onlySpecified as (lon,lat).  The longitude is the location -where the -projection has north as straight up.  The latitude is typically -the -latitude intersect of the projection and earth which is the standard -parallel.
    stdParallelOneLAMBERT_CONFORMAL onlyLatitude intersect of projection and earth -- lower latitude.
    stdParallelTwoLAMBERT_CONFORMAL onlyLatitude intersect of projection and earth -- upper latitude.
    lonOriginPOLAR_STEREOGRAPHIC onlyCenter longitude for the polar stereographic projection, -where the -projection has north as straight up.
    lonCenterMERCATOR onlyCenter longitude for the mercator projection, where the -mercator projection -is parallel to the Earth's surface.
    -
    -

    Grid Data History Format

    -The format of each Grid Data History entry consists of one or more -strings -separated by a caret (^).  A grid can have more than one history -entry.  -If only one exists, then there will not be a caret in the string.  -Each string, a.k.a. history, consists of  7 or 8 tokens, separated -by a space.  The table below describes each of these tokens in the -order in which they appear: -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -
    Token NumberTokenDescriptionExample
    1Grid OriginNumber describing the origin of the grid. -0=populated from -a model, 1=time interpolated, 2=created from scratch, 3=calculated, 4= -other.0
    2Original Weather Element IdentifierString defining the original weather element -identifier -(ParmID) for this grid. This string is colon (:) and underscore (_) -separated -and always consists of  several segments in this format: -parmName_level:siteID_GRID_optionalType_modelName_modelDate_modelTimeT_SFC:BOU_GRID_D2D_NAM_20020209_1200
    3Original Grid Starting TimeOriginal starting valid time of the grid in -seconds since -January 1, 1970 at 0000z..1013472000
    4Original Grid Ending TimeOriginal ending valid time of the grid in -seconds since -January 1, 1970 at 0000z.1913475600
    5Modification TimeTime when the grid was last modified by an edit -operation, -in seconds since January 1, 1970 at 0000z.  If the grid has not -been -modified, this value is 0.1913475900
    6Modification UserUser that last modified the grid (WsId).  -If the grid -has not been modified (token #5 is zero), then token #6 is not present -in the string, i.e., it is skipped.  The format of this entry -is:  -networkAddress:username:processName:pid:optLock. This describes the IP -address where the grid was modified, the user account, the name of the -process, the process identifier (PID), and an optional lock value.2688174985:mark:gfe:19467:0
    7Update TimeTime when the grid was saved to GFE -(for local -grids), or time when the grid was created for Intersite Coordination -Grids -(ISC database).  In seconds since January 1, 1970 at 0000z.  -Note that grids from the published (Official) database reflect the time -the grid was first stored in the database, and not when it was -published. 1012791326
    8Publish TimeTime when the grid was published to the Official -database -in seconds since January 1, 1970 at 0000z.  If this grid was not -published, -then this value will be 0.0
    -

    -

    -
    -

    Global Attributes

    -The following table describes the global attributes contained in the -output -netCDF file: -
    -  -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -
     Attribute Name  Attribute Description
     creationTime  An integer which represents the number of seconds -since January -1, 1970 at 0000z when this file was created.
    creationTimeStringA human-readable version of the creationTime
    fileFormatVersionA string, in the form of yyyymmdd, which represents the file -format -version.
    startProcTimeThe value of the -s switch when this file is created, in the -form of -yyyymmdd.  This and the endProcTime cover the total valid time of -the netCDF file.  If the assumption is made that the netCDF file -contains -all grids over a particular time period, then the startProcTime and -endProcTime -cover that period. This is used to determine what times do NOT have -grids -available.
    endProcTimeThe value of the -e switch when this file is created, in the -form of -yyyymmdd.  This and the endProcTime cover the total valid time of -the netCDF file.  If the assumption is made that the netCDF file -contains -all grids over a particular time period, then the startProcTime and -endProcTime -cover that period. This is used to determine what times do NOT have -grids -available.
    - -For purposes of formatting a netCDF file to be compatible with the iscMosaic -program, the fileFormatVersion must be: 20010816 or 20030117. -
    -

    -
    - - - diff --git a/cave/com.raytheon.viz.gfe/help/numdoc.html b/cave/com.raytheon.viz.gfe/help/numdoc.html deleted file mode 100644 index 8f5853b7d9..0000000000 --- a/cave/com.raytheon.viz.gfe/help/numdoc.html +++ /dev/null @@ -1,11447 +0,0 @@ - - - - - - Online Numerical Python Documentation - - -
    -

    - 

    -
    -
    -

    -Numerical Python

    -

    -David Ascher
    -Paul F. Dubois
    -Konrad Hinsen
    -Jim Hugunin
    -Travis Oliphant

    -

    -March 30, 2001

    -

    -Lawrence Livermore National Laboratory, Livermore, CA 94566

    -

    -UCRL-MA-128569

    -
    -

    -Legal Notice

    -

    - 

    -

    -Please see file Legal.html in the source distribution.

    -

    -This open source project has been contributed to by many people, including personnel of the Lawrence Livermore National Laboratory. The following notice covers those contributions including this manual.

    -

    - 

    -

    -Copyright (c) 1999 The Regents of the University of California. All rights reserved.

    -

    -Permission to use, copy, modify, and distribute this software for any purpose without fee is hereby granted, provided that this entire notice is included in all copies of any software which is or includes a copy or modification of this software and in all copies of the supporting documentation for such software.

    -

    -This work was produced at the University of California, Lawrence Livermore National Laboratory under contract no. W-7405-ENG-48 between the U.S. Department of Energy and The Regents of the University of California for the operation of UC LLNL.

    -

    -This software was prepared as an account of work sponsored by an agency of the United States Government. Neither the United States Government nor the University of California nor any of their employees, makes any warranty, express or implied, or assumes any liability or responsibility for the accuracy, completeness, or usefulness of any information, apparatus, product, or process disclosed, or represents that its use would not infringe privately-owned rights. Reference herein to any specific commercial products, process, or service by trade name, trademark, manufacturer, or otherwise, does not necessarily constitute or imply its endorsement, recommendation, or favoring by the United States Government or the University of California. The views and opinions of authors expressed herein do not necessarily state or reflect those of the United States Government or the University of California, and shall not be used for advertising or product endorsement purposes.

    -

    - 

    -

    - 

    -
    -
    -

    -Table Of Contents

    -
    -

    -Numerical Python 1

    -

    -Introduction 2

    -

    -Where to get information and code 3

    -

    -Acknowledgments 4

    -

    -Installing NumPy 5

    -

    -Testing the Python installation 5

    -

    -Testing the Numeric Python Extension Installation 5

    -

    -Installing NumPy 5

    -

    -Installing on Windows 6

    -

    -Installing on Unix 6

    -

    -At the SourceForge... 6

    -

    -The NumTut package 7

    -

    -Testing the NumTut package 7

    -

    -Possible reasons for failure 7

    -

    -Win32 7

    -

    -Unix 8

    -

    -High-Level Overview 9

    -

    -Array Objects 9

    -

    -Universal Functions 10

    -

    -Convenience Functions 10

    -

    -Array Basics 12

    -

    -Basics 12

    -

    -Creating arrays from scratch 12

    -

    -array() and typecodes 12

    -

    -Multidimensional Arrays 14

    -

    -resize 16

    -

    -Creating arrays with values specified `on-the-fly' 17

    -

    -zeros() and ones() 17

    -

    -arrayrange() 17

    -

    -Creating an array from a function: fromfunction() 19

    -

    -identity() 20

    -

    -Coercion and Casting 20

    -

    -Automatic Coercions and Binary Operations 20

    -

    -Deliberate up-casting: The asarray function 21

    -

    -The typecode value table 21

    -

    -Consequences of silent upcasting 22

    -

    -Saving space 22

    -

    -Deliberate casts (potentially down): the astype method 22

    -

    -Operating on Arrays 23

    -

    -Simple operations 23

    -

    -In-place operations 24

    -

    -Getting and Setting array values 24

    -

    -Slicing Arrays 25

    -

    -Ufuncs 27

    -

    -What are Ufuncs? 27

    -

    -Ufuncs can operate on any Python sequence 28

    -

    -Ufuncs can take output arguments 28

    -

    -Ufuncs have special methods 28

    -

    -The reduce ufunc method 28

    -

    -The accumulate ufunc method 29

    -

    -The outer ufunc method 29

    -

    -The reduceat ufunc method 29

    -

    -Ufuncs always return new arrays 30

    -

    -Which are the Ufuncs? 30

    -

    -Unary Mathematical Ufuncs (take only one argument) 30

    -

    -Binary Mathematical Ufuncs 30

    -

    -Logical Ufuncs 30

    -

    -Ufunc shorthands 31

    -

    -Pseudo Indices 32

    -

    -Array Functions 34

    -

    -take(a, indices, axis=0) 34

    -

    -put (a, indices, values) 35

    -

    -putmask (a, mask, values) 36

    -

    -transpose(a, axes=None) 36

    -

    -repeat(a, repeats, axis=0) 36

    -

    -choose(a, (b0, ..., bn)) 36

    -

    -ravel(a) 37

    -

    -nonzero(a) 37

    -

    -where(condition, x, y) 37

    -

    -compress(condition, a, axis=0) 37

    -

    -diagonal(a, k=0) 37

    -

    -trace(a, k=0) 38

    -

    -searchsorted(a, values) 38

    -

    -sort(a, axis=-1) 38

    -

    -argsort(a, axis=-1) 39

    -

    -argmax(a, axis=-1), argmin(a, axis=-1) 39

    -

    -fromstring(string, typecode) 39

    -

    -dot(m1, m2) 40

    -

    -matrixmultiply(m1, m2) 40

    -

    -clip(m, m_min, m_max) 40

    -

    -indices(shape, typecode=None) 40

    -

    -swapaxes(a, axis1, axis2) 41

    -

    -concatenate((a0, a1, ... , an), axis=0) 41

    -

    -innerproduct(a, b) 42

    -

    -outerproduct(a,b) 42

    -

    -array_repr() 42

    -

    -array_str() 42

    -

    -resize(a, new_shape) 42

    -

    -diagonal(a, offset=0, axis1=-2, axis2=-1) 42

    -

    -repeat (a, counts, axis=0) 42

    -

    -convolve (a, v, mode=0) 43

    -

    -cross_correlate (a, v, mode=0) 43

    -

    -where (condition, x, y) 43

    -

    -identity(n) 43

    -

    -sum(a, index=0) 44

    -

    -cumsum(a, index=0) 44

    -

    -product(a, index=0) 44

    -

    -cumproduct(a, index=0) 44

    -

    -alltrue(a, index=0) 44

    -

    -sometrue(a, index=0) 44

    -

    -Array Methods 45

    -

    -itemsize() 45

    -

    -iscontiguous() 45

    -

    -typecode() 45

    -

    -byteswapped() 45

    -

    -tostring() 45

    -

    -tolist() 46

    -

    -Array Attributes 47

    -

    - -flat 47 -

    -

    - -real - and -imaginary 47 -

    -

    -Special Topics 49

    -

    -Subclassing 49

    -

    -Code Organization 49

    -

    -Numeric.py and friends 49

    -

    -UserArray.py 49

    -

    -Matrix.py 49

    -

    -Precision.py 49

    -

    -ArrayPrinter.py 49

    -

    -Mlab.py 49

    -

    -bartlett(M) 49

    -

    -blackman(M) 50

    -

    -corrcoef(x, y=None) 50

    -

    -cov(m,y=None) 50

    -

    -cumprod(m) 50

    -

    -cumsum(m) 50

    -

    -diag(v, k=0) 50

    -

    -diff(x, n=1) 50

    -

    -eig(m) 50

    -

    -eye(N, M=N, k=0, typecode=None) 50

    -

    -fliplr(m) 50

    -

    -flipud(m) 50

    -

    -hamming(M) 50

    -

    -hanning(M) 50

    -

    -kaiser(M, beta) 50

    -

    -max(m) 50

    -

    -mean(m) 50

    -

    -median(m) 50

    -

    -min(m) 51

    -

    -msort(m) 51

    -

    -prod(m) 51

    -

    -ptp(m) 51

    -

    -rand(d1, ..., dn) 51

    -

    -rot90(m,k=1) 51

    -

    -sinc(x) 51

    -

    -squeeze(a) 51

    -

    -std(m) 51

    -

    -sum(m) 51

    -

    -svd(m) 51

    -

    -trapz(y,x=None) 51

    -

    -tri(N, M=N, k=0, typecode=None) 51

    -

    -tril(m,k=0) 51

    -

    -triu(m,k=0) 51

    -

    -The multiarray object 52

    -

    -Typecodes 52

    -

    -Indexing in and out, slicing 53

    -

    -Ellipses 54

    -

    -NewAxis 54

    -

    -Set-indexing and Broadcasting 54

    -

    -Axis specifications 55

    -

    -Textual representations of arrays 55

    -

    -Comparisons 57

    -

    -Pickling and Unpickling -- storing arrays on disk 57

    -

    -Dealing with floating point exceptions 57

    -

    -Writing a C extension to NumPy 58

    -

    -Introduction 58

    -

    -Preparing an extension module for NumPy arrays 58

    -

    -Accessing NumPy arrays from C 58

    -

    -Types and Internal Structure 58

    -

    -Element data types 59

    -

    -Contiguous arrays 60

    -

    -Zero-dimensional arrays 60

    -

    -A simple example 60

    -

    -Accepting input data from any sequence type 61

    -

    -Creating NumPy arrays 62

    -

    -Returning arrays from C functions 62

    -

    -A less simple example 62

    -

    -C API Reference 64

    -

    -ArrayObject C Structure and API 64

    -

    -Structures 64

    -

    -The ArrayObject API 65

    -

    -Notes 68

    -

    -UfuncObject C Structure and API 68

    -

    -C Structure 68

    -

    -UfuncObject C API 70

    -

    -Glossary 73

    -
    -
    -

    -Optional Packages 75

    -

    -License and disclaimer for packages MA and RNG 76

    -

    -FFT Reference 77

    -

    -Python Interface 77

    -

    -fft(data, n=None, axis=-1) 77

    -

    -inverse_fft(data, n=None, axis=-1) 77

    -

    -real_fft(data, n=None, axis=-1) 77

    -

    -inverse_real_fft(data, n=None, axis=-1) 78

    -

    -fft2d(data, s=None, axes=(-2,-1)) 78

    -

    -real_fft2d(data, s=None, axes=(-2,-1)) 78

    -

    -C API 78

    -

    -Compilation Notes 79

    -

    -LinearAlgebra Reference 80

    -

    -Python Interface 80

    -

    -solve_linear_equations(a, b) 80

    -

    -inverse(a) 80

    -

    -eigenvalues(a) 80

    -

    -eigenvectors(a) 81

    -

    -singular_value_decomposition(a, full_matrices=0) 81

    -

    -generalized_inverse(a, rcond=1e-10) 81

    -

    -determinant(a) 81

    -

    -linear_least_squares(a, b, rcond=e-10) 81

    -

    -Compilation Notes 81

    -

    -RandomArray Reference 82

    -

    -Python Interface 82

    -

    -seed(x=0, y=0) 82

    -

    -get_seed() 82

    -

    -random(shape= -ReturnFloat -) 82

    -

    -uniform(minimum, maximum, shape=ReturnFloat) 82

    -

    -randint(minimum, maximum, shape=ReturnFloat) 82

    -

    -permutation(n) 82

    -

    -Floating point random arrays 83

    -

    -standard_normal (shape=ReturnFloat) 83

    -

    -normal (mean, stddev, shape=ReturnFloat) 83

    -

    -multivariate_normal (mean, covariance) or
    -multivariate_normal (mean, covariance, leadingAxesShape) 83

    -

    -exponential (mean, shape=ReturnFloat) 83

    -

    -beta (a, b, shape=ReturnFloat) 83

    -

    -gamma (a, r, shape=ReturnFloat) 84

    -

    -chi_square (df, shape=ReturnFloat) 84

    -

    -noncentral_chi_square (df, nonc, shape=ReturnFloat) 84

    -

    -F (dfn, dfd, shape=ReturnFloat) 84

    -

    -noncentral_F (dfn, dfd, nconc, shape=ReturnFloat) 84

    -

    -Integer random arrays 84

    -

    -binomial (trials, prob, shape=ReturnInt) 84

    -

    -negative_binomial (trials, prob, shape=ReturnInt) 84

    -

    -poisson (mean, shape=ReturnInt) 84

    -

    -multinomial (trials, probs) or multinomial (trials, probs, leadingAxesShape) 84

    -

    -Examples 85

    -

    -Independent Random Streams 87

    -

    -Background 87

    -

    -Usage 87

    -

    -Module RNG 87

    -

    -Generator objects 87

    -

    -Module ranf 88

    -

    -Examples 88

    -

    -Masked Arrays 89

    -

    -What is a masked array? 89

    -

    -Installing and using MA 89

    -

    -Class MaskedArray 89

    -

    -Attributes of masked arrays 90

    -

    -Methods on masked arrays. 91

    -

    -Constructing masked arrays 92

    -

    -What are masks? 94

    -

    -Working with masks 94

    -

    -Operations 94

    -

    -Copying or not? 95

    -

    -Behaviors 95

    -

    -Indexing and Slicing 95

    -

    -Indexing that produces a scalar result 95

    -

    -Assignment to elements and slices 95

    -

    -Module MA: Attributes 96

    -

    -Module MA: Functions 96

    -

    -Unary functions 96

    -

    -Binary functions 96

    -

    -Comparison operators 96

    -

    -Logical operators 96

    -

    -Special array operators 97

    -

    -Controlling the size of the string representations 98

    -

    -Helper classes 98

    -

    -MAError 98

    -

    -The constant masked 98

    -

    -Example of masked behavior 99

    -

    -Class masked_unary_function 99

    -

    -Class masked_binary_function 99

    -

    -ActiveAttributes 100

    -

    -Examples of Using MA 100

    -

    -Data with a given value representing missing data 100

    -

    -Filling in the missing data 101

    -

    -Numerical operations 101

    -

    -Seeing the mask 101

    -

    -Filling it your way 101

    -

    -Ignoring extreme values 101

    -

    -Averaging an entire multidimensional array 102

    -
    -
    -

    -Index 103

    -
    -
    -
    -

    -

    -
    -
    -Part I: Numerical Python
    -
    -

    -Numerical Python ("Numpy") adds a fast multidimensional array facility to Python. This part contains all you need to know about "Numpy" arrays and the functions that operate upon them.

    -
    -
    -

    -1. Introduction

    -

    -This chapter introduces the Numeric Python extension and outlines the rest of the document.

    -

    -The Numeric Python extensions (NumPy henceforth) is a set of extensions to the Python programming language which allows Python programmers to efficiently manipulate large sets of objects organized in grid-like fashion. These sets of objects are called arrays, and they can have any number of dimensions: one dimensional arrays are similar to standard Python sequences, two-dimensional arrays are similar to matrices from linear algebra. Note that one-dimensional arrays are also different from any other Python sequence, and that two-dimensional matrices are also different from the matrices of linear algebra, in ways which we will mention later in this text.

    -

    -Why are these extensions needed? The core reason is a very prosaic one, and that is that manipulating a set of a million numbers in Python with the standard data structures such as lists, tuples or classes is much too slow and uses too much space. Anything which we can do in NumPy we can do in standard Python - we just may not be alive to see the program finish. A more subtle reason for these extensions however is that the kinds of operations that programmers typically want to do on arrays, while sometimes very complex, can often be decomposed into a set of fairly standard operations. This decomposition has been developed similarly in many array languages. In some ways, NumPy is simply the application of this experience to the Python language - thus many of the operations described in NumPy work the way they do because experience has shown that way to be a good one, in a variety of contexts. The languages which were used to guide the development of NumPy include the infamous APL family of languages, Basis, MATLAB, FORTRAN, S and S+, and others. This heritage will be obvious to users of NumPy who already have experience with these other languages. This tutorial, however, does not assume any such background, and all that is expected of the reader is a reasonable working knowledge of the standard Python language.

    -

    -This document is the "official" documentation for NumPy. It is both a tutorial and the most authoritative source of information about NumPy with the exception of the source code. The tutorial material will walk you through a set of manipulations of simple, small, arrays of numbers, as well as image files. This choice was made because:

    -
      -
    • -A concrete data set makes explaining the behavior of some functions much easier to motivate than simply talking about abstract operations on abstract data sets;
    • -
    • -Every reader will have at least an intuition as to the meaning of the data and organization of image files, and
    • -
    • -The result of various manipulations can be displayed simply since the data set has a natural graphical representation.
    • -
    -

    -All users of NumPy, whether interested in image processing or not, are encouraged to follow the tutorial with a working NumPy installation at their side, testing the examples, and, more importantly, transferring the understanding gained by working on images to their specific domain. The best way to learn is by doing - the aim of this tutorial is to guide you along this "doing."

    -

    -Here is what the rest of this part contains:

    -

    -Installing NumPy provides information on testing Python, NumPy, and compiling and installing NumPy if necessary.

    -

    -The NumTut package provides information on testing and installing the NumTut package, which allows easy visualization of arrays.

    -

    -High-Level Overview gives a high-level overview of the components of the NumPy system as a whole.

    -

    -Array Basics provides a detailed step-by-step introduction to the most important aspect of NumPy, the multidimensional array objects.

    -

    -Ufuncs provides information on universal functions, the mathematical functions which operate on arrays and other sequences elementwise.

    -

    -Pseudo Indices covers syntax for some special indexing operators.

    -

    -Array Functions is a catalog of each of the utility functions which allow easy algorithmic processing of arrays.

    -

    -Array Methods discusses the methods of array objects.

    -

    -Array Attributes presents the attributes of array objects.

    -

    -Special Topics is a collection of special topics, from the organization of the codebase to the mechanisms for customizing printing.

    -

    -Writing a C extension to NumPy is an tutorial on how to write a C extension which uses NumPy arrays.

    -

    -C API Reference is a reference for the C API to NumPy objects (both PyArrayObjects and UFuncObjects).

    -

    -Glossary is a glossary of terms.

    -

    -Reference material for the optional packages distributed with Numeric Python are described in the next part, Optional Packages.

    -
    -
    -Where to get information and code
    -

    -Numerical Python and its documentation are available at SourceForge. The main web site is:

    -

    -http://numpy.sourceforge.net

    -

    -Downloads, bug reports, and patch facility, and releases are at the main project page, reachable from the above site or directly at: http://sourceforge.net/projects/numpy

    -

    -The Python web site is www.python.org

    -

    -Many packages are available from third parties that use Numeric to interface to a variety of mathematical and statistical software.

    -
    -
    -
    -Acknowledgments
    -

    -Numerical Python is the outgrowth of a long collaborative design process carried out by the Matrix SIG of the Python Software Activity (PSA). Jim Hugunin, while a graduate student at MIT, wrote most of the code and initial documentation. When Jim joined CNRI and began working on JPython, he didn't have the time to maintain Numerical Python so Paul Dubois at LLNL agreed to become the maintainer of Numerical Python. David Ascher, working as a consultant to LLNL, wrote most of this document, incorporating contributions from Konrad Hinsen and Travis Oliphant, both of whom are major contributors to Numerical Python.

    -

    -Since the source was moved to SourceForge, the Numeric user community has become a significant part of the process. Numerical Python illustrates the power of the open source software concept.

    -

    -Please send comments and corrections to this manual to paul@pfdubois.com, or to Paul F. Dubois, L-264, Lawrence Livermore National Laboratory, Livermore, CA 94566, U.S.A.

    -
    -
    -
    -

    -2. Installing NumPy

    -

    -This chapter explains how to install and test NumPy, from either the source distribution or from the binary distribution.

    -

    -Before we start with the actual tutorial, we will describe the steps needed for you to be able to follow along the examples step by step. These steps including installing Python, the NumPy extensions, and some tools and sample files used in the examples of this tutorial.

    -
    -
    -Testing the Python installation
    -

    -The first step is to install Python if you haven't already. Python is available from the Python project page at http://sourceforge.net/projects/python. Click on the link corresponding to your platform, and follow the instructions described there. When installed, starting Python by typing -python - at the shell or double-clicking on the Python interpreter should give a prompt such as:

    -

    -Python 2.1b2 (#12, Mar 23 2001, 14:01:30) [MSC 32 bit (Intel)] on win32

    -

    -Type "copyright", "credits" or "license" for more information.

    -

    ->>>

    -

    -If you have problems getting this part to work, consider contacting a local support person or emailing -python-help@python.org - for help. If neither solution works, consider posting on the comp.lang.python newsgroup (details on the newsgroup/mailing list are available at -http://www.python.org/psa/MailingLists.html#clp -).

    -
    -
    -
    -Testing the Numeric Python Extension Installation
    -

    -The standard Python distribution does not come as of this writing with the Numeric Python extensions installed, but your system administrator may have installed them already. To find out if your Python interpreter has NumPy installed, type -import - -Numeric - at the Python prompt. You'll see one of two behaviors (throughout this document, -bold - -Courier New - font indicates user input, and -standard - -Courier New - font indicates output):

    -

    ->>> -import Numeric -

    -

    -Traceback (innermost last):

    -

    - File "<stdin>", line 1, in ?

    -

    -ImportError: No module named Numeric

    -

    ->>>

    -

    -indicating that you don't have NumPy installed, or:

    -

    ->>> -import Numeric -

    -

    ->>>

    -

    -indicating that you do. If you do, go on to the next step. If you don't, you have to get the NumPy extensions.

    -
    -
    -
    -Installing NumPy
    -

    -The release facility at SourceForge is accessed through the project page, http://sourceforge.net/projects/numpy. Click on the "numpy" releases and you will be presented with a list of the available files. The files whose names end in ".tar.gz" are source code releases. The others are "prebuilt" for a given platform. It is possible to get the latest sources directly from our CVS repository using the facilities described at SourceForge. Note that while every effort is made to ensure that the repository is always "good", direct use of the repository is subject to more errors than using a standard release.

    -
    -
    -Installing on Windows
    -

    -On Windows, we currently have .zip files that should be unzipped into the top of your Python distribution; there is no "Setup" to run. If you wish to build from source on Windows, the Unix procedure described below can be used, running python in a command-line tool.

    -

    -In general, there may not be a prebuilt version of a particular kind available in every minor release. If you need a prebuilt version, choose the most recent version available.

    -
    -
    -
    -Installing on Unix
    -

    -The source distribution should be uncompressed and unpacked using the the tar program:

    -

    -csh> tar xfz Numeric-n.m.tar.gz

    -

    -Follow the instructions in the top-level directory for compilation and installation. Note that there are options you must consider before beginning. Installation is usually as simple as:

    -

    -python setup_all.py install

    -

    -However, please (please!) see the README itself for the latest details.

    -
    -
    -
    -
    -
    -  -

    -Just like all Python modules and packages, the Numeric module can be invoked using either the -import Numeric - form, or the -from Numeric import ... - form. Because most of the functions we'll talk about are in the Numeric module, in this document, all of the code samples will assume that they have been preceded by a statement:
    -
    -from Numeric import *

    -
    -
    -
    -
    -
    -  -
    -
    -
    -
    -
    -
    -At the SourceForge...
    -

    -The SourceForge project page for Numerical Python is at http://sourceforge.net/projects/numpy. On this project page you will find links to:

    -
      -
    • -The Numeric Discussion List
    • -
    • -You can subscribe to a discussion list about Numeric python using the project page at SourceForge. The list is a good place to ask questions and get help. Send mail to numpy-discussion@lists.sourceforge.net.
    • -
    • -The Web Site
    • -
    • -Click on "home page" to get to the Numeric Python Home Page, which has links to documentation and other resources, including tools for connecting Numerical Python to Fortran.
    • -
    • -Bugs and Patches
    • -
    • -Bug tracking and patch-management facilities is provided on the SourceForge project page.
    • -
    • -CVS Repository
    • -
    • -You can get the latest and greatest (albeit less tested and trustworthy) version of Numeric directly from our CVS repository.
    • -
    • -FTP Site
    • -
    • -The FTP Site contains this documentation in several formats, plus maybe some other goodies we have lying around.
    • -
    -
    -
    -
    -

    -3. The NumTut package

    -

    -This chapter leads the user through the installation and testing of the NumTut package, which should have been distributed with this document.

    -
    -
    -Testing the NumTut package
    -

    -This tutorial assumes that the NumTut package has been installed. If it hasn't, see below, Possible reasons for failure). This package contains a few sample images and utility functions for displaying arrays and the like. To find out if NumTut has been installed, do:

    -

    ->>> -from NumTut import * -

    -

    ->>> -view(greece) -

    -

    - 

    -
    -
    -

    -If a picture of a greek street shows up on your screen, you're all set, and you can go to the next chapter.

    -
    -
    -
    -Possible reasons for failure
    -

    ->>> -import NumTut -

    -

    -Traceback (innermost last):

    -

    - File "<stdin>", line 1, in ?

    -

    -ImportError: No module named NumTut

    -

    -This message indicates that you do not have the NumTut package installed in your PythonPath. NumTut is distributed along with the Numeric source distribution in the -Demo - subdirectory. Copy the -NumTut - subdirectory somewhere into your Python path, or just execute python from the Demo directory.

    -

    -If you have installed Numeric from a binary distribution, NumTut may not be included. Get the source distribution and find NumTut in the Demo subdirectory.

    -

    -On Win32, the NumTut directory can be placed in the main directory of your Python installation. On Unix, it can be placed in the site-packages directory of your installation.

    -
    -
    -Win32
    -

    ->>> -import NumTut -

    -

    -Traceback (innermost last):

    -

    -[...]

    -

    -ConfigurationError: view needs Tkinter on Win32, and either threads or the IDLE editor"

    -

    -or:

    -

    -ConfigurationError: view needs either threads or the IDLE editor to be enabled.

    -

    -On Win32 (Windows 95, 98, NT), the Tk toolkit is needed to view the images. Additionally, either the Python interpreter needs to be compiled with thread support (which is true in the standard win32 distribution) or you need to call the NumTut program from the IDLE interactive development environment.

    -

    -If you do not wish to modify your Python installation to match these requirements, you can simply ignore the references to the demonstrations which use the -view() - command later in this document. Using NumPy does not require image display tools, they just make some array operations easier to understand.

    -
    -
    -
    -Unix
    -

    -On Unix machines, NumTut will work best with a Python interpreter with Tk support (not true in the default configuration), with the Tkinter GUI framework available and optionally with the tkImaging add-on (part of the Python Imaging Library). If this is not the case, it will try to use an external viewer which is able to read PPM files. The default viewer is 'xv', a common image viewer available from -ftp://ftp.cis.upenn.edu/pub/xv. -If xv is not installed, you will get an error message similar to:

    -

    ->>> -import NumTut -

    -

    -Traceback (innermost last):

    -

    -[...]

    -

    -ConfigurationError: PPM image viewer 'xv' not found

    -

    -You can configure NumTut to use a different image viewer, by typing e.g.:

    -

    ->>> -import NumTut -

    -

    ->>> -NumTut.view.PPMVIEWER = 'ppmviewer' -

    -

    ->>> -from NumTut import * -

    -

    ->>> -view(greece) -

    -

    -If you do not have a PPM image viewer, you can simply ignore the references to the demonstrations which use the -view() - command later in this document. Using NumPy does not require image display tools, they just make some array operations easier to understand.

    -
    -
    -
    -
    -

    -4. High-Level Overview

    -

    -In this chapter, a high-level overview of the extensions is provided, giving the reader the definitions of the key components of the system. This section defines the concepts used by the remaining sections.

    -

    -Numeric Python consists of a set of modules:

    -
      -
    • - -Numeric.py - (and its helper modules -multiarray - and -umath -.)
    • -
    -

    -This module defines two new object types, and a set of functions which manipulate these objects, as well as convert between them and other Python types. The objects are the new array object (technically called -multiarray - objects), and universal functions (technically -ufunc - objects).

    -
      -
    • -Other optional packages shipped with Numeric are discussed in Optional Packages. Among these a packages for linear algebra, random numbers, masked or missing values, and Fast Fourier Transforms.
    • -
    -
    -
    -Array Objects
    -

    -The array objects are generally homogeneous collections of potentially large numbers of numbers. All numbers in a multiarray are the same kind (i.e. number representation, such as double-precision floating point). Array objects must be full (no empty cells are allowed), and their size is immutable. The specific numbers within them can change throughout the life of the array.

    -

    -Note: In some applications arrays of numbers may contain entries representing invalid or missing values. An optional package "MA" is available to represent such arrays. Attempting to do so by using NaN as a value may lead to disappointment or lack of portability.

    -

    -Mathematical operations on arrays return new arrays containing the results of these operations performed -elementwise - on the arguments of the operation.

    -

    -The -size - of an array is the total number of elements therein (it can be 0 or more). It does not change throughout the life of the array.

    -

    -The -shape - of an array is the number of dimensions of the array and its extent in each of these dimensions (it can be 0, 1 or more). It can change throughout the life of the array. In Python terms, the shape of an array is a tuple of integers, one integer for each dimension that represents the extent in that dimension.

    -

    -The -rank - of an array is the number of dimensions along which it is defined. It can change throughout the life of the array. Thus, the rank is the length of the shape.

    -

    -The -typecode - of an array is a single character description of the kind of element it contains (number format, character or Python reference). It determines the itemsize of the array.

    -

    -The -itemsize - of an array is the number of 8-bit bytes used to store a single element in the array. The total memory used by an array tends to its size times its itemsize, as the size goes to infinity (there is a fixed overhead per array, as well as a fixed overhead per dimension).

    -

    -To put this in more familiar mathematicial language: A vector is a rank-1 array (it has only one dimension along which it can be indexed). A matrix as used in linear algebra is a rank-2 array (it has two dimensions along which it can be indexed). There are also rank-0 arrays, which can hold single scalars -- they have no dimension along which they can be indexed, but they contain a single number.

    -

    -Here is an example of Python code using the array objects (bold text refers to user input, non-bold text to computer output):

    -

    ->>> -vector1 = array((1,2,3,4,5)) -

    -

    ->>> -print vector1 -

    -

    -[1 2 3 4 5]

    -

    ->>> -matrix1 = array(([0,1],[1,3])) -

    -

    ->>> -print matrix1 -

    -

    -[[0 1]

    -

    - [1 3]]

    -

    ->>> -print vector1.shape, matrix1.shape -

    -

    -(5,) (2,2)

    -

    ->>> -print vector1 + vector1 -

    -

    -[ 2 4 6 8 10]]

    -

    ->>> -print matrix1 * matrix1 -

    -

    -[[0 1] -# note that this is not the matrix -

    -

    - [1 9]] - # multiplication of linear algebra -

    -

    -If this example does not work for you because it complains of an unknown name "array", you forgot to begin your session with

    -

    - -from Numeric import * -

    -

    -See Just like all Python modules and packages, the Numeric module can be invoked using either the import Numeric form, or the from Numeric import ... form. Because most of the functions we'll talk about are in the Numeric module, in this document, all of the code samples will assume that they have been preceded by a statement: from Numeric import *.

    -
    -
    -
    -Universal Functions
    -

    -Universal functions (ufuncs) are functions which operate on arrays and other sequences. Most ufuncs perform mathematical operations on their arguments, also elementwise.

    -

    -Here is an example of Python code using the ufunc objects:

    -

    ->>> -print sin([pi/2., pi/4., pi/6.]) -

    -

    -[ 1. , 0.70710678, 0.5 ]

    -

    ->>> -print greater([1,2,4,5], [5,4,3,2]) -

    -

    -[0 0 1 1]

    -

    ->>> -print add([1,2,4,5], [5,4,3,2]) -

    -

    -[6 6 7 7]

    -

    ->>> -print add.reduce([1,2,4,5]) -

    -

    -12 # 1 + 2 + 3 + 4 + 5

    -

    -Ufuncs are covered in detail in Ufuncs.

    -
    -
    -
    -Convenience Functions
    -

    -The Numeric module provides, in addition to the functions which are needed to create the objects above, a set of powerful functions to manipulate arrays, select subsets of arrays based on the contents of other arrays, and other array-processing operations.

    -

    ->>> -data = arange(10) - # convenient homolog of builtin range()

    -

    ->>> -print data -

    -

    -[0 1 2 3 4 5 6 7 8 9]

    -

    ->>> -print where(greater(data, 5), -1, data) -

    -

    -[ 0 1 2 3 4 5 -1 -1 -1 -1] # selection facility

    -

    ->>> -data = resize(array((0,1)), (9, 9)) -

    -

    ->>> -print data -

    -

    -[[0 1 0 1 0 1 0 1 0]

    -

    - [1 0 1 0 1 0 1 0 1]

    -

    - [0 1 0 1 0 1 0 1 0]

    -

    - [1 0 1 0 1 0 1 0 1]

    -

    - [0 1 0 1 0 1 0 1 0]

    -

    - [1 0 1 0 1 0 1 0 1]

    -

    - [0 1 0 1 0 1 0 1 0]

    -

    - [1 0 1 0 1 0 1 0 1]

    -

    - [0 1 0 1 0 1 0 1 0]]

    -

    -All of the functions which operate on NumPy arrays are described in Array Functions.

    -
    -
    -
    -

    -5. Array Basics

    -

    -This chapter introduces some of the basic functions which will be used throughout the text.

    -
    -
    -Basics
    -

    -Before we explore the world of image manipulation as a case-study in array manipulation, we should first define a few terms which we'll use over and over again. Discussions of arrays and matrices and vectors can get confusing due to disagreements on the nomenclature. Here is a brief definition of the terms used in this tutorial, and more or less consistently in the error messages of NumPy.

    -

    -The python objects under discussion are formally called "multiarray" objects, but informally we'll just call them "array" objects or just "arrays." These are different from the array objects defined in the standard Python -array - module (which is an older module designed for processing one-dimensional data such as sound files).

    -

    -These array objects hold their data in a homogeneous block of elements, i.e. their elements all have the same C type (such as a 64-bit floating-point number). This is quite different from most Python container objects, which can contain heterogeneous collections. (You can, however, have an array of Python objects, as discussed later).

    -

    -Any given array object has a rank, which is the number of "dimensions" or "axes" it has. For example, a point in 3D space [1, 2, 1] is an array of rank 1 - it has one dimension. That dimension has a -length - of 3.

    -

    -As another example, the array

    -

    -1.0 0.0 0.0

    -

    -0.0 1.0 2.0

    -

    -is an array of rank 2 (it is 2-dimensional). The first dimension has a length of 2, the second dimension has a length of 3. Because the word "dimension" has many different meanings to different folks, in general the word "axis" will be used instead. Axes are numbered just like Python list indices: they start at 0, and can also be counted from the end, so that axis -1 is the last axis of an array, axis -2 is the penultimate axis, etc.

    -

    -There are two important and potentially unintuitive behaviors of NumPy arrays which take some getting used to. The first is that by default, operations on arrays are performed element-wise. This means that when adding two arrays, the resulting array has as elements the pairwise sums of the two operand arrays. This is true for all operations, including multiplication. Thus, array multiplication using the * operator will default to element-wise multiplication, not matrix multiplication as used in linear algebra. Many people will want to use arrays as linear algebra-type matrices (including their rank-1 versions, vectors). For those users, the Matrix class provides a more intuitive interface. We defer discussion of the Matrix class until later.

    -

    -The second behavior which will catch many users by surprise is that functions which return arrays which are simply different views at the same data will in fact share their data. This will be discussed at length when we have more concrete examples of what exactly this means.

    -

    -Now that all of these definitions and warnings are laid out, let's see what we can do with these arrays.

    -
    -
    -
    -Creating arrays from scratch
    -
    -
    -array() and typecodes
    -

    -There are many ways to create arrays. The most basic one is the use of the -array() - function:

    -

    ->>> -a = array([1.2, 3.5, -1]) -

    -

    -to make sure this worked, do:

    -

    ->>> -print a -

    -

    -[ 1.2 3.5 -1. ]

    -

    -The -array(numbers, typecode=None, savespace=0) -function takes three arguments - the first one is the values, which have to be in a Python sequence object (such as a list or a tuple). The optional second argument is the typecode of the elements. If it is omitted, as in the example above, Python tries to find the one type which can represent all the elements. The third is discussed in Saving space.

    -

    -Since the elements we gave our example were two floats and one integer, it chose `float' as the type of the resulting array. If one specifies the typecode, one can specify unequivocally the type of the elements - this is especially useful when, for example, one wants to make sure that an array contains floats even though in some cases all of its elements are integers:

    -

    ->>> -x,y,z = 1,2,3 -

    -

    ->>> -a = array([x,y,z]) -# integers are enough for 1, 2 and 3

    -

    ->>> -print a -

    -

    -[1 2 3]

    -

    ->>> -a = array([x,y,z], Float) -# not the default type

    -

    ->>> -print a -

    -

    -[ 1. 2. 3.]

    -
    -
    -
    -
    -
    -  -

    -Pop Quiz: What will be the type of an array defined as follows:
    -

    -

    - ->>> - -mystery = array([1, 2.0, -3j]) -

    -

    - 

    -

    -Hint: --3j - is an imaginary number.

    -

    -Answer: complex

    -

    -A very common mistake is to call array with a set of numbers as arguments, as in -array(1,2,3,4,5) -. This doesn't produce the expected result as soon as at least two numbers are used, because the first argument to -array() - must be the entire data for the array -- thus, in most cases, a sequence of numbers. The correct way to write the preceding invocation is most likely -array((1,2,3,4,5)) -.

    -
    -
    -
    -
    -
    -  -

    -Possible values for the second argument to the -array - creator function (and indeed to any function which accepts a so-called typecode for arrays) are:

    -
      -
    1. -One type corresponding to single ASCII characters: -Character -.
    2. -
    3. -One unsigned numeric type: -UnsignedInt8 -, used to store numbers between 0 and 255.
    4. -
    5. -Many signed numeric types:
    6. -
    7. -Signed integer choices: -Int -, -Int0 -, -Int8 -, -Int16 -, -Int32 -, and on some platforms, -Int64 - and -Int128 - (their ranges depend on their size).
    8. -
    9. -Floating point choices: -Float -, -Float0 -, -Float8 -, -Float16 -, -Float32 -, -Float64 -, and on some platforms, -Float128 -.
    10. -
    11. -Complex number choices: -Complex -, -Complex0 -, -Complex8 -, -Complex16 -, -Complex32 -, -Complex64 -, -Complex128 -.
    12. -
    -

    -The meaning of these is as follows:

    -
      -
    • -The versions without any numbers ( -Int -, -Float -, -Complex -) correspond to the -int -, -float - and -complex - datatypes in Python. They are thus long integers and double-precision floating point numbers, with a complex number corresponding to two double-precision floats.
    • -
    • -The versions with a number following correspond to whatever words are available on the specific platform you are using which have -at least - that many bits in them. Thus, -Int0 - corresponds to the smallest integer word size available, -Int8 - corresponds to the smallest integer word size available which has at least 8 bits, etc. The word sizes for the complex numbers refer to the total number of bits used by both the real and imaginary parts (in other words, the data portion of an array of N -Complex128 - elements uses up the same amount of memory as the data portions of two arrays of typecode -Float64 - with 2N elements).
    • -
    • -One non-numeric type, -PyObject -. Arrays of typecode -PyObject - are arrays of Python references, and as such their data area can contain references to any kind of Python objects.
    • -
    -

    -The last typecode deserves a little comment. Indeed, it seems to indicate that arrays can be filled with any Python objects. This appears to violate the notion that arrays are homogeneous. In fact, the typecode -PyObject - does allow heterogeneous arrays. However, if you plan to do numerical computation, you're much better off with a homogeneous array with a potentially "large" type than with a heterogeneous array. This is because a heterogeneous array stores references to objects, which incurs a memory cost, and because the speed of computation is much slower with arrays of -PyObject -'s than with uniform number arrays. Why does it exist, then?

    -

    -A very useful features of arrays is the ability to slice them, dice them, select and choose from them, etc. This feature is so nice that sometimes one wants to do the same operations with, e.g., arrays of class instances. In such cases, computation speed is not as important as convenience. Also, if the array is filled with objects which are instances of classes which define the appropriate methods, then NumPy will let you do math with those objects. For example, if one creates an object class which has an -__add__ - method, then arrays (created with the -PyObject - typecode) of instances of such a class can be added together.

    -
    -
    -
    -
    -
    -Multidimensional Arrays
    -

    -The following example shows one way of creating multidimensional arrays:

    -

    ->>> -ma = array([[1,2,3],[4,5,6]]) -

    -

    ->>> -print ma -

    -

    -[[1 2 3]

    -

    - [4 5 6]]

    -

    -The first argument to -array() - in the code above is a single list containing two lists, each containing three elements. If we wanted floats instead, we could specify, as discussed in the previous section, the optional typecode we wished:

    -

    ->>> -ma_floats = array([[1,2,3],[4,5,6]], Float) -

    -

    ->>> -print ma_floats -

    -

    -[[ 1. 2. 3.]

    -

    - [ 4. 5. 6.]]

    -

    -This array allows us to introduce the notion of `shape'. The shape of an array is the set of numbers which define its dimensions. The shape of the array -ma - defined above is 2 by 3. More precisely, all arrays have a shape attribute which is a tuple of integers. So, in this case:

    -

    ->>> -print ma.shape -

    -

    -(2, 3)

    -

    -Using the earlier definitions, this is a shape of rank 2, where the first axis has length 2, and the seond axis has length 3. The rank of an array -A - is always equal to -len(A.shape) -.

    -

    -Note that -shape - is an -attribute - of -array - objects. It is the first of several which we will see throughout this tutorial. If you're not used to object-oriented programming, you can think of attributes as "features" or "qualities" of individual arrays. The relation between an array and its shape is similar to the relation between a person and their hair color. In Python, it's called an object/attribute relation.

    -

    -What if one wants to change the dimensions of an array? For now, let us consider changing the shape of an array without making it "grow." Say, for example, we want to make the 2x3 array defined above ( -ma -) an array of rank 1:

    -

    ->>> -flattened_ma = reshape(ma, (6,)) -

    -

    ->>> -print flattened_ma -

    -

    -[1 2 3 4 5 6]

    -

    -One can change the shape of arrays to any shape as long as the product of all the lengths of all the axes is kept constant (in other words, as long as the number of elements in the array doesn't change):

    -

    ->>> -a = array([1,2,3,4,5,6,7,8]) -

    -

    -[1 2 3 4 5 6 7 8]

    -

    ->>> -print a -

    -

    ->>> -b = reshape(a, (2,4)) -# 2*4 == 8

    -

    -[[1 2 3 4]

    -

    - [5 6 7 8]]

    -

    ->>> -print b -

    -

    ->>> -c = reshape(b, (4,2) -# 4*2 == 8

    -

    ->>> -print c -

    -

    -[[1 2]

    -

    - [3 4]

    -

    - [5 6]

    -

    - [7 8]]

    -

    -Notice that we used a new function, -reshape() -. It, like -array() -, is a function defined in the -Numeric - module. It expects an array as its first argument, and a shape as its second argument. The shape has to be a sequence of integers (a list or a tuple). Keep in mind that a tuple with a single element needs a comma at the end; the right shape tuple for a rank-1 array with 5 elements is -(5,) -, not -(5) -.

    -

    -One nice feature of shape tuples is that one entry in the shape tuple is allowed to be --1 -. The --1 - will be automatically replaced by whatever number is needed to build a shape which does not change the size of the array. Thus:

    -

    ->>> -a = reshape(array(range(25)), (5,-1)) -

    -

    ->>> -print a, a.shape -

    -

    -[[ 0 1 2 3 4]

    -

    - [ 5 6 7 8 9]

    -

    - [10 11 12 13 14]

    -

    - [15 16 17 18 19]

    -

    - [20 21 22 23 24]] (5, 5)

    -

    -The shape of an array is a modifiable attribute of the array. You can therefore change the shape of an array simply by assigning a new shape to it:

    -

    ->>> -a = array([1,2,3,4,5,6,7,8,9,10]) -

    -

    ->>> -a.shape -

    -

    -(10,)

    -

    ->>> -a.shape = (2,5) -

    -

    ->>> -print a -

    -

    -[[ 1 2 3 4 5]

    -

    - [ 6 7 8 9 10]]

    -

    ->>> -a.shape = (10,1) - # second axis has length 1

    -

    ->>> -print a -

    -

    -[[ 1]

    -

    - [ 2]

    -

    - [ 3]

    -

    - [ 4]

    -

    - [ 5]

    -

    - [ 6]

    -

    - [ 7]

    -

    - [ 8]

    -

    - [ 9]

    -

    - [10]]

    -

    ->>> -a.shape = (5,-1) -# note the -1 trick described above

    -

    ->>> -print a -

    -

    -[[ 1 2]

    -

    - [ 3 4]

    -

    - [ 5 6]

    -

    - [ 7 8]

    -

    - [ 9 10]]

    -

    -As in the rest of Python, violating rules (such as the one about which shapes are allowed) results in exceptions:

    -

    ->>> -a.shape = (6,-1) -

    -

    -Traceback (innermost last):

    -

    - File "<stdin>", line 1, in ?

    -

    -ValueError: total size of new array must be unchanged

    -
    -
    -
    -
    -
    -  -

    -The default printing routine provided by the Numeric module prints arrays as follows:

    -
      -
    1. -The last axis is always printed left to right
    2. -
    3. -The next-to-last axis is printed top to bottom
    4. -
    -

    -The remaining axes are printed top to bottom with increasing numbers of separators.

    -

    -This explains why rank-1 arrays are printed from left to right, rank-2 arrays have the first dimension going down the screen and the second dimension going from left to right, etc.

    -
    -
    -
    -
    -
    -  -

    -If you want to change the shape of an array so that it has more elements than it started with (i.e. grow it), then you have many options: One solution is to use the -concat() - method discussed later. An alternative is to use the -array() - creator function with existing arrays as arguments:

    -

    ->>> -print a -

    -

    -[0 1 2 3 4 5 6 6 7]

    -

    ->>> -b = array([a,a]) -

    -

    ->>> -print b -

    -

    -[[1 2 3 4 5 6 7 8]

    -

    - [1 2 3 4 5 6 7 8]]

    -

    ->>> -print b.shape -

    -

    -(2, 8)

    -
    -
    -
    -
    -resize
    -

    -A final possibility is the -resize() -function, which takes a "base" array as its first argument and the desired shape as the second argument. Unlike -reshape() -, the shape argument to -resize() - can corresponds to a smaller or larger shape than the input array. Smaller shapes will result in arrays with the data at the "beginning" of the input array, and larger shapes result in arrays with data containing as many replications of the input array as are needed to fill the shape. For example, starting with a simple array

    -

    ->>> -base = array([0,1]) -

    -

    -one can quickly build a large array with replicated data:

    -

    ->>> -big = resize(base, (9,9)) -

    -

    ->>> -print big -

    -

    -[[0 1 0 1 0 1 0 1 0]

    -

    - [1 0 1 0 1 0 1 0 1]

    -

    - [0 1 0 1 0 1 0 1 0]

    -

    - [1 0 1 0 1 0 1 0 1]

    -

    - [0 1 0 1 0 1 0 1 0]

    -

    - [1 0 1 0 1 0 1 0 1]

    -

    - [0 1 0 1 0 1 0 1 0]

    -

    - [1 0 1 0 1 0 1 0 1]

    -

    - [0 1 0 1 0 1 0 1 0]]

    -

    -and if you imported the -view - function from the -NumTut - package, you can do:

    -

    ->>> -view(resize(base, (100,100))) -

    -

    - -# grey grid of horizontal lines is shown -

    -

    ->>> -view(resize(base, (101,101))) -

    -

    - -# grey grid of alternating black and white pixels is shown -

    -
    -
    -
    -
    -
    -  -

    -Sections denoted "For Advanced Users" will be used to indicate aspects of the functions which may not be needed for a first introduction at NumPy, but which should be mentioned for the sake of completeness.

    -

    -The -array - constructor takes a mandatory -data - argument, an optional typecode, and optional -savespace - argument, and an optional -copy - argument. If the -data - argument is a sequence, then array creates a new object of type multiarray, and fills the array with the elements of the -data - object. The shape of the array is determined by the size and nesting arrangement of the elements of data.

    -

    -If -data - is not a sequence, then the array returned is an array of shape -() - (the empty tuple), of typecode -'O' -, containing a single element, which is -data -.

    -
    -
    -
    -
    -
    -  -
    -
    -
    -
    -
    -
    -
    -Creating arrays with values specified `on-the-fly'
    -
    -
    -zeros() and ones()
    -

    -Often, one needs to manipulate arrays filled with numbers which aren't available beforehand. The Numeric module provides a few functions which create arrays from scratch:

    -

    - -zeros() - and -ones() - simply create arrays of a given shape filled with zeros and ones respectively:

    -

    ->>> -z = zeros((3,3)) -

    -

    ->>> -print z -

    -

    -[[0 0 0]

    -

    - [0 0 0]

    -

    - [0 0 0]]

    -

    ->>> -o = ones([2,3]) -

    -

    ->>> -print o -

    -

    -[[1 1 1]

    -

    - [1 1 1]]

    -

    -Note that the first argument is a shape - it needs to be a list or a tuple of integers. Also note that the default type for the returned arrays is -Int -, which you can feel free to override using something like:

    -

    ->>> -o = ones((2,3), Float) -

    -

    ->>> -print o -

    -

    -[[ 1. 1. 1.]

    -

    - [ 1. 1. 1.]]

    -
    -
    -
    -arrayrange()
    -

    -The -arrayrange() - function is similar to the -range() - function in Python, except that it returns an array as opposed to a list.

    -

    ->>> -r = arrayrange(10) -

    -

    ->>> -print r -

    -

    -[0 1 2 3 4 5 6 7 8 9]

    -

    -Combining the -arrayrange() - with the -reshape() - function, we can get:

    -

    ->>> -big = reshape(arrayrange(100),(10,10)) -

    -

    ->>> -print big
    -
    -[[ 0 1 2 3 4 5 6 7 8 9]

    -

    - [10 11 12 13 14 15 16 17 18 19]

    -

    - [20 21 22 23 24 25 26 27 28 29]

    -

    - [30 31 32 33 34 35 36 37 38 39]

    -

    - [40 41 42 43 44 45 46 47 48 49]

    -

    - [50 51 52 53 54 55 56 57 58 59]

    -

    - [60 61 62 63 64 65 66 67 68 69]

    -

    - [70 71 72 73 74 75 76 77 78 79]

    -

    - [80 81 82 83 84 85 86 87 88 89]

    -

    - [90 91 92 93 94 95 96 97 98 99]]

    -

    ->>> -view(reshape(arrayrange(10000),(100,100))) -

    -

    - -# array of increasing lightness from top down (slowly) and from left to -

    -

    - -# right (faster) is shown -

    -

    - -arange() - is a shorthand for -arrayrange() -.

    -

    -One can set the start, stop and step arguments, which allows for more varied ranges:

    -

    ->>> -print arrayrange(10,-10,-2) -

    -

    -[10 8 6 4 2 0 -2 -4 -6 -8]

    -

    -An important feature of arrayrange is that it can be used with non-integer starting points and strides:

    -

    ->>> -print arrayrange(5.0) -

    -

    -[ 0. 1. 2. 3. 4.]

    -

    ->>> -print arrayrange(0, 1, .2) -

    -

    -[ 0. 0.2 0.4 0.6 0.8]

    -

    -If you want to create an array with just one value, repeated over and over, you can use the * operator applied to lists

    -

    ->>> -a = array([[3]*5]*5) -

    -

    ->>> -print a -

    -

    -[[3 3 3 3 3]

    -

    - [3 3 3 3 3]

    -

    - [3 3 3 3 3]

    -

    - [3 3 3 3 3]

    -

    - [3 3 3 3 3]]

    -

    -but that is relatively slow, since the duplication is done on Python lists. A quicker way would be to start with 0's and add 3:

    -

    ->>> -a = zeros([5,5]) + 3 -

    -

    ->>> -print a -

    -

    -[[3 3 3 3 3]

    -

    - [3 3 3 3 3]

    -

    - [3 3 3 3 3]

    -

    - [3 3 3 3 3]

    -

    - [3 3 3 3 3]]

    -

    -The optional typecode argument can force the typecode of the resulting array, which is otherwise the "highest" of the starting and stopping arguments. The starting argument defaults to 0 if not specified. Note that if a typecode is specified which is "lower" than that which arrayrange would normally use, the array is the result of a precision-losing cast (a round-down, as that used in the -astype - method for arrays.)

    -
    -
    -
    -Creating an array from a function: fromfunction()
    -

    -Finally, one may want to create an array with contents which are the result of a function evaluation. This is done using the -fromfunction() - function, which takes two arguments, a shape and a callable object (usually a function). For example:

    -

    ->>> -def dist(x,y): -

    -

    -... - return (x-5)**2+(y-5)**2 -# distance from point (5,5) squared

    -

    -...

    -

    ->>> -m = fromfunction(dist, (10,10)) -

    -

    ->>> -print m -

    -

    -[[50 41 34 29 26 25 26 29 34 41]

    -

    - [41 32 25 20 17 16 17 20 25 32]

    -

    - [34 25 18 13 10 9 10 13 18 25]

    -

    - [29 20 13 8 5 4 5 8 13 20]

    -

    - [26 17 10 5 2 1 2 5 10 17]

    -

    - [25 16 9 4 1 0 1 4 9 16]

    -

    - [26 17 10 5 2 1 2 5 10 17]

    -

    - [29 20 13 8 5 4 5 8 13 20]

    -

    - [34 25 18 13 10 9 10 13 18 25]

    -

    - [41 32 25 20 17 16 17 20 25 32]]

    -

    ->>> -view(fromfunction(dist, (100,100)) -

    -

    - -# shows image which is dark in topleft corner, and lighter away from it. -

    -

    ->>> -m = fromfunction(lambda i,j,k: 100*(i+1)+10*(j+1)+(k+1), (4,2,3)) -

    -

    ->>> -print m -

    -

    -[[[111 112 113]

    -

    - [121 122 123]]

    -

    - [[211 212 213]

    -

    - [221 222 223]]

    -

    - [[311 312 313]

    -

    - [321 322 323]]

    -

    - [[411 412 413]

    -

    - [421 422 423]]]

    -

    -By examining the above examples, one can see that -fromfunction() - creates an array of the shape specified by its second argument, and with the contents corresponding to the value of the function argument (the first argument) evaluated at the indices of the array. Thus the value of -m[3,4] - in the first example above is the value of -dist - when -x=3 - and -y=4 -. Similarly for the lambda function in the second example, but with a rank-3 array.

    -

    -The implementation of fromfunction consists of:

    -

    -def fromfunction(function, dimensions):

    -

    - return apply(function, tuple(indices(dimensions)))

    -

    -which means that the function function is called for each element in the sequence indices(dimensions). As described in the definition of indices, this consists of arrays of indices which will be of rank one less than that specified by dimensions. This means that the function argument must accept the same number of arguments as there are dimensions in dimensions, and that each argument will be an array of the same shape as that specified by dimensions. Furthermore, the array which is passed as the first argument corresponds to the indices of each element in the resulting array along the first axis, that which is passed as the second argument corresponds to the indices of each element in the resulting array along the second axis, etc. A consequence of this is that the function which is used with fromfunction will work as expected only if it performs a separable computation on its arguments, and expects its arguments to be indices along each axis. Thus, no logical operation on the arguments can be performed, or any non-shape preserving operation. The first example below satisfies these requirements, hence works (the -x - and -y - arrays both get 10x10 arrays as input corresponding to the values of the indices along the two dimensions), while the second array attemps to do a comparison test on an array of indices, which fails.

    -

    ->>> -def buggy(test): -

    -

    -... -if test > 4: return 1 -

    -

    -... - else: return 0 -

    -

    -...

    -

    ->>> -print fromfunction(buggy, (10,)) -

    -

    -Traceback (innermost last):

    -

    - File "<stdin>", line 1, in ?

    -

    - File "C:\PYTHON\LIB\Numeric.py", line 157, in fromfunction

    -

    - return apply(function, tuple(indices(dimensions)))

    -

    - File "<stdin>", line 2, in buggy

    -

    -TypeError: Comparison of multiarray objects is not implemented.

    -
    -
    -
    -identity()
    -

    -The simplest array constructor is the -identity(n) - function, which takes a single integer argument and returns a square identity array of that size of integers:

    -

    ->>> -print identity(5) -

    -

    -[[1 0 0 0 0]

    -

    - [0 1 0 0 0]

    -

    - [0 0 1 0 0]

    -

    - [0 0 0 1 0]

    -

    - [0 0 0 0 1]]

    -

    ->>> -view(identity(100)) -

    -

    - -# shows black square with a single white diagonal -

    -
    -
    -
    -
    -Coercion and Casting
    -

    -We've mentioned the typecodes of arrays, and how to create arrays with the right typecode, but we haven't covered what happens when arrays with different typecodes interact.

    -
    -
    -Automatic Coercions and Binary Operations
    -

    -The rules followed by NumPy when performing binary operations on arrays mirror those used by Python in general. Operations between numeric and non-numeric types are not allowed (e.g. an array of characters can't be added to an array of numbers), and operations between mixed number types (e.g. floats and integers, floats and omplex numbers, or in the case of NumPy, operations between any two arrays with different numeric typecodes) first perform a coercion of the 'smaller' numeric type to the type of the `larger' numeric type. Finally, when scalars and arrays are operated on together, the scalar is converted to a rank-0 array first. Thus, adding a "small" integer to a "large" floating point array is equivalent to first casting the integer "up" to the typecode of the array:

    -

    ->>> -arange(0, 1.0, .1) + 12 -

    -

    -array([ 12. , 12.1, 12.2, 12.3, 12.4, 12.5, 12.6, 12.7, 12.8, 12.9])

    -

    -The automatic coercions are described in Figure 1. Avoiding upcasting is discussed in Saving space.

    -

    - -

    -
    -
    -
    -
    -
    -
    -Up-casts are indicated with arrows. Down-casts are allowed by the -astype() - method, but may result in loss of information.
    -
    -
    -Deliberate up-casting: The asarray function
    -

    -One more array constructor is the -asarray() - function. It is used if you want to have an array of a specific typecode and you don't know what typecode array you have (for example, in a generic function which can operate on all kinds of arrays, but needs them to be converted to complex arrays). If the array it gets as an argument is of the right typecode, it will get sent back unchanged. If the array is not of the right typecode, each element of the new array will be the result of the coercion to the new type of the old elements. -asarray() - will refuse to operate if there might be loss of information -- in other words, -asarray() - only casts 'up'.

    -

    - -asarray - is also used when you have a function that operates on arrays, but you want to allow people to call it with an arbitrary python sequence object. This gives your function a behavior similar to that of most of the builtin functions that operate on arrays.

    -
    -
    -
    -The typecode value table
    -

    -The typecodes identifiers ( -Float0 -, etc.) have as values single-character strings. The mapping between typecode and character strings is machine dependent. An example of the correspondences between typecode characters and the typecode identifiers for 32-bit architectures are shown in Table 3-X.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -Typecode character/identifier table on a Pentium computer
    -
    -

    -Character

    -
    -

    -# of bytes

    -
    -

    -# of bits

    -
    -

    -Identifiers

    -
    -

    - -D -

    -
    -

    -16

    -
    -

    -128

    -
    -

    - -Complex, Complex64 -

    -
    -

    - -F -

    -
    -

    -8

    -
    -

    -64

    -
    -

    - -Complex0, Complex16, Complex32, Complex8 -

    -
    -

    - -d -

    -
    -

    -8

    -
    -

    -64

    -
    -

    - -Float, Float64 -

    -
    -

    - -f -

    -
    -

    -4

    -
    -

    -32

    -
    -

    - -Float0, Float16, Float32, Float8 -

    -
    -

    - -l -

    -
    -

    -4

    -
    -

    -32

    -
    -

    - -Int -

    -
    -

    - -1 -

    -
    -

    -1

    -
    -

    -8

    -
    -

    - -Int0, Int8 -

    -
    -

    - -s -

    -
    -

    -2

    -
    -

    -16

    -
    -

    - -Int16 -

    -
    -

    - -i -

    -
    -

    -4

    -
    -

    -32

    -
    -

    - -Int32 -

    -
    -
    -
    -
    -Consequences of silent upcasting
    -

    -When dealing with very large arrays of floats and if precision is not important (or arrays of small integers), then it may be worthwhile to cast the arrays to "small" typecodes, such as -Int8 -, -Int16 - or -Float32 -. As the standard Python integers and floats correspond to the typecodes -Int32 - and -Float64 -, using them in apparently "innocent" ways will result in up-casting, which may null the benefit of the use of small typecode arrays. For example:

    -

    ->>> -mylargearray.typecode() -

    -

    -'f' # a.k.a. Float32 on a Pentium

    -

    ->>> -mylargearray.itemsize() -

    -

    -4

    -

    ->>> -mylargearray = mylargearray + 1 - # 1 is an Int64 on a Pentium

    -

    ->>> -mylargearray.typecode() - # see Fig. 1 for explanation.

    -

    -'d'

    -

    ->>> -mylargearray.itemsize() -

    -

    -8

    -

    -Note that the sizes returned by the -itemsize() - method are expressed in bytes.

    -
    -
    -
    -Saving space
    -

    -Numeric arrays can be created using an optional, keyworded argument to the constructor, savespace. If savespace is set to 1, Numeric will attempt to avoid the silent upcasting behavior. The status of an array can be queried with the spacesaver() method. If x.spacesaver() is true, x has its space-saving flag set. The flag can be set with the savespace method: x.savespace(1) to set it, x.savespace(0) to clear it.

    -
    -
    -
    -Deliberate casts (potentially down): the astype method
    -

    -You may also force NumPy to cast any number array to another number array. For example, to take an array of any numeric type (IntX or FloatX or ComplexX or UnsignedInt8) and convert it to a 64-bit float, one can do:

    -

    ->>> -floatarray = otherarray.astype(Float64) -

    -

    -The typecode can be any of the number typecodes, "larger" or "smaller". If it is larger, this is a cast-up, as if asarray() had been used. If it is smaller, the standard casting rules of the underlying language (C) are used, which means that truncation or loss of precision can occur:

    -

    ->>> -print x -

    -

    -[ 0. 0.4 0.8 1.2 1.6]

    -

    ->>> -x.astype(Int) -

    -

    -array([0, 0, 0, 1, 1])

    -

    -If the typecode used with -astype() - is the original array's typecode, then a copy of the original array is returned.

    -
    -
    -
    -Operating on Arrays
    -
    -
    -Simple operations
    -

    -If you have a keen eye, you have noticed that some of the previous examples did something new. It added a number to an array. Indeed, most Python operations applicable to numbers are directly applicable to arrays:

    -

    ->>> -print a -

    -

    -[1 2 3]

    -

    ->>> -print a * 3 -

    -

    -[3 6 9]

    -

    ->>> -print a + 3 -

    -

    -[4 5 6]

    -

    -Note that the mathematical operators behave differently depending on the types of their operands. When one of the operands is an array and the other is a number, the number is added to all the elements of the array and the resulting array is returned. This is called -broadcasting -. This also occurs for unary mathematical operations such as sin and the negative sign

    -

    ->>> -print sin(a) -

    -

    -[ 0.84147098 0.90929743 0.14112001]

    -

    ->>> -print -a -

    -

    -[-1 -2 -3]

    -

    -When both elements are arrays with the same shape, then a new array is created, where each element is the sum of the corresponding elements in the original arrays:

    -

    ->>> -print a + a -

    -

    -[2 4 6]

    -

    -If the operands of operations such as addition are arrays which have the same rank but different non-integer dimensions, then an exception is generated:

    -

    ->>> -print a -

    -

    -[1 2 3]

    -

    ->>> -b = array([4,5,6,7]) - # note this has four elements

    -

    ->>> -print a + b -

    -

    -Traceback (innermost last):

    -

    - File ``<stdin>``, line 1, in ?

    -

    -ArrayError: frames are not aligned

    -

    -This is because there is no reasonable way for NumPy to interpret addition of a -(3,) - shaped array and a -(4,) -shaped array.

    -

    -Note what happens when adding arrays with different rank

    -

    ->>> -print a -

    -

    -[1 2 3]

    -

    ->>> -print b -

    -

    -[[ 4 8 12]

    -

    - [ 5 9 13]

    -

    - [ 6 10 14]

    -

    - [ 7 11 15]]

    -

    ->>> -print a + b -

    -

    -[[ 5 10 15]

    -

    - [ 6 11 16]

    -

    - [ 7 12 17]

    -

    - [ 8 13 18]]

    -

    -This is another form of broadcasting. To understand this, one needs to look carefully at the shapes of -a - and -b -:

    -

    ->>> -a.shape -

    -

    -(3,)

    -

    ->>> -b.shape -

    -

    -(4,3)

    -

    -Because array -a -'s last dimension had length 3 and array -b -'s last dimension also had length 3, those two dimensions were "matched" and a new dimension was created and automatically "assumed" for array a. The data already in -a - was "replicated" as many times as needed (4, in this case) to make the two shapes of the operand arrays conform. This replication (broadcasting) occurs when arrays are operands to binary operations and their shapes differ and when the following conditions are true:

    -
      -
    • -starting from the last axis, the axis lengths (dimensions) of the operands are compared
    • -
    • -if both arrays have an axis length greater than 1, an exception is raised
    • -
    • -if one array has an axis length greater than 1, then the other array's axis is "stretched" to match the length of the first axis -- if the other array's axis is not present (i.e., if the other array has smaller rank), then a new axis of the same length is created.
    • -
    -

    -This algorithm is complex, but intuitive in practice. For more details, consult the Numeric Reference.

    -
    -
    -
    -In-place operations
    -

    -Beginning with Python 2.0, Python supports the in-place operators +=, -=, *=, and /=. Numeric supports these operations but you need to be careful. The right-hand side should be of the same typecode. Some violation of this is possible as the following example shows, but in general contortions may be necessary for using the smaller "kinds" of typecodes.

    -

    - ->>> x -

    -

    -array([ 5., 6., 7.])

    -

    - ->>> x+= 3. -

    -

    - ->>> id(x) -

    -

    -8253904

    -

    - ->>> y=x.astype(Float32) -

    -

    - ->>> y+=2 -

    -

    -Traceback (most recent call last):

    -

    - File "<stdin>", line 1, in ?

    -

    -TypeError: return array has incorrect type

    -

    - ->>> y+=array(2.).astype(Float32) -

    -

    - ->>> y -

    -

    -array([ 10., 11., 12.],'f')

    -

    -This area clearly needs improvement.

    -
    -
    -
    -
    -Getting and Setting array values
    -

    -Just like other Python sequences, array contents are manipulated with the [] notation. For rank-1 arrays, there are no differences between list and array notations:

    -

    ->>> -a = arrayrange(10) -

    -

    ->>> -print a[0] -# get first element

    -

    -0

    -

    ->>> -print a[1:5] -# get second through fifth element

    -

    -[1 2 3 4]

    -

    ->>> -print a[:-1] -# get last element

    -

    -9

    -

    -The first difference with lists comes with multidimensional indexing. If an array is multidimensional (of rank > 1), then specifying a single integer index will return an array of dimension one less than the original array.

    -

    ->>> -a = arrayrange(9) -

    -

    ->>> -a.shape = (3,3) -

    -

    ->>> -print a -

    -

    -[[0 1 2]

    -

    - [3 4 5]

    -

    - [6 7 8]]

    -

    ->>> -print a[0] -# get first row, not first element!

    -

    -[0 1 2]

    -

    ->>> -print a[1] -# get second row

    -

    -[3 4 5]

    -

    -To get to individual elements in a rank-2 array, one specifies both indices separated by commas:

    -

    ->>> -print a[0,0] -# get elt at first row, first column

    -

    -0

    -

    ->>> -print a[0,1] -# get elt at first row, second column

    -

    -1

    -

    ->>> -print a[1,0] -# get elt at second row, first column

    -

    -3

    -

    ->>> -print a[2,-1] -# get elt at third row, last column

    -

    -8

    -

    -Of course, the -[] - notation can be used to -set - values as well:

    -

    ->>> -a[0,0] = 123 -

    -

    ->>> -print a -

    -

    -[[123 1 2]

    -

    - [ 3 4 5]

    -

    - [ 6 7 8]]

    -

    -Note that when referring to rows, the right hand side of the equal sign needs to be a sequence which "fits" in the referred array subset (in the code sample below, a 3-element row):

    -

    ->>> -a[1] = [10,11,12] -

    -

    ->>> -print a -

    -

    -[[123 1 2]

    -

    - [ 10 11 12]

    -

    - [ 6 7 8]]

    -
    -
    -
    -Slicing Arrays
    -

    -The standard rules of Python slicing apply to arrays, on a per-dimension basis. Assuming a 3x3 array:

    -

    ->>> -a = reshape(arrayrange(9),(3,3)) -

    -

    ->>> -print a -

    -

    -[[0 1 2]

    -

    - [3 4 5]

    -

    - [6 7 8]]

    -

    -The plain [:] operator slices from beginning to end:

    -

    ->>> -print a[:,:] -

    -

    -[[0 1 2]

    -

    - [3 4 5]

    -

    - [6 7 8]]

    -

    -In other words, [:] with no arguments is the same as [:] for lists - it can be read ``all indices along this axis. So, to get the second row along the second dimension:

    -

    ->>> -print a[:,1] -

    -

    -[1 4 7]

    -

    -Note that what was a "column" vector is now a "row" vector -- any "integer slice" (as in the 1 in the example above) results in a returned array with rank one less than the input array.

    -

    -If one does not specify as many slices as there are dimensions in an array, then the remaining slices are assumed to be ``all''. If -A - is a rank-3 array, then

    -

    - -A[1] == A[1,:] == A[1,:,:] -

    -

    -There is one addition to the slice notation for arrays which does not exist for lists, and that is the optional third argument, meaning the ``step size'' also called stride or increment. Its default value is 1, meaning return every element in the specified range. Alternate values allow one to skip some of the elements in the slice:

    -

    ->>> -a = arange(12) -

    -

    ->>> -print a -

    -

    -[ 0 1 2 3 4 5 6 7 8 9 10 11]

    -

    ->>> -print a[::2] - # return every *other* element

    -

    -[ 0 2 4 6 8 10]

    -

    -Negative strides are allowed as long as the starting index is greater than the stopping index:

    -

    ->>> -a = reshape(arrayrange(9),(3,3)) -

    -

    ->>> -print a -

    -

    -[[0 1 2]

    -

    - [3 4 5]

    -

    - [6 7 8]]

    -

    ->>> -print a[:, 0] -

    -

    -[0 3 6]

    -

    ->>> -print a[0:3, 0] -

    -

    -[0 3 6]

    -

    ->>> -print a[2:-1, 0] -

    -

    -[6 3 0]

    -

    -If a negative stride is specified and the starting or stopping indices are omitted, they default to "end of axis" and "beginning of axis" respectively. Thus, the following two statements are equivalent for the array given:

    -

    ->>> -print a[2:-1, 0] -

    -

    -[6 3 0]

    -

    ->>> -print a[::-1, 0] -

    -

    -[6 3 0]

    -

    ->>> -print a[::-1] - # this reverses only the first axis

    -

    -[[6 7 8]

    -

    - [3 4 5]

    -

    - [0 1 2]]

    -

    ->>> -print a[::-1,::-1] - # this reverses both axes

    -

    -[[8 7 6]

    -

    - [5 4 3]

    -

    - [2 1 0]]

    -

    -One final way of slicing arrays is with the keyword -... - This keyword is somewhat complicated. It stands for ``however many `:' I need depending on the rank of the object I'm indexing, so that the indices I *do* specify are at the end of the index list as opposed to the usual beginning.``

    -

    -So, if one has a rank-3 array -A -, then -A[...,0] - is the same thing as -A[:,:,0] - but if -B - is rank-4, then -B[...,0] -is the same thing as: -B[:,:,:,0] -. Only one -... - is expanded in an index expression, so if one has a rank-5 array -C -, then: -C[...,0,...] - is the same thing as -C[:,:,:,0,:] -.

    -

    - 

    -
    -
    -
    -
    -

    -6. Ufuncs

    -
    -
    -What are Ufuncs?
    -

    -The operations on arrays that were mentioned in the previous section (element-wise addition, multiplication, etc.) all share some features -- they all follow similar rules for broadcasting, coercion and "element-wise operation". Just like standard addition is available in Python through the add function in the operator module, array operations are available through callable objects as well. Thus, the following objects are available in the Numeric module:

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -Universal Functions, or -ufunc -s. The operators which invoke them when applied to arrays are indicated in parentheses. The entries in slanted typeface refer to unary ufuncs, while the others refer to binary ufuncs.
    -
    -

    - -add (+) -

    -
    -

    - -subtract (-) -

    -
    -

    - -multiply (*) -

    -
    -

    - -divide (/) -

    -
    -

    - -remainder (%) -

    -
    -

    - -power (**) -

    -
    -

    - -arccos -

    -
    -

    - -arccosh -

    -
    -

    - -arcsin -

    -
    -

    - -arcsinh -

    -
    -

    - -arctan -

    -
    -

    - -arctanh -

    -
    -

    - -cos -

    -
    -

    - -cosh -

    -
    -

    - -exp -

    -
    -

    - -log -

    -
    -

    - -log10 -

    -
    -

    - -sin -

    -
    -

    - -sinh -

    -
    -

    - -sqrt -

    -
    -

    - -tan -

    -
    -

    - -tanh -

    -
    -

    - -maximum -

    -
    -

    - -minimum -

    -
    -

    - -conjugate -

    -
    -

    - -equal (==) -

    -
    -

    - -not_equal (!=) -

    -
    -

    - -greater (>) -

    -
    -

    - -greater_equal (>=) -

    -
    -

    - -less (<) -

    -
    -

    - -less_equal (<=) -

    -
    -

    - -logical_and (and) -

    -
    -

    - -logical_or (or) -

    -
    -

    - -logical_xor -

    -
    -

    - -logical_not (not) -

    -
    -

    - -bitwise_and (&) -

    -
    -

    - -bitwise_or (|) -

    -
    -

    - -bitwise_xor -

    -
    -

    - -bitwise_not (~) -

    -
    -

    - 

    -
    -

    -All of these ufuncs can be used as functions. For example, to use -add -, which is a binary ufunc (i.e. it takes two arguments), one can do either of:

    -

    ->>> -a = arange(10)
    -
    ->>> -print add(a,a) -

    -

    -[ 0 2 4 6 8 10 12 14 16 18]

    -

    ->>> -print a + a -

    -

    -[ 0 2 4 6 8 10 12 14 16 18]

    -

    -In other words, the + operator on arrays performs exactly the same thing as the -add - ufunc when operated on arrays. For a unary ufunc such as -sin -, one can do, e.g.:

    -

    ->>> -a = arange(10)
    -
    ->>> -print sin(a) -

    -

    -[ 0. 0.84147098 0.90929743 0.14112001 -0.7568025 -0.95892427

    -

    - -0.2794155 0.6569866 0.98935825 0.41211849]

    -

    -Unary ufuncs return arrays with the same shape as their arguments, but with the contents corresponding to the corresponding mathematical function applied to each element (sin(0)=0, sin(1)=0.84147098, etc.).

    -

    -There are three additional features of ufuncs which make them different from standard Python functions. They can operate on any Python sequence in addition to arrays; they can take an "output" argument; they have attributes which are themselves callable with arrays and sequences. Each of these will be described in turn.

    -
    -
    -Ufuncs can operate on any Python sequence
    -

    -Ufuncs have so far been described as callable objects which take either one or two arrays as arguments (depending on whether they are unary or binary). In fact, any Python sequence which can be the input to the array() constructor can be used. The return value from ufuncs is always an array. Thus:

    -

    ->>> -add([1,2,3,4], (1,2,3,4)) -

    -

    -array([2, 4, 6, 8])

    -
    -
    -
    -Ufuncs can take output arguments
    -

    -In many computations with large sets of numbers, arrays are often used only once. For example, a computation on a large set of numbers could involve the following step

    -

    - dataset = dataset * 1.20

    -

    -This operation as written needs to create a temporary array to store the results of the computation, and then eventually free the memory used by the original dataset array (provided there are no other references to the data it contains). It is more efficient, both in terms of memory and computation time, to do an "in-place" operation. This can be done by specifying an existing array as the place to store the result of the ufunc. In this example, one can write:

    -

    - multiply(dataset, 1.20, dataset)

    -

    -This is not a step to take lightly, however. For example, the "big and slow" version ( -dataset = dataset * 1.20 -) and the "small and fast" version above will yield different results in two cases:

    -
      -
    • -If the typecode of the target array is not that which would normally be computed, the operation will fail and raise a TypeError exception.
    • -
    • -If the target array corresponds to a different "view" on the same data as either of the source arrays, inconsistencies will result. For example,
    • -
    -

    - >>> -a = arange(5, typecode=Float64) -

    -

    - >>> -print a[::-1] * 1.2 -

    -

    - [ 4.8 3.6 2.4 1.2 0. ]

    -

    - >>> -multiply(a[::-1], 1.2, a) -

    -

    - array([ 4.8 , 3.6 , 2.4 , 4.32, 5.76])

    -

    - >>> -print a -

    -

    - [ 4.8 3.6 2.4 4.32 5.76]

    -

    -This is because the ufunc does not know which arrays share which data, and in this case the overwriting of the data contents follows a different path through the shared data space of the two arrays, thus resulting in strangely distorted data.

    -
    -
    -
    -Ufuncs have special methods
    -
    -
    -The reduce ufunc method
    -

    -If you don't know about the -reduce - command in Python, review section 5.1.1 of the Python Tutorial ( -http://www.python.org/doc/tut/functional.html -). Briefly, -reduce - is most often used with two arguments, a callable object (such as a function), and a sequence. It calls the callable object with the first two element of the sequence, then with the result of that operation and the third element, and so on, returning at the end the successive "reduction" of the specified callable object over the sequence elements. Similarly, the -reduce - method of ufuncs is called with a sequence as an argument, and performs the reduction of that ufunc on the sequence. As an example, adding all of the elements in a rank-1 array can be done with:

    -

    ->>> -a = array([1,2,3,4]) -

    -

    ->>> -print add.reduce(a) -

    -

    -10

    -

    -When applied to arrays which are of rank greater than one, the reduction proceeds by default along the first axis:

    -

    ->>> -b = array([[1,2,3,4],[6,7,8,9]]) -

    -

    ->>> -print b -

    -

    -[[1 2 3 4]

    -

    - [6 7 8 9]]

    -

    ->>> -print add.reduce(b) -

    -

    -[ 7 9 11 13]

    -

    -A different axis of reduction can be specified with a second integer argument:

    -

    ->>> -print b -

    -

    -[[1 2 3 4]

    -

    - [6 7 8 9]]

    -

    ->>> -print add.reduce(b, 1) -

    -

    -[10 30]

    -
    -
    -
    -The accumulate ufunc method
    -

    -The -accumulate - ufunc method is simular to -reduce -, except that it returns an array containing the intermediate results of the reduction:

    -

    ->>> -a = arange(10) -

    -

    ->>> -print a -

    -

    -[0 1 2 3 4 5 6 7 8 9]

    -

    ->>> -print add.accumulate(a) -

    -

    -[ 0 1 3 6 10 15 21 28 36 45] # 0, 0+1, 0+1+2, 0+1+2+3, ... 0+...+9

    -

    ->>> -print add.reduce(a) -

    -

    -45 # same as add.accumulate(...)[-1]

    -
    -
    -
    -The outer ufunc method
    -

    -The third ufunc method is -outer -, which takes two arrays as arguments and returns the "outer ufunc" of the two arguments. Thus the -outer - method of the -multiply - ufunc, results in the outer product. The outer method is only supported for binary methods.

    -

    ->>> -print a -

    -

    -[0 1 2 3 4]

    -

    ->>> -print b -

    -

    -[0 1 2 3]

    -

    ->>> -print add.outer(a,b) -

    -

    -[[0 1 2 3]

    -

    - [1 2 3 4]

    -

    - [2 3 4 5]

    -

    - [3 4 5 6]

    -

    - [4 5 6 7]]

    -

    ->>> -print multiply.outer(b,a) -

    -

    -[[ 0 0 0 0 0]

    -

    - [ 0 1 2 3 4]

    -

    - [ 0 2 4 6 8]

    -

    - [ 0 3 6 9 12]]

    -

    ->>> -print power.outer(a,b) -

    -

    -[[ 1 0 0 0]

    -

    - [ 1 1 1 1]

    -

    - [ 1 2 4 8]

    -

    - [ 1 3 9 27]

    -

    - [ 1 4 16 64]]

    -
    -
    -
    -The reduceat ufunc method
    -

    -The final ufunc method is the -reduceat - method, which I'd love to explain it, but I don't understand it (XXX).

    -
    -
    -
    -
    -Ufuncs always return new arrays
    -

    -Except when the 'output' argument are used as described above, ufuncs always return new arrays which do not share any data with the input array.

    -
    -
    -
    -
    -Which are the Ufuncs?
    -

    -Table 1 lists all the ufuncs. We will first discuss the mathematical ufuncs, which perform operations very similar to the functions in the -math - and -cmath - modules, albeit elementwise, on arrays. These come in two forms, unary and binary:

    -
    -
    -Unary Mathematical Ufuncs (take only one argument)
    -

    -The following ufuncs apply the predictable functions on their single array arguments, one element at a time: -arccos -, -arccosh -, - arcsin -, - arcsinh -, - arctan -, - arctanh -, - cos -, - cosh -, - exp -, - log -, - log10 -, - sin -, - sinh -, - sqrt -, - tan -, - tanh -.

    -

    -As an example:

    -

    ->>> -print x -

    -

    -[0 1 2 3 4]

    -

    ->>> -print cos(x) -

    -

    -[ 1. 0.54030231 -0.41614684 -0.9899925 -0.65364362]

    -

    ->>> -print arccos(cos(x)) -

    -

    -[ 0. 1. 2. 3. 2.28318531]

    -

    -# not a bug, but wraparound: 2*pi%4 is 2.28318531

    -

    -The -conjugate - ufunc takes an array of complex numbers and returns the array with entries which are the complex conjugates of the entries in the input array. If it is called with real numbers, a copy of the array is returned unchanged.

    -
    -
    -
    -Binary Mathematical Ufuncs
    -

    -These ufuncs take two arrays as arguments, and perform the specified mathematical operation on them, one pair of elements at a time: -add -, -subtract -, -multiply -, -divide -, -remainder -, -power -.

    -
    -
    -
    -Logical Ufuncs
    -

    -The ``logical'' ufuncs also perform their operations on arrays in elementwise fashion, just like the ``mathematical'' ones.

    -

    -Two are special ( -maximum - and -miminum -) in that they return arrays with entries taken from their input arrays:

    -

    ->>> -print x -

    -

    -[0 1 2 3 4]

    -

    ->>> -print y -

    -

    -[ 2. 2.5 3. 3.5 4. ]

    -

    ->>> -print maximum(x, y) -

    -

    -[ 2. 2.5 3. 3.5 4. ]

    -

    ->>> -print minimum(x, y) -

    -

    -[ 0. 1. 2. 3. 4.]

    -

    -The others all return arrays of 0's or 1's: -equal -, -not_equal -, -greater -, -greater_equal -, -less -, -less_equal -, -logical_and -, -logical_or -, -logical_xor -, -logical_not -, -bitwise_and -, -bitwise_or -, -bitwise_xor -, -bitwise_not -.

    -

    -These are fairly self-explanatory, especially with the associated symbols from the standard Python version of the same operations in Table 1 above. The -logical_* - ufuncs perform their operations (and, or, etc.) using the truth value of the elements in the array (equality to 0 for numbers and the standard truth test for PyObject arrays). The -bitwise_* - ufuncs, on the other hand, can be used only with integer arrays (of any word size), and will return integer arrays of the larger bit size of the two input arrays:

    -

    ->>> -x -

    -

    -array([7, 7, 0],'1')

    -

    ->>> -y -

    -

    -array([4, 5, 6])

    -

    ->>> -bitwise_and(x,y) -

    -

    -array([4, 5, 0],'i')

    -

    -We've already discussed how to find out about the contents of arrays based on the indices in the arrays - that's what the various slice mechanisms are for. Often, especially when dealing with the result of computations or data analysis, one needs to ``pick out'' parts of matrices based on the content of those matrices. For example, it might be useful to find out which elements of an array are negative, and which are positive. The comparison ufuncs are designed for just this type of operation. Assume an array with various positive and negative numbers in it (for the sake of the example we'll generate it from scratch):

    -

    ->>> -print a -

    -

    -[[ 0 1 2 3 4]

    -

    - [ 5 6 7 8 9]

    -

    - [10 11 12 13 14]

    -

    - [15 16 17 18 19]

    -

    - [20 21 22 23 24]]

    -

    ->>> -b = sin(a) -

    -

    ->>> -print b -

    -

    -[[ 0. 0.84147098 0.90929743 0.14112001 -0.7568025 ]

    -

    - [-0.95892427 -0.2794155 0.6569866 0.98935825 0.41211849]

    -

    - [-0.54402111 -0.99999021 -0.53657292 0.42016704 0.99060736]

    -

    - [ 0.65028784 -0.28790332 -0.96139749 -0.75098725 0.14987721]

    -

    - [ 0.91294525 0.83665564 -0.00885131 -0.8462204 -0.90557836]]

    -

    ->>> -print less_equal(b, 0) -

    -

    -[[1 0 0 0 1]

    -

    - [1 1 0 0 0]

    -

    - [1 1 1 0 0]

    -

    - [0 1 1 1 0]

    -

    - [0 0 1 1 1]]

    -

    -This last example has 1's where the corresponding elements are less than or equal to 0, and 0's everywhere else.

    -

    ->>> -view(greater(greeceBW, .3)) -

    -

    - -# shows a binary image with white where the pixel value was greater than .3 -

    -
    -
    -
    -Ufunc shorthands
    -

    - -Numeric - defines a few functions which correspond to often-used uses of ufuncs: for example, -add.reduce() - is synonymous with the -sum() - utility function:

    -

    ->>> -a = arange(5) - -# [0 1 2 3 4] -

    -

    ->>> -print sum(a) - -# 0 + 1 + 2 + 3 + 4 -

    -

    -10

    -

    -Similarly, -cumsum - is equivalent to -add.accumulate - (for ``cumulative sum``), -product - to -multiply.reduce -, and -cumproduct - to -multiply.accumulate -.

    -

    -Additional ``utility'' functions which are often useful are -alltrue - and -sometrue -, which are defined as -logical_and.reduce - and -logical_or.reduce - respectively:

    -

    ->>> -a = array([0,1,2,3,4]) -

    -

    ->>> -print greater(a,0) -

    -

    -[0 1 1 1 1]

    -

    ->>> -alltrue(greater(a,0)) -

    -

    -0

    -

    ->>> -sometrue(greater(a,0)) -

    -

    -1

    -
    -
    -
    -
    -

    -7. Pseudo Indices

    -

    -Tbis chapter discusses pseudo-indices, which allow arrays to have their shapes modified by adding axes, sometimes only for the duration of the evaluation of a Python expression.

    -

    -Consider multiplication of a rank-1 array by a scalar:

    -

    ->>> -a = array([1,2,3]) -

    -

    ->>> -a * 2 -

    -

    -[2 4 6]

    -

    -This should be trivial to you by now. We've just multiplied a rank-1 array by a scalar (which is converted to a rank-0 array). In other words, the rank-0 array was broadcast to the next rank. This works for adding some two rank-1 arrays as well:

    -

    ->>> -print a -

    -

    -[1 2 3]

    -

    ->>> -a + array([4]) -

    -

    -[5 6 7]

    -

    -but it won't work if either of the two rank-1 arrays have non-matching dimensions which aren't 1 - put another way, broadcast only works for dimensions which are either missing (e.g. a lower-rank array) or for dimensions of 1.

    -

    -With this in mind, consider a classic task, matrix multiplication. Suppose we want to multiply the row vector [10,20] by the column vector [1,2,3].

    -

    ->>> -a = array([10,20]) -

    -

    ->>> -b = array([1,2,3]) -

    -

    ->>> -a * b -

    -

    -Traceback (innermost last):

    -

    - File "<stdin>", line 1, in ?

    -

    -ValueError: frames are not aligned example

    -

    -This makes sense - we're trying to multiply a rank-1 array of shape (2,) with a rank-1 array of shape (3,). This violates the laws of broadcast. What we really want to do is make the second vector a vector of shape (3,1), so that the first vector can be broadcast accross the second axis of the second vector. One way to do this is to use the reshape function:

    -

    ->>> -a.shape -

    -

    -(2,)

    -

    ->>> -b.shape -

    -

    -(3,)

    -

    ->>> -b2 = reshape(b, (3,1)) -

    -

    ->>> -print b2 -

    -

    -[[1]

    -

    - [2]

    -

    - [3]]

    -

    ->>> -b2.shape -

    -

    -(3, 1)

    -

    ->>> -print a * b2 -

    -

    -[[10 20]

    -

    - [20 40]

    -

    - [30 60]]

    -

    -This is such a common operation that a special feature was added (it turns out to be useful in many other places as well) - the -NewAxis - ``pseudo-index'', originally developed in the Yorick language. -NewAxis - is an index, just like integers, so it is used inside of the slice brackets []. It can be thought of as meaning ``add a new axis here,'' in much the same ways as adding a 1 to an array's shape adds an axis. Again, examples help clarify the situation:

    -

    ->>> -print b -

    -

    -[1 2 3]

    -

    ->>> -b.shape -

    -

    -(3,)

    -

    ->>> -c = b[:, NewAxis] -

    -

    ->>> -print c -

    -

    -[[1]

    -

    - [2]

    -

    - [3]]

    -

    ->>> -c.shape -

    -

    -(3,1)

    -

    -Why use such a pseudo-index over the reshape function or shape assignments? Often one doesn't really want a new array with a new axis, one just wants it for an intermediate computation. Witness the array multiplication mentioned above, without and with pseudo-indices:

    -

    ->>> -without = a * reshape(b, (3,1)) -

    -

    ->>> -with = a * b[:,NewAxis] -

    -

    -The second is much more readable (once you understand how -NewAxis - works), and it's much closer to the intended meaning. Also, it's independent of the dimensions of the array b You might counter that using something like -reshape(b, (-1,1)) - is also dimension-independent, but 1) would you argue that it's as readable? 2) how would you deal with rank-3 or rank-N arrays? The -NewAxis --based idiom also works nicely with higher rank arrays, and with the -... - ``rubber index'' mentioned earlier. Adding an axis before the last axis in an array can be done simply with:

    -

    ->>> -a[...,NewAxis,:] -

    -
    -
    -

    -8. Array Functions

    -

    -Most of the useful manipulations on arrays are done with functions. This might be surprising given Python's object-oriented framework, and that many of these functions could have been implemented using methods instead. Choosing functions means that the same procedures can be applied to arbitrary python sequences, not just to arrays. For example, while -transpose([[1,2],[3,4]]) - works just fine, -[[1,2],[3,4]].transpose() - can't work. This approach also allows uniformity in interface between functions defined in the Numeric Python system, whether implemented in C or in Python, and functions defined in extension modules. The use of array methods is limited to functionality which depends critically on the implementation details of array objects. Array methods are discussed in the next chapter.

    -

    -We've already covered two functions which operate on arrays, -reshape - and -resize -.

    -
    -
    -take(a, indices, axis=0)
    -

    - -take - is in some ways like the slice operations. It selects the elements of the array it gets as first argument based on the indices it gets as a second argument. Unlike slicing, however, the array returned by -take - has the same rank as the input array. This is again much easier to understand with an illustration:

    -

    - 

    -

    ->>> -print a -

    -

    -[[ 0 1 2 3 4]

    -

    - [ 5 6 7 8 9]

    -

    - [10 11 12 13 14]

    -

    - [15 16 17 18 19]]

    -

    ->>> -print take(a, (0,)) - # first row

    -

    -[ [0 1 2 3 4]]

    -

    ->>> -print take(a, (0,1)) - # first and second row

    -

    -[[0 1 2 3 4]

    -

    - [5 6 7 8 9]]

    -

    ->>> -print take(a, (0,-1)) - # first and last row

    -

    -[[ 0 1 2 3 4]

    -

    - [15 16 17 18 19]]

    -

    -The optional third argument specifies the axis along which the selection occurs, and the default value (as in the examples above) is 0, the first axis. If you want another axis, then you can specify it:

    -

    ->>> -print take(a, (0,), 1) - # first column

    -

    -[[ 0]

    -

    - [ 5]

    -

    - [10]

    -

    - [15]]

    -

    ->>> -print take(a, (0,1), 1) - # first and second column

    -

    -[[ 0 1]

    -

    - [ 5 6]

    -

    - [10 11]

    -

    - [15 16]]

    -

    ->>> -print take(a, (0,-1), 1) - # first and last column

    -

    -[[ 0 4]

    -

    - [ 5 9]

    -

    - [10 14]

    -

    - [15 19]]

    -

    -This is considered to be a ``structural'' operation, because its result does not depend on the content of the arrays or the result of a computation on those contents but uniquely on the structure of the array. Like all such structural operations, the default axis is 0 (the first rank). I mention it here because later in this tutorial, we will see functions which have a default axis of -1.

    -

    -Take is often used to create multidimensional arrays with the indices from a rank-1 array. As in the earlier examples, the shape of the array returned by -take() - is a combination of the shape of its first argument and the shape of the array that elements are "taken" from -- when that array is rank-1, the shape of the returned array has the same shape as the index sequence. This, as with many other facets of Numeric, is best understood by experiment.

    -

    ->>> -x = arange(10) * 100 -

    -

    ->>> -print x -

    -

    -[ 0 100 200 300 400 500 600 700 800 900]

    -

    ->>> -print take(x, [[2,4],[1,2]]) -

    -

    -[[200 400]

    -

    - [100 200]]

    -

    -A typical example of using -take() - is to replace the grey values in an image according to a "translation table". For example, let's consider a brightening of a greyscale image. The -view() - function defined in the NumTut package automatically scales the input arrays to use the entire range of grey values, except if the input arrays are of typecode -'b' - unsigned bytes -- thus to test this brightening function, we'll first start by converting the greyscale floating point array to a greyscale byte array:

    -

    ->>> -BW = (greeceBW*256).astype('b') -

    -

    ->>> -view(BW) - # shows black and white picture

    -

    -We then create a table mapping the integers 0-255 to integers 0-255 using a "compressive nonlinearity":

    -

    ->>> -table = (255- arange(256)**2 / 256).astype('b') -

    -

    ->>> -view(table) - # shows the conversion curve

    -

    -To do the "taking" into an array of the right kind, we first create a blank image array with the same shape and typecode as the original array:

    -

    ->>> -BW2 = zeros(BW.shape, BW.typecode()) -

    -

    -and then perform the take() operation

    -

    ->>> -BW2.flat[:] = take(table, BW.flat) -

    -

    ->>> -view(BW2) -

    -
    -
    -
    -put (a, indices, values)
    -

    - -put - is the opposite of -take -. The values of the array -a - at the locations specified in -indices - are set to the corresponding value of -values -. The array -a -must be a contiguous array. The argument indices can be any integer sequence object with values suitable for indexing into the flat form of -a -. The argument -values - must be any sequence of values that can be converted to the typecode of -a -.

    -

    ->>> -x = arange(6) -

    -

    ->>> -put(x, [2,4], [20,40]) -

    -

    ->>> -print x -

    -

    -[ 0 1 20 3 40 5]

    -

    -Note that the target array -a - is not required to be one-dimensional. Since -a - is contiguous and stored in row-major order, the array -indices - can be treated as indexing -a -'s elements in storage order.

    -

    -The routine -put - is thus equivalent to the following (although the loop is in C for speed):

    -

    -ind = array(indices, copy=0)

    -

    -v = array(values, copy=0).astype(a.typecode())

    -

    -for i in len(ind): a.flat[i] = v[i]

    -
    -
    -
    -putmask (a, mask, values)
    -

    -putmask sets those elements of -a - for which -mask - is true to the corresponding -value - in values. The array a must be contiguous. The argument -mask - must be an integer sequence of the same size (but not necessarily the same shape) as -a -. The argument -values - will be repeated as necessary; in particular it can be a scalar. The array -values - must be convertible to the type of -a -.

    -
    -
    -
    ->>> -x=arange(5) -
    -
    -
    -
    ->>> -putmask(x, [1,0,1,0,1], [10,20,30,40,50]) -
    -
    -
    -
    ->>> -print x -
    -
    -
    -
    -[10 1 30 3 50]
    -
    -
    -
    ->>> -putmask(x, [1,0,1,0,1], [-1,-2]) -
    -
    -
    -
    ->>> print x
    -
    -
    -
    - -[-1 1 -1 3 -1] -
    -

    -Note how in the last example, the third argument was treated as if it was [-1, -2, -1, -2, -1].

    -
    -
    -transpose(a, axes=None)
    -

    - -transpose - takes an array and returns a new array which corresponds to a with the order of axes specified by the second argument. The default corresponds to flipping the order of all the axes (it is equivalent to -a.shape[::-1] - if a is the input array).

    -

    ->>> -print a -

    -

    -[[ 0 1 2 3 4]

    -

    - [ 5 6 7 8 9]

    -

    - [10 11 12 13 14]

    -

    - [15 16 17 18 19]]

    -

    ->>> -print transpose(a) -

    -

    -[[ 0 5 10 15]

    -

    - [ 1 6 11 16]

    -

    - [ 2 7 12 17]

    -

    - [ 3 8 13 18]

    -

    - [ 4 9 14 19]]

    -

    ->>> -greece.shape - # it's a 355x242 RGB picture
    -(355, 242, 3)

    -

    ->>> -view(greece) -

    -

    - -# picture of greek street is shown -

    -

    ->>> -view(transpose(greece, (1,0,2))) - -# swap x and y, not color axis! -

    -

    - -# picture of greek street is shown sideways -

    -
    -
    -
    -repeat(a, repeats, axis=0)
    -

    - -repeat - takes an array and returns an array with each element in the input array repeated as often as indicated by the corresponding elements in the second array. It operates along the specified axis. So, to stretch an array evenly, one needs the repeats array to contain as many instances of the integer scaling factor as the size of the specified axis:

    -

    ->>> -view(repeat(greece, 2*ones(greece.shape[0]))) - # double in X

    -

    ->>> -view(repeat(greece, 2*ones(greece.shape[1]), 1)) - # double in Y

    -
    -
    -
    -choose(a, (b0, ..., bn))
    -

    -a is an array of integers between 0 and n. The resulting array will have the same shape as a, with element selected from b0,...,bn as indicating by the value of the corresponding element in a.

    -

    -Assume a is an array -a - that you want to ``clip'' so that no values are greater than 100.0.

    -

    ->>> -choose(greater(a, 100.0), (a, 100.0)) -

    -

    -Everywhere that greater(a, 100.0) is false (ie. 0) this will ``choose'' the corresponding value in a. Everywhere else it will ``choose'' 100.0.

    -

    -This works as well with arrays. Try to figure out what the following does:

    -

    ->>> -ret = choose(greater_than(a,b), (c,d)) -

    -
    -
    -
    -ravel(a)
    -

    -returns the argument array -a - as a 1d array. It is equivalent to -reshape(a, (-1,)) - or -a.flat -. Unlike -a.flat -, however, -ravel - works with non-contiguous arrays.

    -

    ->>> -print x -

    -

    -[[ 0 1 2 3]

    -

    - [ 5 6 7 8]

    -

    - [10 11 12 13]]

    -

    ->>> -x.iscontiguous() -

    -

    -0

    -

    ->>> -x.flat -

    -

    -Traceback (innermost last):

    -

    - File "<stdin>", line 1, in ?

    -

    -ValueError: flattened indexing only available for contiguous array

    -

    ->>> -ravel(x) -

    -

    -array([ 0, 1, 2, 3, 5, 6, 7, 8, 10, 11, 12, 13])

    -
    -
    -
    -nonzero(a)
    -

    -nonzero() returns an array containing the indices of the elements in a that are nonzero. These indices only make sense for 1d arrays, so the function refuses to act on anything else. As of 1.0a5 this function does not work for complex arrays.

    -
    -
    -
    -where(condition, x, y)
    -

    -where(condition,x,y) returns an array shaped like condition and has elements of x and y where condition is respectively true or false

    -
    -
    -
    -compress(condition, a, axis=0)
    -

    -returns those elements of a corresponding to those elements of condition that are nonzero. condition must be the same size as the given axis of a.

    -

    ->>> -print x -

    -

    -[0 1 2 3]

    -

    ->>> -print greater(x, 2) -

    -

    -[0 0 0 1]

    -

    ->>> -print compress(greater(x, 2), x) -

    -

    -[3]

    -
    -
    -
    -diagonal(a, k=0)
    -

    -returns the entries along the k th diagonal of a (k is an offset from the main diagonal). This is designed for 2d arrays. For larger arrays, it will return the diagonal of each 2d sub-array.

    -

    ->>> -print x -

    -

    -[[ 0 1 2 3 4]

    -

    - [ 5 6 7 8 9]

    -

    - [10 11 12 13 14]

    -

    - [15 16 17 18 19]

    -

    - [20 21 22 23 24]]

    -

    ->>> -print diagonal(x) -

    -

    -[ 0 6 12 18 24]

    -

    ->>> -print diagonal(x, 1) -

    -

    -[ 1 7 13 19]

    -

    ->>> -print diagonal(x, -1) -

    -

    -[ 5 11 17 23]

    -
    -
    -
    -trace(a, k=0)
    -

    -returns the sum of the elements in a along the k th diagonal.

    -

    ->>> -print x -

    -

    -[[ 0 1 2 3 4]

    -

    - [ 5 6 7 8 9]

    -

    - [10 11 12 13 14]

    -

    - [15 16 17 18 19]

    -

    - [20 21 22 23 24]]

    -

    ->>> -print trace(x) - -# 0 + 6 + 12 + 18 + 24 -

    -

    -60

    -

    ->>> -print trace(x, -1) - -# 5 + 11 + 17 + 23 -

    -

    -56

    -

    ->>> -print trace(x, 1) - -# 1 + 7 + 13 + 19 -

    -

    -40

    -
    -
    -
    -searchsorted(a, values)
    -

    -Called with a rank-1 array sorted in ascending order, -searchsorted() - will return the indices of the positions in a where the corresponding values would fit.

    -

    ->>> -print bin_boundaries -

    -

    -[ 0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1. ]

    -

    ->>> -print data -

    -

    -[ 0.3029573 0.79585496 0.82714031 0.77993884 0.55069605 0.76043182

    -

    - 0.28511823 0.29987358 0.40286206 0.68617903]

    -

    ->>> -print searchsorted(bin_boundaries, data) -

    -

    -[4 8 9 8 6 8 3 3 5 7]

    -

    -This can be used for example to write a simple histogramming function:

    -

    ->>> -def histogram(a, bins): -

    -

    -... - n = searchsorted(sort(a), bins) -

    -

    -... -n = concatenate([n, [len(a)]]) -

    -

    -... -return n[1:]-n[:-1] -

    -

    -...

    -

    ->>> -print histogram([0,0,0,0,0,0,0,.33,.33,.33], arange(0,1.0,.1)) -

    -

    -[7 0 0 3 0 0 0 0 0 0]

    -

    ->>> -print histogram(sin(arange(0,10,.2)), arange(-1.2, 1.2, .1)) -

    -

    -[0 0 4 2 2 2 0 2 1 2 1 3 1 3 1 3 2 3 2 3 4 9 0 0]

    -
    -
    -
    -sort(a, axis=-1)
    -

    -This function returns an array containing a copy of the data in -a -, with the same shape as -a -, but with the order of the elements along the specified axis sorted. The shape of the returned array is the same as -a -'s. Thus, -sort(a, 3) - will be an array of the same shape as a, where the elements of a have been sorted along the fourth axis.

    -

    ->>> -print data -

    -

    -[[5 0 1 9 8]

    -

    - [2 5 8 3 2]

    -

    - [8 0 3 7 0]

    -

    - [9 6 9 5 0]

    -

    - [9 0 9 7 7]]

    -

    ->>> -print sort(data) - -# Axis -1 by default -

    -

    -[[0 1 5 8 9]

    -

    - [2 2 3 5 8]

    -

    - [0 0 3 7 8]

    -

    - [0 5 6 9 9]

    -

    - [0 7 7 9 9]]

    -

    ->>> -print sort(data, 0) -

    -

    -[[2 0 1 3 0]

    -

    - [5 0 3 5 0]

    -

    - [8 0 8 7 2]

    -

    - [9 5 9 7 7]

    -

    - [9 6 9 9 8]]

    -
    -
    -
    -argsort(a, axis=-1)
    -

    - -argsort - will return the indices of the elements of a needed to produce -sort(a) -. In other words, for a rank-1 array, -take(a, argsort(a)) == sort(a) -.

    -

    ->>> -print data -

    -

    -[5 0 1 9 8]

    -

    ->>> -print sort(data) -

    -

    -[0 1 5 8 9]

    -

    ->>> -print argsort(data) -

    -

    -[1 2 0 4 3]

    -

    ->>> -print take(data, argsort(data)) -

    -

    -[0 1 5 8 9]

    -
    -
    -
    -argmax(a, axis=-1), argmin(a, axis=-1)
    -

    -The -argmax() - function returns an array with the arguments of the maximum values of its input array a along the given axis. The returned array will have one less dimension than a. -argmin() - is just like -argmax() -, except that it returns the indices of the minima along the given axis.

    -

    ->>> -print data -

    -

    -[[9 6 1 3 0]

    -

    - [0 0 8 9 1]

    -

    - [7 4 5 4 0]

    -

    - [5 2 7 7 1]

    -

    - [9 9 7 9 7]]

    -

    ->>> -print argmax(data) -

    -

    -[0 3 0 2 0]

    -

    ->>> -print argmax(data, 0) -

    -

    -[0 4 1 1 4]

    -

    ->>> -print argmin(data) -

    -

    -[4 0 4 4 2]

    -

    ->>> -print argmin(data, 0) -

    -

    -[1 1 0 0 0]

    -
    -
    -
    -fromstring(string, typecode)
    -

    -Will return the array formed by the binary data given in string of the specified typecode. This is mainly used for reading binary data to and from files, it can also be used to exchange binary data with other modules that use python strings as storage ( -e.g. - PIL). Note that this representation is dependent on the byte order. To find out the byte ordering used, use the -byteswapped() - method described on byteswapped().

    -
    -
    -
    -dot(m1, m2)
    -

    -The -dot() - function returns the dot product of -m1 - and -m2 -. This is equivalent to matrix multiply for rank-2 arrays (without the transpose). Somebody who does more linear algebra really needs to do this function right some day!

    -
    -
    -
    -matrixmultiply(m1, m2)
    -

    -The -matrixmultiply(m1, m2) - multiplies matrices or matrices and vectors as matrices rather than elementwise. Compare:

    -

    ->>> -print a -

    -

    -[[0 1 2]

    -

    - [3 4 5]]

    -

    ->>> -print b -

    -

    -[1 2 3]

    -

    ->>> -print a*b -

    -

    -[[ 0 2 6]

    -

    - [ 3 8 15]]

    -

    ->>> -print matrixmultiply(a,b) -

    -

    -[ 8 26]

    -
    -
    -
    -clip(m, m_min, m_max)
    -

    -The clip function creates an array with the same shape and typecode as m, but where every entry in m that is less than m_min is replaced by m_min, and every entry greater than m_max is replaced by m_max. Entries within the range [m_min, m_max] are left unchanged.

    -

    ->>> -a = arange(9, Float) -

    -

    ->>> -clip(a, 1.5, 7.5) -

    -

    -1.5000 1.5000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 7.5000

    -
    -
    -
    -indices(shape, typecode=None)
    -

    -The indices function returns an array corresponding to the shape given. The array returned is an array of a new shape which is based on the specified shape, but has an added dimension of length the number of dimensions in the specified shape. For example, if the shape specified by the -shape - argument is (3,4), then the shape of the array returned will be (2,3,4) since the length of (3,4) is 2. The contents of the returned arrays are such that the ith subarray (along index 0, the first dimension) contains the indices for that axis of the elements in the array. An example makes things clearer:

    -

    ->>> -i = indices((4,3)) -

    -

    ->>> -i.shape -

    -

    -(2, 4, 3)

    -

    ->>> -print i[0] -

    -

    -[[0 0 0]

    -

    - [1 1 1]

    -

    - [2 2 2]

    -

    - [3 3 3]]

    -

    ->>> -print i[1] -

    -

    -[[0 1 2]

    -

    - [0 1 2]

    -

    - [0 1 2]

    -

    - [0 1 2]]

    -

    -So, -i[0] - has an array of the specified shape, and each element in that array specifies the index of that position in the subarray for axis 0. Similarly, each element in the subarray in -i[1] - contains the index of that position in the subarray for axis 1.

    -
    -
    -
    -swapaxes(a, axis1, axis2)
    -

    -Returns a new array which shares the data of -a -, but which has the two axes specified by -axis1 - and -axis2 - swapped. If -a - is of rank 0 or 1, swapaxes simply returns a new reference to -a -.

    -

    ->>> -x = arange(10) -

    -

    ->>> -x.shape = (5,2,1) -

    -

    ->>> -print x -

    -

    -[[[0]

    -

    - [1]]

    -

    - [[2]

    -

    - [3]]

    -

    - [[4]

    -

    - [5]]

    -

    - [[6]

    -

    - [7]]

    -

    - [[8]

    -

    - [9]]]

    -

    ->>> -y = swapaxes(x, 0, 2) -

    -

    ->>> -print y.shape -

    -

    -(1, 2, 5)

    -

    ->>> -print y -

    -

    -[ [[0 2 4 6 8]

    -

    - [1 3 5 7 9]]]

    -
    -
    -
    -concatenate((a0, a1, ... , an), axis=0)
    -

    -Returns a new array containing copies of the data contained in all arrays -a0 ... an -. The arrays ai will be concatenated along the specified axis (0 by default). All arrays ai must have the same shape along every axis except for the one given. To concatenate arrays along a newly created axis, you can use -array((a0, ..., an)) - as long as all arrays have the same shape.

    -

    ->>> -print x -

    -

    -[[ 0 1 2 3]

    -

    - [ 5 6 7 8]

    -

    - [10 11 12 13]]

    -

    ->>> -print concatenate((x,x)) -

    -

    -[[ 0 1 2 3]

    -

    - [ 5 6 7 8]

    -

    - [10 11 12 13]

    -

    - [ 0 1 2 3]

    -

    - [ 5 6 7 8]

    -

    - [10 11 12 13]]

    -

    ->>> -print concatenate((x,x), 1) -

    -

    -[[ 0 1 2 3 0 1 2 3]

    -

    - [ 5 6 7 8 5 6 7 8]

    -

    - [10 11 12 13 10 11 12 13]]

    -

    ->>> -print array((x,x) -)

    -

    -[[[ 0 1 2 3]

    -

    - [ 5 6 7 8]

    -

    - [10 11 12 13]]

    -

    - [[ 0 1 2 3]

    -

    - [ 5 6 7 8]

    -

    - [10 11 12 13]]]

    -
    -
    -
    -innerproduct(a, b)
    -

    -innerproduct produces the inner product of arrays a and b. It is equivalent to matrixmultiply(a, transpose(b)).

    -
    -
    -
    -outerproduct(a,b)
    -

    -outerproduct(a,b) produces the outer product of vectors a and b, that is result[i, j] = a[i] * b[j]

    -
    -
    -
    -array_repr()
    -

    -See section on Textual Representations of arrays.

    -
    -
    -
    -array_str()
    -

    -See section on Textual Representations of arrays.

    -
    -
    -
    -resize(a, new_shape)
    -

    -The -resize - function takes an array and a shape, and returns a new array with the specified shape, and filled with the data in the input array. Unlike the -reshape - function, the new shape does not have to yield the same size as the original array. If the new size of is less than that of the input array, the returned array contains the appropriate data from the "beginning" of the old array. If the new size is greater than that of the input array, the data in the input array is repeated as many times as needed to fill the new array.

    -

    ->>> -x = arange(10) -

    -

    ->>> -y = resize(x, (4,2)) -# note that 4*2 < 10

    -

    ->>> -print x -

    -

    -[0 1 2 3 4 5 6 7 8 9]

    -

    ->>> -print y -

    -

    -[[0 1]

    -

    - [2 3]

    -

    - [4 5]

    -

    - [6 7]]

    -

    ->>> -print resize(array((0,1)), (5,5)) -# note that 5*5 > 2

    -

    -[[0 1 0 1 0]

    -

    - [1 0 1 0 1]

    -

    - [0 1 0 1 0]

    -

    - [1 0 1 0 1]

    -

    - [0 1 0 1 0]]

    -
    -
    -
    -diagonal(a, offset=0, axis1=-2, axis2=-1)
    -

    -The diagonal function takes an array a, and returns an array of rank 1 containing all of the elements of a such that the difference between their indices along the specified axes is equal to the specified offset. With the default values, this corresponds to all of the elements of the diagonal of a along the last two axes. -Currently this is broken for offsets other than -1, 0 and 1, and for non-square arrays. -

    -
    -
    -
    -repeat (a, counts, axis=0)
    -

    -The repeat function uses repeated copies of a to create a result. The axis argument refers to the axis of x which will be replicated. The counts argument tells how many copies of each element to make. The length of counts must be the len(shape(a)[axis]).

    -

    -In one dimension this is straightforward:

    -

    ->>> y

    -

    -array([0, 1, 2, 3, 4, 5])

    -

    ->>> repeat(y, (1,2,0,2,2,3))

    -

    -array([0, 1, 1, 3, 3, 4, 4, 5, 5, 5])

    -

    - 

    -

    -In more than one dimension it sometimes gets harder to understand. Consider for example this array x whose shape is (2,3).

    -

    ->>> x

    -

    -array([[0, 1, 2],

    -

    - [3, 4, 5]])

    -

    - 

    -

    ->>> repeat(x, (2,6))

    -

    -array([[0, 1, 2],

    -

    - [0, 1, 2],

    -

    - [3, 4, 5],

    -

    - [3, 4, 5],

    -

    - [3, 4, 5],

    -

    - [3, 4, 5],

    -

    - [3, 4, 5],

    -

    - [3, 4, 5]])

    -

    - 

    -

    ->>> repeat(x, (6,3), 1)

    -

    -array([[0, 0, 0, 0, 0, 0, 1, 1, 1],

    -

    - [2, 2, 2, 2, 2, 2, 3, 3, 3]])

    -
    -
    -
    -convolve (a, v, mode=0)
    -

    -The convolve function returns the linear convolution of two rank 1 arrays. The output is a rank 1 array whose length depends on the value of mode which is zero by default. Linear convolution can be used to find the response of a linear system to an arbitrary input. If the input arrays correspond to the coefficients of a polynomial and mode=2, the output of linear convolution corresponds to the coefficients of the product of the polynomials.

    -

    -The mode parameter requires a bit of explanation. True linear convolution is only defined over infinite sequences. As both input arrays must represent finite sequences, the convolve operation assumes that the infinite sequences represented by the finite inputs are zero outside of their domain of definition. In other words, the sequences are zero-padded. If mode is 2, then the non-zero part of the full linear convolution is returned, so the output has length len (a)+len (v)-1. Call this output f. If mode is 0, then any part of f which was affected by the zero-padding is chopped from the result. In other words, let b be the input with smallest length and let c be the other input. The output when mode is 0 is the middle len (c)-len (b)+1 elements of f. When mode is 1, the output is the same size as c and is equal to the middle len (c) elements of f.

    -
    -
    -
    -cross_correlate (a, v, mode=0)
    -

    -The cross_correlate function computes the cross_correlation between two rank 1 arrays. The output is a rank 1 array representing the inner product of a with shifted versions of v. This is very similar to convolution. The difference is that convolution reverses the axis of one of the input sequences but cross_correlation does not. In fact it is easy to verify that convolve (a, v, mode) = cross_correlate (a, v [::-1], mode)

    -
    -
    -
    -where (condition, x, y)
    -

    -The where function creates an array whose values are those of x at those indices where condition is true, and those of y otherwise. The shape of the result is the shape of condition. The type of the result is determined by the types of x and y. Either or both of x and y and be a scalar, which is then used for any element of condition which is true.

    -
    -
    -
    -identity(n)
    -

    -The identity function returns an n by n array where the diagonal elements are 1, and the off-diagonal elements are 0.

    -

    ->>> -print identity(5) -

    -

    -[[1 0 0 0 0]

    -

    - [0 1 0 0 0]

    -

    - [0 0 1 0 0]

    -

    - [0 0 0 1 0]

    -

    - [0 0 0 0 1]]

    -
    -
    -
    -sum(a, index=0)
    -

    -The sum function is a synonym for the reduce method of the add ufunc. It returns the sum of all of the elements in the sequence given along the specified axis (first axis by default).

    -

    ->>> -print x -

    -

    -[[ 0 1 2 3]

    -

    - [ 4 5 6 7]

    -

    - [ 8 9 10 11]

    -

    - [12 13 14 15]

    -

    - [16 17 18 19]]

    -

    ->>> -print sum(x) -

    -

    -[40 45 50 55] # 0+4+8+12+16, 1+5+9+13+17, 2+6+10+14+18, ...

    -

    ->>> -print sum(x, 1) -

    -

    -[ 6 22 38 54 70] # 0+1+2+3, 4+5+6+7, 8+9+10+11, ...

    -
    -
    -
    -cumsum(a, index=0)
    -

    -The -cumsum - function is a synonym for the -accumulate - method of the -add - ufunc.

    -
    -
    -
    -product(a, index=0)
    -

    -The -product - function is a synonym for the -reduce - method of the -multiply - ufunc.

    -
    -
    -
    -cumproduct(a, index=0)
    -

    -The -cumproduct - function is a synonym for the -accumulate - method of the -multiply - ufunc.

    -
    -
    -
    -alltrue(a, index=0)
    -

    -The -alltrue - function is a synonym for the -reduce - method of the -logical_and - ufunc.

    -
    -
    -
    -sometrue(a, index=0)
    -

    -The -sometrue - function is a synonym for the -reduce - method of the -logical_or - ufunc.

    -
    -
    -
    -
    -

    -9. Array Methods

    -

    -As we discussed at the beginning of the last chapter, there are very few array methods for good reasons, and these all depend on the the implementation details. They're worth knowing, though:

    -
    -
    -itemsize()
    -

    -The itemsize() method applied to an array returns the number of bytes used by any one of its elements.

    -

    ->>> -a = arange(10) -

    -

    ->>> -a.itemsize() -

    -

    -4

    -

    ->>> -a = array([1.0]) -

    -

    ->>> -a.itemsize() -

    -

    -8

    -

    ->>> -a = array([1], Complex) -

    -

    ->>> -a.itemsize() -

    -

    -16

    -
    -
    -
    -iscontiguous()
    -

    -Calling an array's iscontiguous() method returns true if the memory used by A is contiguous. A non-contiguous array can be converted to a contiguous one by the copy() method. This is useful for interfacing to C routines only, as far as I know.

    -

    ->>> XXX example

    -
    -
    -
    -typecode()
    -

    -The `typecode()' method returns the typecode of the array it is applied to. While we've been talking about them as Float, Int, etc., they are represented internally as characters, so this is what you'll get:

    -

    ->>> -a = array([1,2,3]) -

    -

    ->>> -a.typecode() -

    -

    -'l'

    -

    ->>> -a = array([1], Complex) -

    -

    ->>> -a.typecode() -

    -

    -'D'

    -
    -
    -
    -byteswapped()
    -

    -The -byteswapped - method performs a byte swapping operation on all the elements in the array.

    -

    ->>> -print a -

    -

    -[1 2 3]

    -

    ->>> -print a.byteswapped() -

    -

    -[16777216 33554432 50331648]

    -
    -
    -
    -tostring()
    -

    -The -tostring - method returns a string representation of the data portion of the array it is applied to.

    -

    ->>> -a = arange(65,100) -

    -

    ->>> -print a.tostring() -

    -

    -A B C D E F G H I J K L M N O P Q R S T

    -

    -U V W X Y Z [ \ ] ^ _ ` a b c

    -
    -
    -
    -tolist()
    -

    -Calling an array's tolist() method returns a hierarchical python list version of the same array:

    -

    ->>> -print a -

    -

    -[[65 66 67 68 69 70 71]

    -

    - [72 73 74 75 76 77 78]

    -

    - [79 80 81 82 83 84 85]

    -

    - [86 87 88 89 90 91 92]

    -

    - [93 94 95 96 97 98 99]]

    -

    ->>> -print a.tolist() -

    -

    -[[65, 66, 67, 68, 69, 70, 71], [72, 73, 74, 75, 76, 77, 78], [79, 80, 81, 82, 83, 84, 85], [86, 87, 88, 89, 90, 91, 92], [93, 94, 95, 96, 97, 98, 99]]

    -
    -
    -
    -

    -10. Array Attributes

    -

    -We've already seen a very useful attribute of arrays, the shape attribute. There are three more, flat, real and imaginary.

    -
    -
    - -flat -
    -

    -Accessing the -flat - attribute of an array returns the flattened, or -ravel() -'ed version of that array, without having to do a function call. The returner array has the same number of elements as the input array, but is of rank-1. One cannot set the flat attribute of an array, but one can use the indexing and slicing notations to modify the contents of the array:

    -

    ->>> -print a -

    -

    -[[0 1 2]

    -

    - [3 4 5]

    -

    - [6 7 8]]

    -

    ->>> -print a.flat -

    -

    -[0 1 2 3 4 5 6 7 8]

    -

    ->>> -a.flat = arange(9,18) -

    -

    -Traceback (innermost last):

    -

    - File "<stdin>", line 1, in ?

    -

    -AttributeError: Attribute does not exist or cannot be set

    -

    ->>> -a.flat[4] = 100 -

    -

    ->>> -print a -

    -

    -[[ 0 1 2]

    -

    - [ 3 100 5]

    -

    - [ 6 7 8]]

    -

    ->>> -a.flat[:] = arange(9, 18) -

    -

    ->>> -print a -

    -

    -[[ 9 10 11]

    -

    - [12 13 14]

    -

    - [15 16 17]]

    -

    - 

    -
    -
    -
    - -real - and -imaginary -
    -

    -These attributes exist only for complex arrays. They return respectively arrays filled with the real and imaginary parts of their elements. -.imag - is a synonym for -.imaginary -. The arrays returned are not contiguous (except for arrays of length 1, which are always contiguous.). -.real -, -.imag - and -.imaginary - are modifiable:

    -

    ->>> -print x -

    -

    -[ 0. +1.j 0.84147098+0.54030231j 0.90929743-0.41614684j]

    -

    ->>> -print x.real -

    -

    -[ 0. 0.84147098 0.90929743]

    -

    ->>> -print x.imag -

    -

    -[ 1. 0.54030231 -0.41614684]

    -

    ->>> -x.imag = arange(3) -

    -

    ->>> -print x -

    -

    -[ 0. +0.j 0.84147098+1.j 0.90929743+2.j]

    -

    ->>> -x = reshape(arange(10), (2,5)) + 0j - # make complex array

    -

    ->>> -print x -

    -

    -[[ 0.+0.j 1.+0.j 2.+0.j 3.+0.j 4.+0.j]

    -

    - [ 5.+0.j 6.+0.j 7.+0.j 8.+0.j 9.+0.j]]

    -

    ->>> -print x.real -

    -

    -[[ 0. 1. 2. 3. 4.]

    -

    - [ 5. 6. 7. 8. 9.]]

    -

    ->>> -print x.typecode(), x.real.typecode() -

    -

    -D d

    -

    ->>> -print x.itemsize(), x.imag.itemsize() -

    -

    -16 8

    -
    -
    -
    -

    -11. Special Topics

    -

    -This chapter holds miscellaneous information which did not neatly fit in any of the other chapters.

    -
    -
    -Subclassing
    -

    -Subclassing Numeric arrays is not possible due to a limitation of Python. The approach taken in the Masked Array facility (Masked Arrays) is one answer. UserArray.py, described below, can be subclassed, but this is often unsatisfactory unless you put in a similar effort to that in MA.

    -
    -
    -
    -Code Organization
    -
    -
    -Numeric.py and friends
    -

    - -Numeric.py - is the most commonly used interface to the Numeric extensions. It is a Python module which imports all of the exported functions and attributes from the -multiarray - module, and then defines some utility functions. As some of the functions defined in -Numeric.py - could someday be moved into a supporting C module, the utility functions and the -multiarray - object are documented together, in this section. The -multiarray - objects are the core of Numeric Python - they are extension types written in C which are designed to provide both space- and time-efficiency when manipulating large arrays of homogeneous data types, with special emphasis to numeric data types.

    -
    -
    -
    -UserArray.py
    -

    -In the tradition of -UserList.py - and -UserDict.py -, the -UserArray.py - module defines a class whose instances act in many ways like array objects.

    -
    -
    -
    -Matrix.py
    -

    -The -Matrix.py - python module defines a class -Matrix - which is a subclass of -UserArray -. The only differences between -Matrix - instances and -UserArray - instances is that the -* - operator on -Matrix - performs a matrix multiplication, as opposed to element-wise multiplication, and that the power operator -** - is disallowed for -Matrix - instances.

    -
    -
    -
    -Precision.py
    -

    -The Precision.py module contains the code which is used to determine the mapping between typecode names and values, by building small arrays and looking at the number of bytes they use per element.

    -
    -
    -
    -ArrayPrinter.py
    -

    -The ArrayPrinter.py module defines the functions used for default printing of arrays. See the section on Textual Representations of arrays on Textual representations of arrays,

    -
    -
    -
    -Mlab.py
    -

    -The Mlab.py module provides some functions which are compatible with the functions of the same name in the MATLAB programming language. These are:

    -
    -
    -bartlett(M)
    -

    -returns the M-point Bartlett window.

    -
    -
    -
    -blackman(M)
    -

    -returns the M-point Blackman window.

    -
    -
    -
    -corrcoef(x, y=None)
    -

    -The correlation coefficient

    -
    -
    -
    -cov(m,y=None)
    -

    -returns the covariance

    -
    -
    -
    -cumprod(m)
    -

    -returns the cumulative product of the elments along the first dimension of m.

    -
    -
    -
    -cumsum(m)
    -

    -returns the cumulative sum of the elements along the first dimension of m.

    -
    -
    -
    -diag(v, k=0)
    -

    -returns the k-th diagonal if v is a matrix or returns a matrix with v as the k-th diagonal if v is a vector.

    -
    -
    -
    -diff(x, n=1)
    -

    -calculates the first-order, discrete difference approximation to the derivative.

    -
    -
    -
    -eig(m)
    -

    -returns the the eigenvalues of m in x and the corresponding eigenvectors in the rows of v.

    -
    -
    -
    -eye(N, M=N, k=0, typecode=None)
    -

    -returns a N-by-M matrix where the k-th diagonal is all ones, and everything else is zeros.

    -
    -
    -
    -fliplr(m)
    -

    -returns a 2-D matrix m with the rows preserved and columns flipped in the left/right direction. Only works with 2-D arrays.

    -
    -
    -
    -flipud(m)
    -

    -returns a 2-D matrix with the columns preserved and rows flipped in the up/down direction. Only works with 2-D arrays.

    -
    -
    -
    -hamming(M)
    -

    -returns the M-point Hamming window.

    -
    -
    -
    -hanning(M)
    -

    -returns the M-point Hanning window.

    -
    -
    -
    -kaiser(M, beta)
    -

    -returns a Kaiser window of length M with shape parameter beta. It depends on the cephes module for the modified bessel function i0.

    -
    -
    -
    -max(m)
    -

    -returns the maximum along the first dimension of m.

    -
    -
    -
    -mean(m)
    -

    -returns the mean along the first dimension of m. Note: if m is an integer array, integer division will occur.

    -
    -
    -
    -median(m)
    -

    -returns a mean of m along the first dimension of m.

    -
    -
    -
    -min(m)
    -

    -returns the minimum along the first dimension of m.

    -
    -
    -
    -msort(m)
    -

    -returns a sort along the first dimension of m as in MATLAB.

    -
    -
    -
    -prod(m)
    -

    -returns the product of the elements along the first dimension of m.

    -
    -
    -
    -ptp(m)
    -

    -returns the maximum - minimum along the first dimension of m.

    -
    -
    -
    -rand(d1, ..., dn)
    -

    -returns a matrix of the given dimensions which is initialized to random numbers from a uniform distribution in the range [0,1).

    -
    -
    -
    -rot90(m,k=1)
    -

    -returns the matrix found by rotating m by k*90 degrees in the counterclockwise direction.

    -
    -
    -
    -sinc(x)
    -

    -returns sin(pi*x)/(pi*x) at all points of array x.

    -
    -
    -
    -squeeze(a)
    -

    -removes any ones from the shape of a

    -
    -
    -
    -std(m)
    -

    -returns the standard deviation along the first dimension of m. The result is unbiased meaning division by len(m)-1.

    -
    -
    -
    -sum(m)
    -

    -returns the sum of the elements along the first dimension of m.

    -
    -
    -
    -svd(m)
    -

    -return the singular value decomposition of m [u,x,v]

    -
    -
    -
    -trapz(y,x=None)
    -

    -integrates y = f(x) using the trapezoidal rule.

    -
    -
    -
    -tri(N, M=N, k=0, typecode=None)
    -

    -returns a N-by-M matrix where all the diagonals starting from lower left corner up to the k-th are all ones.

    -
    -
    -
    -tril(m,k=0)
    -

    -returns the elements on and below the k-th diagonal of m. k=0 is the main diagonal, k > 0 is above and k < 0 is below the main diagonal.

    -
    -
    -
    -triu(m,k=0)
    -

    -returns the elements on and above the k-th diagonal of m. k=0 is the main diagonal, k > 0 is above and k < 0 is below the main diagonal.

    -
    -
    -
    -
    -
    -The multiarray object
    -

    -The array objects which Numeric Python manipulates is actually a multiarray object, given this name to distinguish it from the one-dimensional array object defined in the standard array module. From here on, however, the terms array and multiarray will be used interchangeably to refer to the new object type. multiarray objects are homogeneous multidimensional sequences. Starting from the back, they are sequences. This means that they are container (compound) objects, which contain references to other objects. They are multidimensional, meaning that unlike standard Python sequences which define only a single dimension along which one can iterate through the contents, multiarray objects can have up to 40 dimensions.1 Finally, they are homogeneous. This means that every object in a multiarray must be of the same type. This is done for efficiency reasons -- storing the type of the contained objects once in the array means that the process of finding the type-specific operation to operate on each element in the array needs to be done only once per array, as opposed to once per element. Furthemore, as the main purpose of these arrays is to process numbers, the numbers can be stored directly, and not as full-fledged Python objects (PyObject *), thus yielding memory savings. It is however possible to make arrays of Python objects, which relinquish both the space and time efficiencies but allow heterogeneous contents (as we shall see, these arrays are still homogeneous from the Numeric perspective, they are just arrays of Python object references).

    -
    -
    -
    -Typecodes
    -

    -The kind of number stored in an array is described by its typecode. This code is stored internally as a single-character Python string, but more descriptive names corresponding to the typecodes are made available to the Python programmer in the Precision.py module. The typecodes are defined as follows:

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -Typecode Listing
    -
    -

    -Variable defined in
    - -Typecode - module

    -
    -

    -Typecode
    -character

    -
    -

    -Description

    -
    -

    - -Char -

    -
    -

    - -'c' -

    -
    -

    -Single-character strings

    -
    -

    - -PyObject -

    -
    -

    - -'O' -

    -
    -

    -Reference to Python object

    -
    -

    - -UnsignedInt8 -

    -
    -

    - -'b' -

    -
    -

    -Unsigned integer using a single byte.

    -
    -

    - -Int -

    -
    -

    - -'l' -

    -
    -

    -Python standard integers (i.e. C long integers)

    -
    -

    - -Float -

    -
    -

    - -'d' -

    -
    -

    -Python standard floating point numbers
    -(i.e. C double-precision floats)

    -
    -

    -n/a

    -
    -

    - -'f' -

    -
    -

    -Single-precision floating point numbers

    -
    -

    - -Complex -

    -
    -

    - -'D' -

    -
    -

    -Complex numbers consisting of two double-precision floats

    -
    -

    -n/a

    -
    -

    - -'F' -

    -
    -

    -Complex numbers consisting of two single-precision floats

    -
    -

    - -Int0, Int8, Int16, Int32, Int64, Int128 -

    -
    -

    -n/a

    -
    -

    -These correspond to machine-dependent typecodes: -Int0 - returns the typecode corresponding to the smallest available integer, -Int8 - that corresponding to the smallest available integer with at least 8 bits, -Int16 - that with at least 16 bits, etc. If a typecode is not available (e.g. -Int64 - on a 32-bit machine), the variable is not defined.

    -
    -

    - -Float0, Float8, Float16, Float32, Float64, Float128 -

    -
    -

    -n/a

    -
    -

    -Same as -Int0 -, -Int8 - etc. except for floating point numbers.

    -
    -

    - -Complex0, Complex8, Complex16, Complex32, Complex64, Complex128 -

    -
    -

    -n/a

    -
    -

    -Same as -Float0 -, etc., except that the number of bits refers to the precision of each of the two (real and imaginary) parts of the complex number.

    -
    -

    -Note on number fomat: the binary format used by Python is that of the underlying C library. [notes about IEEE formats, etc?]

    -
    -
    -
    -Indexing in and out, slicing
    -

    -Indexing arrays works like indexing of other Python sequences, but supports some extensions which are as of yet not implemented for other sequence types2. The standard [start:stop] notation is supported, with start defaulting to 0 (the first index position) and stop defaulting to the length of the sequence, as for lists and tuples. In addition, there is an optional stride argument, which specifies the stride size between successive indices in the slice. It is expressed by a integer following a second : immediately after the usual start:stop slice. Thus -[0:11:2] - will slice the array at indices 0, 2, 4, .. 10. The start and stop indices are optional, but the first : must be specified for the stride interpretation to occur. Therefore, -[::2] - means slice from beginning to end, with a stride of 2 (i.e. skip an index for each stride). If the start index is omitted and the stride is negative, the indexing starts from the end of the sequence and works towards the beginning of the sequence. If the stop index is omitted and the stride is negative, the indexing stops at the beginning of the sequence.

    -

    ->>> -print x -

    -

    -[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19]

    -

    ->>> -print x[10] -

    -

    -10

    -

    ->>> -print x[:10] -

    -

    -[0 1 2 3 4 5 6 7 8 9]

    -

    ->>> -print x[5:15:3] -

    -

    -[ 5 8 11 14]

    -

    ->>> -print x[:10:2] -

    -

    -[0 2 4 6 8]

    -

    ->>> -print x[10::-2] -

    -

    -[10 8 6 4 2 0]

    -

    ->>> -print x[::-1] -

    -

    -[19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0]

    -

    -It is important to note that the out-of-bounds conditions follow the same rules as standard Python indexing, so that slices out of bounds are trimmed to the sequence boundaries, but element indexing with out-of-bound indices yields an IndexError:

    -

    ->>> -print x[:100] -

    -

    -[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19]

    -

    ->>> -print x[-200:4] -

    -

    -[0 1 2 3]

    -

    ->>> -x[100] -

    -

    -Traceback (innermost last):

    -

    - File "<stdin>", line 1, in ?

    -

    -IndexError: index out of bounds

    -

    -The second difference between array indexing and other sequences is that arrays provide multidimensional indexing. An array of rank N can be indexed with up to N indices or slices (or combinations thereof. Indices should be integers (with negative integers indicating offsets from the end of the dimension, as for other Python sequences), and slices can have, as explained above, one or two :'s separating integer arguments. These indices and slies must be separated by commas, and correspond to sequential dimensions starting from the leftmost (first) index on. Thus -a[3] - means index 3 along dimension 0. -a[3,:,-4] - means the slice of a along three dimensions: index 3 along the first dimension, the entire range of indices along the second dimension, and the 4th from the end index along the third dimension. If the array being indexed has more dimensions than are specified in the multidimensional slice, those dimensions are assumed to be sliced from beginning to end. Thus, if -a - is a rank 3 array,

    -
    -
    -
    - -a[0] == a[0,:] == a[0,:,:] -
    -
    -
    -Ellipses
    -

    -A special slice element called Ellipses (and written -... -) is used to refer to a variable number of slices from beginning to end along the current dimension. It is a shorthand for a set of such slices, specifically the number of dimensions of the array being indexed minus those which are already specified. Only the first (leftmost) Ellipses in an multidimensional slice is expanded, while the others are single dimensional slices from beginning to end.

    -

    -Thus, if -a - is a rank-6 array,

    -
    -
    -
    -
    - -a[3,:,:,:,-1,:] == a[3,...,-1,:] == a[3,...,-1,...] -.
    -
    -
    -NewAxis
    -

    -There is another special symbol which can be used inside indexing operations to create new dimensions in the returned array. The reference NewAxis, used as one of the comma-separated slice elements, does not change the selection of the subset of the array being indexed, but changes the shape of the array returned by the indexing operation, so that an additional dimension (of length 1) is created, at the dimension position corresponding to the location of NewAxis within the indexing sequence. Thus, -a[:,3,NewAxis,-3] - will perform the indexing of a corresponding to the slice -[a:,3,-3] -, but will also modify the shape of a so that the new shape of -a - is -(a.shape[0], a.shape[1], 1, a.shape[2]) -. This operation is especially useful in conjunction with the broadcasting feature described next, as it replaces a lengthy but common operation with a simple notation (in the example above, the same effect can be had with

    -

    - -reshape(a[:,3,-1], (a.shape[0], a.shape[1], 1, a.shape[2])). -

    -
    -
    -
    -Set-indexing and Broadcasting
    -

    -The indexing rules described so far specify exactly the behavior of get-indexing. For set-indexing, the rules are exactly the same, and describe the slice of the array on the left hand side of the assignment operator which is the target of the assignment. The only point left to mention is the process of assigning from the source (on the right hand side of the assignment) to the target (on the left hand side).

    -

    -If both source and target have the same shape, then the assignment is done element by element. The typecode of the target specifies the casting which can be applied in the case of a typecode mismatch between source and target. If the typecode of the source is "lower" than that of the target, then an 'up-cast' is performed and no loss in precision results. If the typecode of the source is "higher" than that of the target, then a downcast is performed, which may lose precision (as discussed in the description of the array call, these casts are truncating casts, not rounding casts). Complex numbers cannot be cast to non-complex numbers.

    -

    -If the source and the target have different shapes, Numeric Python attempts to broadcast the contents of the source over the range of the target. This broadcasting occurs for all dimensions where the source has dimension 1 or 0 (i.e., is absent). If there exists a dimension for which the two arrays have differing lengths, and the length of that dimension in the source is not 1, then the assignment fails and an exception (ValueError) is raised, notifying the user that the arrays are not aligned.

    -
    -
    -
    -Axis specifications
    -

    -In many of the functions defined in this document, indices are used to refer to axes. The numbering scheme is the same as that used by indexing in Python: the first (leftmost) axis is axis 0, the second axis is axis 1, etc. Axis -1 refers to the last axis, -2 refers to the next-to-last axis, etc.

    -
    -
    -
    -Textual representations of arrays
    -

    -The algorithm used to display arrays as text strings is defined in the file ArrayPrinter.py, which defines a function array2string (imported into Numeric's namespace) which offers considerable control over how arrays are output. The range of options to the array2string function will be described first, followed by a description of which options are used by default by -str - and -repr -.

    -

    -Note that the optional package MA, if imported, modifies this process so that very long arrays are not printed; rather, a summary of their shape and type are shown. You may wish to import MA even if you do not use it otherwise, to get this effect, because without it accidentally attempting to print a very long array can take a very long time to convert, giving the appearance that the program has hung.

    -

    -array2string(a, max_line_width = None, precision = None,
    -suppress_small = None, separator=' ', array_output=0):

    -

    -The -array2string - function takes an array and returns a textual representation of it. Each dimension is indicated by a pair of matching square brackets ( -[] -), within which each subset of the array is output. The orientation of the dimensions is as follows: the last (rightmost) dimension is always horizontal, so that the frequent rank-1 arrays use a minimum of screen real-estate. The next-to-last dimension is displayed vertically if present, and any earlier dimension is displayed with additional bracket divisions. For example:

    -

    ->>> -a = arange(24) -

    -

    ->>> -print array2string(a) -

    -

    -[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]

    -

    ->>> -a.shape = (2,10) -

    -

    ->>> -print array2string(a) -

    -

    -[[ 0 1 2 3 4 5 6 7 8 9 10 11]

    -

    - [12 13 14 15 16 17 18 19 20 21 22 23]]

    -

    ->>> -a.shape = (2,3,4) -

    -

    ->>> -print array2string(a) -

    -

    -[[[ 0 1 2 3]

    -

    - [ 4 5 6 7]

    -

    - [ 8 9 10 11]]

    -

    - [[12 13 14 15]

    -

    - [16 17 18 19]

    -

    - [20 21 22 23]]]

    -

    -The -max_line_width - argument specifies the maximum number of characters which the array2string routine uses in a single line. If it is set to -None -, then the value of the -sys.output_line_width - attribute is looked up. If it exists, it is used. If not, the default of 77 characters is used.

    -

    ->>> -print array2string(x) -

    -

    -[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

    -

    - 26 27 28 29]

    -

    ->>> -sys.output_line_width = 30 -

    -

    ->>> -print array2string(x) -

    -

    -[ 0 1 2 3 4 5 6 7 8 9

    -

    - 10 11 12 13 14 15 16 17

    -

    - 18 19 20 21 22 23 24 25

    -

    - 26 27 28 29]

    -

    -The -precision - argument specifies the number of digits after the decimal point which are used. If a value of -None - is used, the value of the -sys.float_output_precision - is looked up. If it exists, it is used. If not, the default of 8 digits is used.

    -

    ->>> -x = array((10.11111111111123123111, pi)) -

    -

    ->>> -print array2string(x) -

    -

    -[ 10.11111111 3.14159265]

    -

    ->>> -print array2string(x, precision=3) -

    -

    -[ 10.111 3.142]

    -

    ->>> -sys.float_output_precision = 2 -

    -

    ->>> -print array2string(x) -

    -

    -[ 10.11 3.14]

    -

    -The -suppress_small - argument specifies whether small values should be suppressed (and output as 0). If a value of -None - is used, the value of the -sys.float_output_suppress_small - is looked up. If it exists, it is used (all that matters is whether it evaluates to true or false). If not, the default of 0 (false) is used. This variable also interacts with the precision parameters, as it can be used to suppress the use of exponential notation.

    -

    ->>> -print x -

    -

    -[ 1.00000000e-005 3.14159265e+000]

    -

    ->>> -print array2string(x) -

    -

    -[ 1.00000000e-005 3.14159265e+000]

    -

    ->>> -print array2string(x, suppress_small=1) -

    -

    -[ 0.00001 3.14159265]

    -

    ->>> -print array2string(x, precision=3) -

    -

    -[ 1.000e-005 3.142e+000]

    -

    ->>> -print array2string(x, precision=3, suppress_small=1) -

    -

    -[ 0. 3.142]

    -

    -The -separator - argument is used to specify what character string should be placed between two numbers which do not straddle a dimension. The default is a single space.

    -

    ->>> -print array2string(x) -

    -

    -[ 0 100 200 300 400 500 600 700 800 900 100]

    -

    ->>> -print array2string(x, separator = ', ') -

    -

    -[ 0, 100, 200, 300, 400, 500, 600, 700, 800, 900, 100]

    -

    -Finally, the last attribute, array_output, specifies whether to prepend the string "array(" and append either the string ")" or ", 'X')" where X is a typecode for non-default typecodes (in other words, the typecode will only be displayed if it is not that corresponding to Float, Complex or Int, which are the standard typecodes associated with floating point numbers, complex numbers and integers respectively). The array() is so that an eval of the returned string will return an array object (provided a comma separator is also used).

    -

    ->>> -array2string(arange(3)) -

    -

    -[0 1 2]

    -

    ->>> -eval(array2string(arange(3), array_output=1)) -

    -

    -Traceback (innermost last):

    -

    - File "<stdin>", line 1, in ?

    -

    - File "<string>", line 1

    -

    - array([0 1 2])

    -

    - ^

    -

    -SyntaxError: invalid syntax

    -

    ->>> -type(eval(array2string(arange(3), array_output=1, separator=','))) -

    -

    -<type 'array'>

    -

    ->>> -array2string(arange(3), array_output=1) -

    -

    -'array([0, 1, 2])'

    -

    ->>> -array2string(zeros((3,), 'i') + arange(3), array_output=1) -

    -

    -"array([0, 1, 2],'i')"

    -

    -The -str - and -repr - operations on arrays call -array2string - with the -max_line_width -, -precision - and -suppress_small - all set to None, meaning that the defaults are used, but that modifying the attributes in the -sys - module will affect array printing. str uses the default separator and does not use the array() text, while repr uses a comma as a separator and does use the array(...) text.

    -

    ->>> -x = arange(3) -

    -

    ->>> -print x -

    -

    -[0 1 2]

    -

    ->>> -str(x) -

    -

    -'[0 1 2]'

    -

    ->>> -repr(x) -

    -

    -'array([0, 1, 2])' # note the array(...) and ,'s

    -

    ->>> -x = arange(0,.01,.001) -

    -

    ->>> -print x -

    -

    -[ 0. 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009]

    -

    ->>> -import sys -

    -

    ->>> -sys.float_output_precision = 2 -

    -

    ->>> -print x -

    -

    -[ 0. 0. 0. 0. 0. 0.01 0.01 0.01 0.01 0.01]

    -
    -
    -
    -Comparisons
    -

    -Comparisons of multiarray objects results using the normal comparison operators (such as == or >) result in exceptions. Python requires that the result of a comparison be a scalar, not the vector we would want as the result of elementwise comparison.

    -

    -Therefore, for comparisons you must use the routines for comparison describe in Logical Ufuncs.

    -
    -
    -
    -Pickling and Unpickling -- storing arrays on disk
    -

    -This documentation has not yet been written, but pickling of Numeric arrays is possible.

    -
    -
    -
    -Dealing with floating point exceptions
    -

    -Attempts to use NaN's as missing values have proven frustrating and not very portable. Consider Masked Arrays instead.

    -

    -fpectl should be documented here ...

    -
    -
    -
    -
    -

    -12. Writing a C extension to NumPy

    -
    -
    -Introduction
    -

    -There are two applications that require using the NumPy array type in C extension modules:

    -
      -
    • -Access to numerical libraries: Extension modules can be used to make numerical libraries written in C (or languages linkable to C, such as Fortran) accessible to Python programs. The NumPy array type has the advantage of using the same data layout as arrays in C and Fortran.
    • -
    • -Mixed-language numerical code: In most numerical applications, only a small part of the total code is CPU time intensive. Only this part should thus be written in C, the rest can be written in Python. NumPy arrays are important for the interface between these two parts, because they provide equally simple access to their contents from Python and from C.
    • -
    -

    -This document is a tutorial for using NumPy arrays in C extensions.

    -
    -
    -
    -Preparing an extension module for NumPy arrays
    -

    -To make NumPy arrays available to an extension module, it must include the header file -arrayobject.h -, after the header file Python.h that is obligatory for all extension modules. The file -arrayobject.h - comes with the NumPy distribution; depending on where it was installed on your system you might have to tell your compiler how to find it. By default Distutils installed in a subdirectory Numeric in your Python include path, and so you should include it this way:

    -

    -#include "Numeric/arrayobject.h"

    -
    -
    -
    -
    -
    -  -

    -Is your C extension using Numeric blowing up? Maybe you didn't call import_array().

    -
    -
    -
    -
    -
    -  -

    -In addition to including -arrayobject.h -, the extension must call -import_array() - in its initialization function, after the call to -Py_InitModule() -. This call makes sure that the module which implements the array type has been imported, and initializes a pointer array through which the NumPy functions are called. If you forget this call, your extension module will crash on the first call to a NumPy function! If you will be manipulating ufunc objects, you should also include the file -ufuncobject.h -, also available as part of the NumPy distribution in the -Include - directory and usually installed in subdirectory Numeric.

    -

    -All of the rules related to writing extension modules for Python apply. The reader unfamiliar with these rules is encouraged to read the standard text on the topic, "Extending and Embedding the Python Interpreter," available as part of the standard Python documentation distribution.

    -
    -
    -
    -
    -
    -Accessing NumPy arrays from C
    -
    -
    -Types and Internal Structure
    -

    -NumPy arrays are defined by the structure -PyArrayObject -, which is an extension of the structure -PyObject -. Pointers to -PyArrayObject - can thus safely be cast to -PyObject - pointers, whereas the inverse is safe only if the object is known to be an array. The type structure corresponding to array objects is -PyArray_Type -. The structure -PyArrayObject - has four elements that are needed in order to access the array's data from C code:

    -
    -
    -
    - -int nd -
    -

    -The number of dimensions in the array.

    -
    -
    -
    - -int *dimensions -
    -

    -A pointer to an array of -nd - integers, describing the number of elements along each dimension. The sizes are in the conventional order, so that for any array -a -,
    - -a.shape==(dimensions[0], dimensions[1], ..., dimensions[nd]) -.

    -
    -
    -
    - -int *strides -
    -

    -A pointer to an array of -nd - integers, describing the address offset between two successive data elements along each dimension. Note that strides can also be negative! Each number gives the number of bytes to add to a pointer to get to the next element in that dimension. For example, if -myptr - currently points to element of a rank-5 array at indices -1,0,5,3,2 - and you want it to point to element -1,0,5,4,2 - then you should add -strides[3] - to the pointer: -myptr += strides[3] -. This works even if (and is especially useful when) the array is not contiguous in memory.

    -
    -
    -
    - -char *data -
    -

    -A pointer to the first data element of the array.

    -

    -The address of a data element can be calculated from its indices and the data and strides pointers. For example, element -[i, j] - of a two-dimensional array has the address -data + i*array->strides[0] + j*array->strides[1] -. Note that the stride offsets are in bytes, not in storage units of the array elements. Therefore address calculations must be made in bytes as well, starting from the data pointer, which is always a char pointer. To access the element, the result of the address calculation must be cast to a pointer of the required type. The advantage of this arrangement is that purely structural array operations (indexing, extraction of subarrays, etc.) do not have to know the type of the array elements.

    -
    -
    -Element data types
    -

    -The type of the array elements is indicated by a type number, whose possible values are defined as constants in -arrayobject.h -, as given in Table 3.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -C constants corresponding to storage types
    -
    -

    -Constant

    -
    -

    -element data type

    -
    -

    - -PyArray_CHAR -

    -
    -

    - -char -

    -
    -

    - -PyArray_UBYTE -

    -
    -

    - -unsigned char -

    -
    -

    - -PyArray_SBYTE -

    -
    -

    - -signed char -

    -
    -

    - -PyArray_SHORT -

    -
    -

    - -short -

    -
    -

    - -PyArray_INT -

    -
    -

    - -int -

    -
    -

    - -PyArray_LONG -

    -
    -

    - -long -

    -
    -

    - -PyArray_FLOAT -

    -
    -

    - -float -

    -
    -

    - -PyArray_DOUBLE -

    -
    -

    - -double -

    -
    -

    - -PyArray_CFLOAT -

    -
    -

    - -float[2] -

    -
    -

    - -PyArray_CDOUBLE -

    -
    -

    - -double[2] -

    -
    -

    - -PyArray_OBJECT -

    -
    -

    - -PyObject * -

    -
    -

    -The type number is stored in -array->descr->type_num -. Note that the names of the element type constants refer to the C data types, not the Python data types. A Python -int - is equivalent to a C -long -, and a Python -float - corresponds to a C -double -. Many of the element types listed above do not have corresponding Python scalar types (e.g. -PyArray_INT -).

    -
    -
    -
    -Contiguous arrays
    -

    -An important special case of a NumPy array is the contiguous array. This is an array whose elements occupy a single contiguous block of memory and have the same order as a standard C array. In a contiguous array, the value of -array->strides[i] - is equal to the size of a single array element times the product of -array->dimensions[j] - for -j - up to -i-1 -. Arrays that are created from scratch are always contiguous; non-contiguous arrays are the result of indexing and other structural array operations. The main advantage of contiguous arrays is easier handling in C; the pointer -array->data - is cast to the required type and then used like a C array, without any reference to the stride values. This is particularly important when interfacing to existing libraries in C or Fortran, which typically require this standard data layout. A function that requires input arrays to be contiguous must call the conversion function -PyArray_ContiguousFromObject() -, described in the section "Accepting input data from any sequence type".

    -
    -
    -
    -Zero-dimensional arrays
    -

    -NumPy permits the creation and use of zero-dimensional arrays, which can be useful to treat scalars and higher-dimensional arrays in the same way. However, library routines for general use should not return zero-demensional arrays, because most Python code is not prepared to handle them. Moreover, zero-dimensional arrays can create confusion because they behave like ordinary Python scalars in many circumstances but are of a different type. A comparison between a Python scalar and a zero-dimensional array will always fail, for example, even if the values are the same. NumPy provides a conversion function from zero-dimensional arrays to Python scalars, which is described in the section "Returning arrays from C functions".

    -
    -
    -
    -
    -
    -A simple example
    -

    -The following function calculates the sum of the diagonal elements of a two-dimensional array, verifying that the array is in fact two-dimensional and of type -PyArray_DOUBLE -.

    -

    -static PyObject *

    -

    -trace(PyObject *self, PyObject *args)

    -

    -{

    -

    - PyArrayObject *array;

    -

    - double sum;

    -

    - int i, n;

    -

    - 

    -

    - if (!PyArg_ParseTuple(args, "O!",

    -

    - &PyArray_Type, &array))

    -

    - return NULL;

    -

    - if (array->nd != 2 || array->descr->type_num != PyArray_DOUBLE) {

    -

    - PyErr_SetString(PyExc_ValueError,

    -

    - "array must be two-dimensional and of type float");

    -

    - return NULL;

    -

    - }

    -

    - 

    -

    - n = array->dimensions[0];

    -

    - if (n > array->dimensions[1])

    -

    - n = array->dimensions[1];

    -

    - sum = 0.;

    -

    - for (i = 0; i < n; i++)

    -

    - sum += *(double *)(array->data + i*array->strides[0] + i*array->strides[1]);

    -

    - 

    -

    - return PyFloat_FromDouble(sum);

    -

    -}

    -
    -
    -
    -Accepting input data from any sequence type
    -

    -The example in the last section requires its input to be an array of type double. In many circumstances this is sufficient, but often, especially in the case of library routines for general use, it would be preferable to accept input data from any sequence (lists, tuples, etc.) and to convert the element type to double automatically where possible. NumPy provides a function that accepts arbitrary sequence objects as input and returns an equivalent array of specified type (this is in fact exactly what the array constructor -Numeric.array() - does in Python code):

    -

    -PyObject *

    -

    -PyArray_ContiguousFromObject(PyObject *object,

    -

    - int type_num,

    -

    - int min_dimensions,

    -

    - int max_dimensions);

    -

    -The first argument, object, is the sequence object from which the data is taken. The second argument, type_num, specifies the array element type (see the table in the section "Element data types". If you want the function to the select the ``smallest'' type that is sufficient to store the data, you can pass the special value -PyArray_NOTYPE -. The remaining two arguments let you specify the number of dimensions of the resulting array, which is guaranteed to be no smaller than -min_dimensions - and no larger than -max_dimensions -, except for the case -max_dimensions == 0 -, which means that no upper limit is imposed.

    -

    -If the input data is not compatible with the type or dimension restrictions, an exception is raised. Since the array returned by -PyArray_ContiguousFromObject() - is guaranteed to be contiguous, this function also provides a method of converting a non-contiguous array to a contiguous one. If the input object is already a contiguous array of the specified type, it is passed on directly; there is thus no performance or memory penalty for calling the conversion function when it is not required. Using this function, the example from the last section becomes

    -

    -static PyObject *

    -

    -trace(PyObject *self, PyObject *args)

    -

    -{

    -

    - PyObject *input;

    -

    - PyArrayObject *array;

    -

    - double sum;

    -

    - int i, n;

    -

    - 

    -

    - if (!PyArg_ParseTuple(args, "O", &input))

    -

    - return NULL;

    -

    - array = (PyArrayObject *)

    -

    - PyArray_ContiguousFromObject(input, PyArray_DOUBLE, 2, 2);

    -

    - if (array == NULL)

    -

    - return NULL;

    -

    - 

    -

    - n = array->dimensions[0];

    -

    - if (n > array->dimensions[1])

    -

    - n = array->dimensions[1];

    -

    - sum = 0.;

    -

    - for (i = 0; i < n; i++)

    -

    - sum += *(double *)(array->data + i*array->strides[0] + i*array->strides[1]);

    -

    -

    -

    - Py_DECREF(array);

    -

    - return PyFloat_FromDouble(sum);

    -

    -}

    -

    -Note that no explicit error checking is necessary in this version, and that the array reference that is returned by -PyArray_ContiguousFromObject() - must be destroyed by calling -Py_DECREF() -.

    -
    -
    -
    -Creating NumPy arrays
    -

    -NumPy arrays can be created by calling the function

    -

    -PyObject *

    -

    -PyArray_FromDims(int n_dimensions,

    -

    - int dimensions[n_dimensions],

    -

    - int type_num);

    -

    -The first argument specifies the number of dimensions, the second one the length of each dimension, and the third one the element data type (see the table in the section "Element data types". The array that is returned is contiguous, but the contents of its data space are undefined. There is a second function which permits the creation of an array object that uses a given memory block for its data space:

    -

    -PyObject *

    -

    -PyArray_FromDimsAndData(int n_dimensions,

    -

    - int dimensions[n_dimensions]

    -

    - int item_type

    -

    - char *data);

    -

    -The first three arguments are the same as for -PyArray_FromDims() -. The fourth argument is a pointer to the memory block that is to be used as the array's data space. It is the caller's responsibility to ensure that this memory block is not freed before the array object is destroyed. With few exceptions (such as the creation of a temporary array object to which no reference is passed to other functions), this means that the memory block may never be freed, because the lifetime of Python objects are difficult to predict. Nevertheless, this function can be useful in special cases, for example for providing Python access to arrays in Fortran common blocks.

    -
    -
    -
    -Returning arrays from C functions
    -

    -Array objects can of course be passed out of a C function just like any other object. However, as has been mentioned before, care should be taken not to return zero-dimensional arrays unless the receiver is known to be prepared to handle them. An equivalent Python scalar object should be returned instead. To facilitate this step, NumPy provides a special function

    -

    -PyObject *

    -

    -PyArray_Return(PyArrayObject *array);

    -

    -which returns the array unchanged if it has one or more dimensions, or the appropriate Python scalar object in case of a zero-dimensional array.

    -
    -
    -
    -A less simple example
    -

    -The function shown below performs a matrix-vector multiplication by calling the -BLAS - function -DGEMV -. It takes three arguments: a scalar prefactor, the matrix (a two-dimensional array), and the vector (a one-dimensional array). The return value is a one-dimensional array. The input values are checked for consistency. In addition to providing an illustration of the functions explained above, this example also demonstrates how a Fortran routine can be integrated into Python. Unfortunately, mixing Fortran and C code involves machine-specific peculiarities. In this example, two assumptions have been made:

    -
      -
    • -The Fortran function -DGEMV - must be called from C as -dgemv_ -. Many Fortran compilers apply this rule, but the C name could also be -dgemv - or -DGEMV - (or in principle anything else; there is no fixed standard).
    • -
    • -Fortran -integer -s are equivalent to C -long -s, and Fortran double precision numbers are equivalent to C doubles. This works for all systems that I have personally used, but again there is no standard.
    • -
    -

    -Also note that the libraries that this function must be linked to are system-dependent; on my Linux system (using -gcc -/ -g77 -), the libraries are -blas - and -f2c -. So here is the code:

    -

    -static PyObject *

    -

    -matrix_vector(PyObject *self, PyObject *args)

    -

    -{

    -

    - PyObject *input1, *input2;

    -

    - PyArrayObject *matrix, *vector, *result;

    -

    - int dimensions[1];

    -

    - double factor[1];

    -

    - double real_zero[1] = {0.};

    -

    - long int_one[1] = {1};

    -

    - long dim0[1], dim1[1];

    -

    - 

    -

    - extern dgemv_(char *trans, long *m, long *n,

    -

    - double *alpha, double *a, long *lda,

    -

    - double *x, long *incx,

    -

    - double *beta, double *Y, long *incy);

    -

    - 

    -

    - if (!PyArg_ParseTuple(args, "dOO", factor, &input1, &input2))

    -

    - return NULL;

    -

    - matrix = (PyArrayObject *)

    -

    - PyArray_ContiguousFromObject(input1, PyArray_DOUBLE, 2, 2);

    -

    - if (matrix == NULL)

    -

    - return NULL;

    -

    - vector = (PyArrayObject *)

    -

    - PyArray_ContiguousFromObject(input2, PyArray_DOUBLE, 1, 1);

    -

    - if (vector == NULL)

    -

    - return NULL;

    -

    - if (matrix->dimensions[1] != vector->dimensions[0]) {

    -

    - PyErr_SetString(PyExc_ValueError,

    -

    - "array dimensions are not compatible");

    -

    - return NULL;

    -

    - }

    -

    - 

    -

    - dimensions[0] = matrix->dimensions[0];

    -

    - result = (PyArrayObject *)PyArray_FromDims(1, dimensions, PyArray_DOUBLE);

    -

    - if (result == NULL)

    -

    - return NULL;

    -

    - 

    -

    - dim0[0] = (long)matrix->dimensions[0];

    -

    - dim1[0] = (long)matrix->dimensions[1];

    -

    - dgemv_("T", dim1, dim0, factor, (double *)matrix->data, dim1,

    -

    - (double *)vector->data, int_one,

    -

    - real_zero, (double *)result->data, int_one);

    -

    - 

    -

    - return PyArray_Return(result);

    -

    -}

    -

    -Note that -PyArray_Return() - is not really necessary in this case, since we know that the array being returned is one-dimensional. Nevertheless, it is a good habit to always use this function; its performance cost is practically zero.

    -
    -
    -
    -

    -13. C API Reference

    -

    -This chapter describes the API for ArrayObjects and Ufuncs.

    -
    -
    -ArrayObject C Structure and API
    -
    -
    -Structures
    -

    -The PyArrayObject is, like all Python types, a kind of PyObject. Its definition is:

    -

    -typedef struct {

    -

    - PyObject_HEAD

    -

    - char *data;

    -

    - int nd;

    -

    - int *dimensions, *strides;

    -

    - PyObject *base;

    -

    - PyArray_Descr *descr;

    -

    - int flags;

    -

    -} PyArrayObject;

    -

    -Where -PyObject_HEAD - is the standard -PyObject - header, and the other fields are:

    -
    -
    -
    - -char - * -data -
    -

    -A pointer to the first data element of the array.

    -
    -
    -
    - -int nd -
    -

    -The number of dimensions in the array.

    -
    -
    -
    - -int - * -dimensions -
    -

    -A pointer to an array of -nd - integers, describing the number of elements along each dimension. The sizes are in the conventional order, so that for any array -a -,
    - -a.shape==(dimensions[0], dimensions[1], ..., dimensions[nd]) -.

    -
    -
    -
    - -int - * -strides -
    -

    -A pointer to an array of -nd - integers, describing the address offset between two successive data elements along each dimension. Note that strides can also be negative! Each number gives the number of bytes to add to a pointer to get to the next element in that dimension. For example, if -myptr - currently points to an element in a rank-5 array at indices -1,0,5,3,2 - and you want it to point to element -1,0,5,4,2 - then you should add -strides[3] - to the pointer: -myptr += strides[3] -. This works even if (and is especially useful when) the array is not contiguous in memory.

    -
    -
    -
    - -PyObject - * -base -
    -

    -Used internally in arrays that are created as slices of other arrays. Since the new array shares its data area with the old one, the original array's reference count is incremented. When the subarray is garbage collected, the base array's reference count is decremented.

    -
    -
    -
    - -PyArray_Desc - * -descr -
    -

    -See below.

    -
    -
    -
    - -int flags -
    -

    -A bitfield indicating whether the array:

    -
      -
    • -is contiguous (rightmost bit)
    • -
    • -owns the dimensions (next bit to the left) (???)
    • -
    • -owns the strides (next bit to the left) (???)
    • -
    • -owns the data area
    • -
    -

    -The ownership bits are used by NumPy internally to manage memory allocation and deallocation. They can be false if the array is the result of e.g. a slicing operation on an existing array.

    -
    -
    -
    -PyArrayDescr *descr
    -

    -a pointer to a data structure that describes the array and has some handy functions. The slots in this structure are:

    -
    -
    -PyArray_VectorUnaryFunc *cast[]
    -

    -an array of function pointers which will cast this arraytype to each of the other data types.

    -
    -
    -
    -PyArray_GetItemFunc *getitem
    -

    -a pointer to a function which returns a PyObject of the appropriate type given a (char) pointer to the data to get.

    -
    -
    -
    -PyArray_SetItemFunc *setitem
    -

    -a pointer to a function which sets the element pointed to by the second argument to converted Python Ojbect given as the first argument.

    -
    -
    -
    -int type_num
    -

    -A number indicating the datatype of the array (i.e. a -PyArray_XXXX -)

    -
    -
    -
    -char *one
    -

    -A pointer to a representation of one for this datatype.

    -
    -
    -
    -char *zero
    -

    -A pointer to a representation of zero for this datatype (especially useful for PyArray_OBJECT types)

    -
    -
    -
    -char type
    -

    -A character representing the array's typecode (one of -'cb1silfdFDO' -).

    -
    -
    -
    -The ArrayObject API
    -

    -In the following -op - is a pointer to a -PyObject - and -arp - is a pointer to a -PyArrayObject -. Routines which return -PyObject - * return -NULL - to indicate failure (and follow the standard exception-setting mechanism). Functions followed by a dagger (|) are functions which return PyObjects whose reference count has been increased by one (new references). See the Python Extending/Embedding manual for details on reference-count management.

    -
    -
    -
    -
    -int PyArray_Check(op)
    -

    -returns -1 - if -op - is a -PyArrayObject - or -0 - if it is not.

    -
    -
    -
    -int PyArray_SetNumericOps(d)
    -

    -internally used by -umath - to setup some of its functions.

    -
    -
    -
    -int PyArray_INCREF(op)
    -

    -Used for arrays of python objects ( -PyArray_OBJECT -) to increment the reference count of every python object in the array -op -. User code does not typically need to call this.

    -
    -
    -
    -int PyArray_XDECREF(op)
    -

    -Used for arrays of python objects ( -PyArray_OBJECT -) to decrement the reference count of every python object in the array -op -.

    -
    -
    -
    -PyArrayError
    -

    -Exports the array error object. I don't know its use.

    -
    -
    -
    -void PyArray_SetStringFunction(op,repr)
    -

    -Sets the function for representation of all arrays to -op -which should be a callable -PyObject -. If -repr - is non-zero then the function corresponding to the -repr - string representationis set, otherwise, that for the -str - string representation is set.

    -
    -
    -
    -PyArray_Descr PyArray_DescrFromType(type)
    -

    -returns a -PyArray_Descr - structure for the datatype given by -type -. The input type can be either the enumerated types ( -PyArray_Float -, etc.) or a character ( -'cb1silfdFDO' -).

    -
    -
    -
    -PyObject *PyArray_Cast(arp, type) |
    -

    -returns a pointer to a -PyArrayObject - that is -arp - cast to the array type specified by -type -. It is just a wrapper around the function defined in -arp->descr->cast - that handles non-contiguous arrays and arrays of Python objects appropriately.

    -
    -
    -
    -int PyArray_CanCastSafely(fromtype,totype)
    -

    -returns -1 - if the array with type -fromtype - can be cast to an array of type -totype - without loss of accuracy, otherwise it returns -0 -. It allows conversion of -long -s to -int -s which is not safe on 64-bit machines. The inputs -fromtype - and -totype - are the enumerated array types (e.g. -PyArray_SBYTE -).

    -
    -
    -
    -int PyArray_ObjectType(op, min_type)
    -

    -returns the typecode to use for a call to an array creation function given an input python sequence object -op - and a minimum type value, -min_type -. It looks at the datatypes used in -op -, compares this with -min_type - and returns a consistent type value that can be used to store all of the data in -op - and satisfying at the minimum the precision of -min_type -.

    -
    -
    -
    -int _PyArray_multiply_list(list,n)
    -

    -is a utility routine to multiply an array of -n - integers pointed to by -list -.

    -
    -
    -
    -int PyArray_Size(op)
    -

    -is a useful function for returning the total number of elements in -op - if -op - is a -PyArrayObject -, -0 - otherwise.

    -
    -
    -
    -PyObject *PyArray_FromDims(nd,dims,type) |
    -

    -returns a pointer to a newly constructed -PyArrayObject - (returned as a -PyObject -) given the number of dimensions in -nd -, an array -dims - of -nd - integers specifying the size of the array, and the enumerated type of the array in -type -.

    -
    -
    -
    -PyObject *PyArray_FromDimsAndData(nd,dims,type,data) |
    -

    -This function should only be used to access global data that will never be freed (like FORTRAN common blocks). It builds a -PyArrayObject - in the same way as -PyArray_FromDims - but instead of allocating new memory for the array elements it uses the bytes pointed to by -data - (a -char * -).

    -
    -
    -
    -PyObject *PyArray_ContiguousFromObject(op,type,min_dim,max_dim) |
    -

    -returns a contiguous array of type -type - from the (possibly nested) sequence object -op -. If -op - is a contiguous -PyArrayObject - then a reference is made; if -op - is a non-contiguous then a copy is performed to get a contiguous array; if -op - is not a -PyArrayObject - then a new -PyArrayObject - is created from the sequence object and returned. The two parameters -min_dim - and -max_dim - let you specify the expected rank of the input sequence. An error will result if the resulting -PyArrayObject - does not have rank bounded by these limits. To specify an exact rank requirement set -min_dim = max_dim -. To allow for an arbitrary number of dimensions specify -min_dim = max_dim = 0 -.

    -
    -
    -
    -PyObject *PyArray_CopyFromObject(op,type,min_dim,max_dim) |
    -

    -returns a contiguous array similar to -PyArray_ContiguousFromObject - except that a copy of -op - is performed even if a shared array could have been used.

    -
    -
    -
    -PyObject *PyArray_FromObject(op,type,min_dim,max_dim) |
    -

    -returns a reference to -op - if -op - is a -PyArrayObject - and a newly constructed -PyArrayObject - if -op - is any other (nested) sequence object. You must use strides to access the elements of this possibly discontiguous array correctly.

    -
    -
    -
    -PyObject *PyArray_Return(apr)
    -

    -returns a pointer to -apr - with some extra code to check for errors and be sure that zero-dimensional arrays are returned as scalars. If a scalar is returned instead of -apr - then -apr -'s reference count is decremented, so it is safe to use this function in the form :
    - -return PyArray_Return (apr); -

    -
    -
    -
    -PyObject *PyArray_Reshape(apr,op) |
    -

    -returns a reference to -apr - with a new shape specified by -op - which must be a one dimensional sequence object. One dimension may be specified as unknown by giving a value less than zero, its value will be calculated from the size of -apr -.

    -
    -
    -
    -PyObject *PyArray_Copy(apr) |
    -

    -returns an element-for-element copy of -apr -

    -
    -
    -
    -PyObject *PyArray_Take(a,indices,axis) |
    -

    -the equivalent of -take(a, indices, axis) - which is a method defined in the Numeric module that just calls this function.

    -
    -
    -
    -int PyArray_As1D(*op, char **ptr, int *n, int type)
    -

    -This function replaces -op - with a pointer to a contiguous 1-D -PyArrayObject - (using -PyArray_ContiguousFromObject -) and sets as output parameters a pointer to the first byte of the array in -ptr - and the number of elements in the array in -n -. It returns --1 - on failure ( -op - is not a 1-D array or sequence object that can be cast to type -type -) and -0 - on success.

    -
    -
    -
    -int PyArray_As2D(*op, char **ptr, int *m, int *n, int type)
    -

    -This function replaces -op - with a pointer to a contiguous 2-D -PyArrayObject - (using -PyArray_ContiguousFromObject -). It returns -1 on failure (op is not a 2-D array or nested sequence object that can be cast to type type) and 0 on success. It also sets as output parameters: an array of pointers in -ptr - which can be used to access the data as a 2-D array so that ptr[i][j] is a pointer to the first byte of element [i,j] in the array; -m - and -n - are set to respectively the number of rows and columns of the array.

    -
    -
    -
    -int PyArray_Free(op,ptr)
    -

    -is supposed to free the allocated data structures and decrease object references when using -PyArray_As1D - and -PyArray_As2D - but there are suspicions that this code is buggy.

    -
    -
    -Notes
    -

    -Number formats, overflow issues, NaN/Inf representations, fpectl module, how to deal with 'missing' values.

    -
    -
    -
    -
    -
    -UfuncObject C Structure and API
    -
    -
    -C Structure
    -

    -The ufuncobject is a generic function object that can be used to perform fast operations over Numeric Arrays with very useful broadcasting rules and type conversions performed automatically. The ufuncobject and its API make it easy and graceful to add arbitrary functions to Python which operate over Numeric arrays. All of the unary and binary operators currently available in the Numerical extensions (like sin, cos, +, logical_or, etc.) are implemented using this object. The hooks are all in place to make it very easy to add any function that takes one or two (double) arguments and returns a single (double) argument. It is not difficult to add support routines in order to handle arbitrary functions whose total number of input/output arguments is less than some maximum number (currently 10).

    -

    -typedef struct {

    -

    - PyObject_HEAD

    -

    - int *ranks, *canonical_ranks;

    -

    - int nin, nout, nargs;

    -

    - int identity;

    -

    - PyUFuncGenericFunction *functions;

    -

    - void **data;

    -

    - int ntypes, nranks, attributes;

    -

    - char *name, *types;

    -

    - int check_return;

    -

    -} PyUFuncObject;

    -

    -where:

    -
    -
    -
    -int *ranks
    -

    -unused.

    -
    -
    -
    -int *canonical_ranks
    -

    -unused

    -
    -
    -
    -int nin
    -

    -the number of input arguments to function

    -
    -
    -
    -int nout
    -

    -the number of output arguments for the function

    -
    -
    -
    -int nargs
    -

    -the total number of arguments -= nin + nout -

    -
    -
    -
    -int identity
    -

    -a flag telling whether the identity for this function is -0 - or -1 - for use in the -reduce - method for a zero size array input.

    -
    -
    -
    -PyUFuncGenericFunction *functions
    -

    -an array of functions that perform the innermost looping over the input and output arrays (I think this is over a single axis). These functions call the underlying math function with the data from the input arguments along this axis and return the outputs of the function into the correct place in the output arrayobject (with appropriate typecasting). These functions are called by the general looping code. There is one function for each of the supported datatypes. Function pointers to do this looping for types -'f' -, -'d' -, -'F' -, and -'D' -, are provided in the C-API for functions that take one or two arguments and return one argument. Each -PyUFuncGenericFunction - returns -void - and has the following argument list (in order):

    -
    -
    -args
    -

    -an array of pointers to the data for each of the input and output arguments with input arguments first and output arguments immediately following. Each element of -args - is a -char - * to the first byte in the corresponding input or output array.

    -
    -
    -
    -dimensions
    -

    -a pointer to a single -int - giving the size of the axis being looped over.

    -
    -
    -
    -steps
    -

    -an array of -int -s giving the number of bytes to skip to go to the next element of the array for this loop. There is an entry in the array for each of the input and output arguments, with input arguments first and output arguments immediately following.

    -
    -
    -
    -func
    -

    -a pointer to the underlying math function to be called at each point in this inner loop. This is a -void - * and must be recast to the required type before actually calling the function e.g. to a pointer to a function that takes two -double -s and returns a -double -). If you need to write your own -PyUFuncGenericFunction -, it is most readable to also have a -typedef - statement that defines your specific underlying function type so the function pointer cast is somewhat readable.

    -
    -
    -
    -
    -void **data
    -

    -a pointer to an array of functions (each cast to -void - *) that compute the actual mathematical function for each set of inputs and outputs. There should be a function in the array for each supported data type. This function will be called from the -PyUFuncGenericFunction - for the corresponding type.

    -
    -
    -
    -int ntypes
    -

    -the number of datatypes supported by this function. For datatypes that are not directly supported, a coercion will be performed if possible safely, otherwise an error will be reported.

    -
    -
    -
    -int nranks
    -

    -unused.

    -
    -
    -
    -int attributes
    -

    -unused.

    -
    -
    -
    -char *name
    -

    -the name of this function (not the same as the dictionary label for this function object, but it is usually set to the same string). It is printed when -__repr__ - is called for this object, defaults to -"?" - if set to -NULL -.

    -
    -
    -
    -char *types
    -

    -an array of supported types for this function object. I'm not sure why but each supported datatype ( -PyArray_FLOAT -, etc.) is entered as many times as there are arguments for this function. ( -nargs -)

    -
    -
    -
    -int check_return
    -

    -Usually best to set to 1. If this is non-zero then returned matrices will be cleaned up so that rank-0 arrays will be returned as python scalars. Also, if non-zero, then any math error that sets the -errno - global variable will cause an appropriate Python exception to be raised.

    -
    -
    -UfuncObject C API
    -

    -There are currently 15 pointers in the C-API array for the ufuncobject which is loaded by -import_ufunc() -. The macros implemented by this API, available by including the file -ufuncobject.h -,' are given below. The only function normally called by user code is the ufuncobject creation function -PyUFunc_FromFuncAndData -. Some of the other functions can be used as elements of an array to be passed to this creation function.

    -
    -
    -
    -
    -int PyUFunc_Check(op)
    -

    -returns -1 - if op is a ufunc object otherwise returns -0 -.

    -
    -
    -
    -PyObject *PyUFunc_FromFuncAndData(functions, data, types, ntypes, nin, nout, identity, name, check_return)
    -

    -returns the ufunc object given its parameters. This is the most important function call. It requires defining three arrays to be passed as parameters: -functions -, -data -, and -types -. The arguments to be passed are:

    -
    -
    -functions
    -

    -an array of functions of type -PyUFuncGenericFunction -, there should be one function for each supported datatype. The functions should be in order so that datatypes listed toward the beginning of the array could be cast as datatypes listed toward the end.

    -
    -
    -
    -data
    -

    -an array of pointers to void* the same size as the functions array and in the same datatype order. Each element of this array is the actual underlying math function (recast to a -void - *) that will be called from one of the -PyUFuncGenericFunctions -. It will operate on each element of the input NumPy -arrayobject -(s) and return its element-by-element result in the output NumPy arrayobject(s). There is one function call for each datatype supported, (though functions can be repeated if you handle the typecasting appropriately with the -PyUFuncGenericFunction -).

    -
    -
    -
    -types
    -

    -an array of - PyArray_Type -s. The size of this array should be ( -nin+nout -) times the size of one of the previous two arrays. There should be -nin+nout - copies of -PyArray_XXXXX - for each datatype explicitly supported. (Remember datatypes not explicitly supported will still be accepted as input arguments to the ufunc if they can be cast safely to a supported type.)

    -
    -
    -
    -ntypes
    -

    -the number of supported types for this ufunc.

    -
    -
    -
    -nin
    -

    -the number of input arguments

    -
    -
    -
    -nout
    -

    -the number of output arguments

    -
    -
    -
    -identity
    -

    - -PyUFunc_One -, -PyUFunc_Zero -, or -PyUFunc_None -, depending on the desired value for the identity. This is only relevant for functions that take two input arguments and return one output argument. If not relevant use -PyUFunc_None -.

    -
    -
    -
    -name
    -

    -the name of this -ufuncobject - for use in the -__repr__ - method.

    -
    -
    -
    -check_return
    -

    -the desired value for check_return for this ufuncobject.

    -
    -
    -
    -
    -int PyUFunc_GenericFunction(self,args,mps)
    -

    -allows calling the ufunc from user C routine. It returns 0 on success and -1 on any failures. This is the core of what happens when a ufunc is called from Python. Its arguments are:

    -
    -
    -self
    -

    -the ufunc object to be called. INPUT

    -
    -
    -
    -args
    -

    -a Python tuple object containing the input arguments to the ufunc (should be Python sequence objects). INPUT

    -
    -
    -
    -mps
    -

    -an array of pointers to PyArrayObjects for the input and output arguments to this function. The input NumPy arrays are elements -mps[0]...mps[self->nin-1] -. The output NumPy arrays are elements -mps[self->nin]...mps[self->nargs-1] -. OUTPUT

    -

    -The following are all functions of type -PyUFuncGenericFunction - and are suitable for use in the -functions - argument passed to -PyUFunc_FromFuncAndData -:

    -
    -
    -
    -
    -PyUFunc_f_f_As_d_d
    -

    -for a unary function that takes a -double - input and returns a -double - output as a ufunc that takes -PyArray_FLOAT - input and returns -PyArray_FLOAT - output.

    -
    -
    -
    -PyUFunc_d_d
    -

    -for a using a unary function that takes a -double - input and returns a -double - output as a ufunc that takes -PyArray_DOUBLE - input and returns -PyArray_DOUBLE - output.

    -
    -
    -
    -PyUFunc_F_F_As_D_D
    -

    -for a unary function that takes a -Py_complex - input and returns a -Py_complex - output as a ufunc that takes -PyArray_CFLOAT - input and returns -PyArray_CFLOAT - output.

    -
    -
    -
    -PyUFunc_D_D
    -

    -for a unary function that takes a -Py_complex - input and returns a -Py_complex - output as a ufunc that takes -PyArray_CFLOAT - input and returns -PyArray_CFLOAT - output.

    -
    -
    -
    -PyUFunc_O_O
    -

    -for a unary function that takes a -Py_Object - * input and returns a -Py_Object - * output as a ufunc that takes -PyArray_OBJECT - input and returns -PyArray_OBJECT - output

    -
    -
    -
    -PyUFunc_ff_f_As_dd_d
    -

    -for a binary function that takes two -double - inputs and returns one -double - output as a ufunc that takes -PyArray_FLOAT - input and returns -PyArray_FLOAT - output.

    -
    -
    -
    -PyUFunc_dd_d
    -

    -for a binary function that takes two -double - inputs and returns one -double - output as a ufunc that takes -PyArray_DOUBLE - input and returns -PyArray_DOUBLE - output.

    -
    -
    -
    -PyUFunc_FF_F_As_DD_D
    -

    -for a binary function that takes two -Py_complex - inputs and returns a -Py_complex - output as a ufunc that takes -PyArray_CFLOAT - input and returns -PyArray_CFLOAT - output.

    -
    -
    -
    -PyUFunc_DD_D
    -

    -for a binary function that takes two -Py_complex - inputs and returns a -Py_complex - output as a ufunc that takes -PyArray_CFLOAT - input and returns -PyArray_CFLOAT - output

    -
    -
    -
    - -PyUFunc_OO_O -
    -

    -for a unary function that takes two -Py_Object - * input and returns a -Py_Object - * - -output as a ufunc that takes -PyArray_OBJECT - input and returns -PyArray_OBJECT - output

    -
    -
    -
    -PyUFunc_O_O_method
    -

    -for a unary function that takes a -Py_Object - * input and returns a -Py_Object * - output and is pointed to by a Python method as a ufunc that takes PyArray_OBJECT input and returns PyArray_OBJECT output

    -
    -
    -
    -PyArrayMap
    -

    -an exported API that was apparently considered but never implemented probably because the functionality is already available with Python's -map - function.

    -
    -
    -
    -
    -

    -14. Glossary

    -

    -This section will define a few of the technical words used throughout this document. [Please let us know of any additions to this list which you feel would be helpful -- the authors]

    -

    -typecode: a single character describing the format of the data stored in an array. For example, 'b' refers to unsigned byte-sized integers (0-255).

    -

    -ufunc / universal function: a ufunc is a callable object which performs operations on all of the elements of its arguments, which can be lists, tuples, or arrays. Many ufuncs are defined in the -umath - module.

    -

    -array / multiarray: an array refers to the Python object type defined by the NumPy extensions to store and manipulate numbers efficiently.

    -

    -UserArray: The UserArray module defines a UserArray class which should be subclassed by users wishing to have classes which behave similarly to the array object type.

    -

    -Matrix: The Matrix module defines a subclass Matrix of the UserArray class which is specialized for linear algebra matrices. Most notably, it overrides the multiplication operator on Matrix instances to perform matrix multiplication instead of element-wise multiplication.

    -

    -rank: the rank of an array is the number of dimensions it has, or the number of integers in its shape tuple.

    -

    -shape: array objects have an attribute called shape which is necessarily a tuple. An array with an empty tuple shape is treated like a scalar (it holds one element).

    -

    - 

    -
    -
    -

    -

    -
    -
    -Part II: Optional Packages
    -
    -

    -This part contains descriptions of the packages that are included with the distribution but which are not necessary for using Numeric arrays. The packages are for the most part in the Packages subdirectory of the source distribution, and can be installed anywhere in the Python module search path. Each has its own "setup.py" to use to build and install the package.
    -
    -For historical reasons, some of these packages are currently installed inside the Numeric package rather than on their own. We hope to remedy this in the future.

    -

    -The subdirectory Packages contains directories, each of which contains its own installation script setup.py. As with the main directory, these packages are generally compiled and installed using the command

    -

    -python setup.py install

    -

    -The Makefile in the main directory will do this for all the packages provided.

    -

    -In addition, many people make available libraries that use Numeric. At the moment a centralized reference for these does not exist, but they are usually announced on the discussion list; also check the project web page.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -Descriptions of the Optional Packages
    -
    -

    -Package Name

    -
    -

    -Description

    -
    -

    -Reference

    -
    -

    -FFT

    -
    -

    -Fast Fourier Transforms

    -
    -

    -FFT Reference

    -
    -

    -LinearAlgebra

    -
    -

    -Basic linear algebra

    -
    -

    -LinearAlgebra Reference

    -
    -

    -RandomArray

    -
    -

    -Arrays of random numbers.

    -
    -

    -RandomArray Reference

    -
    -

    -RNG

    -
    -

    -Generators for independent streams of random numbers from various distributions and arrays of same.

    -
    -

    -Independent Random Streams

    -
    -

    -MA

    -
    -

    -Masked arrays, that is, arrays that have missing or invalid entries.

    -
    -

    -Masked Arrays

    -
    -
    -
    -License and disclaimer for packages MA and RNG
    -

    -Package MA was written by Paul Dubois, LLNL. Package RNG was written by Konrad Hinsen after modifying an earlier package UNRG by Paul Dubois and Fred Fritsch.

    -

    -Copyright (c) 1999, 2000. The Regents of the University of California. All rights reserved.

    -

    -Permission to use, copy, modify, and distribute this software for any purpose without fee is hereby granted, provided that this entire notice is included in all copies of any software which is or includes a copy or modification of this software and in all copies of the supporting documentation for such software.

    -

    -This work was produced at the University of California, Lawrence Livermore National Laboratory under contract no. W-7405-ENG-48 between the U.S. Department of Energy and The Regents of the University of California for the operation of UC LLNL.

    -

    -DISCLAIMER

    -

    -This software was prepared as an account of work sponsored by an agency of the United States Government. Neither the United States Government nor the University of California nor any of their employees, makes any warranty, express or implied, or assumes any liability or responsibility for the accuracy, completeness, or usefulness of any information, apparatus, product, or process disclosed, or represents that its use would not infringe privately-owned rights. Reference herein to any specific commercial products, process, or service by trade name, trademark, manufacturer, or otherwise, does not necessarily constitute or imply its endorsement, recommendation, or favoring by the United States Government or the University of California. The views and opinions of authors expressed herein do not necessarily state or reflect those of the United States Government or the University of California, and shall not be used for advertising or product endorsement purposes.

    -
    -
    -
    -

    -15. FFT Reference

    -

    -The FFT.py module provides a simple interface to the FFTPACK FORTRAN library, which is a powerful standard library for doing fast Fourier transforms of real and complex data sets, or the C fftpack library, which is algorithmically based on FFTPACK and provides a compatible interface. On some platforms, optimized version of one of these libraries may be available, and can be used to provide optimal performance (see Compilation Notes).

    -
    -
    -Python Interface
    -

    -The Python user imports the FFT module, which provides a set of utility functions which provide access to the most commonly used FFT routines, and allows the specification of which axes (dimensions) of the input arrays are to be used for the FFT's. These routines are:

    -
    -
    -fft(data, n=None, axis=-1)
    -

    -Performs a n-point discrete Fourier transform of the array data. -n - defaults to the size of data. It is most efficient for n a power of two. If n is larger than -data -, then -data - will be zero-padded to make up the difference. If n is smaller than data, then -data - will be aliased to reduce its size. This also stores a cache of working memory for different sizes of fft's, so you could theoretically run into memory problems if you call this too many times with too many different n's.

    -

    -The FFT is performed along the axis indicated by the -axis - argument, which defaults to be the last dimension of -data -.

    -

    -The format of the returned array is a complex array of the same shape as -data -, where the first element in the result array contains the DC (steady-state) value of the FFT, and where each successive ...XXX

    -

    -Example of use:

    -

    ->>> -print fft(array((1,0,1,0,1,0,1,0))+ 10).real -

    -

    -[ 84. 0. 0. 0. 4. 0. 0. 0.]

    -

    ->>> -print fft(array((0,1,0,1,0,1,0,1))+ 10).real -

    -

    -[ 84. 0. 0. 0. -4. 0. 0. 0.]

    -

    ->>> -print fft(array((0,1,0,0,0,1,0,0))+ 10).real -

    -

    -[ 82. 0. 0. 0. -2. 0. 0. 0.]

    -
    -
    -
    -inverse_fft(data, n=None, axis=-1)
    -

    -Will return the -n - point inverse discrete Fourier transform of -data -. -n - defaults to the length of -data -. This is most efficient for -n - a power of two. If -n - is larger than -data -, then -data - will be zero-padded to make up the difference. If -n - is smaller than -data -, then -data - will be aliased to reduce its size. This also stores a cache of working memory for different sizes of FFT's, so you could theoretically run into memory problems if you call this too many times with too many different -n -'s.

    -
    -
    -
    -real_fft(data, n=None, axis=-1)
    -

    -Will return the -n - point discrete Fourier transform of the real valued array -data -. -n - defaults to the length of -data -. This is most efficient for -n - a power of two. The returned array will be one half of the symmetric complex transform of the real array.

    -

    ->>> -x = cos(arange(30.0)/30.0*2*pi) -

    -

    ->>> -print real_fft(x) -

    -

    -[ -1. +0.j 13.69406641+2.91076367j

    -

    - -0.91354546-0.40673664j -0.80901699-0.58778525j

    -

    - -0.66913061-0.74314483j -0.5 -0.8660254j

    -

    - -0.30901699-0.95105652j -0.10452846-0.9945219j

    -

    - 0.10452846-0.9945219j 0.30901699-0.95105652j

    -

    - 0.5 -0.8660254j 0.66913061-0.74314483j

    -

    - 0.80901699-0.58778525j 0.91354546-0.40673664j

    -

    - 0.9781476 -0.20791169j 1. +0.j ]

    -
    -
    -
    -inverse_real_fft(data, n=None, axis=-1)
    -

    -Will return the inverse FFT of the real valued array -data -.

    -
    -
    -
    -fft2d(data, s=None, axes=(-2,-1))
    -

    -Will return the 2-dimensional FFT of the array -data -.

    -
    -
    -
    -real_fft2d(data, s=None, axes=(-2,-1))
    -

    -Will return the 2d FFT of the real valued array -data -.

    -
    -
    -
    -
    -C API
    -

    -The interface to the FFTPACK library is performed via the fftpackmodule module, which is responsible for making sure that the arrays sent to the FFTPACK routines are in the right format (contiguous memory locations, right numerical storage format, etc). It provides interfaces to the following FFTPACK routines, which are also the names of the Python functions:

    -
      -
    • - -cffti(i) -
    • -
    • - -cfftf(data, savearea) -
    • -
    • - -cfftb(data, savearea) -
    • -
    • - -rffti(i) -
    • -
    • - -rfftf(data, savearea) -
    • -
    • - -rfftb(data, savearea) -
    • -
    -

    -The routines which start with -c - expect arrays of complex numbers, the routines which start with -r - expect real numbers only. The routines which end with -i - are the initalization functions, those which end with -f - perform the forward FFTs and those which end with -b - perform the backwards FFTs.

    -

    -The initialization functions require a single integer argument corresponding to the size of the dataset, and returns a work array. The forward and backwards FFTs require two array arguments -- the first is the data array, the second is the work array returned by the initialization function. They return arrays corresponding to the coefficients of the FFT, with the first element in the returned array corresponding to the DC component, the second one to the first fundamental, etc.The length of the returned array is 1 + half the length of the input array in the case of real FFTs, and the same size as the input array in the case of complex data.

    -

    ->>> -x = cos(arange(30.0)/30.0*2*pi) -

    -

    ->>> -w = rffti(30) -

    -

    ->>> -f = rfftf(x, w) -

    -

    ->>> -f[0] -

    -

    -(-1+0j)

    -

    ->>> -f[1] -

    -

    -(13.6940664103+2.91076367145j)

    -

    ->>> -f[2] -

    -

    -(-0.913545457643-0.406736643076j)

    -
    -
    -
    -Compilation Notes
    -

    -On some platforms, precompiled optimized versions of the FFTPACK library are preinstalled on the operating system, and the compilation procedure needs to be modified to force the fftpackmodule file to be linked against those rather than the fftpacklite.c file which is shipped with NumPy.

    -
    -
    -
    -

    -16. LinearAlgebra Reference

    -

    -The LinearAlgebra.py module provides a simple interface to the low-level linear algebra routines provided by either the LAPACK FORTRAN library or the compatible lapack_lite C library.

    -
    -
    -Python Interface
    -
    -
    -solve_linear_equations(a, b)
    -

    -This function solves a system of linear equations with a square non-singular matrix a and a right-hand-side vector b. Several right-hand-side vectors can be treated simultaneously by making b a two-dimensional array (i.e. a sequence of vectors). The function inverse(a) calculates the inverse of the square non-singular matrix a by calling solve_linear_equations(a, b) with a suitable b.

    -

    - 

    -
    -
    -
    -inverse(a)
    -

    -This function returns the inverse of the specified matrix a which must be square and non-singular. To within floating point precision, it should always be true that:

    -

    -matrixmultiply(a, inverse(a)) == identity(len(a))

    -

    -To test this claim, one can do e.g.:

    -

    ->>> -a = reshape(arange(25.0), (5,5)) + identity(5) -

    -

    ->>> -print a -

    -

    -[[ 1. 1. 2. 3. 4.]

    -

    - [ 5. 7. 7. 8. 9.]

    -

    - [ 10. 11. 13. 13. 14.]

    -

    - [ 15. 16. 17. 19. 19.]

    -

    - [ 20. 21. 22. 23. 25.]]

    -

    ->>> -inv_a = inverse(a) -

    -

    ->>> -print inv_a -

    -

    -[[ 0.20634921 -0.52380952 -0.25396825 0.01587302 0.28571429]

    -

    - [-0.5026455 0.63492063 -0.22751323 -0.08994709 0.04761905]

    -

    - [-0.21164021 -0.20634921 0.7989418 -0.1957672 -0.19047619]

    -

    - [ 0.07936508 -0.04761905 -0.17460317 0.6984127 -0.42857143]

    -

    - [ 0.37037037 0.11111111 -0.14814815 -0.40740741 0.33333333]]

    -

    ->>> -# Verify the inverse by printing the largest absolute element -

    -

    -... -# of a * a^{-1} - identity(5) -

    -

    -... -print "Inversion error:", \ -

    -

    -... -maximum.reduce(fabs(ravel(dot(a, inv_a)-identity(5)))) -

    -

    -Inversion error: 2.6645352591e-015

    -
    -
    -
    -eigenvalues(a)
    -

    -This function returns the eigenvalues of the square matrix a.

    -

    ->>> -print a -

    -

    -[[ 1. 0. 0. 0. 0.]

    -

    - [ 0. 2. 0. 0. 1.]

    -

    - [ 0. 0. 3. 0. 0.]

    -

    - [ 0. 0. 0. 4. 0.]

    -

    - [ 0. 0. 0. 0. 1.]]

    -

    ->>> -print eigenvalues(a) -

    -

    -[ 1. 2. 3. 4. 1.]

    -
    -
    -
    -eigenvectors(a)
    -

    -This function returns both the eigenvalues and the eigenvectors, the latter as a two-dimensional array (i.e. a sequence of vectors).

    -

    ->>> -print a -

    -

    -[[ 1. 0. 0. 0. 0.]

    -

    - [ 0. 2. 0. 0. 1.]

    -

    - [ 0. 0. 3. 0. 0.]

    -

    - [ 0. 0. 0. 4. 0.]

    -

    - [ 0. 0. 0. 0. 1.]]

    -

    ->>> -evalues, evectors = eigenvectors(a) -

    -

    ->>> -print evalues -

    -

    -[ 1. 2. 3. 4. 1.]

    -

    ->>> -print evectors -

    -

    -[[ 1. 0. 0. 0. 0. ]

    -

    - [ 0. 1. 0. 0. 0. ]

    -

    - [ 0. 0. 1. 0. 0. ]

    -

    - [ 0. 0. 0. 1. 0. ]

    -

    - [ 0. -0.70710678 0. 0. 0.70710678]]

    -
    -
    -
    -singular_value_decomposition(a, full_matrices=0)
    -

    -This function returns three arrays V, S, and WT whose matrix product is the original matrix a. V and WT are unitary matrices (rank-2 arrays), whereas S is the vector (rank-1 array) of diagonal elements of the singular-value matrix. This function is mainly used to check whether (and in what way) a matrix is ill-conditioned.

    -
    -
    -
    -generalized_inverse(a, rcond=1e-10)
    -

    -This function returns the generalized inverse (also known as pseudo-inverse or Moore-Penrose-inverse) of the matrix a. It has numerous applications related to linear equations and least-squares problems.

    -
    -
    -
    -determinant(a)
    -

    -This function returns the determinant of the square matrix a.

    -
    -
    -
    -linear_least_squares(a, b, rcond=e-10)
    -

    -This function returns the least-squares solution of an overdetermined system of linear equations. An optional third argument indicates the cutoff for the range of singular values (defaults to 10-10). There are four return values: the least-squares solution itself, the sum of the squared residuals (i.e. the quantity minimized by the solution), the rank of the matrix a, and the singular values of a in descending order.

    -
    -
    -
    -
    -Compilation Notes
    -

    -On some platforms, precompiled optimized versions of the LAPACK library are preinstalled on the operating system, and the setup procedure needs to be modified to force the lapackmodule.c file to be linked against those rather than the lapack_lite library.

    -
    -
    -
    -

    -17. RandomArray Reference

    -

    -The RandomArray.py module (in conjunction with the ranlibmodule.c file) provides a high-level interface to the ranlib module, which provides a good quality C implementation of a random-number generator.

    -
    -
    -Python Interface
    -
    -
    -seed(x=0, y=0)
    -

    -The -seed() - function takes two integers and sets the two seeds of the random number generator to those values. If the default values of 0 are used for both x and y, then a seed is generated from the current time, providing a pseudo-random seed.

    -
    -
    -
    -get_seed()
    -

    -The -get_seed() - function returns the two seeds used by the current random-number generator. It is most often used to find out what seeds the seed() function chose at the last iteration. [thread-safety issue?]

    -
    -
    -
    -random(shape= -ReturnFloat -)
    -

    -The -random() - function takes a shape, and returns an array of double-precision floatings point numbers between 0.0 and 1.0. Neither 0.0 nor 1.0 is ever returned by this function. If no argument is specified, the function returns a single floating point number (not an array). The array is filled from the generator following the canonical array organization (see discussion of the -.flat - attribute)

    -
    -
    -
    -uniform(minimum, maximum, shape=ReturnFloat)
    -

    -The -uniform() - function returns an array of the specified shape and containing double-precision floating point random numbers strictly between minimum and maximum. If no shape is specified, a single number is returned.

    -
    -
    -
    -randint(minimum, maximum, shape=ReturnFloat)
    -

    -The -randint() - function returns an array of the specified shape and containing random (standard) integers greater than or equal to -minimum - and strictly less than -maximum -. If no shape is specified, a single number is returned.

    -
    -
    -
    -permutation(n)
    -

    -The -permutation() - function returns an array of the integers between -0 - and -n-1 -, in an array of shape -(n,) -, and with its elements randomly permuted.

    -

    -An example use of the RandomArray module (exact output will be different each time!):

    -

    ->>> -from RandomArray import * -

    -

    ->>> -seed() -# Set seed based on current time

    -

    ->>> -print get_seed() -# Find out what seeds were used

    -

    -(897800491, 192000)

    -

    ->>> -print random() -

    -

    -0.0528018975065

    -

    ->>> -print random((5,2)) -

    -

    -[[ 0.14833829 0.99031458]

    -

    - [ 0.7526806 0.09601787]

    -

    - [ 0.1895229 0.97674777]

    -

    - [ 0.46134511 0.25420982]

    -

    - [ 0.66132009 0.24864472]]

    -

    ->>> -print uniform(-1,1,(10,)) -

    -

    -[ 0.72168852 -0.75374185 -0.73590945 0.50488248 -0.74462822 0.09293685

    -

    - -0.65898308 0.9718067 -0.03252475 0.99611011]

    -

    ->>> -print randint(0,100, (12,)) -

    -

    -[28 5 96 19 1 32 69 40 56 69 53 44]

    -

    ->>> -print permutation(10) -

    -

    -[4 2 8 9 1 7 3 6 5 0]

    -

    ->>> -seed(897800491, 192000) -# resetting the same seeds

    -

    ->>> -print random() -# yields the same numbers

    -

    -0.0528018975065

    -
    -
    -
    -
    -Floating point random arrays
    -
    -
    -standard_normal (shape=ReturnFloat)
    -

    -The standard_normal () function returns an array of the specified shape that contains double precision floating point numbers normally (Gaussian) distributed with mean zero and variance and standard deviation one. If no shape is specified, a single number is returned.

    -
    -
    -
    -normal (mean, stddev, shape=ReturnFloat)
    -

    -The normal () function returns an array of the specified shape that contains double precision floating point numbers normally distributed with the specified mean and standard deviation. If no shape is specified, a single number is returned.

    -
    -
    -
    -multivariate_normal (mean, covariance) or
    -multivariate_normal (mean, covariance, leadingAxesShape)
    -

    -The multivariate_normal () function takes a one dimensional array argument mean and a two dimensional array argument covariance. Suppose the shape of mean is (n,). Then the shape of covariance must be (n,n). The multivariate_normal () function returns a double precision floating point array. The effect of the leadingAxesShape parameter is:

    -
      -
    • -If no leadingAxesShape is specified, then an array with shape (n,) is returned containing a vector of numbers with a multivariate normal distribution with the specified mean and covariance.
    • -
    • -If leadingAxesShape is specified, then an array of such vectors is returned. The shape of the output is leadingAxesShape.append ((n,)). The leading indices into the output array select a multivariate normal from the array. The final index selects one number from within the multivariate normal.
    • -
    -

    -In either case, the behavior of multivariate_normal () is undefined if covariance is not symmetric and positive definite.

    -
    -
    -
    -exponential (mean, shape=ReturnFloat)
    -

    -The exponential () function returns an array of the specified shape that contains double precision floating point numbers exponentially distributed with the specified mean. If no shape is specified, a single number is returned.

    -
    -
    -
    -beta (a, b, shape=ReturnFloat)
    -

    -The beta () function returns an array of the specified shape that contains double precision floating point numbers beta distributed with alpha parameter a and beta parameter b. If no shape is specified, a single number is returned.

    -
    -
    -
    -gamma (a, r, shape=ReturnFloat)
    -

    -The gamma () function returns an array of the specified shape that contains double precision floating point numbers beta distributed with location parameter a and distribution shape parameter r. If no shape is specified, a single number is returned.

    -
    -
    -
    -chi_square (df, shape=ReturnFloat)
    -

    -The chi_square() function returns an array of the specified shape that contains double precision floating point numbers with the chi square distribution with df degrees of freedom. If no shape is specified, a single number is returned.

    -
    -
    -
    -noncentral_chi_square (df, nonc, shape=ReturnFloat)
    -

    -The noncentral_chi_square() function returns an array of the specified shape that contains double precision floating point numbers with the chi square distribution with df degrees of freedom and noncentrality parameter nconc. If no shape is specified, a single number is returned.

    -
    -
    -
    -F (dfn, dfd, shape=ReturnFloat)
    -

    -The F () function returns an array of the specified shape that contains double precision floating point numbers with the F distribution with dfn degrees of freedom in the numerator and dfd degrees of freedom in the denominator. If no shape is specified, a single number is returned.

    -
    -
    -
    -noncentral_F (dfn, dfd, nconc, shape=ReturnFloat)
    -

    -The noncentral_F () function returns an array of the specified shape that contains double precision floating point numbers with the F distribution with dfn degrees of freedom in the numerator, dfd degrees of freedom in the denominator, and noncentrality parameter nconc. If no shape is specified, a single number is returned.

    -
    -
    -
    -
    -Integer random arrays
    -
    -
    -binomial (trials, prob, shape=ReturnInt)
    -

    -The binomial () function returns an array with the specified shape that contains integer numbers with the binomial distribution with trials trials and event probability prob. In other words, each value in the returned array is the number of times an event with probability prob occurred within trials repeated trials. If no shape is specified, a single number is returned.

    -
    -
    -
    -negative_binomial (trials, prob, shape=ReturnInt)
    -

    -The negative_binomial () function returns an array with the specified shape that contains integer numbers with the negative binomial distribution with trials trials and event probability prob. If no shape is specified, a single number is returned.

    -
    -
    -
    -poisson (mean, shape=ReturnInt)
    -

    -The poisson () function returns an array with the specified shape that contains integer numbers with the Poisson distribution with the specified mean. If no shape is specified, a single number is returned.

    -
    -
    -
    -multinomial (trials, probs) or multinomial (trials, probs, leadingAxesShape)
    -

    -The multinomial () function returns an array with that contains integer numbers with the multinomial distribution with trials trials and event probabilities given in probs. probs must be a one dimensional array. There are len(probs)+1 events. probs[i] is the probability of the i-th event for 0<=i<len(probs). The probability of event len(probs) is 1.-Numeric.sum(prob).

    -

    -The first form returns an integer array of shape (len(probs)+1,) containing one multinomially distributed vector. The second form returns an array of shape (m, n, ..., len(probs)+1) where (m, n, ...) is leadingAxesShape. In this case, each output[i,j,...,:] is an integer array of shape (len(prob)+1,) containing one multinomially distributed vector..

    -
    -
    -
    -
    -Examples
    -

    -Most of the functions in this package take zero or more distribution specific parameters plus an optional shape parameter. The shape parameter gives the shape of the output array:

    -

    - ->>> - -from RandomArray import * -
    - ->>> - -print standard_normal() -
    - --0.435568600893 -
    - ->>> - -print standard_normal(5) -
    - -[-1.36134553 0.78617644 -0.45038718 0.18508556 0.05941355] -
    - ->>> - -print standard_normal((5,2)) -
    - -[[ 1.33448863 -0.10125473] -
    - -[ 0.66838062 0.24691346] -
    - -[-0.95092064 0.94168913] -
    - -[-0.23919107 1.89288616] -
    - -[ 0.87651485 0.96400219]] -
    - ->>> - -print normal(7., 4., (5,2)) #mean=7, std. dev.=4
    -
    - -[[ 2.66997623 11.65832615] -
    - -[ 6.73916003 6.58162862] -
    - -[ 8.47180378 4.30354905] -
    - -[ 1.35531998 -2.80886841] -
    - -[ 7.07408469 11.39024973]] -
    - ->>> - -print exponential(10., 5) #mean=10
    -
    - -[ 18.03347754 7.11702306 9.8587961 32.49231603 28.55408891] -
    - ->>> - -print beta(3.1, 9.1, 5) # alpha=3.1, beta=9.1
    -
    - -[ 0.1175056 0.17504358 0.3517828 0.06965593 0.43898219] -
    - ->>> - -print chi_square(7, 5) - - - -# 7 degrees of freedom (dfs)
    -
    - -[ 11.99046516 3.00741053 4.72235727 6.17056274 8.50756836] -
    - ->>> - -print noncentral_chi_square(7, 3, 5) # 7 dfs, noncentrality 3 -
    - -[ 18.28332138 4.07550335 16.0425396 9.51192093 9.80156231] -
    - ->>> - -F(5, 7, 5) # 5 and 7 dfs -
    - -array([ 0.24693671, 3.76726145, 0.66883826, 0.59169068, 1.90763224]) -
    - ->>> - -noncentral_F(5, 7, 3., 5) # 5 and 7 dfs, noncentrality 3 -
    - -array([ 1.17992553, 0.7500126 , 0.77389943, 9.26798989, 1.35719634]) -
    - ->>> - -binomial(32, .5, 5) # 32 trials, prob of an event = .5
    -
    - -array([12, 20, 21, 19, 17]) -
    - ->>> - -negative_binomial(32, .5, 5) # 32 trials: prob of an event = .5 -
    - -array([21, 38, 29, 32, 36]) -

    -

    -Two functions that return generate multivariate random numbers (that is, random vectors with some known relationship between the elements of each vector, defined by the distribution). They are multivariate_normal () and multinomial (). For these two functions, the lengths of the leading axes of the output may be specified. The length of the last axis is determined by the length of some other parameter.

    -

    - ->>> - -multivariate_normal([1,2], [[1,2],[2,1]], [2,3]) -
    - -array([[[ 0.14157988, 1.46232224], -
    - - [-1.11820295, -0.82796288], -
    - - [ 1.35251635, -0.2575901 ]], -
    - - [[-0.61142141, 1.0230465 ], -
    - - [-1.08280948, -0.55567217], -
    - - [ 2.49873002, 3.28136372]]]) -
    - ->>> - -x = multivariate_normal([10,100], [[1,2],[2,1]], 10000) -
    - ->>> - -x_mean = sum(x)/10000 -
    - ->>> - -print x_mean -
    - -[ 9.98599893 100.00032416] -
    - ->>> - -x_minus_mean = x - x_mean -
    - ->>> - -cov = matrixmultiply(transpose(x_minus_mean), x_minus_mean) / 9999. -
    - ->>> - -cov -
    - -array([[ 2.01737122, 1.00474408], -
    - -[ 1.00474408, 2.0009806 ]]) -

    -

    -The a priori probabilities for a multinomial distribution must sum to one. The prior probability argument to multinomial () doesn't give the prior probability of the last event: it is computed to be one minus the sum of the others.

    -

    - ->>> - -multinomial(16, [.1, .4, .2]) # prior probabilities [.1, .4, .2, .3]
    -
    - -array([2, 7, 1, 6]) -
    - ->>> - -multinomial(16, [.1, .4, .2], [2,3]) # output shape [2,3,4] -
    - -array([[[ 1, 9, 1, 5], -
    - - [ 0, 10, 3, 3], -
    - - [ 4, 9, 3, 0]], -
    - - [[ 1, 6, 1, 8], -
    - - [ 3, 4, 5, 4], -
    - - [ 1, 5, 2, 8]]]) -

    -
    -
    -
    -

    -18. Independent Random Streams

    -

    -The RNG package provides any number of independent random number generators tied to a distribution. Distributions include exponential, normal, and log-normal distributions, but adding others is not difficult. Contributions of code for other distributions are welcome!

    -
    -
    -Background
    -

    -RNG was written by Konrad Hinsen based on the package URNG by Paul Dubois and Fred Fritsch of LLNL. This package has been released for unlimited redistribution. Please see License and disclaimer for packages MA and RNG.

    -
    -
    -
    -Usage
    -

    -Package RNG installs two modules: RNG.RNG, and RNG.ranf. The former is a C extension that does the generation. The latter is an easy-to-use interface for a single uniform distribution.

    -
    -
    -Module RNG
    -

    -Module RNG defines the function:

    -

    -CreateGenerator(s, distribution=UniformDistribution(0., 1.))

    -

    -creates a new random number generator with a distribution. The random numbers produced by the generator sample the distribution and are independent of other generators created earlier or later. Its first argument, an integer, determines the initial state:

    -
      -
    • - 0 ; Use the default initial seed value.
    • -
    • -<0: ; Set a random value for the seed from the system clock.
    • -
    • ->0 ; Set seed directly (32 bits only).
    • -
    -

    -The default distribution is a uniform distribution on [0., 1.); other distributions are obtained by supplying a second argument which must be a distribution. Currently RNG defines the following distribution types:

    -
      -
    • -UniformDistribution(a, b) -- a uniform distribution of numbers in the interval [a, b)
    • -
    • -NormalDistribution(mu, sigma) -- a normal distribution with mean mu and standard deviation sigma
    • -
    • -ExponentialDistribution(l) -- an exponential distribution of positive numbers with decay constant l.
    • -
    • -LogNormalDistribution(mean, std) -- a log normal distribution with given mean and standard deviation.
    • -
    -
    -
    -Generator objects
    -

    -Once a generator is created, it contains these methods:

    -
      -
    • -sample(n) will return an array of n samples from the generator.
    • -
    • -ranf() will return one sample from the generator.
    • -
    -
    -
    -
    -
    -Module ranf
    -

    -Module ranf, whose main function ranf() is equivalent to the old ranf generator on Cray 1 computers, defines these facilities.

    -

    -Attribute standard_generator is an instance of RNG.UniformDistribution(0., 1.).

    -

    -ranf(): returns a random number from the standard_generator.

    -

    -random_sample(*n) returns a Numeric array of samples from the standard_generator.

    -

    -random_sample(n) = array of n random numbers;

    -

    -random_sample(n1, n2, ...)= array of shape (n1, n2, ..)

    -
    -
    -
    -
    -Examples
    -

    -The test routine Demo/RNGdemo.py illustrates some common usage of both RNG and Numeric.

    -

    -The test routine RNGtest2.py combines RNG with Konrad Hinsen's Statistics package to do a test of the log normal distribution.

    -

    -Here is one function from RNGdemo.py, showing a test of a normal distribution.

    -

    -from Numeric import *

    -

    -import RNG

    -

    - 

    -

    -def test_normal (mean, std, n=10000):

    -

    - dist = RNG.NormalDistribution(mean, std)

    -

    - rng = RNG.CreateGenerator(0, dist)

    -

    - values = rng.sample(n)

    -

    - m = sum(values)/n

    -

    - s = sqrt(sum((values-m)**2)/n)

    -

    - return (m, s)

    -

    - 

    -
    -
    -
    -

    -19. Masked Arrays

    -

    -Masked arrays are arrays that may have missing or invalid entries. Module MA provides a work-alike replacement for Numeric that supports data arrays with masks.

    -
    -
    -What is a masked array?
    -

    -Masked arrays are arrays that may have missing or invalid entries. Module MA provides a work-alike replacement for Numeric that supports data arrays with masks. A mask is either None or an array of ones and zeros, that determines for each element of the masked array whether or not it contains an invalid entry. The package assures that invalid entries are not used in calculations.

    -

    -A particular element is said to be masked (invalid) if the mask is not None and the corresponding element of the mask is 1; otherwise it is unmasked (valid).

    -

    -This package was written by Paul F. Dubois at Lawrence Livermore National Laboratory. Please see the legal notice in the software and on License and disclaimer for packages MA and RNG.

    -
    -
    -
    -Installing and using MA
    -

    -MA is one of the optional Packages and installing it requires a separate step as explained in the Numeric README. To install just the MA package using Distutils, in the MA top directory enter:

    -

    -python setup.py install

    -

    -Use MA as a replacement for Numeric:

    -

    -from MA import *

    -

    -x = array([1, 2, 3])

    -

    -To create an array with the second element invalid, we would do:

    -

    -y = array([1, 2, 3], mask = [0, 1, 0])

    -

    -To create a masked array where all values "near" 1.e20 are invalid, we can do:

    -

    -z = masked_values ([1.0, 1.e20, 3.0, 4.0], 1.e20)

    -

    -For a complete discussion of creation methods for masked arrays please see Constructing masked arrays.

    -

    -The Numeric module is an attribute in MA, so to execute a method foo from Numeric, you can reference it as Numeric.foo(...).

    -

    -Usually people use both MA and Numeric this way, but of course you can always fully-qualify the names:

    -

    -import MA

    -

    -x = MA.array([1, 2, 3])

    -

    -The principal feature of module MA is class MaskedArray, the class whose instances are returned by the array constructors and most functions in module MA. We will discuss this class first, and later cover the attributes and functions in module MA. For now suffice it to say that among the attributes of the module are the constants from module Numeric including those for declaring typecodes, NewAxis, and the mathematical constants such as pi and e. An additional typecode, MaskType, is the typecode used for masks.

    -
    -
    -
    -Class MaskedArray
    -

    -In Module MA, an array is an instance of class MaskedArray, which is defined in the module MA. An instance of class MaskedArray can be thought of as containing the following parts:

    -
      -
    • -An array of data, of any shape;
    • -
    • -A mask of ones and zeros of the same shape as the data; and,
    • -
    • -A "fill value" -- this is a value that may be used to replace the invalid entries in order to return a plain Numeric array. The chief method that does this is the method filled discussed below.
    • -
    -

    -We will use the terms "invalid value" and "invalid entry" to refer to the data value at a place corresponding to a mask value of 1. It should be emphasized that the invalid values are -never - used in any computation, and that the fill value is not used for -any - computational purpose. When an instance x of class MaskedArray is converted to its string representation, it is the result returned by filled (x) that is converted to a string.

    -
    -
    -Attributes of masked arrays
    -

    -flat: (deprecated) returns the masked array as one-dimensional. This is provided for compatibility with Numeric. ravel (x) is preferred.

    -

    -real: returns the real part of the array if complex.

    -

    -imaginary: returns the imaginary part of the array if complex.

    -

    -shape: The shape of a masked array can be accessed or changed by using the special attribute shape, as with Numerical arrays.

    -

    -shared_data: This read-only flag if true indicates that the masked array shared a reference with the original data used to construct it at the time of construction. Changes to the original array will affect the masked array. (This is not the default behavior; see Copying or not?.) This flag is informational only.

    -

    -shared_mask: This read-only flag if true indicates that the masked array currently shares a reference to the mask used to create it. Unlike shared_data, this flag may change as the result of modifying the array contents, as the mask uses copy on write semantics if it is shared.

    -
    -
    -
    -Methods on masked arrays.
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -Methods on masked arrays; attributes, constructors and operations discussed separately.
    -
    -

    -Method

    -
    -

    -Description

    -
    -

    -Sample syntax

    -
    -

    -astype (typecode)

    -
    -

    -return self as array of given type.

    -
    -

    -y = x.astype (Float32)

    -
    -

    -compressed ()

    -
    -

    -return an array of the valid elements. Result is one-dimensional.

    -
    -

    -y = x.compressed()

    -
    -

    -count(axis=None)

    -
    -

    -count the number of non-masked elements in the array, if axis is None. Otherwise return an array of such counts along the axis given.

    -
    -

    -n=x.count()

    -

    -y=x.count(0)

    -
    -

    -itemsize()

    -
    -

    -size of individual data items in bytes

    -
    -

    -n = x.itemsize()

    -
    -

    -filled (fill_value=None)

    -
    -

    -filled(self, self.fill_value()); see description of module method filled.

    -
    -

    -y = x.filled()

    -
    -

    -fill_value ()

    -
    -

    -Get the current fill value.

    -
    -

    -v = x.fill_value ()

    -
    -

    -filled (value = None)

    -
    -

    -Same as filled(self, value); see Filling in the missing data.

    -
    -

    -numar = x.filled ()

    -
    -

    -ids ()

    -
    -

    -Return the ids of the data and mask areas

    -
    -

    -id1, id2 = x.ids ()

    -
    -

    -iscontiguous ()

    -
    -

    -Is the data area contiguous? See Numeric manual.

    -
    -

    -if x.iscontiguous ()

    -
    -

    -mask ()

    -
    -

    -Return the data mask, or None.

    -
    -

    -m = x.mask ()

    -
    -

    -put (values)

    -
    -

    -Set the value at each non-masked entry to the corresponding entry in values. The mask is unchanged. See also module method put.

    -
    -

    -x.put (values)

    -
    -

    -putmask (values)

    -
    -

    -Eliminate any masked values by setting the value at each masked entry to the corresponding entry in values. Set the mask to None.

    -
    -

    -x.putmask(values)

    -

    -assert getmask(x) is None

    -
    -

    -raw_data ()

    -
    -

    -A reference to the non-filled data; portions may be meaningless. Expert use only.

    -
    -

    -d = x.raw_data ()

    -
    -

    -savespace (v)

    -
    -

    -Set the spacesaver attribute to v.

    -
    -

    -x.savespace (1)

    -
    -

    -set_fill_value ()

    -
    -

    -Set the fill value to v. Omit v to restore default.

    -
    -

    -x.set_fill_value (1.e21)

    -
    -

    -set_shape (args...)

    -
    -

    -shape (n, m, ...) sets the shape.

    -
    -

    -x.set_shape (3, 12)

    -
    -

    -size (axis)

    -
    -

    -Number of elements in array, or in a particular axis.

    -
    -

    -totalsize = x.size ()

    -

    -col_len = x.size (1)

    -
    -

    -spacesaver()

    -
    -

    -Query the spacesave flag.

    -
    -

    -flag = x.spacesaver()

    -
    -

    -tolist(fill_value=None)

    -
    -

    -Return the Python list self.filled(fill_value).tolist(); note that masked values are filled.

    -
    -

    -alist=x.tolist()

    -
    -

    -tostring(fill_value=None)

    -
    -

    -Return the string self.filled(fill_value).tostring()

    -
    -

    -s = x.tostring()

    -
    -

    -unshare_mask()

    -
    -

    -If shared_mask is currently true, replaces the reference to it with a copy.

    -
    -

    -x.unshare_mask()

    -
    -

    -typecode ()

    -
    -

    -Return the type of the data. See module Precision.

    -
    -

    -z = x.typecode()

    -
    -
    -
    -
    -Constructing masked arrays
    -
      -
    1. -array (data, typecode = None, copy = 1, savespace = 0, mask = None, fill_value = None)
      -Creates a masked array with the given data and mask. The name array is simply an alias for the class name, MaskedArray, The fill value is set to fill_value, and the savespace flag is applied. If data is a MaskedArray, its mask, typecode, spacesaver flag, and fill value will be used unless specifically specified by one of the remaining arguments. In particular, if d is a masked array, array(d, copy=0) is d.
    2. -
    3. -masked_array (data, mask = None, fill_value = None)
      -This is an easier-to-use version of array, for the common case of typecode = None, copy = 0. When data is newly-created this function can be used to make it a masked array without copying the data if data is already a Numeric array.
    4. -
    5. -masked_values (data, value, rtol=1.e-5, atol=1.e-8, typecode = None, copy = 1, savespace = 0)
      -Constructs a masked array whose mask is set at those places where
      -abs (data - value) < atol + rtol * abs (data).
      -That is a careful way of saying that those elements of the data that have value = value (to within a tolerance) are to be treated as invalid. If data is not of a floating point type, calls masked_object instead.
    6. -
    7. -masked_object (data, value, copy=1, savespace=0)
      -Creates a masked array with those entries marked invalid that are equal to value. Again, copy and savespace are passed on to the Numeric array constructor.
    8. -
    9. -asarray(data, typecode=None)
      -This is the same as array(data, typecode, copy=0). This is a short way of ensuring that something is an instance of MaskedArray of a given type before proceeding, as in
      -data = asarray(data).
      -
      -If data already is a masked array and typecode is None then the return value is data; nothing is copied in that case.
    10. -
    11. -masked_where (condition, data, copy=1)
      -Creates a masked array whose shape is that of condition, whose values are those of data, and which is masked where elements of condition are true.
    12. -
    -

    - 

    -

    -The following additional constructors are provided for convenience.

    -
      -
    • -masked_greater (data, value, copy=1) is equivalent to masked_where (greater(data, value), data)). Similarly, masked_greater_equal, masked_equal, masked_not_equal, masked_less, masked_less_equal are called in the same way with the obvious meanings. Note that for floating point data, masked_values is preferable to masked_equal in most cases.
    • -
    • -masked_inside (data, v1, v2, copy=1) creates an array with values in the closed interval [v1, v2] masked. v1 and v2 may be in either order.
    • -
    • -masked_outside (data, v1, v2, copy=1) creates an array with values outside the closed interval [v1, v2] masked. v1 and v2 may be in either order.
    • -
    -

    - 

    -

    -On entry to any of these constructors, data must be any object which the Numeric package can accept to create an array (with the desired typecode, if specified). The mask if given must be None or any object that can be turned into a Numeric array of integer type (it will be converted to typecode MaskType, if necessary), have the same shape as data, and contain only values of 0 or 1.

    -

    -If the mask is not None but its shape does not match that of data, an exception will be thrown, unless one of the two is of length 1, in which case the scalar will be resized (using Numeric.resize) to match the other.

    -

    -See Copying or not? for a discussion of whether or not the resulting array shares its data or its mask with the arguments given to these constructors.

    -
    -
    -
    -
    -
    -  -

    -filled is very important. It converts its argument to a plain Numeric array.

    -
    -
    -
    -
    -
    -  -

    -filled (x, value = None) returns x with any invalid locations replaced by a fill value. filled is guaranteed to return a plain Numeric array. The argument x does not have to be a masked array or even an array, just something that Numeric can turn into one.

    -
      -
    • -If x is not a masked array, and not a Numeric array, Numeric.array (x) is returned.
    • -
    • -If x is a contiguous Numeric array then x is returned. (A Numeric array is contiguous if its data storage region is layed out in column-major order; Numeric allows non-contiguous arrays to exist but they are not allowed in certain operations).
    • -
    • -If x is a masked array, but the mask is None, and x's data array is contiguous, then it is returned. If the data array is not contiguous, a (contiguous) copy of it is returned.
    • -
    • -If x is a masked array with an actual mask, then an array formed by replacing the invalid entries with value, or fill_value (x) if value is None, is returned. If the fill value used is of a different type or precision than x, the result may be of a different type or precision than x.
    • -
    -

    -Note that a new array is created only if necessary to create a correctly filled contiguous Numeric array.

    -

    -The function filled plays a central role in our design. It is the "exit" back to Numeric, and is used whenever the invalid values must be replaced before an operation. For example, adding two masked arrays a and b is roughly:

    -

    -masked_array(filled(a, 0)+filled(b, 0), mask_or(getmask(a), getmask(b))

    -

    -That is, fill the invalid entries a and b with zeros, add them up, and declare any entry of the result invalid if either a or b was invalid at that spot. The functions getmask and mask_or are discussed later.

    -

    -filled (x) also can be used to simply be certain that some expression is a contiguous Numerical array at little cost. If its argument is a Numeric array already, it is returned without copying.

    -

    -fill_value (x), and the method x.fill_value() of the same name on masked arrays, returns a value suitable for filling x based on its type. If x is a masked array, then x.fill_value () results. The returned value for a given type can be changed by assigning to these names in module MA: They should be set to scalars or one element arrays.

    -

    -default_real_fill_value = Numeric.array([1.0e20], Float32)

    -

    -default_complex_fill_value = Numeric.array([1.0e20 + 0.0j], Complex32)

    -

    -default_character_fill_value = masked

    -

    -default_integer_fill_value = Numeric.array([0]).astype(UnsignedInt8)

    -

    -default_object_fill_value = masked

    -

    -The variable masked is a module variable of MA and is discussed in The constant masked. Calling filled with a fill_value of masked sometimes produces a useful printed representation of a masked array. The function fill_value works on any kind of object.

    -

    -set_fill_value (a, fill_value) is the same as a.set_fill_value (fill_value) if a is a masked array; otherwise it does nothing. Please note that the fill value is mostly cosmetic; it is used when it is needed to convert the masked array to a plain Numeric array but not involved in most operations. In particular, setting the fill value to 1.e20 will -not, repeat not, -cause elements of the array whose values are currently 1.e20 to be masked. For that sort of behavior use the masked_value constructor.

    -
    -
    -
    -
    -
    -What are masks?
    -

    -Masks are either None or 1-byte Numerical arrays of 1's and 0's. To avoid excessive performance penalties, mask arrays are never checked to be sure that the values are 1's and 0's, and supplying a mask= argument to a constructor with an illegal mask will have undefined consequences later.

    -

    - -Masks have the savespace attribute set -. This attribute, discussed in the Numeric Python manual, may have surprising consequences if you attempt to do any operations on them other than those supplied by this package. In particular, do not add or multiply a quantity involving a mask. For example, if m is a mask consisting of 1080 1 values, sum(m) is 56, not 1080. Oops.

    -
    -
    -
    -Working with masks
    -

    -create_mask(ashape) returns an array suitable for use as a mask, having the given shape and initialized to zeros.

    -

    -is_mask (m) is true if m is of a type and precision that would be allowed as the mask field of a masked array (that is, it is an array of integers with Numeric's typecode MaskType, or it is None). To be a legal mask, m should contain only zeros or ones, but this is not checked.

    -

    -make_mask (m, copy=0, flag=0) returns an object whose entries are equal to m and for which is_mask would return true. If m is already a mask or None, it returns m or a copy of it. Otherwise it will attempt to make a mask, so it will accept any sequence of integers of for m. If flag is true, make_mask returns None if its return value otherwise would contain no true elements. To make a legal mask, m should contain only zeros or ones, but this is not checked.

    -

    -getmask (x) returns x.mask(), the mask of x, if x is a masked array, and None otherwise. Note that getmask may return None if x is a masked array but has a mask of None. (Please see caution above about operating on the result).

    -

    -getmaskarray (x) returns x.mask() if x is a masked array and has a mask that is not None; otherwise it returns a zero mask array of the same shape as x. Unlike getmask, getmaskarray always returns an Numeric array of typecode MaskType. (Please see caution above about operating on the result).

    -

    -mask_or (m1, m2) returns an object which when used as a mask behaves like the element-wise "logical or" of m1 and m2, where m1 and m2 are either masks or None (e.g., they are the results of calling getmask). A None is treated as everywhere false. If both m1 and m2 are None, it returns None. If just one of them is None, it returns the other. If m1 and m2 refer to the same object, a reference to that object is returned.

    -

    -masked is a module constant equal to an instance of a class that prints as the word `masked' and which will throw an exception of type MAError if any attempt is made to do arithmetic upon it. This constant is returned when an indexing operation results in a scalar result at a masked location.

    -
    -
    -
    -Operations
    -

    -Masked arrays support the operators +, *, /, -, **, and unary plus and minus. The other operand can be another masked array, a scalar, a Numeric array, or something Numeric.array() can convert to a Numeric array. The results are masked arrays.

    -

    -In addition masked arrays support the in-place operators +=, -=, *=, and /=. Implementation of in-place operators differs from Numeric semantics in being more generous about converting the right-hand side to the required type: any kind or lesser type accepted via an astype conversion. In-place operators truly operate in-place when the target is not masked.

    -
    -
    -
    -Copying or not?
    -

    -Depending on the arguments results of constructors may or may not contain a separate copy of the data or mask arguments. The easiest way to think about this is as follows: the given field, be it data or a mask, is required to be a Numerical array, possibly with a given typecode, and a mask's shape must match that of the data. If the copy argument is zero, and the candidate array otherwise qualifies, a reference will be made instead of a copy. If for any reason the data is unsuitable as is, an attempt will be made to make a copy that is suitable. Should that fail, an exception will be thrown. Thus, a copy=0 argument is more of a hope than a command.

    -

    -If the basic array constructor is given a masked array as the first argument, its mask, typecode, spacesaver flag, and fill value will be used unless specifically specified by one of the remaining arguments. In particular, if d is a masked array, array(d, copy=0) is d.

    -

    -Since the default behavior for masks is to use a reference if possible, rather than a copy, which produces a sizeable time and space savings, it is especially important not to modify something you used as a mask argument to a masked array creation routine, if it was a Numeric array of typecode MaskType.

    -
    -
    -
    -Behaviors
    -

    -A masked array defines the conversion operators str (x), repr (x), float (x), and int (x) by applying the corresponding operator to the Numeric array filled (x)

    -
    -
    -
    -Indexing and Slicing
    -

    -Indexing and slicing differ from Numeric: while generally the same, they return a copy, not a reference, when used in an expression that produces a non-scalar result. Consider this example:

    -

    -from Numeric import *

    -

    -x = array([1.,2.,3.])

    -

    -y = x[1:]

    -

    -y[0] = 9.

    -

    -print x

    -

    -This will print [1., 9., 3.] since x[1:] returns a reference to a portion of x. Doing the same operation using MA,

    -

    -from MA import *

    -

    -x = array([1.,2.,3.])

    -

    -y = x[1:]

    -

    -y[0] = 9.

    -

    -print x

    -

    -will print [1., 2., 3.], while y will be a separate array whose present value would be [9., 3.]. While sentiment on the correct semantics here is divided amongst the Numeric community as a whole, it is not divided amongst the author's community, on whose behalf this package is written.

    -
    -
    -
    -Indexing that produces a scalar result
    -

    -If indexing into a masked array with one or more indices produces a scalar result, then a scalar value is returned rather than a one-element masked array. This raises the issue of what to return if that location is masked. The answer is that the module constant masked, discussed above, is returned.

    -
    -
    -
    -Assignment to elements and slices
    -

    -Assignment of a normal value to a single element or slice of a masked array has the effect of clearing the mask in those locations. In this way previously invalid elements become valid. The value being assigned is filled first, so that you are guaranteed that all the elements on the left-hand side are now valid.

    -

    -Assignment of None to a single element or slice of a masked array has the effect of setting the mask in those locations, and the locations become invalid.

    -

    -Since these operations change the mask, the result afterwards will no longer share a mask, since masks have copy-on-write semantics.

    -
    -
    -
    -
    -Module MA: Attributes
    -

    -Constants e, pi, NewAxis from Numeric, and the constants from module Precision that define nice names for the typecodes.

    -

    -The special variable masked is discussed in The constant masked.

    -

    -The module Numeric is an element of MA, so after from MA import *, you can refer to the functions in Numeric such as Numeric.ones.

    -
    -
    -
    -Module MA: Functions
    -

    -Each of the operations discussed below returns an instance of class MaskedArray, having performed the desired operation element-wise. In most cases the array arguments can be masked arrays or Numeric arrays or something that Numeric can turn into a Numeric array, such as a list of real numbers.

    -

    -In most cases, if Numeric has a function of the same name, the behavior of the one in MA is the same, except that it "respects" the mask.

    -
    -
    -Unary functions
    -

    -The result of a unary operation will be masked wherever the original operand was masked. It may also be masked if the argument is not in the domain of the function. Functions available are:

    -

    -sqrt, log, log10, exp, conjugate, sin, cos, tan, arcsin, arccos, arctan, sinh, cosh, tanh, absolute, fabs, negative (also as operator -x), nonzero, around, floor

    -

    -fabs (x) is the absolute value of x as a Float32 array. The other functions have their standard meaning.

    -
    -
    -
    -Binary functions
    -

    -Binary functions return a result that is masked wherever either of the operands were masked; it may also be masked where the arguments are not in the domain of the function.

    -

    -add (also as operator +), subtract (also as operator -), multiply (also as operator *), divide (also as operator /), power (also as operator **), remainder, fmod, hypot, arctan2, bitwise_and, bitwise_or, bitwise_xor.

    -
    -
    -Comparison operators
    -
    -
    -
    -
    -
    -  -

    -Due to limitations in Python, it is not meaningful to compare arrays using the symbolic comparison operators such as "<". Unfortunately, you can do it; the result just won't mean anything.

    -
    -
    -
    -
    -
    -  -

    -To compare arrays, use the following binary functions. Each of them returns a masked array of 1's and 0's.

    -

    -equal, not_equal, less_equal, greater_equal, less, greater

    -

    -Note that as in Numeric, you can use a scalar for one argument and an array for the other.

    -
    -
    -
    -
    -
    -Logical operators
    -

    -Arrays of logical values can be manipulated with:

    -

    -logical_not (unary), logical_or, logical_and, logical_xor.

    -

    -alltrue (x) returns 1 if all elements of x are true. Masked elements are treated as true.

    -

    -sometrue (x) returns 1 if any element of x is true. Masked elements are treated as false.

    -
    -
    -
    -
    -Special array operators
    -

    -isarray (x), isMA (x) return true if x is a masked array.

    -

    -rank (x) is the number of dimensions in x.

    -

    -shape (x) returns the shape of x, a tuple of array extents.

    -

    -resize (x, new_shape) returns a new array with specified shape.

    -

    -reshape (x, new_shape) returns a copy of x with the given new shape.

    -

    -ravel (x) returns x as one-dimensional.

    -

    -concatenate (arrays, axis=0) concatenates the arrays along the specified axis.

    -

    -repeat (array, repeats, axis = 0) repeat elements of a repeats times along axis. repeats is a sequence of length a.shape[axis] telling how many times to repeat each element.

    -

    -identity (n) returns the identity matrix of shape n by n.

    -

    -indices (dimensions, typecode = None) returns an array representing a grid of indices with row-only and column-only variation.

    -

    -len (x) is defined to be the length of the first dimension of x. This definition, peculiar from the array point of view, is required by the way Python implements slicing. Use size (x) for the total length of x.

    -

    -size (x, axis = None) is the total size of x, or the length of a particular dimension axis whose index is given. When axis is given the dimension of the result is one less than the dimension of x.

    -

    -count (x, axis = None) counts the number of (non-masked) elements in the array, or in the array along a certain axis.When axis is given the dimension of the result is one less than the dimension of x.

    -

    -arange, arrayrange, ones, and zeros are the same as in Numeric, but return masked arrays.

    -

    -sum, and product are called the same way as count; the difference is that the result is the sum, product, or average respectively of the unmasked element.

    -

    -average (x, axis=0, weights=None) computes the average value of the non-masked elements of x along the selected axis. If weights is given, it must match the size and shape of x, and the value returned is:

    -

    -

    -In computing these sums, elements that correspond to those that are masked in x or weights are ignored.

    -

    -allclose (x, y, fill_value = 1, rtol = 1.e-5, atol = 1.e-8) tests whether or not arrays x and y are equal subject to the given relative and absolute tolerances. If fill_value is 1, masked values are considered equal, otherwise they are considered different. The formula used for elements where both x and y have a valid value is:

    -
    -
    -
    -
    -| x - y | < atol + rtol * | y |
    -

    -This means essentially that both elements are small compared to atol or their difference divided by their value is small compared to rtol.

    -

    -allequal (x, y, fill_value = 1) is similar to allclose, except that exact equality is demanded.

    -

    -take (a, indices, axis=0) returns a selection of items from a. See the documentation in the Numeric manual.

    -

    -transpose (a, axes=None) performs a reordering of the axes depending on the tuple of indices -axes -; the default is to reverse the order of the axes.

    -

    -put (a, indices, values) is the opposite of -take -. The values of the array -a - at the locations specified in -indices - are set to the corresponding value of -values -. The array -a -must be a contiguous array. The argument indices can be any integer sequence object with values suitable for indexing into the flat form of -a -. The argument v must be any sequence of values that can be converted to the typecode of -a -.

    -

    ->>> -x = arange(6) -

    -

    ->>> -put(x, [2,4], [20,40]) -

    -

    ->>> -print x -

    -

    -[ 0 1 20 3 40 5 ]

    -

    -Note that the target array -a - is not required to be one-dimensional. Since it is contiguous and stored in row-major order, the array -indices - can be treated as indexing -a -'s elements in storage order.

    -

    -The wrinkle on this for masked arrays is that if the locations being set by put are masked, the mask is cleared in those locations.

    -

    -choose (condition, t) has a result shaped like condition. t must be a tuple. Each element of the tuple can be an array, a scalar, or the constant element -masked ( -See - -The constant masked -) -. Each element of the result is the corresponding element of t[i] where condition has the value i. The result is masked where condition is masked or where the selected element is masked or the selected element of t is the constant -masked -.

    -

    -where (condition, x, y) returns an array that is filled (x) where condition is true, filled (y) where the condition is false. One of x or y can be the constant element -masked ( -See - -The constant masked -) -. The result is masked where condition is masked, where the element selected from x or y is masked, or where x or y itself is the constant -masked - and it is selected.

    -

    -innerproduct (a, b) and dot (a, b) work as in Numeric, but missing values don't contribute. The result is always a masked array, possibly of length one, because of the possibility that one or more entries in it may be invalid since all the data contributing to that entry was invalid.

    -

    -outerproduct (a, b) produces a masked array such that result[i, j] = a[i] * b[j]. The result will be masked where a[i] or b[j] is masked.

    -

    -compress (condition, x, dimension=-1) compresses out only those valid values where condition is true.

    -

    -maximum (x, y = None) and minimum (x, y = None) compute the minimum and maximum valid values of x if y is None; with two arguments, they return the element-wise larger or smaller of valid values, and mask the result where either x or y is masked.

    -

    -sort (x, axis=-1, value = None) returns the array x sorted along the given axis, with masked values treated as if they have a sort value of value but locations containing value are masked in the result if x had a mask to start with. Thus if x contains value at a non-masked spot, but has other spots masked, the result may not be what you want.

    -

    -argsort (x, axis = -1, fill_value = None) is unusual in that it returns a Numeric array, equal to
    -Numeric.argsort (filled (x, fill_value), axis); this is an array of indices for sorting along a given axis.

    -
    -
    -Controlling the size of the string representations
    -

    -The functions get_print_limit () and set_print_limit (n=0) query and set the limit for converting arrays using str() or repr (). If an array is printed that is larger than this, the values are not printed; rather you are informed of the type and size of the array. If n is zero, the standard Numeric conversion functions are used.

    -

    -When imported, MA sets this limit to 300, and the limit is also made to apply to standard Numeric arrays as well.

    -
    -
    -
    -Helper classes
    -

    -This section discusses other classes defined in module MA.

    -
    -
    -MAError
    -

    -Class MAError inherits from Exception, used to raise exceptions in the MA module. Other exceptions are possible, such as errors from the underlying Numeric module.

    -
    -
    -
    -The constant masked
    -

    -A constant named masked, in Module MA, serves several purposes.

    -
      -
    1. -When a indexing operation on an MaskedArray instance returns a scalar result, but the location indexed was masked, then masked is returned. For example, given a one-dimensional array x such that x.mask(3) is 1, then x[3] is masked.
    2. -
    3. -When masked is assigned to elements of an array via indexing or slicing, those elements become masked. So after x[3] = masked, x[3] is masked.
    4. -
    5. -masked.display() is a string that may be used to indicate those elements of an array that are masked when the array is converted to a string, as happens with the print statement.
    6. -
    7. -masked.set_display (string) can be used to change the value; the default is `--'.
    8. -
    9. -masked.enable(flag) can be used to enable (flag = 1, default) the use of the display string. If disabled (flag=0), the conversion to string becomes equivalent to str(self.filled()).
    10. -
    11. -masked.enabled() returns the state of the display-enabling flag.
    12. -
    13. -Most operations on masked will result in an exception being raised.
    14. -
    -
    -
    -Example of masked behavior
    -

    ->>> -from MA import * -

    -

    ->>> -x=arange(10) -

    -

    ->>> -x[3] = masked -

    -

    ->>> -print x -

    -

    -[0 ,1 ,2 ,-- ,4 ,5 ,6 ,7 ,8 ,9 ,]

    -

    ->>> -print repr(x) -

    -

    -*** Masked array, mask present ***

    -

    -Data:

    -

    -[0 ,1 ,2 ,-- ,4 ,5 ,6 ,7 ,8 ,9 ,]

    -

    -Mask (fill value [0,])

    -

    -[0,0,0,1,0,0,0,0,0,0,]

    -

    - 

    -

    ->>> -print x[3] -

    -

    ---

    -

    ->>> -print x[3] + 1.0 -

    -

    -Traceback (innermost last):

    -

    - File "<stdin>", line 1, in ?

    -

    - File "/pcmdi/dubois/prerelease/linux/lib/python1.5/site-packages/MA/__init__.py", line 62, in nope

    -

    - raise MAError, 'Cannot do requested operation with a masked value.'

    -

    -MA.MAError: Cannot do requested operation with a masked value.

    -
    -
    -
    -
    -Class masked_unary_function
    -

    -Given a unary array function f (x), masked_unary_function (f, fill = 0, domain = None) is a function which when applied to an argument x returns f applied to the array filled (x, fill), with a mask equal to
    -mask_or (getmask (x), domain (x)).

    -

    -The argument domain therefore should be a callable object that returns true where x is not in the domain of f. The following domains are also supplied as members of module MA:

    -
      -
    • -domain_check_interval (a, b) (x) = true where x < a or y > b.
    • -
    • -domain_tan (eps) (x) is true where abs (cos (x)) < eps, that is, a domain suitable for the tangent function.
    • -
    • -domain_greater (v) (x) is true where x <= v.
    • -
    • -domain_greater_equal (v) (x) is true where x < v.
    • -
    -
    -
    -
    -Class masked_binary_function
    -

    -Given a binary array function f (x, y), masked_binary_function (f, fillx=0, filly=0, domain=None) defines a function whose value at x is f (filled (x, fillx), filled (y, filly)) with a resulting mask of mask_or (getmask (x), getmask (y), mask_or'd again with those locations where domain (x, y) is true. The values fillx and filly must be chosen so that (fillx, filly) is in the domain of f.

    -

    -In addition, an instance of masked_binary_function has two methods defined upon it:

    -
      -
    • -reduce (target, axis = 0)
    • -
    • -accumulate (target, axis = 0)
    • -
    -

    -These methods perform reduction and accumulation as discussed in the section Ufuncs have special methods.

    -

    -The following domains are available for use as the domain argument:

    -
      -
    • -domain_safe_divide () (x, y) is true where absolute(x)*1.e-35 > absolute (y). As the comments in the code say, "better ideas welcome". This domain is used for the divide operator.
    • -
    -
    -
    -
    -ActiveAttributes
    -

    -MA contains a subpackage, MA.activeattr, which defines the class ActiveAttributes. Class MaskedArray inherits from ActiveAttributes.

    -

    -An active attribute is a name, say active, that appears to be an attribute of a class instance but which in fact is implemented by a triplet of functions, one each corresponding to the operations x.active, x.active = value, and del x.active. To create such an attribute, you inherit from ActiveAttributes and in your classes' initialization routine you do:

    -

    -ActiveAttributes.__init__(self) # safe for multiple inheritance

    -

    -self.add_active_attribute_handler ("active", self.actg,

    -

    - self.acts, self.actd)

    -

    -Here actg, acts, and actd are the three handlers, which should be methods of this class with signatures actg(self), acts(self, value), and actd(self). The last two arguments to add_active_attribute_handler can be None, in which case the "active" attribute will behave as if it is read-only.

    -

    -The "attributes" shape, flat, real, and imag in class MaskedArray are actually "active" attributes.

    -

    -ActiveAttributes also contains methods:

    -

    -def get_active_attribute_handler (self, name):

    -

    - "Get current attribute handler associated with a name."

    -

    -def get_active_attributes (self):

    -

    - "Return the list of attributes that have handlers."

    -

    -def get_attribute_mode (self, name):

    -

    - "Get the mode of an attribute readonly ('r') or writeable ('w')."

    -

    -def get_basic_attribute_handler (self):

    -

    - "Returns the underlying methods that handle the three events."

    -

    -def remove_active_attribute_handler (self, name):

    -

    - "Remove the `active' behavior for name."

    -
    -
    -
    -
    -Examples of Using MA
    -
    -
    -Data with a given value representing missing data
    -

    -Suppose we have read a one-dimensional list of elements named x. We also know that if any of the values are 1.e20, they represent missing data. We want to compute the average value of the data and the vector of deviations from average.

    -

    ->>> -from MA import * -

    -

    ->>> x = arange(5)

    -

    ->>> x[2] = 1.e20

    -

    ->>> y = masked_values (x, 1.e20)

    -

    ->>> print average(y)

    -

    -2.0

    -

    ->>> print y-average(y)

    -

    -[ -2.00000000e+00, -1.00000000e+00, --, 1.00000000e+00,

    -

    - 2.00000000e+00,]

    -
    -
    -
    -Filling in the missing data
    -

    -Suppose now that we wish to print that same data, but with the missing values replaced by the average value.

    -

    ->>> -print filled (y, average(y)) -

    -
    -
    -
    -Numerical operations
    -

    -We can do numerical operations without worrying about missing values, dividing by zero, square roots of negative numbers, etc.

    -

    ->>> -from MA import * -

    -

    ->>> -x=array([1., -1., 3., 4., 5., 6.], mask=[0,0,0,0,1,0]) -

    -

    ->>> -y=array([1., 2., 0., 4., 5., 6.], mask=[0,0,0,0,0,1]) -

    -

    ->>> -print sqrt(x/y) -

    -

    -[ 1.00000000e+00, --, --, 1.00000000e+00, --, --,]

    -

    -Note that four values in the result are invalid: one from a negative square root, one from a divide by zero, and two more where the two arrays x and y had invalid data. Since the result was of a real type, the print command printed str (filled (sqrt (x/y))).

    -
    -
    -
    -Seeing the mask
    -

    -There are various ways to see the mask. One is to print is directly, the other is to convert to the repr representation, and a third is get the mask itself. Use of getmask(x) is more robust than x.mask(), since it will work (returning None) if x is a Numeric array or list.

    -

    ->>> -x=arange(10) -

    -

    ->>> -x[3:5] = masked -

    -

    ->>> -print x -

    -

    -[0 ,1 ,2 ,-- ,-- ,5 ,6 ,7 ,8 ,9 ,]

    -

    ->>> -print repr(x) -

    -

    -*** Masked array, mask present ***

    -

    -Data:

    -

    -[0 ,1 ,2 ,-- ,-- ,5 ,6 ,7 ,8 ,9 ,]

    -

    -Mask (fill value [0,])

    -

    -[0,0,0,1,1,0,0,0,0,0,]

    -

    - 

    -

    ->>> -print getmask(x) -

    -

    -[0,0,0,1,1,0,0,0,0,0,]

    -

    - 

    -
    -
    -
    -Filling it your way
    -

    -If we want to print the data with -1's where the elements are masked, we use filled.

    -

    ->>> -print filled(z, -1) -

    -

    -[ 1.,-1.,-1., 1.,-1.,-1.,]

    -
    -
    -
    -Ignoring extreme values
    -

    -Suppose we have an array d and we wish to compute the average of the values in d but ignore any data outside the range -100. to 100.

    -

    -v = masked_outside(d, -100., 100.)

    -

    -print average(v)

    -
    -
    -
    -Averaging an entire multidimensional array
    -

    -The problem with averaging over an entire array is that the average function only reduces one dimension at a time. So to average the entire array, ravel it first.

    -

    - ->>> x -

    -

    -*** Masked array, no mask ***

    -

    -Data:

    -

    -[[ 0, 1, 2,]

    -

    - [ 3, 4, 5,]

    -

    - [ 6, 7, 8,]

    -

    - [ 9,10,11,]]

    -

    - 

    -

    - ->>> average(x) -

    -

    -*** Masked array, no mask ***

    -

    -Data:

    -

    -[ 4.5, 5.5, 6.5,]

    -

    - 

    -

    - ->>> average(ravel(x)) -

    -

    -5.5

    -

    - 

    -

    -Index

    -
    -
    -
    -
    -
    -Symbols
    - -
    - - - - - - - - - - -
    -
    -M
    - -
    - - -
    -
    -P
    - -
    - - - - -
    -
    -V
    - -
    -
    -
    -W
    - -
    - -
    -
    -
    -
    -
    -

    - -1. -This limit is modifiable in the source code if higher dimensionality is needed.

    -
    -
    -

    - -2. -The Python syntax can allow other Python datatypes to use both the stride notation and multidimensional indexing, and it is relatively simple to write Python classes which support these operations. See the Python Reference manual for details.

    -
    -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/publishGFE.html b/cave/com.raytheon.viz.gfe/help/publishGFE.html deleted file mode 100644 index 43e1515029..0000000000 --- a/cave/com.raytheon.viz.gfe/help/publishGFE.html +++ /dev/null @@ -1,143 +0,0 @@ - - - - - - publishGFE User's Guide - - -

    -publishGFE User's Guide

    -
    April 4, 2006
    -
    -Table of Contents -

    -Overview

    -

    -Running the publishGFE Program

    -

    -Example Output

    -
    -
    - -

    -Overview

    -
    The publishGFE is a program to allow publishing -of -Fcst data to the Official database from a command line.
    -
    -
    -

    - -

    -Running the publishGFE Program

    -
     
    -
    The command line syntax is:
    -
    publishGFE -h hostname -r portnumber [-p -parm] -[-t namedTR] [-s startTime] [-e endTime] [-u user]
    -
    -
    -
    A sample command line is: -
    -publishGFE -h dx4f -r 98000000 -t "Day 3" -u awipsusr
    -
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Option SyntaxOptional or MandatoryDescription
    -h hostnameMandatory (See Note)Specifies the host, upon which the ifpServer is running.
    -r portMandatory (See Note)Specifies the port, upon which the ifpServer is running.
    -p parmNameOptional. May have more than one -p switch.Specifies the parm name to publish, such as "MaxT". You can -also specify -a level for non-surface based elements, such as "Wind_3K".  The -underscore -character separates the parameter name from the level.
    -t namedTROptional. Supersedes any -s and -e switches.Defines the time range over which to publish.  This is a -user-defined -named time range.
    -s startTimeOptional. Format: yyyymmdd_hhmmDefines the starting time range over which to publish. 
    -e endTimeOptional. Format: yyyymmdd_hhmmDefines the ending time range over which to publish.
    -u userOptional. The connection to the ifpServer will be made using this user, -which -defaults to "SITE". This switch may be necessary if the -t switch is -given -and it refers to a non-SITE defined time range.
    -Note: The -h serverhost and -r port are -predefined -based on your installation configration of GFESuite.  The -h and --r -will be defined for the server host and port specified during -installation.    -If you wish to connect to another server, then these switches will be -necessary.   If environment -variables ${CDSHOST} or -${CDSPORT} are defined, then the default server and port will be -determined from the environment variables, unless overridden with the -user specified -h and -r switches. -
    -
    -

    -Example Execution

    -
    The following shows an example of publishing MaxT -and MinT data over the time range defined by "Hour 0-240". -

    camper > publishGFE -h dx4f -r 98000000 -p MaxT -p -MinT -t -"Hour 0-240" -

    -

    13:20:10.023 publishGFE.C 41 EVENT: Publish Fcst Data to Official -
    -13:20:10.028 Client.C 161 EVENT: Establishing connection to server -on polaris:98000000 ver=20020626 -
    -13:20:10.042 Client.C 177 EVENT: Connection complete to server -on polaris -
    -13:20:10.100 publishGFE.C 205 EVENT: Publishing: MaxT (Aug 26 02 -06:00:00 GMT, Sep 05 02 06:00:00 GMT) -
    -13:20:10.102 publishGFE.C 209 EVENT: Publishing: [ParmId: -MaxT_SFC:BOU_GRID__Fcst_00000000_0000 -CommitTR: (Aug 26 02 06:00:00 GMT, Sep 05 02 06:00:00 GMT) ] -
    -13:20:10.305 publishGFE.C 221 EVENT: Publish completed -

    -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/purgeAllGrids.html b/cave/com.raytheon.viz.gfe/help/purgeAllGrids.html deleted file mode 100644 index 61146bbec6..0000000000 --- a/cave/com.raytheon.viz.gfe/help/purgeAllGrids.html +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - purgeAllGrids - - -

    purgeAllGrids User's Guide

    -January 6, 2012
    -
    -
    -The purgeAllGrids program is part of the GFESuite software.  -It will remove all grids from all weather elements for the specfied -database.  The grids must not be locked or the purgeAllGrids -program will fail.  This -program must be used with CAUTION, since it will destroy existing grids -with no possibility of recovery.
    -
    -

    Running the program

    -

    -Command Line Switches

    -The command line syntax is: -

    purgeAllGrids -h hostname -p rpcPortNumber -
    -
    - - - - - - - - - - - - - - - - - - - - - - - -
    Command SwitchOptional or Mandatory?Description
    -hMandatory (see Note)Host name upon which EDEX is running
    -pMandatory (see Note)RPC port upon which EDEX is running
    -d
    -
    Mandatory
    -
    Database identifier, from which -to purge all grids.
    -
    -Note: The -h and -p switches are predefined -when running in an installed GFESuite environment. They are -defined -to the values specified when installing the software.  If you wish -to connect to a different EDEX, then the switches will need to be -specified. -

    -
    -

    Sample Input

    - -

    purgeAllGrids -d -BOU_GRID__Restore_00000000_0000

    -
    -

    -

    -

    -Return to TOC - - diff --git a/cave/com.raytheon.viz.gfe/help/runProcedure.html b/cave/com.raytheon.viz.gfe/help/runProcedure.html deleted file mode 100644 index 9c41c113ee..0000000000 --- a/cave/com.raytheon.viz.gfe/help/runProcedure.html +++ /dev/null @@ -1,136 +0,0 @@ - - - - - - - runProcedure - - -

    -runProcedure User's Guide

    -
    -January 4, 2012
    -

    -The runProcedure program is part of the -GFESuite software which allows the user to run a Procedure from the -command line. -
    -
    -

    Running the program

    -

    -Command Line Switches

    -From the release/bin directory, the command line syntax is: -

    ./runProcedure -n procedureName -u userName -c configFile -
    -           -    [-h host] [-p port]
    -           -    [-a editAreaName] [-s startTime -e endTime] [-t -timeRange]
    -               -[-m mutableModel] [-z drtTime][-V varDict]
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Command SwitchDescription
    -nProcedure Name. Procedures can be created via the Define -Procedures Dialog in the GFE. See the GFE -Smart Tools Training Guide for -instructions on creating Procedures.
    -u User Name.
    -c Configuration file name.
    -hOptional. Host name upon which EDEX is running. -Default is taken from the siteConfig file.
    -pOptional. RPC port upon which EDEX is running. -Default is taken from the siteConfig file.
    -aEdit Area Name. Optional. If specified, this edit area will -be passed to your procedure for processing. Procedures can specify edit -areas internally or by soliciting the user at run time, so this -argument is optional. If no edit area is specified, Smart Tools invoked -via the Procedure will automatically operate on the entire grid.
    -sStart Time. Optional. - Format:<year><mo><day>_<hr><min>, -such as 20040514_1200.   If specified, an End Time must also be -given. The resulting time range will be passed to your procedure for -processing. Procedures can specify time ranges internally or by -soliciting the user at run time, so this argument is optional.
    -eEnd Time. Optional. - Format:<year><mo><day>_<hr><min>, -such as 20040514_2200.   If specified, a Start Time must also be -given, and the resulting time range will be passed to your procedure -for processing.
    -tNamed Time Range. Optional. If specified, the associated time -range will be passed to your procedure for processing. Specify either a -Time Range Name OR Start and -End Times, not both.
    -m
    -
    The mutable model can be -overriden through this switch.  Note that the format is in -the form of type_model or type_model_time, such as "_Fcst" or -"_NAM_20021002_1200.
    -z
    -
    The procedure may be run in the Displaced -Real Time Mode. -
    -V 
    -
     Use this option to provide -a run-time VariableList instead of displaying the user dialog. -The varDict must be in the form of a Python dictionary string, e.g.:
    -               --V  '{"Input Variable":"variable value", "Another variable": 25}'
    -
    -

    -

    -

    -Sample Command Line -

    ./runProcedure -n QPF_SnowAmt -u jsmith -h dx3-oax -p 9581 -c -gfeConfig -a SomeCounty -t Today -
    -

    - - diff --git a/cave/com.raytheon.viz.gfe/help/sendGfeMessage.html b/cave/com.raytheon.viz.gfe/help/sendGfeMessage.html deleted file mode 100644 index 754334991a..0000000000 --- a/cave/com.raytheon.viz.gfe/help/sendGfeMessage.html +++ /dev/null @@ -1,174 +0,0 @@ - - - - - - - sendGfeMessage - - -

    sendGfeMessage User's Guide

    -January 4, 2012
    -
    -
    -The sendGfeMessage program is part of the GFESuite software. -It takes a message specified on the command line and broadcasts it to -all connected clients through EDEX. The message, when -received by the GFE, is displayed in AlertViz.
    -
    -

    Running the program

    -

    -Command Line Switches

    -The command line syntax is: -
    -

    sendGfeMessage -h hostname -p rpcport [-r] [-s] [-u] [-a] [-c -class] -m message -

    -

      - 
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Command SwitchOptional or Mandatory?Description
    -hMandatory (see Note)Host name upon which EDEX is running
    -pMandatory (see Note)RPC port upon which EDEX is running
    -r
    -
    Optional
    -
    Send as a routine message. -(default)
    -
    -s
    -
    Optional
    -
    Send as a significant message.
    -
    -u
    -
    Optional
    -
    Send as an urgent message. -Urgent messages in the GFE will display a red banner.
    -
    -a
    -
    Optional
    -
    Send as an alert message.  -Alert messages in the GFE only appear in AlertViz.
    -
    -c
    -
    Optional
    -
    Message class, used by GFE to -determine whether message should appear in the left or right AlertViz -bar. Default is "GFE", which appears in the left AlertViz bar.
    -
    -m
    -
    Mandatory
    -
    Message contents.
    -
    -Note: The -h and -p switches are predefined -when running in an installed GFESuite environment. They are -defined to the values specified when installing the software. If you wish -to connect to a different EDEX, then the switches will need to be -specified.
    -

    -

    The Message -Classes that the GFE currently uses are shown in the following table:

    -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Message Class
    -
    Description
    -
    Appearance on -GFE Status Bar
    -
    SMARTINIT
    -
    Used by smart initialization -processes to inform the forecaster that new model data has been -processed.
    -
    Right status bar
    -
    ISC
    -
    Used by the ISC processing that -new ISC data has been received and processed.
    -
    Right status bar
    -
    NDFD
    -
    Message used by the NDFD central -server to alert forecasters to NDFD issues on missing grids, etc.
    -
    Right status bar
    -
    GFE
    -
    General GFE status messages.
    -
    Left status bar
    -
    -


    -

    -
    -

    Example Input

    - -

    sendGfeMessage -r --c GFE -m "test from sendGfeMessage"

    -

    -

    -Return to TOC - - diff --git a/cave/com.raytheon.viz.gfe/help/serverConfig.html b/cave/com.raytheon.viz.gfe/help/serverConfig.html deleted file mode 100644 index 38fe9ba593..0000000000 --- a/cave/com.raytheon.viz.gfe/help/serverConfig.html +++ /dev/null @@ -1,1871 +0,0 @@ - - - - - - serverConfig.py - - -
    -

    serverConfig.py

    -January 3, 2012
    -
    -  -
    The -serverConfig.py file is -one -of several configuration files for GFE. -The serverConfig.py file defines the general configuration of the -databases -and weather elements. The file is not intended to be -field-edited, -instead there is a localConfig.py  -and localWxConfig.py -file that sites -use -to override settings in this file.  The VTECPartners.py -file defines VTEC-specific configuration items.
    -
    -There are additional files that are built-in to the GFE that define -VTEC entries for the Hazards weather element.  These are not -configurable.
    -

    This information is provided for you to -help -you understand the format of serverConfig.py.  You should NEVER -change -the original serverConfig.py since your changes will be overwritten -with -the next upgrade.  See the server -configuration overview -for information on how to make changes that -are supported to the server.
    -

    -

    The excerpts from the serverConfig.py may not be complete or -up-to-date; they serve as examples only. 

    -
    -

    -Organization

    - - - - - - - - - - -

    -General Environment and Common -Functions
    -

    -The general environment and common functions section of the -serverConfig.py file defines -general -information from the siteConfig file and convenience functions used -throughout serverConfig.py. -


    -def siteImport(modName):
    -    try:
    -        fp, path, des = -imp.find_module(modName)
    -        if fp:
    -            -fp.close()
    -    except ImportError:
    -        return 0
    -    globals()[modName] = __import__(modName)
    -    return 1

    -

    #---------------------------------------------------------------------------- -
    -# USEFUL DEFINES -
    -#---------------------------------------------------------------------------- -
    -import siteConfig, LogStream, config -

    -

    GFESUITE_SITEID = siteConfig.GFESUITE_SITEID
    -GFESUITE_MHSID  = siteConfig.GFESUITE_MHSID
    -GFESUITE_SERVER = siteConfig.GFESUITE_SERVER
    -GFESUITE_HOME   = siteConfig.GFESUITE_HOME
    -GFESUITE_PORT   = int(siteConfig.GFESUITE_PORT)
    -GFESUITE_LOGDIR = siteConfig.GFESUITE_LOGDIR
    -GFESUITE_PRDDIR = siteConfig.GFESUITE_PRDDIR
    -
    -

    -
    -

    Weather Element -Configuration -Section

    -The weather element configuration section defines the attributes for -each -weather element.  A weather element has the following attributes: -
    -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AttributeScalarVectorWeatherDiscreteDescription
    weather element nameyesyesyesyesno punctuation or spaces are allowed with the exception of an -underscore -to denote a level for the weather element, that is different from -SFC.  -To denote a weather element for the surface, you can use either -parmName -or parmName_SFC.  To denote a weather element for a non-surface -element, -use the underscore notation, such as parmName_level.
    typeyesyesyesyesdefines the weather element type, must be SCALAR, VECTOR, -WEATHER, -or DISCRETE
    unitsyesyesyesyesdefines the units used for this weather element
    descriptive nameyesyesyesyesdescriptive name for the weather element
    maximum possible valueyesyesnonoThe maximum allowable value for scalar, and the maximum -allowable value -for the magnitude component of vector.
    minimum possible valueyesyesnonoThe minimum allowable value for scalar, and the minimum -allowable value -for the magnitude component of vector.
    precisionyesyesnonodefines the resolution of the weather element in terms of the -number -of significant decimal points.  For example, a precision of 0 -indicates -a resolution of 1.0, and a precision of 2 indicates a resolution of -0.01.  -Only applies to scalar fields and the magnitude component for vector.
    rate-dependent weather elementyesyesnonoIf specified to be a rate-dependent parm, then changes in -valid time -of a grid will modify the data values in that grid to preserve the -calculated -rate. Values of 1 or 0, YES or NO are permitted.
    overlapping discrete elementnononoyesIf 1 or YES, then the discrete weather element permits -overlapping -values, i.e., a grid point may assume the value of more than 1 value.
    key definitionnononoyesDefines the allowable keys and their definitions for the -discrete weather -element
    sizeOfAuxDataField
    -
    no
    -
    no
    -
    no
    -
    yes (optional)
    -
    If specified, indicates the size -(as an integer) of the discrete auxiliary data field (string -size).  Aux data can be from 0 to this length.  If -sizeOfAuxDataField is not specified, then the discrete element will not -support auxiliary data.
    -
    -
    -  - - - - - - - - - - - - - - - - - - - - - - - -
    Weather Element TypeFormat of Definition
    SCALARVariableName = ("name", type, "units", "descriptive -name", maxValue, -minValue, precision, rateWE)
    VECTORVariableName = ("name", type, "units", "descriptive -name", maxValue, -minValue, precision, rateWE)
    WEATHERVariableName = ("name", type, "units", "descriptive name")
    DISCRETEVariableName = ("name", type, "units", "descriptive -name", overlapAllowed, -keyDefinition)
    -
    VariableName = ("name", type, "units", "descriptive -name", overlapAllowed, -keyDefinition, sizeOfAuxDataField)
    -
    -Note that the maximum value and minimum value must be floats, and the -precision -an integer. -

    For discrete, the key definition is in this form: -
    -keyDefName = [('keyName1', 'keyDescription1'), ('keyName2', -'key2Description'), -.... ] -

    -

    For overlapping discrete, the first key must be "<None>". -

    -
     
    -Example entries for  SCALAR, VECTOR,  WEATHER, and DISCRETE -elements -are shown below: -

    #--------------------------------------------------------------------------- -
    -# -
    -#  Weather Element configuration section. -
    -# -
    -#--------------------------------------------------------------------------- -

    -

    SCALAR  = 'Scalar' -
    -VECTOR  = 'Vector' -
    -WEATHER = 'Weather' -
    -DISCRETE = 'Discrete' -
    -NO = 0 -
    -YES = 1 -

    -

    # Standard Public Weather Elements -
    -Temp =    ("T", SCALAR, "fahrenheit", "Surface -Temperature", -
    -           120.0, --60.0, 0, NO) -

    -

    Wind =    ("Wind", VECTOR, "knots", "Surface -Wind", -
    -           80.0, -0.0, 0, NO) -

    -

    Weather = ("Wx", WEATHER, "coverage, intensity, type", "Weather") -

    -

    TestKeys = [("L", "Low"),("M", -"Medium"), ("H", "High")] -
    -TestKey = ("TestKey", DISCRETE, "categories", "TestKey", NO, -TestKeys) -

    -

    ExtraWEPrecision

    -Weather Elements are stored in their specified precision in GFE, -thus if you have the precision set to 0 for a weather element, it will -effectively be stored as integers.  Sometimes you might want -additional -precision available for certain weather elements in order to facilitate -computations on the data.  For those cases, where you don't want -to -specify a higher precision (which affects labeling, sampling, ISC data -sizes, etc.), you can use the ExtraWEPrecision entry.  The entry -is -a listing of weather elements that require extra precision, or is a -listing -of tuples that are weather elements and amount of extra -precision.  -The effective precision assigned to these elements is one more than -that -defined in the weather element configuration section, if just the -weather -element name is used, or is the specified number of precision boosts, -if -a tuple form is used for (wename, extraPrec).  You can mix and -match -the definitions, i.e., use the 'wename' form and the ('wename', -extraPrec) -form in the same declaration: -

    # Scalar/Vector Weather Elements that Require Extra Precision -(due -to their -
    -# use in calculations) -
    -#ExtraWEPrecision = ['T', 'Td', 'RH'] -
    -#ExtraWEPrecision = [('T', 1), 'Td', ('RH', 2)] -
    -ExtraWEPrecision = [] -

    -
    -

    Weather Configuration -Section

    -The weather configuration section of the serverConfig.py file defines -all -of the possible characteristics of the WEATHER-type of weather -element.  -The WEATHER type has five sets of characteristics: -
      -
    • weather type
    • -
    • coverage/probability
    • -
    • intensity
    • -
    • visibility
    • -
    • optional attributes
    • -
    -There is one set of visibilities for all weather types.  However -for -each weather type, the user can define its list of possible -coverages/probabilities, -intensities, and optional attributes. -
    -  -

    Possible Visibilities

    -The list of possible visibilities is given in the "visibilities" -parameter.  -It is important that no entries contain a space.  A special entry -is made to denote that no visibility has been defined.  All -defined -weather types will use this set of visibilities. There is a defined -order -to these visibilities.  The "no visibility" is defined first, -following -by increasing visibility.  Changing this order is not recommended. -

    # list of possible visibilities -
    -visibilities = ['<NoVis>', '0SM', '1/4SM', '1/2SM', '3/4SM', -'1SM', '11/2SM', -
    -                -'2SM', '21/2SM', '3SM', '4SM', '5SM', '6SM', 'P6SM'] -
    -  -

    -

    Possible Coverages -and -Probabilities

    -The list of possible coverages and probabilities consist of tuple -entries.  -The first entry is the symbol that is used in the ugly weather string -as -well as on GFE dialogs.  The second entry is the string that is -accessible -via product formatters to aid them in intrepreting the weather coverage -and/or probability. -

    The symbol entry cannot contain spaces.  This section simply -defines -all of the possible coverages and probabilities.  Another section -of the configuration file relates these to each weather element. -

    -

    # list of possible coverages and probabilities -
    -NOCOV = ('<NoCov>', 'No Coverage') -
    -ISOD = ('Iso', 'Isolated') -
    -SCT = ('Sct', 'Scattered') -
    -NUM = ('Num', 'Numerous') -
    -WIDE = ('Wide', 'Widespread') -
    -OCNL = ('Ocnl', 'Occasional') -
    -SCHC = ('SChc', 'Slight Chance Of') -
    -CHC = ('Chc', 'Chance Of') -
    -LKLY = ('Lkly', 'Likely') -
    -DEFN = ('Def', 'Definite') -
    -PATCHY = ('Patchy', 'Patchy') -

    -
    -

    Possible Intensities

    -The list of possible intensities consist of tuple entries.  The -first -entry is the symbol that is used in the ugly weather string as well as -on GFE dialogs.  The second entry is the string that is accessible -via product formatters to aid them in intrepreting the intensity. -

    The symbol entry cannot contain spaces.  This section simply -defines -all of the possible intensities.  Another section of the -configuration -file relates these to each weather element. Note the "moderate" -intensity -which is normally indicated by a space or null-character in -meteorology.  -Since the software cannot have a space, the character 'm' has been -chosen -to indicate moderate. Since some weather types may not have an -intensity, -such as blowing snow, a no intensity entry has been defined.  Each -weather type must have at least one intensity associated with it, even -if is the no intensity entry. -

    -

    # list of possible intensities -
    -INTEN_NONE = ('<NoInten>', 'No intensity') -
    -INTEN_VERYLIGHT = ('--', 'Very Light') -
    -INTEN_LIGHT = ('-', 'Light') -
    -INTEN_MOD = ('m', 'Moderate') -
    -INTEN_HEAVY = ('+', 'Heavy') -

    -

    For convenience in defining the weather types, intensities groupings -may be created by declaring arrays.  In this case an array named -PCPINTEN -has been created with the very light, light, moderate, and heavy -intensities. -There is a defined order to the groupings.  They are usually -ordered -in increasing intensity. -

    -

    # special intensity groupings -
    -PCPINTEN =[INTEN_VERYLIGHT, INTEN_LIGHT, INTEN_MOD, INTEN_HEAVY] -
    -  -

    -

    Optional Attributes

    -The list of possible optional attributes consist of tuple -entries.  -The first entry is the symbol that is used in the ugly weather string -as -well as on GFE dialogs.  The second entry is the string that is -accessible -via product formatters to aid them in intrepreting the attribute. -

    The symbol entry cannot contain spaces.  This section simply -defines -all of the possible attributes.  Another section of the -configuration -file relates these to each weather element. Note that there is no entry -for no attribute since weather elements can have zero or more optional -attributes. -

    -

    # list of optional attributes -
    -FQTLTG = ('FL', 'Frequent Lightning') -
    -GUSTS = ('GW', 'Gusty Winds') -
    -HVYRAFL = ('HvyRn', 'Heavy Rainfall') -
    -DMGWND = ('DmgW', 'Damaging Winds') -
    -SMALLH = ('SmA', 'Small Hail') -
    -LARGEH = ('LgA', 'Large Hail') -
    -OUTLYNG = ('OLA','in the outlying areas') -
    -
    -

    -

    Weather Type Definitions

    -This section of the configuration file defines each possible weather -type, -including the no weather type.  The definition brings together the -possible coverages/probabilities, intensities, and optional attributes -for each of the weather types.  The weather types cannot contain a -space. The format of the entries are: -

    TypeSymbol = ('Symbol', 'Description', [coverages], -[intensities], -[optional attributes]) -

    -

    NOWX = ('<NoWx>', 'No Weather',
    -          [NOCOV],
    -          [INTEN_NONE],
    -          [])
    -THUNDER = ('T', 'Thunderstorms',
    -          [ISOD, SCT, NUM, -WIDE, SCHC, CHC, LKLY, DEFN, OCNL, FQT, BRIEF,
    -            -PERIODS, INTM],
    -          [INTEN_NONE, -INTEN_SEVERE],
    -          [PRIMARY, -MENTION, FQTLTG, HVYRAFL, GUSTS, DMGWND, DRY])
    -HAIL = ('A', 'Hail',
    -          [ISOD, SCT, NUM, -WIDE, SCHC, CHC, LKLY, DEFN, OCNL, FQT, BRIEF,
    -            -PERIODS, INTM],
    -          [INTEN_NONE],
    -          [PRIMARY, -MENTION, LARGEH, SMALLH])
    -RAIN = ('R', 'Rain',
    -          [WIDE, SCHC, -CHC, LKLY, DEFN, OCNL, FQT, BRIEF, PERIODS, INTM],
    -          -[INTEN_VERYLIGHT, INTEN_LIGHT, INTEN_MOD, INTEN_HEAVY],
    -          [PRIMARY, -MENTION, OR])
    -RAINSHOWERS = ('RW', 'Rain Showers',
    -          [ISOD, SCT, NUM, -WIDE, SCHC, CHC, LKLY, DEFN, OCNL, FQT, BRIEF,
    -            -PERIODS, INTM],
    -          -[INTEN_VERYLIGHT, INTEN_LIGHT, INTEN_MOD, INTEN_HEAVY],
    -          [PRIMARY, -MENTION, OR])
    -

    -

    -

    The "types" entry combines all of the defined types into an ordered -list. It is important to keep this list in proper meteorological order -or the display of the weather information will not use meteorological -conventions.  -For example, T is the symbol for Thunder and RW is the symbol for rain -showers.  Thunder appears before rain showers in the following -list. -As a result, when thunder is combined with rain showers the composite -symbol -is displayed as TRW, which is a very common symbol for the -forecaster.  -If the Thunder and rain showers were reversed, thunderstorms would be -displayed -as RWT which has no meaning to the forecaster. -

    -

    types = [NOWX, THUNDER, WATERSPOUT, HAIL, RAIN, RAINSHOWERS, -
    -         DRIZZLE, FZRAIN, -FZDRIZZLE, SNOW, SNOWSHOWERS, -
    -         SLEET, FOG, -FREEZEFOG, -ICEFOG, ICECRYSTAL ,HAZE, BLWGSNOW, -
    -         BLWGSAND, SMOKE, -BLWGDUST, SA, CAL, FROST, FQTGSTS, FRZSPRAY, -
    -         VOLASH] -

    -
    -

    Projection -Configuration Section

    -The map projection information defines each of the standard AWIPS -projections -in use. This section is used to define a new projection that isn't one -of the standards.  The projections that are currently known by the -GFESuite software are: -
    -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Grid201Grid202Grid203Grid204
    Grid205Grid206Grid207Grid208
    Grid209Grid210Grid211Grid212
    Grid213Grid214Grid215Grid216
    Grid217Grid218Grid219Grid221
    Grid222Grid225Grid226Grid227
    Grid228Grid229Grid230Grid231
    Grid232Grid233Grid234Grid235
    HRAPGrid214AK
    -

    -
    -

    All of the map projection information was derived from the paper, -"Map -Projections A Working Manual," by John P. Snyder. This manual was -published -as U.S. Geological Survey Paper No. 1395. The reader is referred to -this -paper for details not included in this discussion. -

    -

    Eventually this section will be removed from the configuration -file.  -A projection will be displayed only when a new, non-standard projection -is needed. -

    -

    The information that is required to define a projection is shown -below, -not all of the entries are needed for each projection type: -

    -
      -
    • projection identifier
    • -
    • projection type (LAMBERT_CONFORMAL, MERCATOR, -POLAR_STEREOGRAPHIC, -LATLON
    • -
    • lower left point latitude/longitude
    • -
    • upper right point latitude/longitude
    • -
    • latitude longitude origin
    • -
    • standard parallel one
    • -
    • standard parallel two
    • -
    • grid point number for lower left point
    • -
    • grid point number for upper right point
    • -
    • latitude intersect
    • -
    • longitude center
    • -
    • longitude origin
    • -
    -At the end of the projection information is a list containing all of -the -projections. -

    #--------------------------------------------------------------------------- -
    -# -
    -#  Projection Configuration section. -
    -# -
    -#--------------------------------------------------------------------------- -
    -NONE = 0 -
    -LAMBERT_CONFORMAL = 1 -
    -MERCATOR = 2 -
    -POLAR_STEREOGRAPHIC = 3 -
    -LATLON = 4 -
    -  -

    -

    # projectionID / projectionType / latLonLL / latLonUR / -
    -# latLonOrigin / stdParallelOne / stdParallelTwo / gridPointLL -/ gridPointUR -
    -# latIntersect / lonCenter / lonOrigin -

    -

    Grid201 = ('Grid201',POLAR_STEREOGRAPHIC, -
    -      (-150.00, -20.826), (-20.90846, -30.0), -
    -      (0.0, 0.0), 0.0, 0.0, (1, 1), (65, -65), 0.0, 0.0, -105.0) -

    -

    Grid202 = ('Grid202', POLAR_STEREOGRAPHIC, -
    -      (-141.028, 7.838), (-18.576, 35.617), -
    -      (0.0, 0.0), 0.0, 0.0, (1, 1), (65, -43), 0.0, 0.0, -105.0) -

    -

    # list of all projections -
    -allProjections = [Grid201, Grid202, Grid203, Grid204, Grid205, -Grid206, -
    - Grid207, Grid208, Grid209, Grid210, Grid211, Grid212, -Grid213, -Grid214, -
    - Grid214AK, Grid215, Grid216, Grid217, Grid218, Grid219, -Grid221, -Grid222, -
    - Grid225, Grid226, Grid227, Grid228, Grid229, Grid230, -Grid231, -Grid232, -
    - Grid233, Grid234, Grid235, HRAP] -
    -

    -
    -

    Grid Domain Configuration

    -The grid domain configuration section contains entries for each WFO in -the AWIPS system.  The entries define the grid characteristics for -each site.  These charactistics are: -
      -
    • grid size
    • -
    • grid location (origin and domain) in world coordinates
    • -
    • site time zone
    • -
    • projection identifier
    • -
    -The format of the entries are: -

    'siteid' : ((xdim,ydim), (xorigin,yorigin), (xextent,yextent), -'timezone', -projection) -

    -

    This example shows the relationship between the AWIPS Grid 211 -projection -and a grid domain.  The AWIPS world coordinate xorigin is 37, -yorigin -is 27, the xextent is 9, and the yextent is 9. The size of the AWIPS -grid -is therefore 9x9, but the desired size of the GFESuite grid is -73x73.  -Thus the software has the capability of expanding each AWIPS grid cell -on the projection in order to increase resolution. -
    -#--------------------------------------------------------------------------- -
    -# -
    -#  Grid Domain configuration section -
    -# -
    -#--------------------------------------------------------------------------- -
    -# -
    -# xdim/ydim:  Defines the dimensions of the grids. -
    -# -
    -# origin:  Defines the lower-left corner of the grid (point -0,0) in -
    -#   world coordinates. -
    -# -
    -# extent:  Defines the "size" of the grid in world -coordinates.  -The upper -
    -#   right corner is the origin+extent. -
    -# -
    -# timezone: defines the time zone used for the site. -
    -# -
    -# Projection:  Defines the projection identifier to be used -for this domain. -

    -

    # Note that all parameters for an existing database must use the -same -
    -# projection, though not necessarily the same grid size and -location. -

    -

    #         [xdim, ydim] -/       -(origin) /     (extent) / Projection / Office Type -

    -

    SITES = { -
    -    'ABQ' : ([145, 145], (36.00, 22.00), (9.0, 9.0), -'MST7MDT', Grid211, 'wfo'), -
    -    'ABR' : ([145, 145], (45.00, 35.00), (9.0, 9.0), -'CST6CDT', Grid211, 'wfo'), -
    -    'AFC' : ([1034/2, 423/2], (1.0, 19.0), (67.0, -28.0), 'America/Anchorage', Grid214AK, 'wfo'), -
    -    'AFG' : ([313, 201], (27.0, 39.0), (39.0, 25.0), -'America/Anchorage', Grid214AK, 'wfo'), -
    -    'AJK' : ([337, 241], (62.0, 23.0), (21.0, 15.0), -'America/Anchorage', Grid214AK, 'wfo'), -
    -    'AKQ' : ([145, 145], (68.00, 25.00), (9.0, 9.0), -'EST5EDT', Grid211, 'wfo'), -
    -    'ALY' : ([145, 145], (70.00, 33.00), (9.0, 9.0), -'EST5EDT', Grid211, 'wfo')] -

    -

    Note that the origin and extents are floating-point numbers and thus -must have decimal point in them. -
    -

    -
    -

    Time Constraint -Configuration

    -Each weather element has a defined time constraint.  The time -constraint -forces grids to be aligned on the constraint boundaries.  There -are -three components to a time constraint: start time, repeat, and -duration.  -Grids are aligned on a start time boundary, repeat every repeat -interval, -and have a duration of that specified.  All numbers are in seconds -so a variable is declared for HOUR and DAY to make the entries more -legible.  -The start time is based on 0000z. The format is: -

    timeConstraintName = (start, repeat, duration) -

    -


    -We have a standard naming convention for most of the Time Constraints -in the form of "TC", followed by the repeat in hours, followed by NG if -there aren't any gaps.  So a TC3 would be a time constraint for -every -3 hours, with a grid that is only 1 hour long.  A TC3NG would be a -time constraint for every 3 hours with a grid that is 3 hours -long.  -NG stands for no gaps. -

    -

    We also have several local time-based time constraints.  These -are typically prefixed with LT for local time. -

    -

    #--------------------------------------------------------------------------- -
    -# -
    -#  Time Constraint configuration section -
    -# -
    -#--------------------------------------------------------------------------- -
    -HOUR = 3600 -
    -DAY  = 24 * HOUR -

    -

    # Start: is the number of seconds since 0000z for the first grid -of the day -
    -# Repeat: is the number of seconds from start until the next grid -starts -
    -# Duration: is the length of the grid in number of seconds -

    -

    # Examples of constraints: -
    -# Hourly temperatures -
    -#     HrTemp = (0, HOUR, HOUR) -
    -# QPF that is 6 hours long, aligned on 0000z, exists for every -6 hours -
    -#     Q = (0, HOUR*6, HOUR*6) -
    -# -

    -

    # start / repeat / duration -
    -# fixed time constraints: start / repeat / duration -
    -TC1      = (0, HOUR, HOUR) -
    -TC3      = (0, 3 * HOUR, HOUR) -
    -TC6      = (0, 6 * HOUR, HOUR) -
    -TC12     = (0, 12 * HOUR, HOUR) -
    -TC3NG    = (0, 3 * HOUR, 3 * HOUR) -
    -TC6NG    = (0, 6 * HOUR, 6 * HOUR) -
    -TC12NG   = (0, 12 * HOUR, 12 * HOUR) -
    -TC061212 = (6 * HOUR, 12 * HOUR, 12 * HOUR) -
    -Persistent = (0, 0, 0)     # special used only -for GeoWeight grids -
    -  -
    -  -

    -

    Maximum and Minimum Temperature need special time constraints since -their constraints are based on local time.  Since the time -constraints -are only specified in GMT, a python mechansim is written to look at the -sites's time zone and adjusts the time constraints for local time. The -localTC macro takes four arguments: start, repeat, duration, and dst. -The -start is entered in number of seconds from midnight localtime. For -example, -6*HOUR would indicate 6am. The repeat and duration are in seconds. The -dst flag is 0 for calculation of these time constraints in standard -time -and 1 for calculation for daylight savings time. Note that the server -cannot -automatically switch these time constraints between standard and -daylight -savings time. If a site chooses to edit the entries for daylight -savings -time, be aware that the server will mark the entire database (and hence -all of the data contained within) invalid. -

    -

    def localTC(start,repeat,duration,dst): -
    -    timezone = SITES[GFESUITE_SITEID][3] -
    -    import os -
    -    os.environ['TZ'] = timezone -
    -    import time -
    -    start = time.timezone + start -
    -    if dst == 1: -
    -    start = start - 3600 -
    -    if start >= 3600 * 24: -
    -        start = start - 3600 -* 24 -
    -    elif start < 0: -
    -        start = start + 3600 -* 24 -
    -    return (start, repeat, duration) -

    -

    MaxTTC     = localTC(7*HOUR, 24*HOUR, -12*HOUR, -0) -
    -MinTTC     = localTC(19*HOUR, 24*HOUR, 13*HOUR, -0) -
    -MaxRHTC     = localTC(15*HOUR, 24*HOUR, -18*HOUR, -0) -
    -MinRHTC     = localTC(3*HOUR, 24*HOUR, 18*HOUR, -0) -
    -LT3NG     = localTC(0*HOUR, 3*HOUR, 3*HOUR, -0) -
    -LT6NG     = localTC(0*HOUR, 6*HOUR, 6*HOUR, -0) -
    -LT12NG    = localTC(6*HOUR, 12*HOUR, 12*HOUR, 0) -
    -LTMOS     = localTC(6*HOUR, 12*HOUR, 12*HOUR, -0)  #special MOS local time -
    -MaxTTCMOS = localTC(6*HOUR, 24*HOUR, 12*HOUR, 0)  #special -MOS maxT -
    -MinTTCMOS = localTC(18*HOUR, 24*HOUR, 12*HOUR, 0)  #special -MOS minT -
    -LT24      = localTC(0*HOUR, 24*HOUR, -24*HOUR, -0) -
    -FireWx1300TC = localTC(13*HOUR, 24*HOUR, 1*HOUR, 0)   -#special FireWx 1pm snap -

    -
    -

    Database Attribute -Configuration

    -The database or model attribute configuration section defines -characteristics -of the database. The characterstics defined are: -
      -
    • model name
    • -
    • model format - this is always GRID.  GFESuite only uses the -GRID -format.
    • -
    • optional type - usually set to "" for no optional type.  For -special -cases may be set to other strings.  For example, isc virtual parm -databases -have their own set of weather elements. -Their database optional type is "V".  The GFE may be configured -to -view databases based on model name and optional type.
    • -
    • singleton - a singleton database is not time-stamped.  -Therefore -the -database is always in existance and is never purged.  Typically -the -forecast, official, and observational-type databases (e.g., LAPS -Analysis) -are singleton databases.  Typically the model databases (e.g., -NAM) -are not singletons since the database contains a time stamp of the -model -run time.
    • -
    • official - an official database has special meaning.  It is -typically -the database from which official products are generated. Official -databases -have special protocol to populate them.  They cannot be "locked" -or -"edited" like non-official databases.  Forecast data can only be -"published" -to the official database.
    • -
    • number of versions - number of versions of this database. Should -be 1 -for -singleton databases.
    • -
    • purge age in hours - if non-zero, the grids in the database will -be -purged -once the entire grid is "older" than the purge age in hours from the -current -system time.  Typically the singleton databses are grid purged -while -the model databases are not.
    • -
    -


    -#--------------------------------------------------------------------------- -
    -# -
    -#  Database/(Model) attribute section -
    -# -
    -#--------------------------------------------------------------------------- -
    -# -
    -# name:  The model name of the database -
    -# -
    -# format:  Always 'GRID' -
    -# -
    -# type:  Optional type of the database -
    -# -
    -# single:  YES or NO. YES if this database always exists and -is not -
    -#   based on model-times.  NO if this database is -created/destroyed and -
    -#   is based on model-runs.  When created, the names -of these databases have -
    -#   time stamps. -
    -# -
    -# official:  YES or NO.  YES if this is an official -database -from which -
    -#   products can be generated.  NO if this is a -conventional database. -
    -# -
    -# numVer:  Number of versions of this database to retain. -
    -# -
    -# purgeAge: Number of hours in the past before grids will be -automatically -
    -#   purged from the database.  If 0, then purging -is disabled. -
    -# -

    -

    YES = 1
    -NO = 0
    -GRID = 'GRID'
    -# name /  format / type / single / official / numVer / purgeAge
    -                                                                                -
    -Fcst        = -('Fcst',         -GRID,   '', YES, NO,  1, 24)
    -Restore     = -('Restore',      GRID,   '', YES, -NO,  1, 24)
    -Test        = -('Test',         -GRID,   'test', NO, NO,  1, 0)
    -Official    = ('Official',     -GRID,   '', YES, YES, 1, 24)
    -ISC         = -('ISC',          -GRID,   '', YES, NO,  1, 12)
    -LAPS        = -('LAPS',         -GRID,   '', YES, NO,  1, 30)
    -SAT         = -('SAT',          -GRID,   '', YES, NO,  1, 12)
    -NAM12       = -('NAM12',        GRID,   -'', NO,  NO,  2, 0)
    -NAM40       = -('NAM40',        GRID,   -'', NO,  NO,  2, 0)
    -NAM80       = -('NAM80',        GRID,   -'', NO,  NO,  2, 0)
    -GFS40       = -('GFS40',        GRID,   -'', NO,  NO,  2, 0)
    -GFS190      = -('GFS190',       GRID,   '', -NO,  NO,  2, 0)
    -gfsLR       = -('gfsLR',        GRID,   -'', NO,  NO,  2, 0)
    -RAP40       = -('RAP40',        GRID,   -'', NO,  NO,  2, 0)
    -AVNMOS      = -('AVNMOS',       GRID,   '', -NO,  NO,  3, 0)
    -NAMMOS      = -('NAMMOS',       GRID,   '', -NO,  NO,  3, 0)
    -MRFMOS      = -('MRFMOS',       GRID,   '', -NO,  NO,  3, 0)
    -HPCStn      = -('HPCSTN',       GRID,   '', -NO,  NO,  2, 0)
    -HPCGrid     = -('HPCGRID',      GRID,   '', -NO,  NO,  2, 0)
    -GWW         = -('GWW',          -GRID,   '', NO,  NO,  2, 0)
    -HPCQPF      = -('QPF',          -GRID,   '', NO,   NO,  4, 0)
    -HPCDelta    = ('HPCdelta',     -GRID,   '', NO,   NO,  2, 0)
    -TPCTCM      = -('TPCtcm',       GRID,   '', -NO,   NO,  2, 0)
    -MSAS        = -('MSAS',         -GRID,   '', YES,  NO,  1, 36)
    -GLERL       = -('GLERL',        GRID,   -'', NO,   NO,  2, 0)
    -AKWAVE      = -('AKWAVE',       GRID,   '', -NO,   NO,  2, 0)
    -WNAWAVE     = -('WNAWAVE',      GRID,   '', -NO,   NO,  2, 0)

    -  -

    -
    -

    D2D Model File Directories

    -EDEX automatically scans the single pre-defined D2D model file directory and provides -this data as additional grids for display, or for use in smart tools. -The user can define which model directories correspond to which GFE -model.
    -
    -

    D2DMODELS = [('MRF204', 'gfsLR'), - ('AVN225', 'GFS75'), - 'WaveWatch', - 'GlobalWave', - ('TPCWindProb', 'TPCProb'), - ]
    -

    The actual syntax in the serverConfig.py file looks more complicated -since it defines the D2DMODELS based on the site identifier.  OCONUS -sites use a different set of directories. -

    -

    Note that the above example has a mixture of tuples and -strings. There is an alternative form of the D2DMODELS that is used -when the hdf5 -model variable (which determines the name of the model as seen by -GFESUITE) -conflicts with another model of the same name. Each entry in the list -of -D2DMODELS can either be a string, such as above, which indicates the -directory -name, or it can be a tuple of ('directory name', 'modelName'). If the -second -form is used, then the model variable in the hdf5 file is ignored and -the given modelName is used instead. -
    -

    -
    -

    D2D Satellite File Directories

    -GFE recognizes the D2D satellite data as a valid data -set. EDEX will scan the listed set of D2D directories -for satellite data for use in display, and smart initialization. -Since the satellite data is organized differently than model data, the -specification of the D2D satellite directories consist of the directory -name, plus the name of the weather element contained within that -directory. D2D stores one image (one wavelength) within each data -file.
    -
    -The format of the entry is a list of tuples. The tuples are of -length two and contain the D2D directory name and weather element name.
    -
    -SATDATA = [("NESDIS/GOES-13(N)/East CONUS/Imager Visible", "visibleEast"),
    -           ("NESDIS/GOES-13(N)/East CONUS/Imager 11 micron IR", "ir11East"),
    -           ("NESDIS/GOES-13(N)/East CONUS/Imager 12 micron IR", "ir13East"),
    -           ("NESDIS/GOES-13(N)/East CONUS/Imager 3.9 micron IR", "ir39East"),
    -           ("NESDIS/GOES-13(N)/East CONUS/Imager 6.7-6.5 micron IR (WV)", "waterVaporEast")]
    -


    -

    -
    -

    D2D Model Database Version Specification

    -The number of available D2D model databases is defaulted to 2.  -This -number can be overridden through the localConfig.py mechansism.  -The -user can specify the D2D model name and the number of versions to -retain.  -Note that the number is the maximum number that will be available to -the -GFESuite, not necessarily the real number of versions that are -available -since AWIPS D2D handles the purging of these databases.  If you -increase -the number for the D2D databases, then you will likely want to modify -the -Database Attributes for the equivilant IFP database in order for smart -initialization to be able to create and populate it.  The number -of -available databases in the Database Attributes should be greater to or -equal to the number of databases specified in the D2D Model Database -Version -specification. This definition is also used for D2D Satellite Databases -to determine the number of images that can be seen by GFE. -

    The format of the entry is: -
    -#D2DDBVERSIONS = { -
    -#      "modelname": numVersions -
    -#      } -

    -

    For example, the following sets the number of LAPS databases to 5, -and -the number of NAM to 3: -

    -

    D2DDBVERSIONS = { -
    -      "NAM80": 3, -
    -      "LAPS":5 -
    -      } -
    -  -

    -
    -

    Initialization Modules

    -The smart initialization technique of GFESuite is initiated from EDEX. -The serverConfig.py file provides a mapping of D2D directories to -initialization -run modules. For example, here is the section in serverConfig.py: -

    INITMODULES = {
    -    "NAM40" : ["NAM40", "NAM20"],
    -    "NAM80" : ["NAM80"],
    -    "RAP40" : ["RAP40"],
    -    "gfsLR" : ["gfsLR"],
    -    "NAM12" : ["NAM12"],
    -    "GFS40" : ["GFS40"],
    -    "GFS190" : ["GFS190"],
    -    "LAPS" : ["LAPS"],
    -    "HPCQPF" : ['HPCQPF'],
    -    "MSAS" : ['MSAS'],
    -    "HPCdelta" : ['HPCdelta'],
    -    "SAT" : ['Satellite']
    -    }
    -

    -

    -

    This is standard Python syntax for a dictionary, with the keys on -the -left of the colon and the values as a list on the right side. For -example, the first line: -

    -

    "NAM40" : ["NAM40", "NAM20"] -

    -

    indicates that the NAM40 initialization module will be executed -whenever -changes occur in the NAM40 and NAM20 D2D databases.  The "MesoNAM" -NAM40/NAM20 -is more complicated than most models since it arrives in two completely -separate hdf5 files and resolution.  The syntax for the "NAM12" -model -is more straightforward: -

    -

    "NAM12" : ["NAM12"] -

    -

    which indicates that the NAM12 initialization module (named NAM12.py -and -found in the /awips2/edex/data/utility/edex_static/base/smartinit) directory will be executed -whenever the -D2D NAM12 model changes.  Remember that the initialization module -is -on the left, and the D2D model name files are on the right. -

    -

    By default, the smart initialization will run for each model run of -a particular model.  This behavior can be changed by listing the -model -name and the hours to skip.  For example, here is a section in -serverConfig.py: -

    -

    INITSKIPS = { -
    -    "RAP40" : -[1,2,4,5,7,8,10,11,13,14,16,17,19,20,22,23], -
    -    } -

    -

    This is standard Python syntax for a dictionary.  This line: -

    -

    "RAP40" : [1,2,4,5,7,8,10,11,13,14,16,17,19,20,22,23], -

    -

    indicates that all runs of the RAP40 will be ignored, except every 3 -hours. -

    -

    The default for serverConfig is to run all of the available model -runs, -except for RAP40, which is run only every 3 hours. -

    -
    -

    D2D Accumulative -Weather Elements

    -The dictionary of accumulative weather elements is defined by model and -weather element.  If a weather element is declared, then the -software -will treat that element as a duration or accumulative element.  -The -model grid time will be considered as the ending time of the -grid.  -Only the weather element name (not the level) is specified in the -dictionary. -

    # This is a listing of D2D model name, and weather -elements.  -The -
    -# weather elements defined in this list are treated as accumulative -
    -# elements, thus the snapshot time of the grid is converted to -be a -
    -# grid with timestep duration, starting the previous model timestep -and -
    -# going up to but not including the snapshot time.

    -

    D2DAccumulativeElements= {
    -    "GFS40": ["tp", "cp"],
    -    "GFS190": ["tp", "cp"],
    -    "NAM80": ["tp", "cp"],
    -    "NAM40": ["tp", "cp"],
    -    "NAM20": ["tp", "cp"],
    -    "NAM12": ["tp", "cp"],
    -    "gfsLR": ["tp", "cp"],
    -    "RAP40": ["tp", "cp"],
    -    "MSAS": ["tp", "cp"],
    -    "LAPS": ["pc"],
    -    "HPCQPF": ["tpHPC"],
    -    "HPCdelta": ["pop", "tcc"],
    -    }
    -

    -
    -

    Intersite Coordination Configuration Items

    -This section defines the configuration of the intersite coordination -feature of GFESuite:
    -
      -
    • ISC_ROUTING_TABLE_ADDRESS - defines the base url for the ISC -Routing Table web service as a string.  If None is specified, then -the system will be unable to transmit or receive ISC data.
    • -
    • REQUESTED_ISC_SITES - defines the sites, as a list, from which -ISC data will be requested.  If None is specified, then EDEX -will automatically calculate the needed isc sites by -examining the list of ISC_xxx edit areas. 
      -
    • -
    • REQUEST_ISC - overall toggle to control the ingest of ISC -data.  If this flag is set to 0, then EDEX will not -register with the ISC Routing Table web server and no ISC data will be -received.  If this flag is 1, then EDEX reigsters with -the web service for the data sets defined in REQUESTED_ISC_SITES.
    • -
    • SEND_ISC_ON_SAVE - toggle to turn on the transmission of ISC data -when grids are stored in the Fcst database.  The list of sites to -send is obtained from other EDEX registrations with the ISC -Routing Table web service. Note that ISC grids will be sent only if -the GFE is used to save the grids. For example, if iscMosaic is used -to modify the Fcst database, those grids will not be sent via ISC at -the time of the save.
      -
    • -
    • SEND_ISC_ON_PUBLISH - toggle to turn on the transmission of ISC -data when grids are published in the Official database.  The list -of sites to send is obtained from other EDEX registrations with -the ISC Routing Table web service.
    • -
    • REQUESTED_ISC_PARMS - defines the weather elements desired to be -received for ISC, as a list.  If set to None, then EDEX -will automatically set the list to be equivilant of all weather -elements in your ISC database.  To receive weather elements from -an office that is the same type as yours (e.g., wfo to a wfo), then -simply specify the weather element, such as T.  To receive -weather elements from an office that is of a different office type than -yoursr (e.g., rfc to a wfo), then specify the weather element followed -by the sending office type.  For example, requesting QPF from an -RFC if you are an RFC is done by including QPF as the element you want, -but requesting QPF from an RFC if you are a WFO is done by including -QPFrfc.
      -
    • -
    • TRANSMIT_SCRIPT - name of the script to send ISC messages.  -The script will need to accept the following switches:
      -
    • -
        -
      • -s - subject line, normally ISCGRIDS
      • -
      • -a - address list, generates comma separated addressee list, -such as "CLE,PBZ,BUF", which represents the AWIPS MHS identifiers
        -
      • -
      • -i - id string, normally similar to TTAA0 KXXX 021232
      • -
      • -c - AWIPS MHS code, normally 11
      • -
      • -p - priority mode, 0 is lowest, 2 is highest
      • -
      • -e - enclosure list, such as "f1, f2, f3", containing the ISC -data compressed, and the ISC destination routing information
        -
      • -
      -
    • EXTRA_ISC_PARMS - list of weather elements and office types to -add additional ISC weather elements into the ISC database.  For -ISC to work between different office types (e.g., wfo to rfc), the list -of weather elements you wish to receive from the different office types -must be listed.  This adds special renamed weather elements to the -database.  The format of the entry is a list.  The elements -of the list are two-element tuples with the 1st element being a list of -weather elements (the actual element definition  as shown in the Weather Element -Configuration Section-- NOT the weather element name), and the 2nd -element being a string representing the office type.   There -is no harm in attempting to add weather elements for your own office -type, although those will be ignored.
    • -
        -
      • Examples:  To receive T, RH, and QPF from an rfc when you -aren't an rfc: 
        -
      • -
          -
        • EXTRA_ISC_PARMS = [([Temp, RH, QPF], 'rfc')]
          -
        • -
        -
      -
    -
    -NOTE: Sites will have to enable SEND_ISC_ON_SAVE in order to send -intersite grids.  Sites will need to configure REQUEST_ISC in -order to receive intersite grids.  Sites should consider whether -the defaults for REQUESTED_ISC_SITES and REQUESTED_ISC_PARMS are -sufficient; in all likelyhood the default values will send too much -data to -too many sites.  Refer to the Intersite -Coordination Guide for more details.
    -
    -#---------------------------------------------------------------------------
    -#
    -#  Intersite Coordination -Configurations
    -#
    -#---------------------------------------------------------------------------
    -# base url for the ISC Routing -Table
    -ISC_ROUTING_TABLE_ADDRESS = "xxxx"
    -
    -# list of sites that from which -you want ISC data (If None, EDEX will
    -# automatically calculate the -list.)
    -REQUESTED_ISC_SITES = None
    -
    -# Overall ISC request flag.  -Must be set to 1 in order to request and receive
    -# ISC data.
    -REQUEST_ISC = 1
    -
    -# Sending control flag.  Set -to 1 to send isc when data is saved.
    -SEND_ISC_ON_SAVE = 1
    -
    -# Sending control flag.  Set -to 1 to send isc when data is published.
    -SEND_ISC_ON_PUBLISH = 1
    -
    -# List of weather elements to -request for ISC.  If set to None, it defaults
    -# to the list of all weather -elements in the ISC database.
    -REQUESTED_ISC_PARMS = None
    -
    -# Transmission script for sending -data.  This is the script that iscExtract
    -# will call to perform the actual -transmission of data.
    -TRANSMIT_SCRIPT =  -GFESUITE_HOME + '/bin/gfe_msg_send -s %SUBJECT -a %ADDRESSES -i %WMOID --c 11 -p 0 -e %ATTACHMENTS'
    -
    -# Extra ISC parms (weather elements).  These are a list of the -baseline
    -# weather elements to be added as extra parms to the ISC -database.  This
    -# is necessary when receiving ISC grids from a site that is a different
    -# office type than your own.  You never need to add weather -elements
    -# to the ISC database that is your own office type.  The format of -this
    -# entry is a list of tuples.  The tuple is a list of weather -elements
    -# objects (such as Temp and not "T"), and an office type, such as "rfc".
    -EXTRA_ISC_PARMS = [([QPF, Temp], 'rfc'), ([QPF], 'wfo')]
    -
    -
    -

    -
    -

    -
    -

    Miscellaneous -Configuration -Items

    -This section controls the following items: -
      -
    • number of days to retain GFESuite log files
    • -
    • auto configuration for NotifyTextProd (used with the VTECDecoder)
      -
    • -
    -


    -# defines the number of days to keep log files -
    -LOG_FILE_PURGE_AFTER = 6 -

    -

    -

    # defines a list of weather elements that will NEVER be -processed -for -
    -

    -

    # auto configure NotifyTextProd -- set after OB6
    -AUTO_CONFIGURE_NOTIFYTEXTPROD = 0   #0=off,1=on
    -
    -
    -

    -
    -

    Weather Element Groupings -(a.k.a. -Parm Groups)

    -The weather element groupings combine weather -elements with time -constraints, -and then bundle them together into groups. At this point, there is no -tie-in -with the databases. -

    The format of these entries is: -
    -groupName = [([we1,we2,we3], timeconstraint1), ([we4, we5], -timeconstraint2)] -

    -

    Example weather element groupings are: -

    -

    # Parm groups.  Combine parms with time constraints -
    -# list of ([parms], timeConstraints) -
    -  -
    -  -

    -

    # 6 hourly
    -STD6_MODEL = [([Temp, Td, Wind, Weather, Sky, FzLevel], Std6H), -
    -             -([SnowAmt, QPF, PoP], Std6), ([MaxT], MaxTTC), ([MinT], MinTTC)] -

    -

    # Fcst and official database parameter groupings -
    -OFFICIALDBS = [([Temp, Td, Wind, Weather, Sky, FzLevel], TC1), -
    -          ([HeatIndex, -WindChill, RH], TC1), -
    -          ([SnowAmt, -PoP], LT6NG), ([QPF], TC6NG), -
    -          ([MinT], -MinTTC), ([MaxT], MaxTTC), -
    -          -([WaveHeight, -WindGust, Swell], TC1), -
    -          ([LAL, CWR, -Haines, MixHgt, FreeWind, TransWind], TC1)] -

    -
    -

    Database Groupings

    -The database groupings section lists all of the databases for a site -based -on the database definition -and the weather element groupings.  -This section associates the weather element groupings with each -database. -

    DATABASES = [(Official, OFFICIALDBS + localParms),
    -             -(Fcst, OFFICIALDBS + localParms),
    -             -(Restore, RESTOREDBS + localParms),
    -             -(NAM80, STD6_MODEL + localNAM80Parms),
    -             -(RAP40, STD1_MODEL + localRAP40Parms),
    -             -(GFS40, STD6_MODEL + localGFS40Parms),
    -             -(GFS190, STD6_MODEL + localGFS190Parms),
    -             -(NAM40, STD3_MODEL + localNAM40Parms),
    -             -(NAM12, STD3_MODEL + localNAM12Parms),
    -             -(gfsLR, STD12_MODEL + localgfsLRParms),
    -             -(GWW, WAVEPARMS + localGWWParms),
    -             -(WNAWAVE, WAVEPARMS + localWNAWAVEParms),
    -             -(AKWAVE, WAVEPARMS + localAKWAVEParms),
    -             -(AVNMOS, MOS_MODEL + localMOSParms),
    -             -(NAMMOS, MOS_MODEL + localMOSParms),
    -             -(MRFMOS, MOS_MODEL + localMOSParms),
    -             -(HPCStn, MOS_MODEL + localMOSParms),
    -             -(HPCGrid, MOS_MODEL + localMOSParms),
    -             -(HPCQPF, HPCQPF_MODEL + localHPCQPFParms),
    -             -(HPCDelta, HPCDELTA_MODEL + localHPCDeltaParms),
    -             -(TPCTCM, TPCTCM_MODEL + localTCMParms),
    -             -(ISC, ISCPARMS + localISCParms),
    -             -(LAPS, LAPSPARMS + localLAPSParms),
    -             -(SAT, SATPARMS + localSATParms),
    -             -(MSAS, MSASPARMS + localMSASParms),
    -             -(GLERL, GLERLPARMS + localGLERLParms),
    -             -(Test, OFFICIALDBS + localParms)] + localDBs

    -  -

    -
    -

    General Server -Configuration

    -This section should not be changed. It imports the parser code into -this -configuration file. -

    #--------------------------------------------------------------------------- -
    -# -
    -#  General server configuration section -
    -# -
    -#--------------------------------------------------------------------------- -
    -from com.raytheon.edex.plugin.gfe.config import IFPServerConfig, SimpleServerConfig
    -IFPConfigServer = SimpleServerConfig()
    -IFPConfigServer.allowTopoBelowZero = 1
    -
    -

    -

    Server Settings

    -The Server Settings section consolidates the entries in the -serverConfig.py -and makes them available to the Java portion of GFE. -Nothing should ever be changed in this section: -

    #---------------------------------------------------------------------------- -
    -# Server settings     DO NOT CHANGE THESE -DEFINITIONS -
    -#---------------------------------------------------------------------------- -
    -

    -

    - -
    - - diff --git a/cave/com.raytheon.viz.gfe/help/serverConfiguration.html b/cave/com.raytheon.viz.gfe/help/serverConfiguration.html deleted file mode 100644 index 9e5b85670d..0000000000 --- a/cave/com.raytheon.viz.gfe/help/serverConfiguration.html +++ /dev/null @@ -1,315 +0,0 @@ - - - - - - - Server Configuration Information - - -

    Server Configuration Information

    - -
    September 25, 2012
    - - -

    Overview

    - -
    GFE uses several configuration files:
    -
      -
    • siteConfig.py - - Defines directory and site variables
    • -
    • serverConfig.py - - Contains main database definitions
    • -
    • localConfig.py - - Overrides for the serverConfig.py (Site-level file)
    • -
    • localWxConfig.py - - Overrides for the weather definition in serverConfig.py (Site-level file)
    • -
    • Maps.py - - Defines the automatically generated edit areas that are available.
    • -
    • localMaps.py - - Overrides for the Maps.py file (Site-level file).
    • -
    • Map Files - overview - - Explains how database tables are populated for use in the map and edit area generation.
    • -
    • VTECPartners.py -- Defines the VTEC coordination and filtering by site.
    • -
    • localVTECPartners.py -- Overrides for the VTECPartners.py entries (Site-level file).
    • -
    -
    The localConfig.py -and localWxConfig.py files are -optional and are only used to override the standard database definition defaults -shipped with the system.
    -
    -
    -
    There are several different options a site has -for making modifications to these files. At -no time should the files that are sent with the software release or -install be modified since these will be overwritten with the next upgrade.  -See the section on file locations for -information on where the configuration files should be located. -
    -
    The serverConfig.py -is used to define the following items:
    -
      -
    • the set of weather elements,
    • -
    • the weather configuration (e.g., possible coverages, weather types, - intensities), -
    • -
    • the set of map projections,
    • -
    • office grid domains and resolution,
    • -
    • grid time constraint information; and
    • -
    • database model configuration.
    • -
    -
    The localConfig.py -file is used:
    -
      -
    • to add or redefine items in the serverConfig.py file for site use.
    • -
    -
    The localWxConfig.py -file is used: -
      -
    • to add or modify the weather definition in serverConfig.py
    • -
    -
    -
    The siteConfig.py -file is used:
    -
      -
    • to identify the main directories
    • -
    • to identify the server network information
    • -
    • to identify the site identifier
    • -
    -The VTECPartners.py file is used:
    -
      -
    • to configure the site filtering for the Merge VTEC and VTEC Decoder processes
    • -
    • to configure the interval of active table synchronization with adjacent sites
    • -
    • to specify the adjacent sites used for active table synchronization
    • -
    -The localVTECPartners.py file is used:
    - - -
    The localMaps.py file is optional -and is only used to override the standard edit area definitions shipped with the -system. There are several different options a site has for making modifications -to this file. - -At no time should the files that are sent with the software release or install be -modified since these will be overwritten with the next upgrade. - -See the section on file locations for information on -where the configuration files should be located.
    -
    -The Maps.py file is used to define:
    -
      -
    • the set of edit areas that are automatically generated - from the map backgrounds. -
    • -
    -
    The localMaps.py -file is used:
    -
      -
    • -to add, remove, or redefine items in the Maps.py file for site use.
    • -
    - -
    -
    -

    -Server -Database -Configuration Modification Options

    -There are three scenarios for modifying the server database -configuration:  -no changes from installed files, complete override of map backgrounds -and -partial orerride of map backgrounds. -

    No Changes From Installed Files

    -This is the default case. There is nothing you need to do. -

    Complete Override of Server Configuration (not -recommended)

    -Copy the serverConfig.py from the original -location -(leave the original one there) to the customized -location.  Modify it in accordance with the serverConfig.py -manual.  The disadvantage of this situation is that you will need -to do a careful comparison between newly upgraded files and your -modified -files after each upgrade.  There are certain features that cannot -be overridden using the localConfig.py -file.  -For those cases, you will be forced to completely override the -serverConfig.py -file. See the localConfig.py file for - href="VTECPartners.html">VTECPartners.py from the original location (leaving the original -one there) to the customized location.
    -

    -Partial Override of Server Configuration

    -
    This option works best for most sites who require -just a few changes and/or additions to the server configuration.  -It involves creating a local configuration file (localConfig.py) -and overriding certain features. Not all features in -serverConfig.py -may be redefined or overridden in this manner.  See the localConfig.py -documentation for details. Weather definitions are overridden -using the localWxConfig.py -file.  VTEC coordination information is overridden using the localVTECPartners.py file.
    -
    -
    - -

    - -Server Map Configuration Modification Options

    - -Edit area generation is handled somewhat differently from the server -database configuration and is defined in a different file. - -

    No Changes From Installed Files

    -This option should be chosen if the Maps.py -file is satisfactory and no changes are required. - -

    Partial Override of Map Backgrounds

    -
    This option provides the site control over the -set of generated edit areas. If you want to change any item in the -Maps.py file, you use the -localMaps.py -file to add, modify, and/or remove edit areas. -
    - -

    -Complete Override of Map Backgrounds (not -recommended)

    -There should be no reason to completely override the Maps.py file since -localMaps.py -provides all of the override capability. But if you insist, you can copy the Maps.py -file from the original location (leave -the -original one there) to the customized -location.  -Modify it in accordance with the map -configuration -manual.  Since Maps.py doesn't change frequently, all you -should -need to do is a comparison between the newly upgraded files and your -modified -files after each upgrade. -
     
    -
    -
    - -

    Location of Files

    -The location of the server configuration files are shown in the table below: -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    File PurposePart of Standard -
    - Release
    File Location -
    - (relative to installation directory)
    Original serverConfig.py -
    yes
    -
    /awips2/edex/data/utility/edex_static/base/config/gfe
    Customized serverConfig.py -
    no
    -
    /awips2/edex/data/utility/edex_static/site/SITE_ID/config/gfe
    localConfig.py -
    no
    -
    /awips2/edex/data/utility/edex_static/site/SITE_ID/config/gfe
    localWxConfig.py -
    no
    -
    /awips2/edex/data/utility/edex_static/site/SITE_ID/config/gfe
    Original Maps.py -
    yes
    -
    /awips2/edex/data/utility/edex_static/base/config/gfe/Maps.py
    Customized Maps.py -
    no
    -
    /awips2/edex/data/utility/edex_static/site/SITE_ID/config/gfe/Maps.py
    localMaps.py -
    no
    -
    /awips2/edex/data/utility/edex_static/site/SITE_ID/config/gfe/localMaps.py
    Original VTECPartners.py
    -
    yes
    -
    /awips2/edex/data/utility/common_static/base/vtec
    -
    Customized localVTECPartners.py
    -
    no
    -
    /awips2/edex/data/utility/common_static/site/SITE_ID/vtec
    -
    -

    -

    -

    - - - diff --git a/cave/com.raytheon.viz.gfe/help/siteConfig.html b/cave/com.raytheon.viz.gfe/help/siteConfig.html deleted file mode 100644 index b8830399d1..0000000000 --- a/cave/com.raytheon.viz.gfe/help/siteConfig.html +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - siteConfig.py - - -
    -

    siteConfig.py

    -January 3, 2012
    -
      -
    The siteConfig.py file is one -of three configuration files for GFE. -The siteConfig.py file defines the site identifier, server hostname, -server -port number, and a series of directories that comprise the -GFESuite -software.
    -


    -import os, socket
    -                                                                                -
    -GFESUITE_HOME = os.environ['EDEX_HOME']+"/../GFESuite"
    -GFESUITE_SERVER = "dx3"
    -GFESUITE_PORT = '98000000'
    -GFESUITE_SITEID = 'OAX'
    -GFESUITE_PRDDIR = GFESUITE_HOME+"/products"
    -GFESUITE_MHSID = 'OAX'
    -GFESUITE_LOGDIR = GFESUITE_HOME+"/logs/"+GFESUITE_SITEID

    -

    -

      -

    -
    Back To TOC - - diff --git a/cave/com.raytheon.viz.gfe/localization/gfe/userPython/gfeConfig/gfeConfig.py b/cave/com.raytheon.viz.gfe/localization/gfe/userPython/gfeConfig/gfeConfig.py index 4ab0995a3f..fa577b603c 100644 --- a/cave/com.raytheon.viz.gfe/localization/gfe/userPython/gfeConfig/gfeConfig.py +++ b/cave/com.raytheon.viz.gfe/localization/gfe/userPython/gfeConfig/gfeConfig.py @@ -1674,12 +1674,6 @@ Png_legendFormat_LT_end = "%b %d %I:%M %p %Z" # ifpIMAGE only # Product Generation Scripts appear under the product generation menu # on the GFE. Scripts = [ - "Send Grids to NDFD..:" + - "sendGridsToNDFD.sh {site} &", - - "Send Point and Click Grids to Consolidated Web Farm..:" + - "/awips2/GFESuite/bin/rsyncGridsToCWF_client.sh {site} &", - "Png Images...:" + "ifpIMAGE " +\ "-h {host} -c {entry:ConfigFile:imageTest1} -o {prddir}/IMAGE", diff --git a/cave/com.raytheon.viz.gfe/localization/gfe/userPython/procedures/GenerateCyclone.py b/cave/com.raytheon.viz.gfe/localization/gfe/userPython/procedures/GenerateCyclone.py index 0624026a77..5ece920ff5 100644 --- a/cave/com.raytheon.viz.gfe/localization/gfe/userPython/procedures/GenerateCyclone.py +++ b/cave/com.raytheon.viz.gfe/localization/gfe/userPython/procedures/GenerateCyclone.py @@ -1186,8 +1186,6 @@ class Procedure (SmartScript.SmartScript): # Attempt to get the alternate info from a file or the textDB altFileName = decoder.getAltInfoFilename() - altFileName = "/home/eagle6/lefebvre/TPC/" + altFileName - # get additional info if available altProduct = self.getTextProductFromDB(altFileName) diff --git a/cave/com.raytheon.viz.gfe/localization/gfe/userPython/textUtilities/regular/FWS_Overrides.py b/cave/com.raytheon.viz.gfe/localization/gfe/userPython/textUtilities/regular/FWS_Overrides.py deleted file mode 100644 index 0967f5b4ee..0000000000 --- a/cave/com.raytheon.viz.gfe/localization/gfe/userPython/textUtilities/regular/FWS_Overrides.py +++ /dev/null @@ -1,5070 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## -# --------------------------------------------------------------------- -# This software is in the public domain, furnished "as is", without -# technical support, and with no warranty, express or implied, as to -# its usefulness for any purpose. -# -# FWS_Overrides -# -# This file provides any product specific overrides for the -# FWS product. This file is part of the baseline. -# -# Definition Section: -# Overrides: -# Additions: -# -# Methods: -# Overrides: -# Additions: -# -# --------------------------------------------------------------------- - -## -# This is a base file that is not intended to be overridden. -## - -import string, time, re, os, types, copy -import TextRules -import ProcessVariableList -import math -import HazardsTable, TimeRange, AbsTime - -# Define overrides of Product Definition settings and -# default values of additional Definition settings -# ( This Definition section must be before the Class definition) - -#***** THIS NEXT LINE IS REQUIRED ***** -Definition = {} -# -# FWS Definitions: -# Definition statements must start in column 1 - -# REQUIRED CONFIGURATION ITEMS -#Definition['displayName'] = "FWS" -Definition["statePil"] = "GTF" # State Pil ID - -Definition["productName"] = "Spot Forecast" # name of product -Definition["fullStationID"] = "" # full station identifier (4letter) -Definition["wmoID"] = "" # WMO ID -Definition["pil"] = "" -Definition["stqPil"] = "STQ" # STQ pil -Definition["textdbPil"] = "" # Product ID for storing to AWIPS text database. -Definition["awipsWANPil"] = "" # Product ID for transmitting to AWIPS WAN. - -Definition["summaryExtended"] = 0 -Definition["individualExtended"] = 1 -Definition["extendedLabel"] = 1 - -### FWS settings of baseline options: ### -Definition["mapNameForCombinations"] = None -Definition["defaultEditAreas"] = [] - -# agencyList - This is a list of agency abbreviations as you want them to -# appear in the product header. For Example... -# Spot Forecast for Willie Fire...USFS GNF -# where "USFS GNF" is an example of agency abbreviation. -# The FWS formatter will read the STQ spot request product -# and will try to first guess the agency abbreviation from the -# "REQUESTING AGENCY" line of the STQ product. If the first guess -# is found in your agencyList list, then the Quality Control GUI -# with have that agency pre-selected. If list is left empty, -# then the formatter will always use what the user submitted -# for the agency. - -#Definition["agencyList"] = [ -# (1,"Agency 1"), -# (2,"Agency 2"), -# (3,"Agency 3"), -# (4,"Agency 4"), -# (5,"Agency 5"), -# ] -Definition["agencyList"] = [] - -# forecasterList - This is a list of forecaster numbers, forecaster awips login name, -# and forecaster last names. The Quality Control GUI will -# list the forecaster's last name and the forecaster will -# check all of the forecaster's names that were involved -# in that forecast. - -Definition["forecasterList"] = [ - (1,"forecastera","Forecaster A"), - (2,"forecasterb","Forecaster B"), - (3,"forecasterc","Forecaster C"), - (4,"forecasterd","Forecaster D"), - (5,"forecastere","Forecaster E"), - ] - -# stqNumberVersions - When you launch the FWS formatter, you will get a GUI -# that asks you to select which spot request you want to -# format a spot forecast for. This variable specifies -# how many spots you want to list in the GUI. If you do -# increase the number, then make sure you increase the -# number of versions stored in awips. -Definition["stqNumberVersions"] = 10 - -# stqWmoID - helps find the timestamp line in the STQ product. Only change if -# WSH changes the WMO id of the STQ product. - -Definition["stqWmoID"] = "BMBB91 K" - -# wind20ftHeader: This definition set to "1" allows offices to -# format winds in this format... -# -# Wind (20 ft)........ -# Slope/valley.......WEST 10-20 MPH -# Ridgetop...........NORTHWEST 20 MPH -# -# By setting this definition to "0", you will get... -# -# Wind (20 ft)........WEST 10-20 MPH -# Ridgetop wind.......NORTHWEST 20 MPH -Definition["wind20ftHeader"] = 1 # Use 1 for yes, 0 for no - -# typeList - This is a list of project types and are formatted in the "REASON FOR -# REQUEST" line of the FWS forecast. Do not edit this list unless WSH -# directs you to do so. - -Definition["typeList"] = ["WILDFIRE", "PRESCRIBED", "HAZMAT", "SAR", "TEST"] - -# Set shortTermOnly to 1 if you don't want to give your forecasters an option -# include extended forecasts and/or outlooks with their spot forecasts. -Definition["shortTermOnly"] = 1 -#Definition["shortTermOnly"] = 0 - -Definition["outputFile"] = "{prddir}/TEXT/FWS.txt" - -# Definitions to insert unrepresentativeness of the forecast -# instructions for the user. -Definition["insertUnrepresentStatement"] = 1 # Use 1 for yes, 0 for no -Definition["unrepresentStatement"] = "If conditions become unrepresentative, " + \ - "contact the National Weather\nService." -# Definitions to insert the FWF discussion from a separate file. -# Discussion is edited separately in XNOW for the FWF forecast. -# Advantage of this is to have a first guess for the discussion in -# the Spot forecast...saving some composition time. -Definition["insertDiscussionFromFile"] = 0 # Use 1 for yes, 0 for no -Definition["discussionFile"] = "/home/local_apps/xnow/temp/DISFWF" - -# Definitions to insert the FWF 8 to 14 day outlook from a separate -# file if the user requests that information in their request. (Not -# very likely). Outlook is edited separately in XNOW for the FWF -# Forecast with the advantage of saving time in the composition of -# the Spot Forecast. -Definition["insertOutlookFromFile"] = 0 # Use 1 for yes, 0 for no -Definition["outlookFile"] = "/home/local_apps/xnow/temp/OLKFWF" - - -# wildfireElementList is a subset list of the requestedElementList list. -# The directive states that Sky/Weather, Temp, RH, and Winds are required -# for wildfire spot forecasts. Even if the user doesn't select these elements, -# the formatter will put them in anyway because of the directive requirements. - -# You may add weather elements corresponding to the entries you see in your STQ product. - -Definition["wildfireElementList"] = [ - "SKY/WEATHER", - "TEMPERATURE", - "HUMIDITY", - "20 FOOT WINDS", - "EYE LEVEL WINDS", - ] - -Definition["stqPil"] = "STQ" # STQ pil - -# Definitions to insert unrepresentativeness of the forecast -# instructions for the user. -#Definition["insertUnrepresentStatement"] = 0 # Use 1 for yes, 0 for no -#Definition["unrepresentStatement"] = "If conditions become unrepresentative, " + \ -# "contact the National Weather\nService." - -# wind20ftHeader: This definition set to "1" allows offices to -# format winds in this format... -# -# Wind (20 ft)........ -# Slope/valley.......WEST 10-20 MPH -# Ridgetop...........NORTHWEST 20 MPH -# -# By setting this definition to "0", you will get... -# -# Wind (20 ft)........WEST 10-20 MPH -# Ridgetop wind.......NORTHWEST 20 MPH -#Definition["wind20ftHeader"] = 0 # Use 1 for yes (default), 0 for no - -# Definitions to insert the FWF discussion from a separate file. -# Discussion is edited separately in XNOW for the FWF forecast. -# Advantage of this is to have a first guess for the discussion in -# the Spot forecast...saving some composition time. -#Definition["insertDiscussionFromFile"] = 1 # Use 1 for yes, 0 for no -#Definition["discussionFile"] = "/home/local_apps/xnow/temp/DISFWFBYZ" - -# Definitions to insert the FWF 8 to 14 day outlook from a separate -# file if the user requests that information in their request. (Not -# very likely). Outlook is edited separately in XNOW for the FWF -# Forecast with the advantage of saving time in the composition of -# the Spot Forecast. -#Definition["insertOutlookFromFile"] = 1 # Use 1 for yes, 0 for no -#Definition["outlookFile"] = "/home/local_apps/xnow/temp/OLKFWFBYZ" - -#Definition["tempLocalEffects"] = 1 # Set to 1 to enable Temp and RH local effects AFTER - # creating AboveElev and BelowElev edit areas -#Definition["windLocalEffects"] = 1 # Set to 1 to enable wind local effects AFTER - # creating Ridges and Valleys edit areas -# OPTIONAL CONFIGURATION ITEMS -#Definition["database"] = "Official" # Source database. "Official", "Fcst", or "ISC" -#Definition["debug"] = 1 -#Definition["lineLength"] = 66 #Product line length - -# Set the following variable to 1 if you want Lightning Activity -# reported with phrases like "1-8 STRIKES", "9-15 STRIKES", etc. -#Definition["lightningPhrases"] = 1 - -# The following variable sets a wind adjustment factor for surface -# (20 ft) winds. Wind speeds will be multiplied by this factor. -# Winds reported by RAWS sites are frequently lower than ASOS winds -# due to the fact that they measure wind speeds at lower heights. -# A common adjustment factor is 80% (0.80). If you want no adjustment -# to the winds then set this variable to 1.00 -#Definition["windAdjustmentFactor"] = 1.00 - -# The following variable sets a wind adjustment factor for eye level -# winds. Wind speeds will be multiplied by this factor. Eye level -# winds are frequently lower than ASOS winds due to the fact that -# winds are slower when measured closer to the ground. A common -# adjustment factor is 60% (0.60). If you want no adjustment to -# the winds then set this variable to 1.00 -Definition["eyeWindAdjustmentFactor"] = 0.60 - -#Definition["language"] = "english" - -# Trouble-shooting items -#Definition["passLimit"] = 20 # Limit on passes allowed through - # Narrative Tree -#Definition["trace"] = 1 # Set to 1 to turn on trace -# useRH If 1, use RH grids instead of MaxRH, MinRH -Definition["useRH"] = 0 - -### *** START TABULAR TEST SECTION *** ### - -Definition["fwfPil"] = "FWFBYZ" # FWF pil - -# Definitions to insert the FWF discussion from a separate file or -# from the last FWF your office has issued. - -# Discussion is edited separately in GFE for the FWF forecast. -# Advantage of this is to have a first guess for the discussion in -# the Spot forecast...saving some composition time. - -# Use 1 to get Discussion from a file -# Use 2 to get Discussion from your last FWF product -# Use 0 to use a blank Discussion template -Definition["insertDiscussionFromFile"] = 2 -Definition["discussionFile"] = "/data/local/DISFWFBYZ" - -# Definitions to insert the FWF 8 to 14 day outlook from a separate -# file if the user requests that information in their request. (Not -# very likely). Outlook is edited separately in XNOW for the FWF -# Forecast with the advantage of saving time in the composition of -# the Spot Forecast. - -# Use 1 to get Outlook from a file -# Use 2 to get Outlook from your last FWF product -# Use 0 to use a blank Outlook template -Definition["insertOutlookFromFile"] = 2 # Use 1 for yes, 0 for no -Definition["outlookFile"] = "/data/local/OLKFWFBYZ" - -# If set to 1, the user can enter a creation date/time -# for product generation. It will be as if the product was run -# at the creation time specified by the user at run-time. -Definition["includeCreationTimeOnGUI"] = 1 -#Definition["includeCreationTimeOnGUI"] = 0 - -# forecastTypeList - This definition contains a list of spot forecast formats that a -# forecaster can select via the formatter gui. The formats are: -# -# Narrative Only: The spot forecast is in a narrative format. -# Tabular/Narrative: This format is a tabular/narrative mix as specified -# in the "_rowList" (see FWS_Overrides). -# -# For each forecastType, you can specify a label that will appear in the GUI. -# -Definition["forecastTypeList"] = [ - # Label Forecast Type - ("Narrative Only", "Narrative Only"), - ("Tabular/Narrative", "Tabular/Narrative"), - ("Tabular Only", "Tabular Only"), - - # If your _rowList specifies an all Tabular product, - # you may want to change this entry to: - #("Tabular", "Tabular/Narrative"), - ] - -# defaultForecastType - This defintion sets the default setting for which spot forecast -# format your WFO wants to use. Value for definition must be included -# in the forecastTypeList definition and must be either "Narrative", -# "Tabular", or "With Ignition Forecast". -#Definition["defaultForecastType"] = "Narrative Only" -Definition["defaultForecastType"] = "Tabular/Narrative" - -# withIgnitionTimes: If "yes", ertain weather elements can be configured to include -# an ignition time forecast within the narrative. -Definition["withIgnitionTimes"] = "no" - -# includeIgnitionOptionOnGUI: If 1, the GUI will include this option at run-time. -Definition["includeIgnitionOptionOnGUI"] = 1 -#Definition["includeIgnitionOptionOnGUI"] = 0 - -# tabularResolutionDict - This definition contains the list of table time resolutions -# (per period) that you want to appear in the GUI to the forecaster. -# Some WFOs may not want to give forecasters an option to generate -# a table with an 1 hour resolution (for example), so you can -# delete "1" from this list and it will not appear on the gui. -# Possible values are 1, 2, 3, 4 hours and 123 in which case, -# hourly resolution will be 1 hour in the 1st period, -# 2 hours in the 2nd period, and 3 hours in the third period -# (if needed).. -Definition["tabularResolutionDict"] = { - "Today": [1, 2, 3, 4, "None"], - "Tonight": [1, 2, 3, 4, "None"], - "Tomorrow": [1, 2, 3, 4, "None"], - } - -# defaultTabularResolution - This definition must be set to one of values listed in the -# tabularResolutionList definition. This will be the value -# that the gui will use for a default for each period. -# Values are limited to 1, 2, 3, and 4 and must be included in -# the tabularResolutionList definition. -Definition["defaultTabularResolution"] = { - "Today": 2, - "Tonight": 2, - "Tomorrow": 2 - } - -# tabularAllPeriods - Setting this definition to "no" will generate a 12 -# hour table only in the first period. -# The table will start at either the current time or -# the ignition time depending on the setting of -# tableStartTimeMode (see below). -# Setting this definition to "yes" will allow tables in -# all periods with snapshot values covering the -# time range of each period. - -Definition["tabularAllPeriods"] = "yes" -#Definition["tabularAllPeriods"] = "no" - -# tabularForWildfire - This is a nationally mandated setting which requires -# a narrative forecast for wildfire spot requests. When -# set to "no", a narrative will be produced, even if the -# tabular option is selected. Your office must issue a -# PDD to switch this definition to "yes". - -Definition["tabularForWildfire"] = "no" -#Definition["tabularForWildfire"] = "yes" - -# tableStartTimeMode - The setting of this definition will tell the formatter how to -# determine the start time for the table. -# If "productStart" is used, then the table will start at the -# beginning of the product issuance. -# If "ignitionTime" is used, then the formatter will use the ignition time -# if it is within the first period of the product. -# Otherwise the formatter will use the productStart time. -# If "current" is used, then the table will start at the time the -# formatter was launched. - -#Definition["tableStartTimeMode"] = "current" -#Definition["tableStartTimeMode"] = "productStart" -Definition["tableStartTimeMode"] = "ignitionTime" - -# tableStartTimeOffset - When the ignition time is used for the table start time, -# you can start the table a set number of hours before the -# ignition time. You can configure the tableStartTimeOffset -# definition for this purpose. Value is the number of hours -# before the ignition time desired. Note, if this new time -# is before the product start time, then the product start -# time will be used. -Definition["tableStartTimeOffset"] = 0 - -# ignitionForecastTypeList - The formatter can produce Ignition Time/Request Time -# forecasts for certain weather elements, like T and RH. -# This list will produce this forecast as a default for -# certain types of spot requests. List elements must be -# a subset of the typeList definition. - -#Definition["ignitionForecastTypeList"] = ["PRESCRIBED"] -Definition["ignitionForecastTypeList"] = [] - -# elementFormatDict - This defines the format as "alpha" or "numeric" for various -# tabular weather elements. - -# Sky - This definition allows a WFO to use a text description of the -# Sky Cover or use numeric values. Examples are as follows... -# alpha 1hr : SKY.............MC MC MC MC MC MC MC MC MC MC MC MC PC -# alpha 2hr : SKY.............MCLDY MCLDY MCLDY MCLDY MCLDY MCLDY PCLDY -# numeric 2hr: Sky (%).........90 90 90 83 83 83 69 - -# Tabular Wind Format Definitions -# "alpha" will cause the direction to be formatted in the alphabetic characters -# of N, NW, W, SW, S, SE, E, and NE. -# "numeric" will return the wind direction in tens of degrees. i.e. 000, 010, -# etc. When a numeric wind direction is combined with wind speed it will look -# something like this...030/10 - -Definition["elementFormatDict"] = { - "Sky" : "numeric", - "Wind": "alpha", - "Wind20ft": "alpha", - "EyeWind": "alpha", - "RidgeWind": "alpha", - "TransWind": "alpha", - "TransMetWind": "alpha", - } - -# bothAlphaNumericDict - For certain elements both alpha and numeric values -# are needed. In particular, sky cover and wind direction. -# Only possible values are "Yes" or "No". -# If you do configure a wind element to "Yes", then -# ensure the corresponding setting for elementFormatDict -# is set to "alpha". Otherwise, you will get two lines -# of numeric values. - -Definition["bothAlphaNumericDict"] = { - "Sky" : "No", - "Wind": "No", - "Wind20ft": "No", - "EyeWind": "No", - "SfcWind": "No", - "RidgeWind": "No", - "TransWind": "No", - } - -# tabularMixingHeightUnits - This definition allows the WFO to specify their preferance -# on how mixing height is expressed. In thousands of feet or -# in just feet? The definition can only be set to "kft" or -# "ft". Note: the 1 hour resolution table is limited to a -# three character space, so mixing height will always be -# expressed in kft when the 1 hour resolution is selected -# regardless to what this definition is set to. Examples... -# KFT 2hr: Mix hgt (kft)...0.3 0.3 0.3 0.3 0.3 7.9 11 -# FT 2hr : Mix hgt (ft)....300 300 300 300 300 7900 11100 - -#Definition["tabularMixingHeightUnits"] = "kft" # So we can fit a number in a 3 character space. -Definition["tabularMixingHeightUnits"] = "ft" # Will only be used for 2,3, or 4 time resolutions. - -# transportWindLabel - Some WFOs use "Transport Winds", while others use "Mixing Winds". -# They are one in the same in terms of the forecast. This definition -# allows the WFO to configure their preference for the tabular section. -#Definition["transportWindLabel"] = "mix" -Definition["transportWindLabel"] = "tran" - -# includeMetricDispersion - Some users need mixing height and transport winds -# in metric units. If you want to include the metric -# in addition to english values, then set definition -# to "yes". Otherwise "no". - -#Definition["includeMetricDispersion"] = "yes" -Definition["includeMetricDispersion"] = "no" - -# 20ftWindParm - Some WFOs actually produce a Wind20ft grid, so the 20 FOOT WIND -# phrase can be configured to sample that grid (the "Wind20ft" -# setting). Other WFOs just use a conversion factor (windAdjustmentFactor) -# of what they have in the Wind grid (the "Wind" setting). - -Definition["20ftWindParm"] = "Wind" -#Definition["20ftWindParm"] = "Wind20ft" - -# wind20ftHeader: This definition set to "1" allows offices to -# format winds in this format... -# -# Wind (20 ft)........ -# Slope/valley.......WEST 10-20 MPH -# Ridgetop...........NORTHWEST 20 MPH -# -# By setting this definition to "0", you will get... -# -# Wind (20 ft)........WEST 10-20 MPH -# Ridgetop wind.......NORTHWEST 20 MPH -Definition["wind20ftHeader"] = 0 # Use 1 for yes, 0 for no -#Definition["wind20ftHeader"] = 1 # Use 1 for yes, 0 for no - -# tableWindElementSplit - When the time resolution of the table is 1 hour, then -# I am forced to create separate lines for wind direction, -# wind speed, and wind gust speed. When the resolution -# is 2 hours or more, then a WFO has a choice of formats. -# They can set tableWindElementSplit to "yes" and wind -# direction, speed, and gusts will remain in their -# separate lines. Or the WFO can set tableWindElementSplit -# to "no". For the two hour resolution, direction and -# speed will be combined. For three and four hour -# resolution, direction, speed, and gusts will be -# combined. Examples follow... - -# yes 2hr: 20 ft wind dir..SW W W W W W W -# : 20 ft wind spd..26 26 18 18 18 14 14 -# : 20 ft wind gust.40 40 - -# no 2 hr: 20 ft wind......W 26 W 26 W 18 W 18 W 18 W 14 W 14 -# : 20 ft wind gust.40 40 - -# yes 3hr: 20 ft wind dir..W W W W W -# : 20 ft wind spd..26 25 13 14 13 -# : 20 ft wind gust.40 40 - -# no 3 hr: 20 ft wind......W 26G40 W 25G40 W 13 W 14 W 13 - -#Definition["tableWindElementSplit"] = "yes" -Definition["tableWindElementSplit"] = "no" - -# tableEyeWindElementSplit - When the time resolution of the table is 1 hour, then -# I am forced to create separate lines for wind direction, -# wind speed, and wind gust speed. When the resolution -# is 2 hours or more, then a WFO has a choice of formats. -# They can set tableEyeWindElementSplit to "yes" and wind -# direction, speed, and gusts will remain in their -# separate lines. Or the WFO can set tableEyeWindElementSplit -# to "no". For the two hour resolution, direction and -# speed will be combined. For three and four hour -# resolution, direction, speed, and gusts will be -# combined. Examples follow... - -# yes 2hr: Eye lvl wnd dir.SW W W W W W W -# : Eye lvl wnd spd.26 26 18 18 18 14 14 -# : Eye lvl wnd gst.40 40 - -# no 2 hr: Eye level wind..W 26 W 26 W 18 W 18 W 18 W 14 W 14 -# : Eye lvl wnd gst.40 40 - -# yes 3hr: Eye lvl wnd dir.W W W W W -# : Eye lvl wnd spd.26 25 13 14 13 -# : Eye lvl wnd gst.40 40 - -# no 3 hr: Eye level wind..W 26G40 W 25G40 W 13 W 14 W 13 - -#Definition["tableEyeWindElementSplit"] = "yes" -Definition["tableEyeWindElementSplit"] = "no" - -# tableRidgeElementSplit - When the time resolution of the table is 1 hour, then -# I am forced to create separate lines for wind direction -# and wind speed. When the resolution is 2 hours or more, -# then a WFO has a choice of formats. They can set -# tableRidgeElementSplit to "yes" and wind direction and -# speed will remain in their separate lines. Or the WFO -# can set tableRidgeElementSplit to "no" and the wind -# direction and speed will be combined into one line. -# Examples follow... - -# yes 2hr: Ridge wnd dir..W W W W W W W -# : Ridge wnd spd..36 36 36 36 36 36 16 - -# no 2 hr: Ridgetop wind...W 36 W 36 W 36 W 36 W 36 W 36 W 16 - -#Definition["tableRidgeElementSplit"] = "yes" -Definition["tableRidgeElementSplit"] = "no" - -# tableTransElementSplit - When the time resolution of the table is 1 hour, then -# I am forced to create separate lines for wind direction -# and wind speed. When the resolution is 2 hours or more, -# then a WFO has a choice of formats. They can set -# tableTransElementSplit to "yes" and wind direction and -# speed will remain in their separate lines. Or the WFO -# can set tableTransElementSplit to "no" and the wind -# direction and speed will be combined into one line. -# Examples follow... - -# yes 2hr: Transp wind dir.W W W W W W W -# : Transp wind spd.8 8 8 8 8 8 20 - -# no 2 hr: Transport wind..W 8 W 8 W 8 W 8 W 8 W 8 W 20 - -#Definition["tableTransElementSplit"] = "yes" -Definition["tableTransElementSplit"] = "no" - -# tableSwellElementSplit - When the time resolution of the table is 1 hour, then -# I am forced to create separate lines for swell direction -# and swell height. When the resolution is 2 hours or more, -# then a WFO has a choice of formats. They can set -# tableSwellElementSplit to "yes" and swell direction and -# height will remain in their separate lines. Or the WFO -# can set tableSwellElementSplit to "no" and the swell -# direction and height will be combined into one line. -# Examples follow... - -# yes 2hr: Swell direction.W W W W W W W -# : Swell hgt (ft)..36 36 36 36 36 36 16 - -# no 2 hr: Swell hgt (ft)..W 36 W 36 W 36 W 36 W 36 W 36 W 16 - -#Definition["tableSwellElementSplit"] = "yes" -Definition["tableSwellElementSplit"] = "no" - -# tableSfcWindElementSplit - When the time resolution of the table is 1 hour, then -# I am forced to create separate lines for wind direction, -# wind speed, and wind gust speed. When the resolution -# is 2 hours or more, then a WFO has a choice of formats. -# They can set tableSfcWindElementSplit to "yes" and wind -# direction, speed, and gusts will remain in their -# separate lines. Or the WFO can set tableSfcWindElementSplit -# to "no". For the two hour resolution, direction and -# speed will be combined. For three and four hour -# resolution, direction, speed, and gusts will be -# combined. Examples follow... - -# yes 2hr: Surface wnd dir.SW W W W W W W -# : Surface wnd spd.26 26 18 18 18 14 14 -# : Surface wnd gst.40 40 - -# no 2 hr: Surface wind....W 26 W 26 W 18 W 18 W 18 W 14 W 14 -# : Surface wnd gst.40 40 - -# yes 3hr: Surface wnd dir.W W W W W -# : Surface wnd spd.26 25 13 14 13 -# : Surface wnd gst.40 40 - -# no 3 hr: Surface wind....W 26G40 W 25G40 W 13 W 14 W 13 - -#Definition["tableSfcWindElementSplit"] = "yes" -Definition["tableSfcWindElementSplit"] = "no" - -# cwrParm - Some WFOs (especially in wetter climates) use the PoP grid for -# chance of wetting rain, whereas offices in dry climates create a -# CWR grid that has values lower than the PoP grid. Value values -# for this definition is either "CWR" or "PoP". - -Definition["cwrParm"] = "PoP" - - -### *** END TABULAR TEST SECTION *** ### - -# END definitions -############################################################ - -#********************************************************************** -# MAKE NO CHANGES HERE -# The minimum contents of this file are the above Definition = {} line -# plus following class definition and the __init__ method with only -# the "pass" line in it. - -class FWS_Overrides: - """Class NNN_FILETYPE - Version: IFPS""" - - def __init__(self): - pass - -# End MAKE NO CHANGES HERE -#********************************************************************** - # Add methods here making sure to indent inside the class statement - # FWS Overrides ------------------------ - - # It is helpful to put a debug statement at the beginning of each - # method to help with trouble-shooting. - #def _method(self): - #self.debug_print("Debug: _method in FWS_Overrides") - - def _processVariableList(self, definition): - - # Get Definition variables - for key in definition.keys(): - exec "self._" + key + "= definition[key]" - - # Load in a user specified number of STQ products into the formatter. - products = self._getStqProducts() - - # Get the information for the specific fire. - # IF there are STQ products in the directory, - # selection GUI will be displayed - cancel = self._getFireInfo(products) - if cancel: - # User cancelled - return None - - # Get the user information for the specific fire - # and return the resulting varDict - return self._displayFireInfo() - - def _getStqProducts(self): - # Load in a user specified number of STQ products into the formatter. - # If no products found, return empty list - products = [] - version = 0 - stqPil = self._statePil + self._stqPil - searchString="" - for version in range(self._stqNumberVersions): - product = self.getPreviousProduct(stqPil, searchString, version=version) - if product is None or product == "": - break - - # Let's filter the product just in case single quote is put - # into the the request. - product = string.replace(product,"\'","") - - product = string.split(product, "\n") - missingFlag=1 - feedbackFlag=0 - deleteFlag=0 - for line in product: - line = string.replace(line, "\n", "") - if "PROJECT NAME" in line: - missingFlag=0 - if "Feedback was just received for project" in line: - feedbackFlag=1 - if "The Spot Forecast Request for project" in line: - deleteFlag=1 - if not missingFlag and not feedbackFlag and not deleteFlag: - products.append(product) - return products - - def _getFireInfo(self, products): - # If there were STQ products, display their names for user to select - # Return 1 if user cancels - product, issuance, forecasters = self._getFireProduct(products) - if issuance is None: - return 1 # User cancelled - if len(products) > 0: - self._noStqProduct = 0 - else: - product = None - self._noStqProduct = 1 - self._getProductInfo(product, issuance, forecasters) - - def _getFireProduct(self, products): - # Create the fireNameList used for the spot selection menu. - fireNameList = [] - ofileList = [] - validProductFound = 0 - productNumber = 0 - masterProductList = [] - for product in products: - fireName = "NAME MISSING" - timeStamp = "DDHHMM" - tag = "YYYYMMDD.XXXXX.NN" - tagFlag = 0 - feedbackFlag=0 - deleteFlag=0 - for line in product: - line = string.replace(line, "\n", "") - if "PROJECT NAME" in line: - fireName = string.upper(line[22:]) - if self._stqWmoID in line: - timeStamp = line[12:] - if "OFILE" in line: - tag = string.upper(line[8:]) - if tag not in ofileList: - ofileList.append(tag) - tagFlag = 1 - productNumber = productNumber + 1 - if tagFlag: - fireNameList.append(`productNumber` + ") " + fireName + \ - " -- " + timeStamp + " -- " + tag) - masterProductList.append(product) - validProductFound = 1 - - varList = [] - - if validProductFound: - fireNameList.append("Manually Enter in Request Info") - desFireName = "Please Choose a Fire", "fireName" - varList.append((desFireName, fireNameList[0], "radio", fireNameList)) - - # Product Issuance Processing - issuanceList = [ - "Morning", "Morning Update", "Afternoon Update", - "Afternoon", "Afternoon with 4 periods", "Evening Update", - "Evening Update with 4 periods", "Early Morning Update", - "Early Morning Update with 4 periods", "Next Day" - ] - desIssuanceList = "Product Issuance:", "productIssuance" - varList.append((desIssuanceList, issuanceList[0], "radio", issuanceList)) - - # Forecaster List Section of the GUI - forecasterNameList = [] - defaultForecasterNameList = [] - cmd = "whoami" - db = os.popen(cmd,'r') - awipsLogin = db.read() - db.close() - awipsLogin = string.replace(awipsLogin, "\n", "") - for forecaster in self._forecasterList: - id, awipsName, name = forecaster - forecasterNameList.append(name) - if awipsLogin == awipsName: - defaultForecasterNameList.append(name) - desForecasterNameList = "Forecaster:", "forecaster" - varList.append((desForecasterNameList, defaultForecasterNameList, "check", forecasterNameList)) - - if self._includeCreationTimeOnGUI: - # Get start date and time from user - desCreationDate = "Forecast Start Date (ex. 5/25/06)", "creationDate" - varList.append((desCreationDate, "", "alphaNumeric")) - desCreationTime = "Forecast Start Time in LT (ex 0900)", "creationTime" - varList.append((desCreationTime, "", "alphaNumeric")) - - # Launch the Spot Request selection GUI. - varDict = self._callProcessVariableList("Select Spot Request", varList, varDict={}) - if varDict is None: - return None, None, None - - productIssuance = varDict[desIssuanceList] - forecasters = varDict[desForecasterNameList] - if self._includeCreationTimeOnGUI: - self._creationDate = varDict[desCreationDate] - self._creationTime = varDict[desCreationTime] - - if validProductFound: - if varDict[desFireName] == "Manually Enter in Request Info": - return None, productIssuance, forecasters - else: - stqIndex = fireNameList.index(varDict[desFireName]) - return masterProductList[stqIndex], productIssuance, forecasters - else: - return None, productIssuance, forecasters - - def _callProcessVariableList(self, title, varList, varDict): - processVarList = ProcessVariableList.ProcessVariableList( - title, varList, varDict={}) - self._selectionStatus = processVarList.status() - if not self._selectionStatus == "OK": - return None # User Cancelled - return processVarList.varDict() - - - def _weInfoList(self): - # This is the list of possible weather parameters listed under the - # ...WEATHER PARAMETERS REQUESTED... section in your STQ Product. - # These are listed in the order they will appear in the product. - # - # Weather Elements: If you have a weather element to add, - # then send an email to Virgil.Middendorf@noaa.gov with your addition. - # I will baseline it. - # - # Phrases: You can override this method and edit the phrase method if you - # don't like the one used in baseline. - - # For each element, we list: - # --an identifier - # --flag to indicate if this is a default element - # --the FWF phrase (or list of phrases) to include in the product - # --a list of search strings that must appear in - # the STQ product to specify the element. - # Each search string in the list may be a tuple in which case any of - # the entries in the tuple will satsify the search. - - if self._useRH: - dayRH = "RH" - nightRH = "RH" - else: - dayRH = "MinRH" - nightRH = "MaxRH" - if self._wind20ftHeader: - wind = [self.fireWind_label_phrase, self.fireWind_compoundPhrase] - else: - wind = [self.fireWind_compoundPhrase] - return [ - ("SKY/WEATHER", 1, self.skyWeather_byTimeRange_compoundPhrase, - [("SKY", "CLOUDS"), "WEATHER"]), - ("BEGIN/END OF PCPN", 0, self.pcpnTiming_phrase, - ["BEGIN", "END", "PCPN"]), - ("TEMPERATURE", 1, (self.dayOrNight_phrase, ["MaxT", "MinT", 1, 1]), - [("TEMPERATURE", "TEMP")]), - ("HUMIDITY", 1, (self.dayOrNight_phrase, [dayRH, nightRH, 1, 1]), - [("RH", "HUMIDITY")]), - ("DEWPOINT", 0, self.td_phrase, - ["DEWPOINT"]), - ("20 FOOT WINDS", 0, wind, - ["20", "WIND", ("FT", "FOOT")]), - ("EYE LEVEL WINDS", 1, self.fireEyeWind_compoundPhrase, - [("EYE","10"), "WIND"]), - ("SURFACE WINDS", 0, self.fireSfcWind_compoundPhrase, - ["SURFACE", "WIND"]), - ("WIND SHIFT", 0, self.fireWindShift_label_phrase, - ["WIND", "SHIFT"]), - ("RIDGE TOP WIND", 0, self.freeWind_phrase, - ["WIND", "RIDGE", "TOP"]), - ("SURROUNDING RIDGE", 0, self.surroundingRidgeWind_phrase, - ["SURROUNDING", "RIDGE", "WIND"]), - ("CWR", 0, self.cwr_phrase, - [("CWR", "WETTING RAIN")]), - ("POP", 0, self.pop_phrase, - [("PRECIPITATION", "CHANCE OF PCPN", "POP")]), - ("LIGHTNING ACTIVITY LEVEL", 0, self.lal_phrase, - [("LAL", "LIGHTNING")]), - ("SMOKE DISPERSION", 1, [self.mixingHgt_phrase, self.transportWind_phrase], - [("SMOKE", "DISPERSION")]), - ("MIXING HEIGHT", 0, self.mixingHgt_phrase, - ["MIXING"]), - ("TRANSPORT WINDS", 0, self.transportWind_phrase, - ["TRANSPORT", "WIND"]), - ("LDSI", 0, self.ldsi_phrase, - ["LDSI"]), - ("LVORI", 0, self.lvori_phrase, - ["LVORI"]), - ("ADI",0, self.adi_phrase, - ["ADI"]), - ("DISPERSION INDEX", 0, self.dsi_phrase, - ["DISPERSION", "INDEX"]), - ("CLEARING INDEX", 0, self.smokeDispersal_phrase, - ["CLEARING", "INDEX"]), - ("STABILITY CLASS", 0, self.stabilityClass_phrase, - ["STABILITY"]), - ("MARINE LAYER", 0, self.marineLayer_phrase, - ["MARINE", "LAYER"]), - ("HAINES INDEX", 0, self.haines_phrase, - ["HAINES", "INDEX"]), - ("VENTILATION RATE", 0, self.smokeDispersal_phrase, - ["VENTILATION", "RATE"]), - ("SWELL HEIGHT", 0, self.swell_phrase, - ["SWELL", "HEIGHT"]), - ("WAVE HEIGHT", 0, self.waveHeight_phrase, - ["WAVE","HEIGHT"]), - ("SWELL PERIOD", 0, self.period_phrase, - ["SWELL", "PERIOD"]), - ("WIND WAVE", 0, self.windWave_phrase, - ["WIND", "WAVE"]), - ("RAINFALL AMOUNT", 0, self.qpf_phrase, - ["RAINFALL", "AMOUNT"]), - ("SNOWFALL AMOUNT", 0, self.snow_phrase, - ["SNOWFALL", "AMOUNT"]), - ("FREEZING LEVEL", 0, self.freezingLevel_phrase, - ["FREEZING", "LEVEL"]), - ("CEILING", 0, self.ceiling_phrase, - ["CEILING"]), - ("VISIBILITY", 0, self.visibility_phrase, - ["VISIBILITY"]), - ("ICING", 0, self.icing_phrase, - ["ICING"]), - ("HAZARDS", 0, self.ceiling_phrase, - ["HAZARDS"]), - ("HEAT INDEX", 0, self.heatIndex_phrase, - ["HEAT", "INDEX"]), - ] - - def _weInfoHiddenList(self): - # This is the list of possible weather parameters that are NOT listed - # under the ...WEATHER PARAMETERS REQUESTED... section in your STQ - # Product. There are times when a WFO will want to format certain - # weather elements in the spot forecast, but do NOT want those elements - # to be listed in the website. - - # These elements will be appended below the "weather parameters requested" - # elements and will be in the order as specified in _weInfoHiddenList - # - # All weather elements will be commented out and they are the same - # weather elements listed in _weInfoList. If you have a weather element - # to add, then send an email to Virgil.Middendorf@noaa.gov for baselining. - # - # Phrases: Phrases associated with each element listed in this method - # is still configured in the _weInfoList method - - # For each element, we list: - # --an identifier - # --flag to indicate if this is a default element - - return [ -## ("SKY/WEATHER", 0), -## ("BEGIN/END OF PCPN", 0), -## ("TEMPERATURE", 0), -## ("HUMIDITY", 0), -## ("DEWPOINT", 0), -## ("20 FOOT WINDS", 0), -## ("EYE LEVEL WINDS", 0), -## ("SURFACE WINDS", 0), -## ("WIND SHIFT", 0), -## ("RIDGE TOP WIND", 0), -## ("SURROUNDING RIDGE", 0), -## ("CWR", 0), -## ("POP", 0), -## ("LIGHTNING ACTIVITY LEVEL", 0), -## ("SMOKE DISPERSION", 0), -## ("MIXING HEIGHT", 0), -## ("TRANSPORT WINDS", 0), -## ("DISPERSION INDEX", 0), -## ("LDSI", 0), -## ("LVORI", 0), -## ("ADI", 0), -## ("CLEARING INDEX", 0), -## ("STABILITY CLASS", 0), -## ("MARINE LAYER", 0), -## ("HAINES INDEX", 0), -## ("VENTILATION RATE", 0), -## ("SWELL HEIGHT", 0), -## ("WAVE HEIGHT", 0), -## ("SWELL PERIOD", 0), -## ("WIND WAVE", 0), -## ("RAINFALL AMOUNT", 0), -## ("SNOWFALL AMOUNT", 0), -## ("FREEZING LEVEL", 0), -## ("CEILING", 0), -## ("VISIBILITY", 0), -## ("ICING", 0), -## ("HAZARDS", 0), -## ("HEAT INDEX", 0), - ] - - def _rowList(self, colWidth=1): - - ### 20 foot wind tabular phrase configuration ### - - if self._tableWindElementSplit == "no" and colWidth == 7: # 2 hourly - if self._bothAlphaNumericDict.get(self._20ftWindParm, "No") == "No": - wind = [("20 ft wind......", self._wind_value), - ("20 ft wind gust.", self._windGust_value)] - else: - wind = [("20 ft wind......", self._wind_value), - ("20 ft wind gust.", self._windGust_value), - ("20 ft wind dir..", self._windNumDir_value)] - elif self._tableWindElementSplit == "no" and colWidth > 7: # 3-4 hourly - if self._bothAlphaNumericDict.get(self._20ftWindParm, "No") == "No": - wind = [("20 ft wind......", self._windWithGust_value)] - else: - wind = [("20 ft wind......", self._windWithGust_value), - ("20 ft wind dir..", self._windNumDir_value)] - else: - if self._bothAlphaNumericDict.get(self._20ftWindParm, "No") == "No": - wind = [("20 ft wind dir..", self._windDir_value), # 1 hourly - ("20 ft wind spd..", self._windSpd_value), - ("20 ft wind gust.", self._windGust_value)] - else: - wind = [("20 ft wind dir..", self._windDir_value), # 1 hourly - ("20 ft wind dir..", self._windNumDir_value), - ("20 ft wind spd..", self._windSpd_value), - ("20 ft wind gust.", self._windGust_value)] - - ### eye level wind tabular phrase configuration ### - - if self._tableEyeWindElementSplit =="no" and colWidth == 7: - if self._bothAlphaNumericDict.get("EyeWind", "No") == "No": - eyewind = [("Eye level wind..", self._eyewind_value), - ("Eye lvl wnd gst.", self._eyewindGust_value)] - else: - eyewind = [("Eye level wind..", self._eyewind_value), - ("Eye lvl wnd gst.", self._eyewindGust_value), - ("Eye lvl wnd dir.", self._eyewindNumDir_value)] - elif self._tableEyeWindElementSplit == "no" and colWidth > 7: - if self._bothAlphaNumericDict.get("EyeWind", "No") == "No": - eyewind = [("Eye level wind..", self._eyewindWithGust_value)] - else: - eyewind = [("Eye level wind..", self._eyewindWithGust_value), - ("Eye lvl wnd dir.", self._eyewindNumDir_value)] - else: - if self._bothAlphaNumericDict.get("EyeWind", "No") == "No": - eyewind = [("Eye lvl wnd dir.", self._eyewindDir_value), - ("Eye lvl wnd spd.", self._eyewindSpd_value), - ("Eye lvl wnd gst.", self._eyewindGust_value)] - else: - eyewind = [("Eye lvl wnd dir.", self._eyewindDir_value), - ("Eye lvl wnd dir.", self._eyewindNumDir_value), - ("Eye lvl wnd spd.", self._eyewindSpd_value), - ("Eye lvl wnd gst.", self._eyewindGust_value)] - - ### surface wind (10m) tabular phrase configuration ### - - if self._tableSfcWindElementSplit =="no" and colWidth == 7: - - if self._bothAlphaNumericDict.get("SfcWind", "No") == "No": - sfcwind = [("Surface wind....", self._sfcwind_value), - ("Surface wnd gst.", self._sfcwindGust_value)] - else: - sfcwind = [("Surface wind....", self._sfcwind_value), - ("Surface wnd gst.", self._sfcwindGust_value), - ("Surface wnd dir.", self._sfcwindNumDir_value)] - - elif self._tableSfcWindElementSplit == "no" and colWidth > 7: - - if self._bothAlphaNumericDict.get("SfcWind", "No") == "No": - sfcwind = [("Surface wind....", self._sfcwindWithGust_value)] - else: - sfcwind = [("Surface wind....", self._sfcwindWithGust_value), - ("Surface wnd dir.", self._sfcwindNumDir_value)] - - else: - - if self._bothAlphaNumericDict.get("SfcWind", "No") == "No": - sfcwind = [("Surface wnd dir.", self._sfcwindDir_value), - ("Surface wnd spd.", self._sfcwindSpd_value), - ("Surface wnd gst.", self._sfcwindGust_value)] - else: - sfcwind = [("Surface wnd dir.", self._sfcwindDir_value), - ("Surface wnd dir.", self._sfcwindNumDir_value), - ("Surface wnd spd.", self._sfcwindSpd_value), - ("Surface wnd gst.", self._sfcwindGust_value)] - - ### ridge top wind tabular phrase configuration ### - - if self._tableRidgeElementSplit == "no" and colWidth >=7: - if self._bothAlphaNumericDict.get("RidgeWind", "No") == "No": - ridge = [("Ridgetop wind...", self._ridge_value)] - else: - ridge = [("Ridgetop wind...", self._ridge_value), - ("Ridge wnd dir..", self._ridgeNumDir_value)] - else: - if self._bothAlphaNumericDict.get("RidgeWind", "No") == "No": - ridge = [("Ridge wnd dir..", self._ridgeDir_value), - ("Ridge wnd spd..", self._ridgeSpd_value)] - else: - ridge = [("Ridge wnd dir..", self._ridgeDir_value), - ("Ridge wnd dir..", self._ridgeNumDir_value), - ("Ridge wnd spd..", self._ridgeSpd_value)] - - ### swell tabular phrase configuration ### - - if self._tableSwellElementSplit == "no" and colWidth >=7: - swell = [("Swell hgt (ft)..", self._swell_value)] - else: - swell = [("Swell direction.", self._swellDir_value), - ("Swell hgt (ft)..", self._swellHgt_value)] - - ### Mixing Height and Transport wind label configuration ### - - if self._tabularMixingHeightUnits == "ft" and colWidth > 4: - mixLabel = "Mix hgt (ft)...." - mixMetricLabel = "Mix hgt (m)....." - else: - mixLabel = "Mix hgt (kft)..." - mixMetricLabel = "Mix hgt (km)...." - - if self._transportWindLabel == "mix": - transLabel = "Mixing wind......" - transMetricLabel = "Mix wind (m/s).." - transDirLabel = "Mixng wind dir.." - transSpdLabel = "Mixng wind spd.." - transSpdMetricLabel = "Mix wnd spd m/s." - else: - transLabel = "Transport wind.." - transMetricLabel = "Tran wind (m/s)." - transDirLabel = "Transp wind dir." - transSpdLabel = "Transp wind spd." - transSpdMetricLabel = "Trans spd (m/s)." - - if self._tableTransElementSplit == "no" and colWidth >=7: - # Baseline - if self._includeMetricDispersion == "yes": - if self._bothAlphaNumericDict.get("TransWind", "No") == "No": - smoke = [(mixLabel, self._mixingHeight_value), - (mixMetricLabel, self._mixingHeightMetric_value), - (transLabel, self._trans_value), - (transMetricLabel, self._transMetric_value)] - trans = [(transLabel, self._trans_value), - (transMetricLabel, self._transMetric_value)] - else: - smoke = [(mixLabel, self._mixingHeight_value), - (mixMetricLabel, self._mixingHeightMetric_value), - (transLabel, self._trans_value), - (transDirLabel, self._transNumDir_value), - (transMetricLabel, self._transMetric_value)] - trans = [(transLabel, self._trans_value), - (transDirLabel, self._transNumDir_value), - (transMetricLabel, self._transMetric_value)] - else: - if self._bothAlphaNumericDict.get("TransWind", "No") == "No": - smoke = [(mixLabel, self._mixingHeight_value), - (transLabel, self._trans_value)] - trans = [(transLabel, self._trans_value)] - else: - smoke = [(mixLabel, self._mixingHeight_value), - (transLabel, self._trans_value), - (transDirLabel, self._transNumDir_value)] - trans = [(transLabel, self._trans_value), - (transDirLabel, self._transNumDir_value)] - else: - # Baseline - if self._includeMetricDispersion == "yes": - if self._bothAlphaNumericDict.get("TransWind", "No") == "No": - smoke = [(mixLabel, self._mixingHeight_value), - (mixMetricLabel, self._mixingHeightMetric_value), - (transDirLabel, self._transDir_value), - (transSpdLabel, self._transSpd_value), - (transSpdMetricLabel, self._transSpdMetric_value)] - trans = [(transDirLabel, self._transDir_value), - (transSpdLabel, self._transSpd_value), - (transSpdMetricLabel, self._transSpdMetric_value)] - else: - smoke = [(mixLabel, self._mixingHeight_value), - (mixMetricLabel, self._mixingHeightMetric_value), - (transDirLabel, self._transDir_value), - (transDirLabel, self._transNumDir_value), - (transSpdLabel, self._transSpd_value), - (transSpdMetricLabel, self._transSpdMetric_value)] - trans = [(transDirLabel, self._transDir_value), - (transDirLabel, self._transNumDir_value), - (transSpdLabel, self._transSpd_value), - (transSpdMetricLabel, self._transSpdMetric_value)] - else: - if self._bothAlphaNumericDict.get("TransWind", "No") == "No": - smoke = [(mixLabel, self._mixingHeight_value), - (transDirLabel, self._transDir_value), - (transSpdLabel, self._transSpd_value)] - trans = [(transDirLabel, self._transDir_value), - (transSpdLabel, self._transSpd_value)] - else: - smoke = [(mixLabel, self._mixingHeight_value), - (transDirLabel, self._transDir_value), - (transDirLabel, self._transNumDir_value), - (transSpdLabel, self._transSpd_value)] - trans = [(transDirLabel, self._transDir_value), - (transDirLabel, self._transNumDir_value), - (transSpdLabel, self._transSpd_value)] - if self._includeMetricDispersion == "yes": - mix = [(mixLabel, self._mixingHeight_value), - (mixMetricLabel, self._mixingHeightMetric_value)] - else: - mix = [(mixLabel, self._mixingHeight_value)] - - ### sky/wx/hazard tabular phrase configuration ### - - if self._elementFormatDict.get("Sky", "alpha") == "alpha": - if self._bothAlphaNumericDict.get("Sky", "No") == "No": - skywx = [("Sky cover.......", self._sky_value), - ("Weather cov.....", self._weatherCov_value), - ("Weather type....", self._weatherType_value), - ("Tstm cov........", self._tstmCov_value)] - else: - skywx = [("Sky cover.......", self._sky_value), - ("Sky (%).........", self._numSky_value), - ("Weather cov.....", self._weatherCov_value), - ("Weather type....", self._weatherType_value), - ("Tstm cov........", self._tstmCov_value)] - else: - skywx = [("Sky (%).........", self._sky_value), - ("Weather cov.....", self._weatherCov_value), - ("Weather type....", self._weatherType_value), - ("Tstm cov........", self._tstmCov_value)] - - hazard = [("Hazard VTEC 1..", self._wwa_value), - ("Hazard VTEC 2..", self._wwa2_value), - ("Hazard VTEC 3..", self._wwa3_value)] - - return [ - # Set to Directive requirements - # Each entry is a tuple: - # (Narrative Element, narrativeToo, tableRows) - # - # If narrativeToo is 1, then the narrative phrase will be included - # in the narrative portion of the product as well. - # tableRows is a list of (label:method) pairs. - # - ("SKY/WEATHER" , 1, skywx), - ("TEMPERATURE" , 1,[("Temp............", self._temp_value)]), - ("DEWPOINT" , 1,[("Dewpoint........", self._td_value)]), - ("HUMIDITY" , 1,[("RH..............", self._rh_value)]), - ("20 FOOT WINDS" , 1, wind), - ("EYE LEVEL WINDS" , 1, eyewind), - ("SURFACE WINDS" , 1, sfcwind), - #("RIDGE TOP WIND" , 1, ridge), - #("SMOKE DISPERSION" , 1, smoke), - #("MIXING HEIGHT" , 1, mix), - #("TRANSPORT WINDS" , 1, trans), - ("DISPERSION INDEX" , 1,[("Dispersion......", self._dsi_value)]), - ("LDSI" , 1,[("Dispersion idx..", self._ldsi_value)]), - ("LVORI" , 1,[("LVORI...........", self._lvori_value)]), - ("ADI" , 1,[("ADI.............", self._adi_value)]), - #("CWR" , 1,[("CWR.............", self._cwr_value)]), - ("POP" , 1,[("Chc of pcpn (%).", self._pop_value)]), - #("LIGHTNING ACTIVITY LEVEL", 1,[("LAL.............", self._lal_value)]), - ("HAINES INDEX" , 1,[("Haines Index....", self._haines_value)]), - ("VENTILATION RATE" , 1,[("Vrate kt-ft/1000", self._ventrate_value)]), - ("SWELL HEIGHT" , 1, swell), - ("SWELL PERIOD" , 1,[("Swell period (s)", self._swellPeriod_value)]), - ("WIND WAVE" , 1,[("Wind wave (ft)..", self._windWave_value)]), - ("WAVE HEIGHT" , 1,[("Wave height (ft)", self._waveHeight_value)]), - ("FREEZING LEVEL" , 1,[("Fz level (kft)..", self._freezingLevel_value)]), - ("CEILING" , 1,[("Ceiling (kft)...", self._ceiling_value)]), - ("VISIBILITY" , 1,[("Visibility (sm).", self._visibility_value)]), - ("ICING" , 1,[("Icing...........", self._ceiling_value)]), - ("HAZARDS" , 0, hazard), - ("HEAT INDEX" , 1,[("Heat index (F)..", self._heatIndex_value)]), - ] - - def _getProductInfo(self, product, issuance, forecasters): - # Parse the spot request information selected and - # return the FireInfo for display. - timezone = os.environ["TZ"] - spotRequestInfo = [ - ("PROJECT NAME:", "fireName", "'xxxx'"), - ("PROJECT TYPE:", "fireType", "'WILDFIRE'"), - ("REQUESTING AGENCY:", "requestingAgency", "'xxxx'"), - ("REQUESTING OFFICIAL:", "agencyContact", "'yyyy'"), - ("DLAT:", "fireLatitude", "28.27"), - ("DLON:", "fireLongitude", "82.19"), - ("SIZE (ACRES):", "fireSize", "1"), - ("SITE:", "wfoID", "''"), - ("OFILE:", "webSiteTag", "''"), - ("TIMEZONE:", "webTimeZone", "timezone"), - ("DATE:", "fireDate", "'1/1/01'"), - ("TIME:", "fireTime", "'1300'"), - ] - - obs = [] - self._spotList = ["This is a New Incident"] - remarksFlag = 0 - remarks = "" - - self._periodElementDict = { - "Today": [], "Tonight": [], "Tomorrow": [] - } - - self._periodAllElementDict = { - "Today": [], "Tonight": [], "Tomorrow": [] - } - - # Set default values - for field, variable, default in spotRequestInfo: - exec "self._"+variable + " = " + default - - # If no issuance to use, we are done. - if issuance is None: - return - self._productIssuance = issuance - - # If no forecasters included, we are done. - if forecasters is None: - return - self._forecasters = forecasters - - # If no product to parse, we are done - if product is None: - # Use default list of weather elements - for element, defaultFlag, phrases, searchStrings in self._weInfoList(): - if defaultFlag: - self._periodAllElementDict["Today"].append(element) - self._periodAllElementDict["Tonight"].append(element) - self._periodAllElementDict["Tomorrow"].append(element) - self._periodElementDict["Today"].append(element) - self._periodElementDict["Tonight"].append(element) - self._periodElementDict["Tomorrow"].append(element) - #self._allPeriodElementDict["Today"].append(element) - #self._allPeriodElementDict["Tonight"].append(element) - #self._allPeriodElementDict["Tomorrow"].append(element) - #if defaultFlag: - # self._periodElementDict["Today"].append(element) - # self._periodElementDict["Tonight"].append(element) - # self._periodElementDict["Tomorrow"].append(element) - for element, defaultFlag in self._weInfoHiddenList(): - if defaultFlag: - self._periodElementDict["Today"].append(element) - self._periodElementDict["Tonight"].append(element) - self._periodElementDict["Tomorrow"].append(element) - self._periodAllElementDict["Today"].append(element) - self._periodAllElementDict["Tonight"].append(element) - self._periodAllElementDict["Tomorrow"].append(element) - return - - # Parse product - wxParmFlag = 0 - for line in product: - print line - if line.find("...WEATHER PARAMETERS REQUESTED...") >= 0: - wxParmFlag = 1 - if line.find("SITE:") >= 0: - wxParmFlag = 0 - # If the line has a colon, split it into fieldName/value - cleanLine = string.replace(string.upper(line),"\n", "") - cleanLine = cleanLine.strip() - index = cleanLine.find(":") - if index >= 0: - # Handle STQ fields (lines with a colon) - fieldName = cleanLine[:index].strip() - value = cleanLine[index+1:].strip() - - for field, variable, default in spotRequestInfo: - if field in cleanLine and cleanLine.find(field) == 0: - # Assign to variable - exec "self._"+variable + " = value" - - if wxParmFlag: - for element, defaultFlag, phrases, searchStrings in self._weInfoList(): - if self._checkStrs(searchStrings, fieldName) == 1: - #Enter flags in dictionary e.g. 1,1,1 for Today, Tonight, Tomorrow - flags = value.split(",") - if flags[0] == "1": - self._periodElementDict["Today"].append(element) - if flags[1] == "1": - self._periodElementDict["Tonight"].append(element) - if flags[2] == "1": - self._periodElementDict["Tomorrow"].append(element) - self._periodAllElementDict["Today"].append(element) - self._periodAllElementDict["Tonight"].append(element) - self._periodAllElementDict["Tomorrow"].append(element) - - if "ELEV=" in line and "TIME=" in line: - ob = string.replace(string.upper(line),"\n","") - if "ELEV= TIME=" not in ob: - obs.append(ob) - if remarksFlag and "FORECAST ELEMENTS" not in line: - remarks = remarks + line - if "...REMARKS..." in line: - remarksFlag = 1 - if "...WEATHER PARAMETERS REQUESTED..." in line: - remarksFlag = 0 - remarks = string.replace(remarks,"\n\n","\n") - remarks = string.replace(remarks,"\n\n","\n") - - for element, defaultFlag in self._weInfoHiddenList(): - if defaultFlag: - if len(self._periodElementDict["Today"]) != 0: - self._periodElementDict["Today"].append(element) - if len(self._periodElementDict["Tonight"]) != 0: - self._periodElementDict["Tonight"].append(element) - if len(self._periodElementDict["Tomorrow"]) != 0: - self._periodElementDict["Tomorrow"].append(element) - self._periodAllElementDict["Today"].append(element) - self._periodAllElementDict["Tonight"].append(element) - self._periodAllElementDict["Tomorrow"].append(element) - - def _displayFireInfo(self): - - # Build and display GUI using the fireInfo - varList = [] - - # Fire Type Section of the GUI - desTypeList = "Type of Fire:", "fireType" - varList.append((desTypeList, self._fireType, "radio", self._typeList)) - - # requesting Agency Section of the GUI - desAgencyNameList = "Agency:", "requestingAgency" - agencyNameList = [] - findAgencyFlag = 0 - for agency in self._agencyList: - id,name = agency - agencyNameList.append(name) - if self._requestingAgency == name: - findAgencyFlag = 1 - requestingAgencyDefault = self._requestingAgency - if not findAgencyFlag: - agencyNameList.append("Unlisted") - requestingAgencyDefault = "Unlisted" - varList.append((desAgencyNameList, requestingAgencyDefault, "radio", agencyNameList)) - - # Include Extendeds/Outlook Section of the GUI - if not self._shortTermOnly: - questionList = ["Include Day 3-5 Extended?", - "Include Day 6-7 Extended?", - "Include Day 8-14 Outlook?"] - desExtendedQuestions = "Check Items to Include:","extendedQuestions" - varList.append((desExtendedQuestions, [], "check", questionList)) - - # Forecast Type - desFcstType = "What Type of Forecast?", "forecastType" - labelList = [] - for label, forecastType in self._forecastTypeList: - labelList.append(label) - varList.append((desFcstType, self._defaultForecastType, "radio", labelList)) - - # Include Ignition Time Forecast Section of the GUI - if self._includeIgnitionOptionOnGUI: - desIT = ("Include Ignition Times?", "withIgnitionTimes") - varList.append((desIT, self._withIgnitionTimes, "radio", ["yes", "no"])) - - # Unlisted Agency Name Section of the GUI - if not findAgencyFlag: - desOtherAgencyName = "Name of Agency if not listed....", "otherAgencyName" - varList.append((desOtherAgencyName, self._requestingAgency, "alphaNumeric")) - - # Fire Name Section of the GUI - desFireName = "Name of Fire ...................................", "fireName" - varList.append((desFireName, self._fireName, "alphaNumeric")) - - # Fire Time Section of the GUI - desFireTime = "Time of Fire .....................................", "fireTime" - varList.append((desFireTime, self._fireTime, "alphaNumeric")) - - # Fire Date Section of the GUI - desFireDate = "Date of Fire .....................................", "fireDate" - varList.append((desFireDate, self._fireDate, "alphaNumeric")) - - # Agency Contact Section of the GUI - desAgencyContact = "Name of Agency Contact..........", "agencyContact" - varList.append((desAgencyContact, self._agencyContact, "alphaNumeric")) - - # Fire Latitude Section of the GUI - desFireLatitude = "Fire Latitude (Deg).......................", "fireLatitude" - varList.append((desFireLatitude, self._fireLatitude, "alphaNumeric")) - - # Fire Longitude Section of the GUI - desFireLongitude = "Fire Longitude (Deg)...................", "fireLongitude" - varList.append((desFireLongitude, self._fireLongitude, "alphaNumeric")) - - # Fire Size Section of the GUI - desFireSize = "Fire Size (Acres) .........................", "fireSize" - varList.append((desFireSize, self._fireSize, "alphaNumeric")) - - # Forecast Elements Section of the GUI - tableHoursDesc = "Tab Hrs" - if self._productIssuance in ["Next Day", "Morning", "Morning Update", "Afternoon Update"]: - desElementList = "Today Elements", "todayElements" - varList.append((desElementList, self._periodElementDict["Today"], - "check", self._periodAllElementDict["Today"])) - desTableRes = tableHoursDesc,"todayTableRes" - varList.append((desTableRes, self._defaultTabularResolution["Today"],"radio", - self._tabularResolutionDict["Today"])) - desElementList = "Tonight Elements", "tonightElements" - varList.append((desElementList, self._periodElementDict["Tonight"] , - "check", self._periodAllElementDict["Tonight"] )) - if self._tabularAllPeriods == "yes": - desTableRes = tableHoursDesc,"tonightTableRes" - varList.append((desTableRes, self._defaultTabularResolution["Tonight"],"radio", - self._tabularResolutionDict["Tonight"])) - desElementList = "Tomorrow Elements", "tomorrowElements" - varList.append((desElementList, self._periodElementDict["Tomorrow"], - "check", self._periodAllElementDict["Tomorrow"] )) - if self._tabularAllPeriods == "yes": - desTableRes = tableHoursDesc,"tomorrowTableRes" - varList.append((desTableRes, self._defaultTabularResolution["Tomorrow"],"radio", - self._tabularResolutionDict["Tomorrow"])) - - if self._productIssuance in ["Afternoon with 4 periods", "Evening Update with 4 periods", - "Early Morning Update with 4 periods"]: - desElementList = "Tomorrow Night Elements", "tomorrowNightElements" - varList.append((desElementList, self._periodElementDict["Tomorrow"], - "check", self._periodAllElementDict["Tomorrow"] )) - if self._tabularAllPeriods == "yes": - desTableRes = tableHoursDesc,"tomorrowNightTableRes" - varList.append((desTableRes, self._defaultTabularResolution["Tomorrow"],"radio", - self._tabularResolutionDict["Tomorrow"])) - desElementList = "Next Day Elements", "nextDayElements" - varList.append((desElementList, self._periodElementDict["Tomorrow"], - "check", self._periodAllElementDict["Tomorrow"] )) - if self._tabularAllPeriods == "yes": - desTableRes = tableHoursDesc,"nextDayTableRes" - varList.append((desTableRes, self._defaultTabularResolution["Tomorrow"],"radio", - self._tabularResolutionDict["Tomorrow"])) - - # Launch the Spot Request Quality Control GUI. - varDict = self._callProcessVariableList("Input Info", varList, varDict={}) - if varDict is None: - return None - - # Set up varDict for forecastType using labels - value = varDict[desFcstType] - for label, forecastType in self._forecastTypeList: - if label == value: - varDict[desFcstType] = forecastType - break - - # This section of code filters the forecaster entries to ensure that - # single quotes are not included. - if not findAgencyFlag: - try: - varDict[desOtherAgencyName] = string.replace(varDict[desOtherAgencyName],"\'","") - except AttributeError: - print "Other Agency Name is not a string." - try: - varDict[desFireName] = string.replace(varDict[desFireName],"\'","") - except AttributeError: - print "Fire Name is not a string." - try: - varDict[desAgencyContact] = string.replace(varDict[desAgencyContact],"\'","") - except AttributeError: - print "Fire Size is not a string." - try: - varDict[desFireSize] = string.replace(str(varDict[desFireSize]),"\'","") - except AttributeError: - print "Fire Size is not a string." - try: - varDict[desFireLatitude] = string.replace(str(varDict[desFireLatitude]),"\'","") - except AttributeError: - print "Latitude is not a string." - try: - varDict[desFireLongitude] = string.replace(str(varDict[desFireLongitude]),"\'","") - except AttributeError: - print "Longitude is not a string." - try: - varDict[desFireTime] = string.replace(str(varDict[desFireTime]),"\'","") - except AttributeError: - print "Ignition Time is not a string." - try: - varDict[desFireDate] = string.replace(str(varDict[desFireDate]),"\'","") - except AttributeError: - print "Ignition Date is not a string." - - # This section of code filters the forecaster entries to ensure that - # double quotes are not included. - if not findAgencyFlag: - try: - varDict[desOtherAgencyName] = string.replace(varDict[desOtherAgencyName],"\"","") - except AttributeError: - print "Other Agency Name is not a string." - try: - varDict[desFireName] = string.replace(varDict[desFireName],"\"","") - except AttributeError: - print "Fire Name is not a string." - try: - varDict[desAgencyContact] = string.replace(varDict[desAgencyContact],"\"","") - except AttributeError: - print "Fire Size is not a string." - try: - varDict[desFireSize] = string.replace(varDict[desFireSize],"\"","") - except AttributeError: - print "Fire Size is not a string." - try: - varDict[desFireLatitude] = string.replace(varDict[desFireLatitude],"\"","") - except AttributeError: - print "Latitude is not a string." - try: - varDict[desFireLongitude] = string.replace(varDict[desFireLongitude],"\"","") - except AttributeError: - print "Longitude is not a string." - try: - varDict[desFireTime] = string.replace(varDict[desFireTime],"\"","") - except AttributeError: - print "Ignition Time is not a string." - try: - varDict[desFireDate] = string.replace(varDict[desFireDate],"\"","") - except AttributeError: - print "Ignition Date is not a string." - - # convert lat/lon to floats - try: - varDict[desFireLatitude] = string.atof(varDict[desFireLatitude]) - except ValueError: - print "Latitude is not a float." - try: - varDict[desFireLongitude] = string.atof(varDict[desFireLongitude]) - except ValueError: - print "Longitude is not a float." - - # Convert fireTime - fireTime = varDict[desFireTime] - fireTime = "000" + str(int(float(fireTime))) - fireTime = fireTime[-4:] - varDict[desFireTime] = fireTime - - # Here are more varDict settings that need to be set before we launch - # the formatter. - varDict[("Product Issuance:", "productIssuance")] = self._productIssuance - varDict[("Forecaster:", "forecaster")] = self._forecasters - if self._includeCreationTimeOnGUI: - varDict[("Creation Date", "creationDate")] = self._creationDate - varDict[("Creation Time", "creationTime")] = self._creationTime - varDict[("WebSiteTag:", "webSiteTag")] = self._webSiteTag - varDict[("WFOid:", "wfoID")] = self._wfoID - varDict[("TimeZone:", "fireTZ")] = self._webTimeZone - - if self._shortTermOnly: - varDict[("Check Items to Include:","extendedQuestions")] = [] - - return varDict - - # From FWF. Needed to change .EXTENDED... to .FORECAST DAYS 3 THROUGH 7 - def setLabel(self, tree, component): - if self._includeExtended: - if "Include Day 3-5 Extended?" not in self._extendedQuestions: - component.set("words", ".FORECAST DAYS 6 THROUGH 7...\n") - else: - component.set("words", ".FORECAST DAYS 3 THROUGH 7...\n") - else: - component.set("words", ".FORECAST DAYS 3 THROUGH 5...\n") - return self.DONE() - - # From FWF. Modifed to write the output to a file in a user specified - # directory on the local lx machine. In addition, added sections to - # insert headlines, discussion, and 8-14 day outlook. - def generateForecast(self, argDict): - # Generate Text Phrases for a list of edit areas - - # Get variables - error = self._getVariables(argDict) - if error is not None: - return error - - # Quality Control Gui data - error = self._qualityControlFormData() - if error is not None: - return error - - # Get the areaList -- derived from the lat, lon, size of fire (acres), - # and the name of the fire. - error = self._determineAreaList(argDict) - if error is not None: - return error - - # Set the extended forecast configuration based on what was - # requested by the user. - error = self._setExtendedConfig() - if error is not None: - return error - - # Determine time ranges - error = self._determineTimeRanges(argDict) - if error is not None: - return error - - # Sample the data - error = self._sampleData(argDict) - if error is not None: - return error - - # Initialize the output string - fcst = "" - fcst = self._preProcessProduct(fcst, argDict) - - # Generate the unrepresentative statement for the Product - fcst = self._makeUnrepresentStatement(fcst, argDict) - - # Generate the Headlines for the Product - for editArea, areaLabel in self._areaList: - fcst = self._makeHeadline(fcst, editArea, areaLabel, argDict) - - # Generate the Discussion section - fcst = self._makeDiscussion(fcst, argDict) - - # Generate the product for each edit area in the list - fraction = 0 - fractionOne = 1.0/float(len(self._areaList)) - percent = 50.0 - self.setProgressPercentage(percent) - for editArea, areaLabel in self._areaList: - self.progressMessage(fraction, percent, "Making Product for " + areaLabel) - fcst = self._preProcessArea(fcst, editArea, areaLabel, argDict) - fcst = self._makeProduct(fcst, editArea, areaLabel, argDict) - fcst = self._postProcessArea(fcst, editArea, areaLabel, argDict) - fraction = fractionOne - - # Generate the summary extended section (if wanted) - fcst = self._makeSummaryExtended(fcst, argDict) - - # Generate the 8 to 14 Day Outlook section - error = self._generateOutlookLabels(argDict) - if error is not None: - return error - fcst = self._make8to14DayOutlook(fcst, argDict) - - fcst = self._postProcessProduct(fcst, argDict) - - return fcst - - def _determineTimeRanges(self, argDict): - # Set up the Narrative Definition and initial Time Range - self._issuanceInfo = self.getIssuanceInfo( - self._productIssuance, self._issuance_list(argDict), argDict["creationTime"]) - - if self._tableStartTimeMode == "current": - # Add a "custom" component to sample data from current time - # to product start time - ct = self._issuanceInfo.issueTime() - currentTime = AbsTime.absTimeYMD(ct.year, ct.month, ct.day, - ct.hour) - productStart = self._issuanceInfo.timeRange().startTime() - tr = TimeRange.TimeRange(currentTime, productStart) - if tr.duration() > 0: - self._issuanceInfo.narrativeDef().append(\ - ("Custom", ("PreFirePeriod1", tr))) - - self._timeRange = self._issuanceInfo.timeRange() - argDict["productTimeRange"] = self._timeRange - self._expireTime = self._issuanceInfo.expireTime() - self._issueTime = self._issuanceInfo.issueTime() - self._definition["narrativeDef"] = self._issuanceInfo.narrativeDef() - if self._periodCombining: - self._definition["methodList"] = \ - [self.combineComponentStats, self.assembleChildWords] - else: - self._definition["methodList"] = [self.assembleChildWords] - # Determine the extended range - if self._individualExtended == 1: - self._extendedStart = self._timeRange.endTime() - 24*5*3600 - else: - self._extendedStart = self._timeRange.endTime() - self._extendedRange = TimeRange.TimeRange( - self._extendedStart, self._extendedStart + 3600) - - # Calculate current times - self._ddhhmmTime = self.getCurrentTime( - argDict, "%d%H%M", shiftToLocal=0, stripLeading=0) - self._timeLabel = self.getCurrentTime( - argDict, "%l%M %p %Z %a %b %e %Y", stripLeading=1) - return None - -# Quality Control Form Information from user dialog to ensure completeness. - - - # 04/24/07: Tabular/Narrative is okay for wildfires. Changed code to make - # Tabular Only into Tabular/Narrative for wildfires. - - # From FWS_Overrides. Fixed a bug that causes the formatter to crash - # when a number was entered for the agency or the contact. Added a - # method called _convertToStr to do this cleanly. - def _qualityControlFormData(self): - - # If fireSize is not an integer, then I default the size to 1 acre. - # This will allow the formatter to run even if the user puts invalid - # characters into the size field (like 10-20). - try: - self._fireSize = int(float(self._fireSize)+0.5) - except ValueError: - self._fireSize = 1 - if self._fireSize <= 0: - self._fireSize = 1 - - try: - lat = float(self._fireLatitude) - except ValueError: - return "Invalid latitude value." - if lat < 0.0 or lat > 90: - return "Invalid latitude value." - - try: - lon = float(self._fireLongitude) - except ValueError: - return "Invalid longitude value." - if lon < 0.0 or lon > 180.0: - return "Invalid longitude value. Must be positive." - - if len(self._forecaster) == 0: - return "You must select at least one forecaster in the list." - - if self._productIssuance in ["Next Day", "Morning", "Morning Update", "Afternoon Update"]: - elementLists = [self._todayElements, self._tonightElements, self._tomorrowElements] - elif self._productIssuance in ["Afternoon with 4 periods", "Evening Update with 4 periods", - "Early Morning Update with 4 periods"]: - elementLists = [self._tonightElements, self._tomorrowElements, - self._tomorrowNightElements, self._nextDayElements] - else: - elementLists = [self._tonightElements, self._tomorrowElements] - - # Check to make sure at least weather element is requested. - elementsFound = 0 - for elementList in elementLists: - if len(elementList) > 0: - elementsFound = 1 - break - if not elementsFound and \ - "Include Day 3-5 Extended?" not in self._extendedQuestions and \ - "Include Day 6-7 Extended?" not in self._extendedQuestions and \ - "Include Day 8-14 Outlook?" not in self._extendedQuestions: - return "You must select at least one weather element to " + \ - "forecast in the gui." - - # Code to ensure the wildfireElementList parameters are included in - # the FWS product (if this is a wildfire incident) was added to this - # method. - if self._fireType.upper() == "WILDFIRE": - for element in self._wildfireElementList: - for elementList in elementLists: - if element not in elementList and len(elementList) != 0: - elementList.append(element) - if self._tabularForWildfire == "no" and \ - self._forecastType == "Tabular Only": - self._forecastType = "Tabular/Narrative" - - self._fireName = self._convertToStr(self._fireName) - if len(self._fireName) == 0: - return "You must enter the Name of Fire." - - self._agencyContact = self._convertToStr(self._agencyContact) - if len(self._agencyContact) == 0: - return "You must enter the Name of Agency Contact." - - self._requestingAgency = self._convertToStr(self._requestingAgency) - if len(self._requestingAgency) == 0: - return "You must choose a requesting agency." - - if self._requestingAgency == "Unlisted": - self._otherAgencyName = self._convertToStr(self._otherAgencyName) - if len(self._otherAgencyName) == 0: - return "You must enter a requesting agency." - - def _convertToStr(self, var): - try: - stringSize = len(var) - return var - except TypeError: - try: - var = `int(var+0.5)` - except TypeError: - var = `var` - return var - - def _getVariables(self, argDict): - # Make argDict accessible - self.__argDict = argDict - - self._todayTableRes = "None" - self._tonightTableRes = "None" - self._tomorrowTableRes = "None" - self._tomorrowNightTableRes = "None" - self._nextDayTableRes = "None" - self._todayElements = [] - self._tonightElements = [] - self._tomorrowElements = [] - self._tomorrowNightElements = [] - self._nextDayElements = [] - - # Get Definition variables - self._definition = argDict["forecastDef"] - for key in self._definition.keys(): - exec "self._" + key + "= self._definition[key]" - - # Get VariableList and _issuance_list variables - varDict = argDict["varDict"] - for key in varDict.keys(): - if type(key) is types.TupleType: - label, variable = key - exec "self._" + variable + "= varDict[key]" - - self._language = argDict["language"] - - # Adjust creationTime if user-supplied creation date and time - if self._includeCreationTimeOnGUI: - if self._creationDate != "": - argDict["creationTime"] = self._getTime(self._creationDate, self._creationTime) - return None - - def _parseTime(self,date,t,rtz): - try: - cTime = time.strptime(t + ' ' + date + ' ' + rtz, '%H%M %m/%d/%y %Z') - except ValueError: - cTime = time.strptime(t + ' ' + date + ' ' + rtz, '%H%M %m/%d/%Y %Z') - - return cTime - - def _getTime(self, date, t): - # Make a unix time integer from the given date and time strings - if t == "": - t = "0000" - else: - t = "000" + `int(t)` - t = t[-4:] - rtz = self._getActualTimeZone() - stz = time.tzname[0] - dtz = time.tzname[1] - otz = stz[0:1] - ptz = rtz[0:1] - offset = 0 - if otz == ptz: - cTime = self._parseTime (date,t,rtz) - else: - if ptz == "E": - if otz == "E": - offset = 0 - elif otz == "C": - offset = -1 - elif otz == "M": - offset = -2 - elif otz == "P": - offset = -3 - elif ptz == "C": - if otz == "E": - offset = 1 - elif otz == "C": - offset = 0 - elif otz == "M": - offset = -1 - elif otz == "P": - offset = -2 - elif ptz == "M": - if otz == "E": - offset = 2 - elif otz == "C": - offset = 1 - elif otz == "M": - offset = 0 - elif otz == "P": - offset = -1 - elif ptz == "P": - if otz == "E": - offset = 3 - elif otz == "C": - offset = 2 - elif otz == "M": - offset = 1 - elif otz == "P": - offset = 0 - if stz[1:3] == rtz[1:3]: - cTime = self._parseTime (date,t,stz) - else: - cTime = self._parseTime (date,t,dtz) - - return time.mktime(cTime) + offset*3600 - - def _getActualTimeZone(self): - # Return the correct time zone based on DST and fireTZ variable - if self._fireTZ.find('/') >= 0: - standardTimeZone, daylightTimeZone = time.tzname - elif len(self._fireTZ) == 9: - standardTimeZone = self._fireTZ[:4] - daylightTimeZone = self._fireTZ[5:] - else: - standardTimeZone = self._fireTZ[:3] - daylightTimeZone = self._fireTZ[4:] - - if self.daylight() == 1: - actualTimeZone = daylightTimeZone - else: - actualTimeZone = standardTimeZone - return actualTimeZone - - def _makeFcstTimeStatement(self, fcst, argDict): - requestWords = self._getRequestWords() - rtz = self._getActualTimeZone() - stz = time.tzname[0] - dtz = time.tzname[1] - otz = stz[0:1] - ptz = rtz[0:1] - if otz == ptz: - self._fireDateTime = self._parseTime (self._fireDate,self._fireTime,rtz) - fcst = fcst + time.strftime( - 'Forecast is based on ' + requestWords + ' time of %H%M %Z on %B %d. ', - self._fireDateTime) - else: - offset = 0 - if ptz == "E": - if otz == "E": - offset = 0 - elif otz == "C": - offset = -1 - elif otz == "M": - offset = -2 - elif otz == "P": - offset = -3 - elif ptz == "C": - if otz == "E": - offset = 1 - elif otz == "C": - offset = 0 - elif otz == "M": - offset = -1 - elif otz == "P": - offset = -2 - elif ptz == "M": - if otz == "E": - offset = 2 - elif otz == "C": - offset = 1 - elif otz == "M": - offset = 0 - elif otz == "P": - offset = -1 - elif ptz == "P": - if otz == "E": - offset = 3 - elif otz == "C": - offset = 2 - elif otz == "M": - offset = 1 - elif otz == "P": - offset = 0 - if stz[1:3] == rtz[1:3]: - self._fireDateTime = self._parseTime (self._fireDate,self._fireTime,stz) - tempTime = time.mktime(self._fireDateTime) + offset*3600 - self._fireDateTime = time.localtime(tempTime) - else: - self._fireDateTime = self._parseTime (self._fireDate,self._fireTime,dtz) - tempTime = time.mktime(self._fireDateTime) + offset*3600 - self._fireDateTime = time.localtime(tempTime) - try: - fireDateTime = time.strptime( - self._fireTime + ' ' + self._fireDate, '%H%M %m/%d/%y') - except ValueError: - fireDateTime = time.strptime( - self._fireTime + ' ' + self._fireDate, '%H%M %m/%d/%Y') - fcst = fcst + time.strftime( - 'Forecast is based on ' + requestWords + ' time of %H%M ' + rtz + ' on %B %d. ', - fireDateTime) - fcst = fcst + "\n" - self._makeFireTimeRange() - return fcst - - def _makeFireTimeRange(self): - # Make a 1-hour fire time range for the fireTime - if self._withIgnitionTimes == "no": - return None - fireDateTime = time.mktime(self._fireDateTime) - self._fireTR = self.makeTimeRange(fireDateTime, fireDateTime+3600) - print "Fire Time Range:", self._fireTR - - def _checkFireTR(self, tr): - if self._fireTR is None: - return 0 - return self._fireTR.overlaps(tr) - - # This is a new method that Matt Davis wrote. Figures out whether or not - # we are using a ignition time, request time, or incident time. - def _getRequestWords(self): - if self._fireType.upper() == "WILDFIRE": - return "request" - elif self._fireType.upper() == "PRESCRIBED": - return "ignition" - else: - return "incident" - - # Import the discussion from a previously edited discussion file. - def _makeDiscussion(self, fcst, argDict): - - discussionHeader = "" - discussionHeader = ".DISCUSSION...\n" - - if self._insertDiscussionFromFile == 1: - discussion = "" - if os.path.isfile(self._discussionFile): - input = open(self._discussionFile) - text = input.readlines() - for line in text: - discussion = discussion + line - discussion = string.join(string.split(discussion,"\n\n"),"\n") - discussion = string.join(string.split(discussion,"\n\n"),"\n") - return fcst + discussionHeader + discussion + "\n" - else: - discussion = "...Put discussion text here..." - return fcst + discussionHeader + discussion + "\n\n" - elif self._insertDiscussionFromFile == 2: - version = 0 - fwfPil = self._statePil + self._fwfPil - searchString="" - product = self.getPreviousProduct(fwfPil, searchString, version=version) - product = string.split(product, "\n") - discussion = "" - disFlag = 0 - foundDiscussion = 0 - for line in product: - if string.find(line,"Discussion...") != -1: - disFlag = 1 - foundDiscussion = 1 - try: - if line[2] == "Z" and line[-1] == "-" and \ - (line[6] == "-" or line[6] == ">"): - disFlag = 0 - except IndexError: - #print "Discussion Index Error",line - a = 0 - if line[:2] == "$$": - disFlag = 0 - if disFlag: - discussion = discussion + line + "\n" - if foundDiscussion: - return fcst + discussion + "\n\n" - else: - discussion = "...Put discussion text here..." - return fcst + discussionHeader + discussion + "\n\n" - else: - return fcst + discussionHeader + "\n\n\n" - -# Create areaList based on lat/lon/size/firename. - def _determineAreaList(self, argDict): - - # Size of the fire is entered as acres. - # Convert this area into square kilometers. - # createLatLonArea only needs the length of the side of a square. - size_out = int(math.sqrt(float(self._fireSize)/247.0) + 0.5) - area = self.createLatLonArea(float(self._fireLatitude), - float(0.0 - self._fireLongitude), - size_out) - # SET UP FOR HAZARDS - # Save to server - self.saveEditAreas([area]) - # Create Hazards Table for this area - hazards = HazardsTable.HazardsTable( - argDict["ifpClient"], [[area.getId().getName()]], "FWS", - self.filterMethod, argDict["databaseID"], - self._fullStationID, - activeTableName = argDict['vtecActiveTable'], - vtecMode = argDict['vtecMode'], - dataMgr=argDict['dataMgr']) - argDict["hazards"] = hazards - # Remove from server - self.deleteEditAreas([area]) - - self._areaList = [(area, self._fireName)] - -# Set the extended configuration based on user input. - def _setExtendedConfig(self): - - # Include extended forecast if wanted and allowed. - if "Include Day 3-5 Extended?" not in self._extendedQuestions and \ - "Include Day 6-7 Extended?" not in self._extendedQuestions: - if self._individualExtended == 1: - self._individualExtended = 0 - if self._summaryExtended == 1: - self._summaryExtended = 0 - self._extendedLabel = 0 - else: - if self._individualExtended == 1: - self._individualExtended = 1 - if self._summaryExtended == 1: - self._summaryExtended = 1 - self._extendedLabel = 1 - - if "Include Day 3-5 Extended?" in self._extendedQuestions: - self._includeExtendedShortTerm = 1 - else: - self._includeExtendedShortTerm = 0 - - if "Include Day 6-7 Extended?" in self._extendedQuestions: - self._includeExtended = 1 - else: - self._includeExtended = 0 - - # Add the "if conditions become unrep..." statement. - def _makeUnrepresentStatement(self, fcst, argDict): - - if self._insertUnrepresentStatement == 1: - return fcst + self._unrepresentStatement + "\n\n" - else: - return fcst - - # Place the headlines above the discussion. - def _makeHeadline(self, fcst, editArea, areaLabel, argDict): - - # get the hazards text - self._hazards = argDict['hazards'] - self._combinations = argDict["combinations"] - #hlList = tree.stats.get("Hazards", self._timeRange, areaLabel) - #print "hlList = ",hlList - headlines = self.generateProduct("Hazards", argDict, - area = editArea, areaLabel=areaLabel, - timeRange = self._timeRange) - fcst = fcst + headlines - return fcst - - # From FWF. Modified to eliminate the UGC header not needed in the FWS. - # Since Headlines are placed above the discussion...that eliminated too. - def _preProcessArea(self, fcst, editArea, areaLabel, argDict): - return fcst - - # From FWF. Modified to eliminate everything. - def _postProcessArea(self, fcst, editArea, areaLabel, argDict): - if self._individualExtended == 1: - fcst = fcst + "\n" - return fcst - - # Deal with the summary extended more cleanly. - def _makeSummaryExtended(self, fcst, argDict): - - # Add one extended - if self._summaryExtended == 1: - extended = self.generateProduct("ExtendedNarrative", - argDict, area=self._summaryArea, - timeRange=self._extendedRange) - fcst = fcst + extended - fcst = fcst + "\n" - return fcst - -# From FWS_Overrides. changes commented on the right margin. (just two lines) - - def _generateOutlookLabels(self, argDict): - - today = argDict["creationTime"] - if self._productIssuance in ["Morning", "Morning Update", "Afternoon Update", "Next Day"]: - day8 = today + 7*24*3600 - day14 = today + 13*24*3600 - dow = time.gmtime(today)[6] - if dow == 0 or dow == 2 or dow == 4: - self._insertOutlookFlag = 1 - else: - self._insertOutlookFlag = 0 - self._insertOutlookFlag = 1 - else: - currentHour = time.gmtime(today)[3] - if currentHour < 16: - day8 = today + 7*24*3600 - day14 = today + 13*24*3600 - dow = time.gmtime(today)[6] - if dow == 0 or dow == 2 or dow == 4: - self._insertOutlookFlag = 1 - else: - self._insertOutlookFlag = 0 - self._insertOutlookFlag = 1 - else: - day8 = today + 8*24*3600 - day14 = today + 14*24*3600 - dow = time.gmtime(today + 24*3600)[6] - if dow == 1 or dow == 3 or dow == 6: - self._insertOutlookFlag = 1 - else: - self._insertOutlookFlag = 0 - self._insertOutlookFlag = 1 - - self._outlookDay8Label = time.strftime("%A %B %d",time.gmtime(day8)).upper() - self._outlookDay14Label = time.strftime("%A %B %d",time.gmtime(day14)).upper() - - return None - - # Import the 8 to 14 day outlook into the product - # if the user requests it for the spot forecast. - def _make8to14DayOutlook(self, fcst, argDict): - - if "Include Day 8-14 Outlook?" not in self._extendedQuestions: - return fcst - - outlookHeader = ".OUTLOOK FOR " + self._outlookDay8Label + " THROUGH " \ - + self._outlookDay14Label + "...\n" - outlookHeader = string.upper(outlookHeader) - - if self._insertOutlookFromFile == 1: - outlook = "" - if os.path.isfile(self._outlookFile): - input = open(self._outlookFile) - text = input.readlines() - for line in text: - outlook = outlook + line - outlook = string.join(string.split(outlook,"\n\n"),"\n") - outlook = string.join(string.split(outlook,"\n\n"),"\n") - return fcst + outlookHeader + outlook + "\n" - else: - outlook = "...Put 8 to 14 day outlook text here..." - return fcst + outlookHeader + outlook + "\n\n" - elif self._insertDiscussionFromFile == 2: - version = 0 - fwfPil = self._statePil + self._fwfPil - searchString="" - product = self.getPreviousProduct(fwfPil, searchString, version=version) - product = string.split(product, "\n") - outlook = "" - outFlag = 0 - foundOutlook = 0 - for line in product: - if line[:2] == "$$": - outFlag = 0 - if outFlag: - outlook = outlook + line + "\n" - if string.find(line,".OUTLOOK") != -1: - outFlag = 1 - foundOutlook = 1 - if foundOutlook: - return fcst + outlookHeader + outlook + "\n\n" - else: - outlook = "...Put 8 to 14 day outlook text here..." - return fcst + outlookHeader + outlook + "\n\n" - else: - return fcst + outlookHeader + "\n\n\n" - - # From FWF. Modified to append the fire name and agency name to the - # product name. Modified to eliminate the discussion from method. - # Modified to include Matt Davis' enhancement (unlisted agency) - def _preProcessProduct(self, fcst, argDict): - - if self._requestingAgency == "Unlisted": - newFireName = self._fireName + "..." + self._otherAgencyName - else: - newFireName = self._fireName + "..." + self._requestingAgency - productLabel = self._productName + " for " + newFireName - - productLabel = self.checkTestMode(argDict, productLabel) - - issuedByString = self.getIssuedByString() - - # Product header - s = self._wmoID + " " + self._fullStationID + " " + \ - self._ddhhmmTime + "\n" + self._pil + "\n\n" - fcst = fcst + s.upper() - - s = productLabel + \ - "\nNational Weather Service " + self._wfoCityState + \ - "\n" + issuedByString + self._timeLabel + "\n\n" - fcst = fcst + s - - # Add time disclaimer - self._fireTR = None - if self._withIgnitionTimes == "yes" or self._tableStartTimeMode == "ignitionTime": - fcst = self._makeFcstTimeStatement(fcst, argDict) - try: - timeTup = time.strptime(self._timeLabel, '%I%M %p %Z %a %b %d %Y') - issueTime = time.mktime(timeTup) - except: - issueTime = time.time() - now = time.time() - if ((issueTime - now) < -24*3600) or ((issueTime - now) > 9*24*3600): - message = \ -'''|* The start time for this product is %s. -This is either more than a day in the past or more than 9 days -in the future. *|''' % self._timeLabel - fcst = '%s\n%s\n\n' % (fcst, message) - return fcst - - def _postProcessProduct(self, fcst, argDict): - fcst = string.join(string.split(fcst, "\n\n\n"), "\n") - forecasterString = string.join(self._forecaster,"/") - if self._webSiteTag == "": - tagLineString = "" - else: - tagLineString = ".TAG " + self._webSiteTag + "/" + self._wfoID + "\n" - fcst = fcst + "$$\nForecaster..." + forecasterString + "\n" + \ - "Requested by..." + self._agencyContact + "\n" + \ - "Type of request..." + self._fireType + "\n" + tagLineString - #self.storeAWIPS(fcst, self._awipsProductID) - self.setProgressPercentage(100) - self.progressMessage(0, 100, self._displayName + " Complete") - return fcst - -############################################################################# -# Weather Element Sampling and Phrase Configuration # -############################################################################# - - def _issuance_list(self, argDict): - narrativeDef = [] - if self._tabularAllPeriods == "yes": - phantom = "Phantom" - else: - # If we are generating a 12-hour table - # in the first period, need to have an empty - # narrative so that the sampling will get done. - phantom = "EmptyFirePeriod" - if self._productIssuance in ["Next Day", "Morning", "Morning Update", "Afternoon Update"]: - # Add the first period - if len(self._todayElements) == 0: - period = (phantom, "period1") - else: - period = ("FirePeriod1", "period1") - narrativeDef.append(period) - - if len(self._tonightElements) == 0: - period = (phantom, 12) - else: - period = ("FirePeriod2", 12) - narrativeDef.append(period) - - # Add the third period - if len(self._tomorrowElements) == 0: - period = (phantom, 12) - else: - period = ("FirePeriod3", 12) - narrativeDef.append(period) - else: - # Add the first period. - if len(self._tonightElements) == 0: - period = (phantom, "period1") - else: - period = ("FirePeriod2", "period1") - narrativeDef.append(period) - - # Add the second period - if len(self._tomorrowElements) == 0: - period = (phantom, 12) - else: - period = ("FirePeriod3", 12) - narrativeDef.append(period) - if self._productIssuance in ["Afternoon with 4 periods", - "Evening Update with 4 periods", - "Early Morning Update with 4 periods"]: - # Add the third period - if len(self._tomorrowNightElements) == 0: - period = (phantom, 12) - else: - period = ("FirePeriod4", 12) - narrativeDef.append(period) - - # Add the fourth period - if len(self._nextDayElements) == 0: - period = (phantom, 12) - else: - period = ("FirePeriod5", 12) - narrativeDef.append(period) - - # Add extended if configured to appear - if "Include Day 3-5 Extended?" in self._extendedQuestions: - if self._productIssuance in ["Next Day", "Morning", "Morning Update", "Afternoon Update"]: - extendedShortTerm = [ - ("FireExtendedShortTerm", 24), - ("FireExtendedShortTerm", 24), - ("FireExtendedShortTerm", 24), - ] - elif self._productIssuance in ["Afternoon with 4 periods", - "Evening Update with 4 periods", - "Early Morning Update with 4 periods"]: - extendedShortTerm = [ - ("FireExtendedShortTerm", 24), - ("FireExtendedShortTerm", 24), - ("FireExtendedShortTerm", 24), - ] - else: - extendedShortTerm = [ - ("FireExtendedShortTerm", 24), - ("FireExtendedShortTerm", 24), - ("FireExtendedShortTerm", 24), - ("FireExtendedShortTerm", 24), - ] - else: - if self._productIssuance in ["Next Day", "Morning", "Morning Update", "Afternoon Update"]: - extendedShortTerm = [ - ("Phantom", 24), - ("Phantom", 24), - ("Phantom", 24), - ] - elif self._productIssuance in ["Afternoon with 4 periods", - "Evening Update with 4 periods", - "Early Morning Update with 4 periods"]: - extendedShortTerm = [ - ("Phantom", 24), - ("Phantom", 24), - ("Phantom", 24), - ] - else: - extendedShortTerm = [ - ("Phantom", 24), - ("Phantom", 24), - ("Phantom", 24), - ("Phantom", 24), - ] - if "Include Day 6-7 Extended?" in self._extendedQuestions: - extended = [ - ("FireExtended", 24), - ("FireExtended", 24), - ] - else: - extended = [] - - # Combine sections - try: - if self._individualExtended == 1: - if self._extendedLabel == 1: - narrativeDef.append(("ExtendedLabel",0)) - if self._includeExtendedShortTerm or self._includeExtended: - narrativeDef = narrativeDef + extendedShortTerm - if self._includeExtended: - narrativeDef = narrativeDef + extended - except: - pass - return [ - ("Next Day", 24 + self.DAY(), 24 + self.NIGHT(), 24 + self.NIGHT(), - ".TODAY...", "early in the morning", "late in the afternoon", - 1, narrativeDef), - ("Morning", self.DAY(), self.NIGHT(), self.NIGHT(), - ".TODAY...", "early in the morning", "late in the afternoon", - 1, narrativeDef), - ("Morning Update", "issuanceHour", self.NIGHT(), self.NIGHT(), - ".REST OF TODAY...", "early in the morning", "late in the afternoon", - 1, narrativeDef), - ("Afternoon Update", "issuanceHour", self.NIGHT(), self.NIGHT(), - ".REST OF TODAY...", "early in the morning","late in the afternoon", - 1, narrativeDef), - # End times are tomorrow: - ("Afternoon", self.NIGHT(), 24 + self.DAY(), 24 + self.DAY(), - ".TONIGHT...", "late in the night", "early in the evening", - 1, narrativeDef), - ("Afternoon with 4 periods", self.NIGHT(), 24 + self.DAY(), 24 + self.DAY(), - ".TONIGHT...", "late in the night", "early in the evening", - 1, narrativeDef), - ("Evening Update", "issuanceHour", 24 + self.DAY(), 24 + self.DAY(), - ".REST OF TONIGHT...", "late in the night","early in the evening", - 1, narrativeDef), - ("Evening Update with 4 periods", "issuanceHour", 24 + self.DAY(), 24 + self.DAY(), - ".REST OF TONIGHT...", "late in the night","early in the evening", - 1, narrativeDef), - # For the early morning update, this produces: - # Rest of Tonight: - # Monday - # Monday Night - ("Early Morning Update", "issuanceHour", self.DAY(), self.DAY(), - ".REST OF TONIGHT...", "early in the morning","late in the afternoon", - 0, narrativeDef), - ("Early Morning Update with 4 periods", "issuanceHour", self.DAY(), self.DAY(), - ".REST OF TONIGHT...", "early in the morning","late in the afternoon", - 0, narrativeDef), - ] - - def FirePeriod1(self): - phraseList = self.getFirePeriod_phraseList(self._todayElements) - analysisList = self.getFirePeriod_analysisList() - intersectAreas = self.getFirePeriod_intersectAreas(1) - return { - "type": "component", - "methodList": [ - self.assembleIndentedPhrases, - ], - "analysisList": analysisList, - "phraseList": phraseList, - "intersectAreas": intersectAreas, - } - - def FirePeriod2(self): - phraseList = self.getFirePeriod_phraseList(self._tonightElements) - analysisList = self.getFirePeriod_analysisList() - intersectAreas = self.getFirePeriod_intersectAreas(2) - return { - "type": "component", - "methodList": [ - self.assembleIndentedPhrases, - ], - "analysisList": analysisList, - "phraseList": phraseList, - "intersectAreas": intersectAreas, - } - - def FirePeriod3(self): - phraseList = self.getFirePeriod_phraseList(self._tomorrowElements) - analysisList = self.getFirePeriod_analysisList() - intersectAreas = self.getFirePeriod_intersectAreas(3) - return { - "type": "component", - "methodList": [ - self.assembleIndentedPhrases, - ], - "analysisList": analysisList, - "phraseList": phraseList, - "intersectAreas": intersectAreas, - } - - def FirePeriod4(self): - phraseList = self.getFirePeriod_phraseList(self._tomorrowNightElements) - analysisList = self.getFirePeriod_analysisList() - intersectAreas = self.getFirePeriod_intersectAreas(4) - return { - "type": "component", - "methodList": [ - self.assembleIndentedPhrases, - ], - "analysisList": analysisList, - "phraseList": phraseList, - "intersectAreas": intersectAreas, - } - - def FirePeriod5(self): - phraseList = self.getFirePeriod_phraseList(self._nextDayElements) - analysisList = self.getFirePeriod_analysisList() - intersectAreas = self.getFirePeriod_intersectAreas(5) - return { - "type": "component", - "methodList": [ - self.assembleIndentedPhrases, - ], - "analysisList": analysisList, - "phraseList": phraseList, - "intersectAreas": intersectAreas, - } - - def EmptyFirePeriod(self): - phraseList = [] - analysisList = self.getFirePeriod_analysisList() - intersectAreas = self.getFirePeriod_intersectAreas(1) - return { - "type": "component", - "methodList": [ - self.assembleIndentedPhrases, - ], - "analysisList": analysisList, - "phraseList": phraseList, - "intersectAreas": intersectAreas, - } - - def PreFirePeriod1(self): - analysisList = self.getFirePeriod_analysisList() - intersectAreas = self.getFirePeriod_intersectAreas(1) - return { - "type": "component", - "methodList": [self.noWords], - "analysisList": analysisList, - "phraseList": [], - "intersectAreas": intersectAreas, - } - - def createLabel(self, tree, node, timeRange, issuanceInfo, currentLocalTime, shift, index=0): - # Make a label given the timeRange in GMT and the shift to - # convert it to local time. currentLocalTime can be used to - # compare to current day. - if timeRange.duration() <= 3600: - return "" - - curLocal, shift = self.determineTimeShift() - if index == 0 and self._equalDates(currentLocalTime, curLocal): - try: - label = issuanceInfo.period1Label() - if label != "": - return label + "\n" - except: - pass - try: - today = issuanceInfo.todayFlag() - except: - today = 1 - try: - useHolidays = self._useHolidays - except: - useHolidays = 1 - nextDay24HourLabel = self.nextDay24HourLabel_flag(tree, node) - splitDay24HourLabel = self.splitDay24HourLabel_flag(tree, node) - label = self.getWeekday(timeRange, holidays=useHolidays, shiftToLocal=1, - labelType="CapitalWithPeriod", today=today, - tomorrow=0, nextDay24HourLabel=nextDay24HourLabel, - splitDay24HourLabel=splitDay24HourLabel) - return label + "\n" - - def _equalDates(self, t1, t2): - # If AbsTimes t1 and t2 represent the same day, month, year - # return 1 else 0 - d1 = t1.day - d2 = t2.day - m1 = t1.month - m2 = t2.month - y1 = t1.year - y2 = t2.year - if d1==d2 and m1==m2 and y1==y2: - return 1 - else: - return 0 - - def increment_nlValue_dict(self, tree, node): - # Increment for rounding values - # Units depend on the product - dict = TextRules.TextRules.increment_nlValue_dict(self, tree, node) - dict["Wind"] = 1 - dict["Wind20ft"] = 1 - dict["TransWind"] = 1 - dict["CWR"] = 1 - dict["QPF"] = .0001 - dict["Vsby"] = .01 - return dict - - def scalar_difference_nlValue_dict(self, tree, node): - # Scalar difference. If the difference between scalar values - # for 2 sub-periods is greater than this value, - # the different values will be noted in the phrase. - dict = TextRules.TextRules.scalar_difference_nlValue_dict(self, tree, node) - dict["Vsby"] = { - (0.00,1.00) : 0.25, - (1.00,3.00) : 0.50, - (3.00,5.00) : 1.00, - "default" : 2.00, - } - dict["PredHgt"] = { - (0,10) : 1, - (10,30) : 5, - (30,100) : 10, - "default" : 25, - } - dict["Td"] = 5 - dict["PoP"] = 10 - return dict - - def getFirePeriod_phraseList(self, periodElements): - phraseList = [] - if self._forecastType in ["Tabular/Narrative"]: - # Figure out which narrative phrases should be included - narratives = [] - tableElements = [] - for rowElement, narrativeToo, tableRows in self._rowList(): - tableElements.append(rowElement) - if narrativeToo: - narratives.append(rowElement) - if self._forecastType in ["Narrative Only", "Tabular/Narrative"]: - for elementId in periodElements: - for element, default, phrases, searchStrings in self._weInfoList(): - if elementId == element: - if self._forecastType == "Tabular/Narrative": - if elementId in tableElements and elementId not in narratives: - break - if type(phrases) is not types.ListType: - phrases = [phrases] - phraseList += phrases - if self._forecastType in ["Tabular/Narrative", "Tabular Only"]: - phraseList.append(self._fwsTable_phrase) - return phraseList - - # From FWS_Overrides. Added one hourly sampling for T and RH. - # This sampling is used for the ignition time forecasts. - def getFirePeriod_analysisList(self): - if self._forecastType in ["Tabular/Narrative", "Tabular Only"] or \ - self._withIgnitionTimes == "yes": - analysisList = [ - ("Sky", self.median, [1]), - ("Wx", self.rankedWx, [1]), - ("PoP", self.stdDevMaxAvg, [1]), - ("PoP", self.binnedPercent, [1]), - ("LAL", self.maximum, [1]), - ("LAL", self.binnedPercent, [1]), - ("MaxT", self.moderatedMinMax), - ("MinT", self.moderatedMinMax), - ("MaxRH", self.moderatedMinMax), - ("MinRH", self.moderatedMinMax), - ("RH", self.avg, [1]), - ("RH", self.moderatedMinMax), - ("MaxT", self.avg), # for trends - ("MinT", self.avg), # for trends - ("MaxRH", self.avg), # for trends - ("MinRH", self.avg), # for trends - ("RH", self.avg), # for trends - ("T", self.avg, [1]), - ("T", self.hourlyTemp), - ("T", self.minMax), - ("Td", self.avg, [1]), - ("Td", self.hourlyTemp), - ("Td", self.minMax), - ("Wind", self.vectorMinMax, [1]), - ("WindGust", self.maximum, [1]), - ("Wind20ft", self.vectorMinMax, [1]), - ("Haines", self.maximum, [1]), - ("TransWind", self.vectorAvg, [1]), - ("FreeWind", self.vectorAvg, [1]), - ("MixHgt", self.moderatedMin, [1]), - ("VentRate", self.minMax, [1]), - ("DSI", self.maximum,[1]), - ("LDSI", self.maximum,[1]), - ("LVORI", self.maximum,[1]), - ("ADI", self.maximum,[1]), - ("CWR", self.maximum, [1]), - ("Stability", self.maximum, [1]), - ("MarineLayer", self.maximum, [1]), - ("Swell", self.vectorMinMax, [1]), - ("Period", self.maximum, [1]), - ("WindWaveHgt", self.maximum, [1]), - ("WaveHeight", self.maximum, [1]), - ("QPF", self.accumSum, [6]), - ("SnowAmt", self.accumSum, [6]), - ("FzLevel", self.median, [1]), - ("Hazards", self.dominantDiscreteValue, [1]), - ("Vsby", self.minimum, [1]), - ("PredHgt", self.minimum, [1]), - ("HeatIndex", self.maximum, [1]), - ("ApparentT", self.maximum, [1]), - ] - else: - analysisList = [ - ("Sky", self.median, [6]), - ("PoP", self.stdDevMaxAvg, [6]), - ("PoP", self.binnedPercent, [6]), - ("Wx", self.rankedWx, [6]), - ("LAL", self.maximum, [12]), - ("LAL", self.binnedPercent, [0]), - ("MaxT", self.moderatedMinMax), - ("MinT", self.moderatedMinMax), - ("MaxRH", self.moderatedMinMax), - ("MinRH", self.moderatedMinMax), - ("RH", self.avg, [1]), - ("RH", self.moderatedMinMax), - ("MaxT", self.avg), # for trends - ("MinT", self.avg), # for trends - ("MaxRH", self.avg), # for trends - ("MinRH", self.avg), # for trends - ("RH", self.avg), # for trends - ("T", self.avg, [1]), - ("T", self.hourlyTemp), - ("T", self.minMax), - ("Td", self.avg, [1]), - ("Td", self.hourlyTemp), - ("Td", self.minMax), - ("Wind", self.vectorMinMax, [6]), - ("WindGust", self.maximum, [6]), - ("Wind20ft", self.vectorMinMax, [6]), - ("Haines", self.maximum), - ("TransWind", self.vectorAvg, [12]), - ("FreeWind", self.vectorAvg, [12]), - ("MixHgt", self.moderatedMin, [1]), - ("VentRate", self.minMax), - ("CWR", self.maximum), - ("DSI", self.maximum,[12]), - ("LDSI", self.maximum,[12]), - ("LVORI", self.maximum,[12]), - ("ADI", self.maximum,[12]), - ("Stability", self.maximum), - ("MarineLayer", self.maximum), - ("Swell", self.vectorMinMax, [6]), - ("Period", self.maximum, [6]), - ("WindWaveHgt", self.maximum, [6]), - ("WaveHeight", self.maximum, [6]), - ("QPF", self.accumMinMax, [6]), - ("SnowAmt", self.accumMinMax, [6]), - ("FzLevel", self.median, [6]), - ("Hazards", self.dominantDiscreteValue), - ("Vsby", self.minimum, [6]), - ("PredHgt", self.minimum, [6]), - ("HeatIndex", self.maximum, [6]), - ("ApparentT", self.maximum, [6]), - ] - return analysisList - - def getFirePeriod_intersectAreas(self, periodNum): - return [] - - # From ConfigVariables. - - def phrase_descriptor_dict(self, tree, node): - dict = TextRules.TextRules.phrase_descriptor_dict(self, tree, node) - if self._wind20ftHeader: - dict["WIND.(20 FT)........"]="Wind (20 ft)........" - dict["20-foot winds......."]=" Slope/valley......." - dict["Free winds.........."]=" Ridgetop..........." - dict["Surrounding ridge..."]=" Surrounding ridge.." - else: - dict["20-foot winds......."]="Wind (20 ft)........" - dict["Free winds.........."]="Ridgetop wind......." - dict["Surrounding ridge..."]="Surrounding ridge..." - dict["Eye level winds....."]="Eye level winds....." - dict["Surface winds......."]="Surface winds......." - dict["Wind shift.........."]="Wind shift.........." - if self._transportWindLabel == "mix": - dict["Transport winds....."]="Mixing winds........" - else: - dict["Transport winds....."]="Transport winds....." - dict["CWR................."]="CWR................." - dict["DSI................."]="Dispersion.........." - dict["LDSI................"]="Dispersion index...." - dict["LVORI..............."]="LVORI..............." - dict["ADI................."]="ADI................." - dict["POP................."]="Chance of pcpn......" - dict["Dewpoint............"]="Dewpoint............" - dict["Begin/end of pcpn..."]="Begin/end of pcpn..." - dict["Stability class....."]="Stability class....." - dict["Wind wave..........."]="Wind wave..........." - dict["Rainfall amount....."]="Rainfall amount....." - dict["Snowfall amount....."]="Snowfall amount....." - dict["Swell period........"]="Swell period........" - dict["Swell height........"]="Swell height........" - dict["Freezing level......"]="Freezing level......" - dict["Ceiling............."]="Ceiling............." - dict["Visibility.........."]="Visibility.........." - dict["Icing..............."]="Icing..............." - dict["Heat index.........."]="Heat index.........." - dict["erraticWind"]="gusty and erratic winds expected near thunderstorms" - if self._withIgnitionTimes == "yes": - dict["MinT_FireWx"]="Temperature........." - dict["MaxT_FireWx"]="Temperature........." - dict["MinRH_FireWx"]="RH.................." - dict["MaxRH_FireWx"]="RH.................." - return dict - - # From FirePhrases. Changed to eliminate the area test. Thus, - # this label will appear even though there is no ridgetop wind. - def fireWind_label_setUp(self, tree, node): - self.setWords(node, "") - node.set("descriptor", "") - node.set("indentLabel", "WIND.(20 FT)........") - return self.DONE() - - # The methods below this line override baseline - # methods to accomodate ignition times. - # They were derived by Tracy Hansen from code originally - # from Matt Davis and renamed by Virgil Middendorf. - # The last two methods were created by Matt Davis to - # check and make time ranges for the ignition time forecasts. - - def fire_dayOrNight_words(self, tree, node): - # Temp or RH elements - elementName = node.getAncestor("elementName") - statDict = node.getStatDict() - if elementName == "MaxT" or elementName == "MinT": - stats = self.getTempStats(tree, node) - if stats is None: - return self.setWords(node.parent, "MISSING") - connector = self.value_connector(tree, node, elementName, elementName) - igWords = `int(self.getValue(stats, "avg"))` - words = self.getTempRangePhrase(tree, node, stats, elementName) - else: # MinRH, MaxRH or RH - stats = self.getStats(statDict, elementName) - if stats is None: - return self.setWords(node.parent, "MISSING") - connector = self.value_connector(tree, node, elementName, elementName) - igWords = `int(self.getValue(stats, "avg"))` - min, max = self.getValue(stats, "MinMax") - if min > 100: - min = 100 - if max > 100: - max = 100 - if min == max: - words = `int(min)` - else: - words = `int(min)` + connector + `int(max)` - outUnits = self.element_outUnits(tree, node, elementName, elementName) - units = self.units_descriptor(tree, node,"units", outUnits) - words = words + units - igWords = igWords + units - - # Add ignition element if applicable - if self._withIgnitionTimes == "yes": - dayNight = self.getPeriod(node.getTimeRange(), 1) - if dayNight == self.DAYTIME(): - tempElement = "Max" - rhElement = "Min" - else: - tempElement = "Min" - rhElement = "Max" - if elementName == "MaxT" or elementName == "MinT": - ignitionElement = "T" - elementType = tempElement - else: - ignitionElement = "RH" - elementType = rhElement - if self._checkFireTR(node.getTimeRange()): - ignitionStats = tree.stats.get( - ignitionElement, self._fireTR, node.getAreaLabel(), mergeMethod="Max") - if ignitionStats is not None: - ignitionPhrase = `int(self.getValue(ignitionStats))` - reqType = self._getRequestWords() - words = ignitionPhrase + units + " at " + reqType + "..." + elementType + " " + igWords - else: - words = elementType + " " + igWords - else: - words = elementType + " " + igWords - return self.setWords(node, words) - - def fireWind_compoundPhrase(self): - return { - "phraseList": [ - self.wind_summary, - #self.wind_phrase, - self.wind_withGusts_phrase, - self.erraticWind_phrase - ], - "phraseMethods": [ - self.assembleSentences, - self.fireWind_finishUp - ], - } - - def fireWind_finishUp(self, tree, node): - "Create a phrase for Winds" - if self.currentAreaContains( - tree, self.ridgeValleyAreas(tree, node)) == 1: - return self.setWords(node, "") - words = node.get("words") - if words is None: - return - if words == "": - words = "MISSING" - - # Add ignitionTime if appropriate - igWords = "" - if self._checkFireTR(node.getTimeRange()): - ignitionWindStats = tree.stats.get( - "Wind", self._fireTR, node.getAreaLabel(), mergeMethod="Max") - if ignitionWindStats is not None: - igMagStr = `int(ignitionWindStats[0])` - igDirStr = self.vector_dir(int(ignitionWindStats[1])) - reqType = self._getRequestWords() - igWords = "Winds " + igDirStr + " at " + igMagStr + " mph at " + reqType + ", otherwise " - - words = igWords + words - node.set("descriptor", "") - node.set("indentLabel", "20-foot winds.......") - node.set("compound", 1) - return self.setWords(node, words) - - def fireSfcWind_compoundPhrase(self): - return { - "phraseList": [ - self.wind_summary, - self.wind_phrase, - ], - "phraseMethods": [ - self.consolidateSubPhrases, - self.assembleSentences, - self.fireSfcWind_finishUp - ], - } - - def fireSfcWind_finishUp(self, tree, node): - "Create a phrase for Winds" - # Empty phrase if doing ridge/valley winds - if self.currentAreaContains( - tree, self.ridgeValleyAreas(tree, node)) == 1: - return self.setWords(node, "") - words = node.get("words") - if words is None: - return - if words == "": - words = "MISSING" - node.set("descriptor", "") - node.set("indentLabel", "Surface winds.......") - node.set("compound", 1) - return self.setWords(node, words) - - def erraticWind_phrase(self): - return { - "setUpMethod": self.erraticWind_setUp, - "wordMethod": self.erraticWind_words, - "phraseMethods": [ - self.preProcessWx, - self.combineWords, - self.fillNulls, - self.timeDescriptorModeration, - self.assembleSubPhrases, - self.postProcessPhrase, - ], - } - - def erraticWind_setUp(self, tree, node): - elementInfoList = [self.ElementInfo("Wx", "List", self.WEATHER())] - self.subPhraseSetUp(tree, node, elementInfoList, self.wxConnector) - # Set this flag used by the "checkWeatherSimilarity" method - node.set("noIntensityCombining", 1) - self.determineSevereTimeDescriptors(tree, node) - return self.DONE() - - def erraticWind_words(self, tree, node): - # If T is in the Wx grids, then produce phrase. - # Wx Statistics: rankedWx - - statDict = node.getStatDict() - rankList = self.getStats(statDict, "Wx") - if rankList is None or len(rankList) == 0: - return self.setWords(node, "") - # Check against PoP - #rankList = self.checkPoP(tree, node, rankList) - subkeyList = self.getSubkeys(rankList) - - severe = 0 - thunder = 0 - attrTextList = [] - for subkey in subkeyList: - wxType = subkey.wxType() - if wxType == "T": - thunder = 1 - intensity = subkey.intensity() - if intensity == "+": - severe = 1 - wxDef = subkey.wxDef() - for attr in subkey.attributes(): - if attr in ["Primary", "Mention", "Dry"]: - continue - attrText = wxDef.attributeDesc(subkey.wxType(), attr).lower() - if attrText not in attrTextList: - attrTextList.append(attrText) - - if thunder == 0: - return self.setWords(node, "") - words = self.phrase_descriptor(tree, node, "erraticWind", "Wx") - - return self.setWords(node, words) - - def smokeDispersal_words(self, tree, node): - "Create phrase for Smoke Dispersal" - statDict = node.getStatDict() - stats = self.getStats(statDict, "VentRate") - if stats is None: - return self.setWords(node.parent, "MISSING") - - if self._checkFireTR(node.getTimeRange()): - # Handle phrase if including ignition time - minVal, maxVal = self.getValue(stats, "MinMax") - dayNight = self.getPeriod(node.getTimeRange(), 1) - if dayNight == self.DAYTIME(): - vr = int(maxVal) - ventType = "Max" - mergeMethod = "Max" - else: - vr = int(minVal) - ventType = "Min" - mergeMethod = "Min" - vrCat = self.smokeDispersal_valueStr(vr) - words = ventType + "..." + vrCat + " " + " /" + `vr` + " knot-ft/" - reqType = self._getRequestWords() - ignitionDispersal = tree.stats.get( - "VentRate", self._fireTR, node.getAreaLabel(), mergeMethod=mergeMethod) - vrCat = self.smokeDispersal_valueStr(ignitionDispersal) - igWords = vrCat + " /" + `int(ignitionDispersal)` + " knot-ft/ at " + reqType + ". \n" - words = igWords + " " + words - else: - # Handle phrase with range if not including ignition time - vr1, vr2 = self.getValue(stats, "MinMax") - vr1 = int(vr1) - vr2 = int(vr2) - vrCat1 = self.smokeDispersal_valueStr(vr1) - vrCat2 = self.smokeDispersal_valueStr(vr2) - # Single Value input - if vr1 == vr2: - words = vrCat1 + " (" + `vr1` + " knot-ft)" - # Range - else: - words = vrCat1 + " to " + vrCat2 + " (" + `vr1` + "-" + \ - `vr2` + " knot-ft)" - return self.setWords(node, words) - - # SMOKE DISPERSAL CATEGORIES - def smokeDispersal_valueStr(self, value): - "Convert smoke dispersal value to corresponding category" - - if value < 13000 : - return "poor" - - if value >= 13000 and value < 30000: - return "fair" - - if value >= 30000 and value < 60000 : - return "good" - - if value >= 60000 : - return "excellent" - - ### MixHgt - def mixingHgt_words(self, tree, node): - "Create phrase for Mixing Height" - - statDict = node.getStatDict() - stats = self.getStats(statDict, "MixHgt") - if stats is None: - return self.setWords(node.parent, "MISSING") - - mix1, mix2 = self.getValue(stats, "MinMax") - outUnits = self.element_outUnits(tree, node, "MixHgt", "MixHgt") - mix1 = int(mix1) - mix2 = int(mix2) - threshold = self.nlValue(self.null_nlValue( - tree, node, "MixHgt", "MixHgt"), max) - if int(mix1) < threshold and int(mix2) < threshold: - return self.setWords(node, "null") - - # Single Value input - if mix1 == mix2: - words = `mix1` + " " + outUnits + " AGL" - # Range - else: - words = `mix1`+ "-" + `mix2` + " " + outUnits + " AGL" - - # Handle ignition time - if self._checkFireTR(node.getTimeRange()): - reqType = self._getRequestWords() - ignitionMixStats = tree.stats.get( - "MixHgt", self._fireTR, node.getAreaLabel(), mergeMethod="Max") - igWords = `int(ignitionMixStats)` + " " + outUnits + " AGL at " + reqType +", otherwise " - words = igWords + words - - return self.setWords(node, words) - - def adi_phrase(self): - return { - "setUpMethod": self.adi_setUp, - "wordMethod": self.adi_words, - "phraseMethods": self.standard_phraseMethods(), - } - - def adi_setUp(self, tree, node): - elementInfoList = [self.ElementInfo("ADI", "List")] - self.subPhraseSetUp(tree, node, elementInfoList, self.scalarConnector) - node.set("descriptor", "") - node.set("indentLabel", "ADI.................") - return self.DONE() - - def adi_words(self, tree, node): - statDict = node.getStatDict() - adi = self.getStats(statDict, "ADI") - if adi is None: - return self.setWords(node.parent, "MISSING") - adi = self.getValue(adi) - words = `int(adi + 0.5)` - return self.setWords(node, words) - - def haines_words(self, tree, node): - "Create phrase for Haines Index" - statDict = node.getStatDict() - stats = self.getStats(statDict, "Haines") - if stats is None: - return self.setWords(node.parent, "MISSING") - - # Handle ignition time - ignitionFlag = 0 - if self._checkFireTR(node.getTimeRange()): - haines1 = int(self.getValue(stats, "Max")) - ignitionStats = tree.stats.get("Haines", self._fireTR, node.getAreaLabel(), - mergeMethod="Max") - if ignitionStats is not None: - ignitionPhrase = `int(self.getValue(ignitionStats))` - #print "Haines ignitionStats", ignitionStats - reqType = self._getRequestWords() - hainesDict = self.hainesDict() - words = ignitionPhrase + " " + hainesDict[int(ignitionPhrase)] + \ - " at " + reqType + "...max " + `haines1` - ignitionFlag = 1 - if not ignitionFlag: - haines1, haines2 = self.getValue(stats, "MinMax") - hainesDict = self.hainesDict() - haines1 = int(haines1) - haines2 = int(haines2) - words1 = hainesDict[haines1] - words2 = hainesDict[haines2] - - # Single Value input - if haines1 == haines2: - words = `haines1` + " " + words1 - # Range - else: - if words1 == words2: - words = words1 - else: - words = words1 + " to " + words2 - words = `haines1` + " to " + `haines2` + " OR " + words - return self.setWords(node, words) - - def cwr_words(self, tree, node): - # Handle ignition time - if self._checkFireTR(node.getTimeRange()): - cwr = tree.stats.get(self._cwrParm, self._fireTR, node.getAreaLabel(), mergeMethod="Max") - else: - cwr = tree.stats.get(self._cwrParm, node.getTimeRange(), node.getAreaLabel(), mergeMethod="Max") - if cwr is None: - return self.setWords(node.parent, "MISSING") - cwr = self.getValue(cwr) - threshold = self.nlValue(self.null_nlValue(tree, node, "CWR", "CWR"), cwr) - if int(cwr) < threshold: - return self.setWords(node, "null") - else: - words = `int(cwr)` + " percent" - return self.setWords(node, words) - - def windWave_phrase(self): - return { - "setUpMethod": self.windWave_setUp, - "wordMethod": self.windWave_words, - "phraseMethods": self.standard_phraseMethods(), - } - - def windWave_setUp(self, tree, node): - elementInfoList = [self.ElementInfo("WindWaveHgt", "List")] - self.subPhraseSetUp(tree, node, elementInfoList, self.scalarConnector) - node.set("descriptor", "") - node.set("indentLabel", "Wind wave...........") - return self.DONE() - - def windWave_words(self, tree, node): - "Create phrase Wind Wave" - statDict = node.getStatDict() - height = self.getValue(self.getStats(statDict, "WindWaveHgt"), "Max") - if height is None: - return self.setWords(node.parent, "MISSING") - words = `int(height + 0.5)` + " FEET" - return self.setWords(node, words) - - def waveHeight_phrase(self): - return { - "setUpMethod": self.waveHeight_setUp, - "wordMethod": self.waveHeight_words, - "phraseMethods": self.standard_phraseMethods(), - } - - def waveHeight_setUp(self, tree, node): - elementInfoList = [self.ElementInfo("WaveHeight", "List")] - self.subPhraseSetUp(tree, node, elementInfoList, self.scalarConnector) - node.set("descriptor", "") - node.set("indentLabel", "WAVE HEIGHT.........") - return self.DONE() - - def waveHeight_words(self, tree, node): - "Create phrase Wind Wave" - statDict = node.getStatDict() - height = self.getValue(self.getStats(statDict, "WaveHeight"), "Max") - if height is None: - return self.setWords(node.parent, "MISSING") - words = `int(height + 0.5)` + " FEET" - return self.setWords(node, words) - - def qpf_phrase(self): - return { - "setUpMethod": self.qpf_setUp, - "wordMethod": self.qpf_words, - "phraseMethods": self.standard_phraseMethods(), - } - - def qpf_setUp(self, tree, node): - elementInfoList = [self.ElementInfo("QPF", "List")] - self.subPhraseSetUp(tree, node, elementInfoList, self.scalarConnector) - node.set("descriptor", "") - node.set("indentLabel", "Rainfall amount.....") - return self.DONE() - - def qpf_words(self, tree, node): - "Create phrase QPF" - statDict = node.getStatDict() - qpf = self.getValue(self.getStats(statDict, "QPF"), "Max") - if qpf is None: - return self.setWords(node.parent, "MISSING") - if qpf == 0.0: - qpfWords = "0.00" - else: - qpf = qpf + 0.005 - qpfWords = string.strip("%5.2f" % qpf) - words = qpfWords + " INCHES" - return self.setWords(node, words) - - def period_phrase(self): - return { - "setUpMethod": self.period_setUp, - "wordMethod": self.period_words, - "phraseMethods": self.standard_phraseMethods(), - } - - def period_setUp(self, tree, node): - elementInfoList = [self.ElementInfo("Period", "List")] - self.subPhraseSetUp(tree, node, elementInfoList, self.scalarConnector) - node.set("descriptor", "") - node.set("indentLabel", "Swell period........") - return self.DONE() - - def period_words(self, tree, node): - "Create phrase Swell Period" - statDict = node.getStatDict() - period = self.getValue(self.getStats(statDict, "Period"), "Max") - if period is None: - return self.setWords(node.parent, "MISSING") - words = `int(period + 0.5)` + " SECONDS" - return self.setWords(node, words) - - def swell_phrase(self): - return { - "setUpMethod": self.swell_setUp, - "wordMethod": self.swell_words, - "phraseMethods": self.standard_vector_phraseMethods(), - } - - def swell_setUp(self, tree, node): - elementInfoList = [self.ElementInfo("Swell", self.VECTOR())] - self.subPhraseSetUp(tree, node, elementInfoList, self.vectorConnector) - node.set("descriptor", "") - node.set("indentLabel", "Swell height........") - return self.DONE() - - def swell_words(self, tree, node): - "Create phrase Swell Height" - statDict = node.getStatDict() - stats = self.getStats(statDict, "Swell") - if stats is None: - return self.setWords(node, "") - height, dir = self.getValue(stats, "Max", self.VECTOR()) - if height is None: - return self.setWords(node.parent, "MISSING") - if dir >= 22.5 and dir < 67.5: - dirWords = "northeast" - elif dir >= 67.5 and dir < 112.5: - dirWords = "east" - elif dir >= 112.5 and dir < 157.5: - dirWords = "southeast" - elif dir >= 157.5 and dir < 202.5: - dirWords = "south" - elif dir >= 202.5 and dir < 247.5: - dirWords = "southwest" - elif dir >= 247.5 and dir < 292.5: - dirWords = "west" - elif dir >= 292.5 and dir < 337.5: - dirWords = "northwest" - else: - dirWords = "north" - heightWords = `int(height + 0.5)` - words = dirWords + " swell " + heightWords + " feet" - return self.setWords(node, words) - - def ceiling_phrase(self): - return { - "setUpMethod": self.ceiling_setUp, - "wordMethod": self.ceiling_words, - "phraseMethods": self.standard_phraseMethods(), - } - - def ceiling_setUp(self, tree, node): - elementInfoList = [self.ElementInfo("PredHgt", "List")] - self.subPhraseSetUp(tree, node, elementInfoList, self.scalarConnector) - node.set("descriptor", "") - node.set("indentLabel", "Ceiling (kft).......") - return self.DONE() - - def ceiling_words(self, tree, node): - "Create phrase Visibility" - statDict = node.getStatDict() - hgt = self.getValue(self.getStats(statDict, "PredHgt"), "Min") - if hgt is None: - return self.setWords(node.parent, "MISSING") - hgt = hgt / 10.0 - if hgt == 0.0: - hgtWords = "less than 0.1" - else: - if hgt < 10: - hgtWords = string.strip("%5.1f" % hgt) - else: - hgtWords = `int(hgt + 0.5)` - words = hgtWords - return self.setWords(node, words) - - def visibility_phrase(self): - return { - "setUpMethod": self.visibility_setUp, - "wordMethod": self.visibility_words, - "phraseMethods": self.standard_phraseMethods(), - } - - def visibility_setUp(self, tree, node): - elementInfoList = [self.ElementInfo("Vsby", "List")] - self.subPhraseSetUp(tree, node, elementInfoList, self.scalarConnector) - node.set("descriptor", "") - node.set("indentLabel", "Visibility (sm).....") - return self.DONE() - - def visibility_words(self, tree, node): - "Create phrase Visibility" - statDict = node.getStatDict() - vis = self.getValue(self.getStats(statDict, "Vsby"), "Min") - if vis is None: - return self.setWords(node.parent, "MISSING") - if vis == 0.0: - visWords = "0.0" - else: - if vis < 3: - visWords = string.strip("%5.2f" % vis) - else: - visWords = `int(vis + 0.5)` - words = visWords - return self.setWords(node, words) - - def icing_phrase(self): - return { - "setUpMethod": self.icing_setUp, - "phraseMethods": [self.postProcessPhrase], - } - - def icing_setUp(self, tree, node): - self.setWords(node, "") - node.set("descriptor", "") - node.set("indentLabel", "Icing...............") - return self.DONE() - - def freezingLevel_phrase(self): - return { - "setUpMethod": self.freezingLevel_setUp, - "wordMethod": self.freezingLevel_words, - "phraseMethods": self.standard_phraseMethods(), - } - - def freezingLevel_setUp(self, tree, node): - elementInfoList = [self.ElementInfo("FzLevel", "List")] - self.subPhraseSetUp(tree, node, elementInfoList, self.scalarConnector) - node.set("descriptor", "") - node.set("indentLabel", "Freezing level......") - return self.DONE() - - def freezingLevel_words(self, tree, node): - "Create phrase for Freezing Level" - - statDict = node.getStatDict() - stats = self.getStats(statDict, "FzLevel") - if stats is None: - return self.setWords(node.parent, "MISSING") - - mix1, mix2 = self.getValue(stats, "MinMax") - outUnits = self.element_outUnits(tree, node, "FzLevel", "FzLevel") - mix1 = int(mix1) - mix2 = int(mix2) - threshold = self.nlValue(self.null_nlValue( - tree, node, "FzLevel", "FzLevel"), max) - if int(mix1) < threshold and int(mix2) < threshold: - return self.setWords(node, "null") - - # Single Value input - if mix1 == mix2: - words = `mix1` + " " + outUnits - # Range - else: - words = `mix1`+ "-" + `mix2` + " " + outUnits - - # Handle ignition time - if self._checkFireTR(node.getTimeRange()): - reqType = self._getRequestWords() - ignitionMixStats = tree.stats.get( - "FzLevel", self._fireTR, node.getAreaLabel(), mergeMethod="Max") - igWords = `int(ignitionMixStats)` + " " + outUnits + " at " + reqType +", otherwise " - words = igWords + words - - return self.setWords(node, words) - - def snow_phrase(self): - return { - "setUpMethod": self.snow_setUp, - "wordMethod": self.snow_words, - "phraseMethods": self.standard_phraseMethods(), - } - - def snow_setUp(self, tree, node): - elementInfoList = [self.ElementInfo("SnowAmt", "List")] - self.subPhraseSetUp(tree, node, elementInfoList, self.scalarConnector) - node.set("descriptor", "") - node.set("indentLabel", "Snowfall amount.....") - return self.DONE() - - def snow_words(self, tree, node): - "Create phrase Snow" - statDict = node.getStatDict() - snow = self.getValue(self.getStats(statDict, "SnowAmt"), "Max") - if snow is None: - return self.setWords(node.parent, "MISSING") - if snow == 0.0: - snowWords = "0.0" - else: - snow = snow + 0.05 - snowWords = string.strip("%5.1f" % snow) - words = snowWords + " INCHES" - return self.setWords(node, words) - - def heatIndex_phrase(self): - return { - "setUpMethod": self.heatIndex_setUp, - "wordMethod": self.heatIndex_words, - "phraseMethods": self.standard_phraseMethods(), - } - - def heatIndex_setUp(self, tree, node): - elementInfoList = [self.ElementInfo("HeatIndex", "List")] - self.subPhraseSetUp(tree, node, elementInfoList, self.scalarConnector) - node.set("descriptor", "") - node.set("indentLabel", "Heat index..........") - return self.DONE() - - def heatIndex_words(self, tree, node): - "Create phrase Td" - statDict = node.getStatDict() - hi = self.getValue(self.getStats(statDict, "HeatIndex"), "Max") - if hi is None: - return self.setWords(node.parent, "MISSING") - words = `int(hi)` - return self.setWords(node, words) - - ### Methods for Spot Table ### - - def _fwsTable_phrase(self): - return { - "setUpMethod": self._fwsTable_setUp, - "wordMethod": self._fwsTable_words, - "phraseMethods": [ - self.assembleChildWords, - ], - } - - def _fwsTable_setUp(self, tree, node): - elementInfoList = [] - self.subPhraseSetUp(tree, node, elementInfoList, self.scalarConnector) - node.set("descriptor", "") - return self.DONE() - - def _fwsTable_words(self, tree, node): - # See if we're doing a table for this time period - tableVars = self._determineTableVars(tree, node) - if tableVars is None: - return self.setWords(node, "") - timeRangeList, statList, colWidth, header, elements = tableVars - #print "header", header - #print "colWidth", colWidth - #print "timeRangeList" - #for tr, label in timeRangeList: - # print tr, label - words = header - argList = [tree, node, colWidth] - for rowElement, narrativeToo, tableRows in self._rowList(colWidth): - if rowElement not in elements: - continue - for label, method in tableRows: - # Call makeRow adding to words - words += self.makeRow( - label, colWidth, timeRangeList, statList, - method, argList, justify="l") - return self.setWords(node, words) - - def _determineTableVars(self, tree, node): - # Make timeRangeList, empty statList, colWidth, and header - - # Get table resolution (period) based on today, tonight, tomorrow - componentName = node.getComponentName() - period = None - - if self._productIssuance in ["Afternoon with 4 periods", - "Evening Update with 4 periods", - "Early Morning Update with 4 periods"]: - tablePeriodList = [ - ("FirePeriod1", self._todayTableRes, self._todayElements), - ("FirePeriod2", self._tonightTableRes, self._tonightElements), - ("FirePeriod3", self._tomorrowTableRes, self._tomorrowElements), - ("FirePeriod4", self._tomorrowNightTableRes, self._tomorrowNightElements), - ("FirePeriod5", self._nextDayTableRes, self._nextDayElements), - ] - else: - tablePeriodList = [ - ("FirePeriod1", self._todayTableRes, self._todayElements), - ("FirePeriod2", self._tonightTableRes, self._tonightElements), - ("FirePeriod3", self._tomorrowTableRes, self._tomorrowElements), - ] - - for name, variable, elements in tablePeriodList: - if componentName == name: - period = variable - tableElements = elements - if period is None or period == "None": - # No table for this component - return None - - # Determine colWidth given the period - colWidth = 4 - for hrs, colWidth in self._colWidths(): - if period == hrs: - break - - # Determine Time Ranges over which to create table - fireTimeZone = self._getActualTimeZone() - timeRange = self._determineTableTimeRange(tree, node, fireTimeZone) - timeRangeList = self.getPeriods(timeRange, period, 1, None) - - # Make header - header = "Time ("+fireTimeZone+") " - for tr, label in timeRangeList: - label = self._makeTableLabel(tree, tr, colWidth) - header += string.ljust(label, colWidth) - header += "\n" - - # Make empty statList (dummy for calling "makeRow") - statList = [] - for i in range(len(timeRangeList)): - statList.append({}) - return timeRangeList, statList, colWidth, header, tableElements - - def _colWidths(self): - # Lists table resolutions hours, corresponding column width - return [ - (1, 4), - (2, 7), - (3, 10), - (4, 13), - ] - - def _determineTableTimeRange(self, tree, node, fireTimeZone): - tr = node.getTimeRange() - # See if this is first period of product - prev = node.getComponent().getPrev() - if prev is None: - # Adjust timeRange if necessary - if self._tableStartTimeMode == "current": - currentTime = tree.get('argDict').get('creationTime') - currentTime = int(currentTime/3600.0)*3600.0 - tr = self.makeTimeRange(currentTime, tr.endTime().unixTime()) - elif self._tableStartTimeMode == "ignitionTime": - fireDateTime = time.mktime(self._fireDateTime) - fireDateTime = int(fireDateTime/3600.0)*3600.0 - fireTime = fireDateTime - (self._tableStartTimeOffset * 3600) - if fireTime >= tr.startTime().unixTime() and \ - fireTime < tr.endTime().unixTime(): - tr = self.makeTimeRange(fireTime, tr.endTime().unixTime()) - if self._tabularAllPeriods == "yes": - timeRange = tr - else: - # One 12-hour period - timeRange = self.makeTimeRange(tr.startTime(), - tr.startTime()+12*3600) - #print "Table time range", timeRange, node.getTimeRange() - return timeRange - - def _makeTableLabel(self, tree, timeRange, colWidth): - localTime, shift = self.determineTimeShift() - rtz = self._getActualTimeZone() - stz = time.tzname[0] - dtz = time.tzname[1] - otz = stz[0:1] - ptz = rtz[0:1] - if otz == ptz: - start = timeRange.startTime() + shift - else: - offset = 0 - if ptz == "E": - if otz == "E": - offset = 0 - elif otz == "C": - offset = 1 - elif otz == "M": - offset = 2 - elif otz == "P": - offset = 3 - elif ptz == "C": - if otz == "E": - offset = -1 - elif otz == "C": - offset = 0 - elif otz == "M": - offset = 1 - elif otz == "P": - offset = 2 - elif ptz == "M": - if otz == "E": - offset = -2 - elif otz == "C": - offset = -1 - elif otz == "M": - offset = 0 - elif otz == "P": - offset = 1 - elif ptz == "P": - if otz == "E": - offset = -3 - elif otz == "C": - offset = -2 - elif otz == "M": - offset = -1 - elif otz == "P": - offset = 0 - if stz[1:3] == rtz[1:3]: - start = timeRange.startTime() + shift + offset*3600 - else: - start = timeRange.startTime() + shift + offset*3600 - militaryHour = start.hour - hour, ampm = self.hourAmPm(militaryHour) - for low, hi, shortVal, longVal in self._tableLabels(): - if militaryHour >= low and militaryHour <= hi: - if colWidth > 4: - val = longVal - else: - val = shortVal - val = val.replace("hour", `hour`) - break - return val - - def _tableLabels(self): - return [ - (0,0, "Mid", "Midngt"), - (1,9, "hourAM", "hour AM"), - (10,11, "hourA", "hour AM"), - (12,12, "12P", "Noon"), - (13,21, "hourPM", "hour PM"), - (22,23, "hourP", "hour PM"), - ] - - def assembleIndentedPhrases(self, tree, component): - # Assemble and indent component phrases and add Label - # Qualify the phrases with local effect qualifiers - # if present. - # e.g. "near the coast" - for phrase in component.get("childList"): - words = phrase.get("words") - if words is None: - return - self.consolidateLocalEffectPhrases(tree, component) - self.combineConjunctivePhrases(tree, component) - fcst = "" - lastQualifier = None - lastPhrase = None - self.orderWxPhrases(tree, component) - for phrase in component.get("childList"): - words = phrase.get("words") - if words is None: - return - if words == "": - if self.removeEmptyPhrase(tree, phrase): - continue - - # Handle multiple element table phrase - # that appears per period - # No need to indent or qualify - name = phrase.get("name") - if name == "multipleElementTable_perPeriod_phrase": - fcst = fcst + words - continue - if name == "_fwsTable_phrase": - if words != "": - fcst = fcst + "\n" + words - continue - - if phrase.get("compound"): - makeSentence = 0 - else: - makeSentence = 1 - words, lastQualifier = self.qualifyWords( - phrase, words, "conjunctiveQualifier", lastQualifier, lastPhrase, - makeSentence=makeSentence) - lastPhrase = phrase - indentLabel = phrase.get("indentLabel") - label = self.phrase_descriptor( - tree, phrase, indentLabel, indentLabel) - #print "indentLabel, label", indentLabel, label - if indentLabel is not None and label == "": - label = indentLabel - if words == "": - words = " " - words = self.labelIndent(words, label) - fcst = fcst + words - if fcst == "": - return self.setWords(component,"") - # Add label - issuanceInfo = tree.get("issuanceInfo") - index = component.getIndex() - curLocalTime, shift = self.determineTimeShift() - creationTime = tree.get('argDict').get('creationTime') - curLocalTime = AbsTime.AbsTime(creationTime) - label = self.createLabel(tree, component, component.get("timeRange"), - issuanceInfo, curLocalTime, shift, index) - return self.setWords(component, label + "\n" + fcst + "\n") - - def _getTableStats(self, tree, element, tr, area, mergeMethod="Max", getValueMethod="Average"): - stats = tree.stats.get(element, tr, area, mergeMethod=mergeMethod) - if stats is None: - return None - return self.getValue(stats, getValueMethod) - - def _sky_value(self, statDict, timeRange, argList): - tree, node, colWidth = tuple(argList) - sky = self._getTableStats(tree, "Sky", timeRange, node.getAreaLabel()) - if sky is None: - value = "M" - elif self._elementFormatDict.get("Sky", "numeric") == "numeric": - value = `int(sky + 0.5)` - else: - for threshold, shortVal, longVal in self._skyTableValues(): - if sky <= threshold: - if colWidth <= 4: - value = shortVal - else: - value = longVal - break - return value - - def _numSky_value(self, statDict, timeRange, argList): - tree, node, colWidth = tuple(argList) - sky = self._getTableStats(tree, "Sky", timeRange, node.getAreaLabel()) - if sky is None: - value = "M" - else: - value = `int(sky + 0.5)` - return value - - def _skyTableValues(self): - return [ - (5, "CLR", "CLEAR"), - (25,"MCR", "MCLEAR"), - (50,"PC", "PCLDY"), - (69,"MC", "MCLDY"), - (87,"MC", "MCLDY"), - (100,"CDY", "CLOUDY"), - ] - - def _weatherType_value(self, statDict, timeRange, argList): - tree, node, colWidth = tuple(argList) - areaLabel = node.getAreaLabel() - wxStats = tree.stats.get("Wx", timeRange, areaLabel, mergeMethod="Max") - #print "wxStats = ", wxStats,tr - if wxStats is None or len(wxStats) == 0: - return "M" - # If there are 2 subkeys tied for the highest rank, - # search for a weather mix table. - # Otherwise, use the weather code table to find the weather value - coRank = None - hiRank = -1 - for subkey, rank in wxStats: - # Find top 2 ranked subkeys to look for mixtures - if rank > hiRank and subkey.wxType() != "T": - hiKey = subkey - hiRank = rank - elif rank == hiRank and subkey.wxType() != "T": - coKey = subkey - coRank = rank - if hiRank == -1: - return "" - keyAttrs = hiKey.attributes() - keyType = hiKey.wxType() - if coRank == hiRank: - keyAttrs, keyType = self._matchMix(hiKey, coKey, colWidth) - value = self._matchType(keyAttrs, keyType, colWidth) - return value - - def _matchType(self, keyAttrs, keyType, colWidth): - # Try to match the weatherCodeTable to the subkey - # If no match found, return None - value = None - for wxAttr, wxType, shortVal, longVal in self._weatherCodeTable(): - if wxAttr == "" or wxAttr in keyAttrs: - if wxType == keyType: - if colWidth == 4: - value = shortVal - else: - value = longVal - break - if value is None: - if colWidth == 4: - value = "???" - else: - value = "??????" - return value - - def _matchMix(self, hiKey, coKey, colWidth): - # Try to match the weather mix - # Return the attribute and wxType - # If not found, return the hiKey attributes and wxType - for attr1, type1, attr2, type2, keyAttr, keyType in self._weatherMixTable(): - for key1, key2 in [(hiKey, coKey), (coKey, hiKey)]: - if type1 == key1.wxType() and type2 == key2.wxType(): - if len(key1.attributes()) == 0 and \ - len(key2.attributes()) == 0 and \ - attr1 == "" and attr2 == "": - # Match found - return [keyAttr], keyType - elif len(key1.attributes()) == 0 and \ - len(key2.attributes()) != 0 and \ - attr1 == "" and attr2 in key2.attributes(): - # Match found - return [keyAttr], keyType - elif len(key1.attributes()) != 0 and \ - len(key2.attributes()) == 0 and \ - attr1 in key1.attributes() and attr2 == "": - # Match found - return [keyAttr], keyType - elif len(key1.attributes()) != 0 and \ - len(key2.attributes()) != 0 and \ - attr1 in key1.attributes() and \ - attr2 in key2.attributes(): - # Match found - return [keyAttr], keyType - - # No match found - return hiKey.attributes(), hiKey.wxType() - - def _weatherCodeTable(self): - return [ - ("", "", "", "NONE" ), - ("Dry", "T", "DYT","DRYTSM"), - ("", "T", "TSM","TSTORM"), - ("GW", "T", "TSM","TSTORM"), - ("SmA", "T", "TSM","TSTORM"), - ("", "S", "SN", "SNOW" ), - ("", "R", "RN", "RAIN" ), - ("", "SW", "SW", "SNSHWR"), - ("", "RW", "RW", "RNSHWR"), - ("", "L", "DZL","DRZL" ), - ("", "ZR", "FZR","FZRAIN"), - ("", "ZL", "FZD","FZDRZL"), - ("", "IP", "SLT","SLEET" ), - ("", "F", "FOG","FOG" ), - ("", "ZF", "FZF","FZFOG" ), - ("", "IF", "IFG","ICEFOG"), - ("", "IC", "ICR","ICECRL"), - ("", "H", "HAZ","HAZE" ), - ("", "BS", "BSN","BLSNOW"), - ("", "BN", "BSD","BLSAND"), - ("", "BD", "BDT","BLDUST"), - ("", "K", "SMK","SMOKE" ), - ("", "FR", "FST","FROST" ), - ("", "ZY", "FZS","FZSPRY"), - ("", "VA", "ASH","VOLASH"), - # Mixed Weather Types - ("", "RS", "RS", "RNSN" ), - ("", "LF", "DZF","DZL/FG"), - ("", "SF", "SNF","SN/FG "), - ("", "RF", "RNF","RN/FG "), - ("", "ZRS", "ZRS","ZRN/SN"), - # Unknown Mixed Weather Type - ("", "XX", "???","??????"), - ] - - def _weatherMixTable(self): - return [ - ("", "S", "","R", "", "RS"), - ("", "SW","","RW","", "RS"), - ("", "RW","","T", "", "T"), - ("Dry","T", "","RW","Dry","T"), - ("", "L", "","F", "", "LF"), - ("", "S", "","F", "", "SF"), - ("", "R", "","F", "", "RF"), - ("", "SW","","F", "", "SF"), - ("", "RW","","F", "", "RF"), - ("", "ZR","","S", "", "ZRS"), - ("", "ZR","","SW","", "ZRS"), - ] - - def _tstmCov_value(self, statDict, timeRange, argList): - tree, node, colWidth = tuple(argList) - areaLabel = node.getAreaLabel() - wxStats = tree.stats.get("Wx", timeRange, areaLabel, mergeMethod="Max") - if wxStats is None or len(wxStats) == 0: - return "M" - hiRank = -1 - for subkey, rank in wxStats: - print "*** vtm ***" - print subkey, rank - if rank > hiRank and subkey.wxType() == "T": - hiKey = subkey - hiRank = rank - if hiRank == -1: - return "" - value = None - for cov, shortVal, longVal in self._coverageCodeTable(): - if hiKey.coverage() == cov: - if colWidth == 4: - value = shortVal - else: - value = longVal - break - if value is None: - if colWidth == 4: - value = "???" - else: - value = "??????" - return value - - def _weatherCov_value(self, statDict, timeRange, argList): - tree, node, colWidth = tuple(argList) - areaLabel = node.getAreaLabel() - wxStats = tree.stats.get("Wx", timeRange, areaLabel, mergeMethod="Max") - if wxStats is None or len(wxStats) == 0: - return "M" - hiRank = -1 - for subkey, rank in wxStats: - if rank > hiRank and subkey.wxType() != "T": - hiKey = subkey - hiRank = rank - if hiRank == -1: - return "" - value = None - for cov, shortVal, longVal in self._coverageCodeTable(): - if hiKey.coverage() == cov: - if colWidth == 4: - value = shortVal - else: - value = longVal - break - if value is None: - if colWidth == 4: - value = "???" - else: - value = "??????" - return value - - def _coverageCodeTable(self): - return [ - ("","", ""), - ("SChc", "SCH","S CHC"), - ("Iso", "ISO","ISOLTD"), - ("Chc", "CHC","CHANCE"), - ("Sct", "SCT","SCTTRD"), - ("Lkly", "LKY","LIKELY"), - ("Num", "NUM","NUMRUS"), - ("Def", "DEF","DEFNTE"), - ("Wide", "WID","WIDSPD"), - ("Ocnl", "OCL","OCNL"), - ("Frq", "FRQ","FRQNT"), - ("Brf", "BRF","BRIEF"), - ("Pds", "PDS","PERIOD"), - ("Inter", "ITR","ITRMT"), - ("Areas", "ARS","AREAS"), - ("Patchy", "PTY","PATCHY") - ] - - def _temp_value(self, statDict, timeRange, argList): - tree, node, colWidth = tuple(argList) - temp = self._getTableStats(tree, "T", timeRange, node.getAreaLabel()) - if temp is None: - return "M" - if temp >= 0: - temp = int(temp + 0.5) - else: - temp = int(temp - 0.5) - return `temp` - - def _rh_value(self, statDict, timeRange, argList): - tree, node, colWidth = tuple(argList) - rh =self._getTableStats(tree, "RH", timeRange, node.getAreaLabel()) - if rh is None: - return "M" - rh = int(rh + 0.5) - return `rh` - - # Wind Methods - # Utility for Wind Methods - - # Tabular Transport Wind bug found by John DeBlock and Stephen Miller. - # tree.stats.get was using self._20ftWindParm instead of element. - def _getWindDirSpdStr(self, tree, node, timeRange, element, formatElement=None, units=None): - windStats = tree.stats.get(element, timeRange, node.getAreaLabel(), - mergeMethod="Max") - if windStats is None: - return None - wspd,wdir = windStats - if formatElement is None: - formatElement = element - if self._elementFormatDict.get(formatElement, "alpha") == "alpha": - wdir = int(wdir + 0.5) - dirString = self._dirConvert(wdir) - else: - dir = int(wdir/10.0 + 0.5) * 10 - if dir < 10: - dirString = "00" + `dir` - elif dir < 100: - dirString = "0" + `dir` - else: - dirString = `dir` - if element == "Wind": - wspd = wspd * self._windAdjustmentFactor - if units == "Metric": - wspd = int(wspd*.44704 + 0.5) - else: - wspd = int(wspd + 0.5) - spdString = `wspd` - return dirString, spdString - - def _getWindNumDirSpdStr(self, tree, node, timeRange, element, formatElement=None, units=None): - windStats = tree.stats.get(element, timeRange, node.getAreaLabel(), - mergeMethod="Max") - if windStats is None: - return None - wspd,wdir = windStats - if formatElement is None: - formatElement = element - dir = int(wdir/10.0 + 0.5) * 10 - if dir < 10: - dirString = "00" + `dir` - elif dir < 100: - dirString = "0" + `dir` - else: - dirString = `dir` - if element == "Wind": - wspd = wspd * self._windAdjustmentFactor - if units == "Metric": - wspd = int(wspd*.44704 + 0.5) - else: - wspd = int(wspd + 0.5) - spdString = `wspd` - return dirString, spdString - - def _getEyeWindDirSpdStr(self, tree, node, timeRange, element, formatElement=None, units=None): - windStats = tree.stats.get(element, timeRange, node.getAreaLabel(), - mergeMethod="Max") - if windStats is None: - return None - wspd,wdir = windStats - if formatElement is None: - formatElement = element - if self._elementFormatDict.get(formatElement, "alpha") == "alpha": - wdir = int(wdir + 0.5) - dirString = self._dirConvert(wdir) - else: - dir = int(wdir/10.0 + 0.5) * 10 - if dir < 10: - dirString = "00" + `dir` - elif dir < 100: - dirString = "0" + `dir` - else: - dirString = `dir` - if element == "Wind": - wspd = wspd * self._eyeWindAdjustmentFactor - if units == "Metric": - wspd = int(wspd*.44704 + 0.5) - else: - wspd = int(wspd + 0.5) - spdString = `wspd` - return dirString, spdString - - def _getSfcWindDirSpdStr(self, tree, node, timeRange, element, formatElement=None, units=None): - windStats = tree.stats.get(element, timeRange, node.getAreaLabel(), - mergeMethod="Max") - if windStats is None: - return None - wspd,wdir = windStats - if formatElement is None: - formatElement = element - if self._elementFormatDict.get(formatElement, "alpha") == "alpha": - wdir = int(wdir + 0.5) - dirString = self._dirConvert(wdir) - else: - dir = int(wdir/10.0 + 0.5) * 10 - if dir < 10: - dirString = "00" + `dir` - elif dir < 100: - dirString = "0" + `dir` - else: - dirString = `dir` - if units == "Metric": - wspd = int(wspd*.44704 + 0.5) - else: - wspd = int(wspd + 0.5) - spdString = `wspd` - return dirString, spdString - - def _dirConvert(self, wdir): - dirString = "" - if wdir >= 338 or wdir <= 22: - dirString = "N" - elif wdir >= 23 and wdir <= 67: - dirString = "NE" - elif wdir >= 68 and wdir <= 112: - dirString = "E" - elif wdir >= 113 and wdir <= 157: - dirString = "SE" - elif wdir >= 158 and wdir <= 202: - dirString = "S" - elif wdir >= 203 and wdir <= 247: - dirString = "SW" - elif wdir >= 248 and wdir <= 292: - dirString = "W" - elif wdir >= 293 and wdir <= 337: - dirString = "NW" - return dirString - - def _adjustEyeWind(self, value): - # adjustment for winds - factor = self.nlValue(self._eyeWindAdjustmentFactor, value) - value = value * factor - return value - - def _wind_value(self, statDict, timeRange, argList, element=None, formatElement=None): - if element is None: - element = self._20ftWindParm - if formatElement is None: - formatElement = self._20ftWindParm - tree, node, colWidth = tuple(argList) - if formatElement == "TransMetWind": - windString = self._getWindDirSpdStr(tree, node, timeRange, element, formatElement, "Metric") - elif formatElement == "EyeWind": - windString = self._getEyeWindDirSpdStr(tree, node, timeRange, element, formatElement) - elif formatElement == "SfcWind": - windString = self._getSfcWindDirSpdStr(tree, node, timeRange, element, formatElement) - else: - windString = self._getWindDirSpdStr(tree, node, timeRange, element, formatElement) - if windString is None: - return "M" - dirString, spdString = windString - if self._elementFormatDict.get(formatElement, "alpha") == "alpha": - value = dirString + " " + spdString - else: - value = dirString + "/" + spdString - return value - - def _windWithGust_value(self, statDict, timeRange, argList, element=None, formatElement=None): - if element is None: - element = self._20ftWindParm - if formatElement is None: - formatElement = self._20ftWindParm - tree, node, colWidth = tuple(argList) - if formatElement == "EyeWind": - windString = self._getEyeWindDirSpdStr(tree, node, timeRange, element, formatElement) - elif formatElement == "SfcWind": - windString = self._getSfcWindDirSpdStr(tree, node, timeRange, element, formatElement) - else: - windString = self._getWindDirSpdStr(tree, node, timeRange, element, formatElement) - if windString is None: - return "M" - dirString, spdString = windString - gust = self._getTableStats(tree, "WindGust", timeRange, node.getAreaLabel(), - getValueMethod="Max") - if gust is None: - gstString = "GMM" - gstString = "" - gust = int(self.getValue(gust) + 0.5) - if gust > string.atoi(spdString): - gstString = "G" + `gust` - if self._elementFormatDict.get(formatElement, "alpha") == "alpha": - value = dirString + " " + spdString + gstString - else: - value = dirString + "/" + spdString + gstString - return value - - def _windDir_value(self, statDict, timeRange, argList, element=None, formatElement=None): - if element is None: - element = self._20ftWindParm - if formatElement is None: - formatElement = self._20ftWindParm - tree, node, colWidth = tuple(argList) - windString = self._getWindDirSpdStr(tree, node, timeRange, element, formatElement) - if windString is None: - return "M" - dirString, spdString = windString - return dirString - - def _windNumDir_value(self, statDict, timeRange, argList, element=None, formatElement=None): - if element is None: - element = self._20ftWindParm - if formatElement is None: - formatElement = self._20ftWindParm - tree, node, colWidth = tuple(argList) - windString = self._getWindNumDirSpdStr(tree, node, timeRange, element, formatElement) - if windString is None: - return "M" - dirString, spdString = windString - return dirString - - def _eyewindNumDir_value(self, statDict, timeRange, argList): - return self._windNumDir_value(statDict, timeRange, argList, "Wind", "EyeWind") - - def _sfcwind_value(self, statDict, timeRange, argList): - return self._wind_value(statDict, timeRange, argList, "Wind", "SfcWind") - - def _sfcwindWithGust_value(self, statDict, timeRange, argList): - return self._windWithGust_value(statDict, timeRange, argList, "Wind", "SfcWind") - - def _sfcwindDir_value(self, statDict, timeRange, argList): - return self._windDir_value(statDict, timeRange, argList, "Wind", "SfcWind") - - def _sfcwindSpd_value(self, statDict, timeRange, argList): - return self._windSpd_value(statDict, timeRange, argList, "Wind", "SfcWind") - - def _sfcwindGust_value(self, statDict, timeRange, argList): - return self._windGust_value(statDict, timeRange, argList, "Wind", "SfcWind") - - def _sfcwindNumDir_value(self, statDict, timeRange, argList): - return self._windNumDir_value(statDict, timeRange, argList, "Wind", "SfcWind") - - def _ridgeNumDir_value(self, statDict, timeRange, argList): - return self._windNumDir_value(statDict, timeRange, argList, "FreeWind", "RidgeWind") - - def _transNumDir_value(self, statDict, timeRange, argList): - return self._windNumDir_value(statDict, timeRange, argList, "TransWind", "TransWind") - - def _windSpd_value(self, statDict, timeRange, argList, element=None, formatElement=None): - if element is None: - element = self._20ftWindParm - if formatElement is None: - formatElement = self._20ftWindParm - tree, node, colWidth = tuple(argList) - if formatElement == "TransMetWind": - windString = self._getWindDirSpdStr(tree, node, timeRange, element, formatElement, "Metric") - elif formatElement == "EyeWind": - windString = self._getEyeWindDirSpdStr(tree, node, timeRange, element, formatElement) - elif formatElement == "SfcWind": - windString = self._getSfcWindDirSpdStr(tree, node, timeRange, element, formatElement) - else: - windString = self._getWindDirSpdStr(tree, node, timeRange, element, formatElement) - if windString is None: - return "M" - dirString, spdString = windString - return spdString - - def _windGust_value(self, statDict, timeRange, argList, element=None, formatElement=None ): - if element is None: - element = self._20ftWindParm - if formatElement is None: - formatElement = self._20ftWindParm - tree, node, colWidth = tuple(argList) - windString = self._getWindDirSpdStr(tree, node, timeRange, element, formatElement) - if windString is None: - spdString = '0' - else: - dirString, spdString = windString - gust = self._getTableStats(tree, "WindGust", timeRange, node.getAreaLabel(), - getValueMethod="Max") - if gust is None: - return "M" - gstString = " " - gust = int(gust + 0.5) - if gust > string.atoi(spdString): - gstString = `gust` - return gstString - - def _eyewind_value(self, statDict, timeRange, argList): - return self._wind_value(statDict, timeRange, argList, "Wind", "EyeWind") - - def _eyewindWithGust_value(self, statDict, timeRange, argList): - return self._windWithGust_value(statDict, timeRange, argList, "Wind", "EyeWind") - - def _eyewindDir_value(self, statDict, timeRange, argList): - return self._windDir_value(statDict, timeRange, argList, "Wind", "EyeWind") - - def _eyewindSpd_value(self, statDict, timeRange, argList): - return self._windSpd_value(statDict, timeRange, argList, "Wind", "EyeWind") - - def _eyewindGust_value(self, statDict, timeRange, argList): - return self._windGust_value(statDict, timeRange, argList, "Wind", "EyeWind") - - def _ridge_value(self, statDict, timeRange, argList): - return self._wind_value(statDict, timeRange, argList,"FreeWind", "RidgeWind" ) - - def _ridgeDir_value(self, statDict, timeRange, argList): - return self._windDir_value(statDict, timeRange, argList, "FreeWind", "RidgeWind") - - def _ridgeSpd_value(self, statDict, timeRange, argList): - return self._windSpd_value(statDict, timeRange, argList, "FreeWind", "RidgeWind") - - def _trans_value(self, statDict, timeRange, argList): - return self._wind_value(statDict, timeRange, argList, "TransWind", "TransWind") - - def _transDir_value(self, statDict, timeRange, argList): - return self._windDir_value(statDict, timeRange, argList, "TransWind", "TransWind") - - def _transSpd_value(self, statDict, timeRange, argList): - return self._windSpd_value(statDict, timeRange, argList, "TransWind", "TransWind") - - def _transMetric_value(self, statDict, timeRange, argList): - return self._wind_value(statDict, timeRange, argList, "TransWind", "TransMetWind") - - def _transSpdMetric_value(self, statDict, timeRange, argList): - return self._windSpd_value(statDict, timeRange, argList, "TransWind", "TransMetWind") - - def _mixingHeight_value(self, statDict, timeRange, argList): - tree, node, colWidth = tuple(argList) - mix = self._getTableStats(tree, "MixHgt", timeRange, node.getAreaLabel()) - if mix is None: - return "M" - if self._tabularMixingHeightUnits == "ft" and colWidth != 4: - mixft = int(mix/100.0+0.5) * 100 - if mixft < 100: - value = "BLW100" - else: - value = `mixft` - else: - if mix < 50: - mix = 100.0 - kmix = mix / 1000.0 - kmix = round(kmix,1) - if kmix < 10: - value = str(round(kmix,1)) - else: - kmix = mix / 1000.0 - kmix = int(kmix + 0.5) - value = `kmix` - return value - - def _mixingHeightMetric_value(self, statDict, timeRange, argList): - tree, node, colWidth = tuple(argList) - mix = self._getTableStats(tree, "MixHgt", timeRange, node.getAreaLabel()) - if mix is None: - return "M" - if self._tabularMixingHeightUnits == "ft" and colWidth != 4: - mixMetric = mix * 0.3048 - mixRounded = int(mixMetric/10.0+0.5) * 10 - if mixRounded < 10: - value = "BLW10M" - else: - value = `mixRounded` - else: - if mix < 330: - mix = 330.0 - mixMetric = mix * 0.3048 / 1000.0 - kmix = round(mixMetric,1) - if kmix < 10: - value = str(round(kmix,1)) - else: - value = `kmix` - return value - - def _cwr_value(self, statDict, timeRange, argList): - tree, node, colWidth = tuple(argList) - cwr = self._getTableStats(tree, self._cwrParm, timeRange, node.getAreaLabel()) - if cwr is None: - return "M" - return `int(cwr/10 + 0.5)*10` - - def _pop_value(self, statDict, timeRange, argList): - tree, node, colWidth = tuple(argList) - pop = self._getTableStats(tree, "PoP", timeRange, node.getAreaLabel()) - if pop is None: - return "M" - return `int(pop/10 + 0.5)*10` - - def _lal_value(self, statDict, timeRange, argList): - tree, node, colWidth = tuple(argList) - lal = self._getTableStats(tree, "LAL", timeRange, node.getAreaLabel()) - if lal is None: - return "M" - return `int(lal+0.5)` - - def _dsi_value(self, statDict, timeRange, argList): - tree, node, colWidth = tuple(argList) - dsi = self._getTableStats(tree, "DSI", timeRange, node.getAreaLabel()) - if dsi is None: - return "M" - return `int(dsi + 0.5)` - - - def _ldsi_value(self, statDict, timeRange, argList): - tree, node, colWidth = tuple(argList) - #dsi = self._getTableStats(tree, "DSI", timeRange, node.getAreaLabel()) - dsi = self._getTableStats(tree, "LDSI", timeRange, node.getAreaLabel()) - if dsi is None: - return "M" - return `int(dsi + 0.5)` - - def _lvori_value(self, statDict, timeRange, argList): - tree, node, colWidth = tuple(argList) - #lvori = self._getTableStats(tree, "DSI", timeRange, node.getAreaLabel()) - lvori = self._getTableStats(tree, "LVORI", timeRange, node.getAreaLabel()) - if lvori is None: - return "M" - return `int(lvori + 0.5)` - - def _adi_value(self, statDict, timeRange, argList): - tree, node, colWidth = tuple(argList) - adi = self._getTableStats(tree, "ADI", timeRange, node.getAreaLabel()) - if adi is None: - return "M" - return `int(adi + 0.5)` - - def _haines_value(self, statDict, timeRange, argList): - tree, node, colWidth = tuple(argList) - stats = self._getTableStats(tree, "Haines", timeRange, node.getAreaLabel()) - if stats is None: - return "M" - return `int(stats + 0.5)` - - def _ventrate_value(self, statDict, timeRange, argList): - tree, node, colWidth = tuple(argList) - ventrate = self._getTableStats(tree, "VentRate", timeRange, node.getAreaLabel()) - if ventrate is None: - return "M" - return `int(ventrate/1000.0 + 0.5)` - - def _windWave_value(self, statDict, timeRange, argList): - tree, node, colWidth = tuple(argList) - stats = self._getTableStats(tree, "WindWaveHgt", timeRange, node.getAreaLabel()) - if stats is None: - return "M" - return `int(stats + 0.5)` - - def _waveHeight_value(self, statDict, timeRange, argList): - tree, node, colWidth = tuple(argList) - stats = self._getTableStats(tree, "WaveHeight", timeRange, node.getAreaLabel()) - if stats is None: - return "M" - return `int(stats + 0.5)` - - def _swellPeriod_value(self, statDict, timeRange, argList): - tree, node, colWidth = tuple(argList) - stats = self._getTableStats(tree, "Period", timeRange, node.getAreaLabel()) - if stats is None: - return "M" - return `int(stats + 0.5)` - - def _swell_value(self, statDict, timeRange, argList): - return self._wind_value(statDict, timeRange, argList,"Swell", "RidgeWind" ) - - def _swellDir_value(self, statDict, timeRange, argList): - return self._windDir_value(statDict, timeRange, argList, "Swell", "RidgeWind") - - def _swellHgt_value(self, statDict, timeRange, argList): - return self._windSpd_value(statDict, timeRange, argList, "Swell", "RidgeWind") - - def _freezingLevel_value(self, statDict, timeRange, argList): - tree, node, colWidth = tuple(argList) - mix = self._getTableStats(tree, "FzLevel", timeRange, node.getAreaLabel()) - if mix is None: - return "M" - if mix < 50: - mix = 100.0 - kmix = mix / 1000.0 - kmix = round(kmix,1) - if kmix < 10: - value = str(round(kmix,1)) - else: - kmix = mix / 1000.0 - kmix = int(kmix + 0.5) - value = `kmix` - return value - - def _ceiling_value(self, statDict, timeRange, argList): - tree, node, colWidth = tuple(argList) - temp = self._getTableStats(tree, "PredHgt", timeRange, node.getAreaLabel()) - if temp is None: - return " " - temp = temp / 10.0 - if temp < 10: - tempWords = string.strip("%4.1f" % temp) - else: - tempWords = `int(temp + 0.5)` - return tempWords - - def _visibility_value(self, statDict, timeRange, argList): - tree, node, colWidth = tuple(argList) - temp = self._getTableStats(tree, "Vsby", timeRange, node.getAreaLabel()) - if temp is None: - return " " - print "colWidth =", colWidth - if colWidth > 4: - if temp < 1.0: - tempWords = string.strip("%4.2f" % temp) - elif temp >= 1.0 and temp < 3.0: - tempWords = string.strip("%4.1f" % temp) - else: - tempWords = `int(temp + 0.5)` - else: - if temp < 1.0: - tempWords = string.strip("%3.2f" % temp) - tempWords = tempWords[1:] - elif temp >= 1.0 and temp < 3.0: - tempWords = string.strip("%3.1f" % temp) - else: - tempWords = `int(temp + 0.5)` - return tempWords - - def _icing_value(self, statDict, timeRange, argList): - return " " - - def _td_value(self, statDict, timeRange, argList): - tree, node, colWidth = tuple(argList) - temp = self._getTableStats(tree, "Td", timeRange, node.getAreaLabel()) - if temp is None: - return "M" - if temp >= 0: - temp = int(temp + 0.5) - else: - temp = int(temp - 0.5) - return `temp` - - def _heatIndex_value(self, statDict, timeRange, argList): - tree, node, colWidth = tuple(argList) - temp = self._getTableStats(tree, "HeatIndex", timeRange, node.getAreaLabel()) - if temp is None: - return "M" - if temp >= 0: - temp = int(temp + 0.5) - else: - temp = int(temp - 0.5) - return `temp` - - def _wwa_exclude(self,stats): - list = [] - index = 0 - newstats = [] - while index < len(stats): - eidx = 0 - flag = 1 - while eidx < len(list): - if stats[index] == list[eidx]: - flag = 0 - eidx = eidx + 1 - if flag: - newstats.append(stats[index]) - index = index + 1 - return newstats - - def _wwa_value(self, statDict, timeRange, argList): - tree, node, colWidth = tuple(argList) - stats = self._getTableStats(tree, "Hazards", timeRange, node.getAreaLabel()) - if stats is None: - return " " - if stats[0] == "": - return " " - stats = self._wwa_exclude(stats) - return stats[0][0:2] + stats[0][3:4] - - def _wwa2_value(self, statDict, timeRange, argList): - tree, node, colWidth = tuple(argList) - stats = self._getTableStats(tree, "Hazards", timeRange, node.getAreaLabel()) - if stats is None: - return " " - stats = self._wwa_exclude(stats) - if len(stats) < 2: - return " " - return stats[1][0:2] + stats[1][3:4] - - def _wwa3_value(self, statDict, timeRange, argList): - tree, node, colWidth = tuple(argList) - stats = self._getTableStats(tree, "Hazards", timeRange, node.getAreaLabel()) - if stats is None: - return " " - stats = self._wwa_exclude(stats) - if len(stats) < 3: - return " " - return stats[2][0:2] + stats[2][3:4] - - ### NEW NARRATIVE PHRASES ### - - def dsi_phrase(self): - return { - "setUpMethod": self.dsi_setUp, - "wordMethod": self.dsi_words, - "phraseMethods": self.standard_phraseMethods(), - } - - def dsi_setUp(self, tree, node): - elementInfoList = [self.ElementInfo("DSI", "List")] - self.subPhraseSetUp(tree, node, elementInfoList, self.scalarConnector) - node.set("descriptor", "") - node.set("indentLabel", "DSI.................") - return self.DONE() - - def dsi_words(self, tree, node) : - "Create phrase Probability of Precipitation" - statDict = node.getStatDict() - dsi = self.getStats(statDict, "DSI") - if dsi is None: - return self.setWords(node.parent, "MISSING") - dsi = self.getValue(dsi) - words = `int(dsi + 0.5)` - return self.setWords(node, words) - - def ldsi_phrase(self): - return { - "setUpMethod": self.ldsi_setUp, - "wordMethod": self.ldsi_words, - "phraseMethods": self.standard_phraseMethods(), - } - - def ldsi_setUp(self, tree, node): - #elementInfoList = [self.ElementInfo("DSI", "List")] - elementInfoList = [self.ElementInfo("LDSI", "List")] - self.subPhraseSetUp(tree, node, elementInfoList, self.scalarConnector) - node.set("descriptor", "") - node.set("indentLabel", "LDSI................") - return self.DONE() - - def ldsi_words(self, tree, node): - "Create phrase Probability of Precipitation" - statDict = node.getStatDict() - #ldsi = self.getStats(statDict, "DSI") - ldsi = self.getStats(statDict, "LDSI") - if ldsi is None: - return self.setWords(node.parent, "MISSING") - ldsi = self.getValue(ldsi) - words = `int(ldsi + 0.5)` - return self.setWords(node, words) - - def lvori_phrase(self): - return { - "setUpMethod": self.lvori_setUp, - "wordMethod": self.lvori_words, - "phraseMethods": self.standard_phraseMethods(), - } - - def lvori_setUp(self, tree, node): - #elementInfoList = [self.ElementInfo("DSI", "List")] - elementInfoList = [self.ElementInfo("LVORI", "List")] - self.subPhraseSetUp(tree, node, elementInfoList, self.scalarConnector) - node.set("descriptor", "") - node.set("indentLabel", "LVORI...............") - return self.DONE() - - def lvori_words(self, tree, node): - statDict = node.getStatDict() - lvori = self.getStats(statDict, "LVORI") - #lvori = self.getStats(statDict, "DSI") - if lvori is None: - return self.setWords(node.parent, "MISSING") - lvori = self.getValue(lvori) - words = `int(lvori + 0.5)` - return self.setWords(node, words) - - def pop_phrase(self): - return { - "setUpMethod": self.pop_setUp, - "wordMethod": self.pop_words, - "phraseMethods": self.standard_phraseMethods(), - } - def pop_setUp(self, tree, node): - elementInfoList = [self.ElementInfo("PoP", "Max")] - self.subPhraseSetUp(tree, node, elementInfoList, self.scalarConnector) - node.set("descriptor", "") - node.set("indentLabel", "POP.................") - return self.DONE() - - def pop_words(self, tree, node) : - "Create phrase Probability of Precipitation" - statDict = node.getStatDict() - popStats = self.getStats(statDict, "PoP") - if popStats is None: - return self.setWords(node.parent, "MISSING") - pop = self.getValue(popStats) - threshold = self.nlValue(self.null_nlValue( - tree, node, "PoP", "PoP"), pop) - if int(pop) < threshold: - return self.setWords(node, "null") - else: - words = `int(pop)` + " percent" - return self.setWords(node, words) - - ### *** END TABULAR TEST SECTION HERE *** ### - -# I had to create these phrases or labels so the FWS formatter will work -# for any WFO out of the baseline. I created labels for elements that -# grids are not created for (that I know of). If offices do have grids -# for these elements, then they can create the phrase to get it into -# the FWS product. - - # For EYE LEVEL WINDS - def fireEyeWind_compoundPhrase(self): - return { - "phraseList": [ - self.wind_summary, - self.wind_phrase, - ], - "phraseMethods": [ - self.consolidateSubPhrases, - self.assembleSentences, - self.fireEyeWind_finishUp - ], - } - def fireEyeWind_finishUp(self, tree, node): - "Create a phrase for Winds" - # Empty phrase if doing ridge/valley winds - if self.currentAreaContains( - tree, self.ridgeValleyAreas(tree, node)) == 1: - return self.setWords(node, "") - words = node.get("words") - if words is None: - return - if words == "": - words = "MISSING" - node.set("descriptor", "") - node.set("indentLabel", "Eye level winds.....") - node.set("compound", 1) - return self.setWords(node, words) - - # For Wind shift. Just need the label since there is not phrase. - def fireWindShift_label_phrase(self): - return { - "setUpMethod": self.fireWindShift_label_setUp, - "phraseMethods": [self.postProcessPhrase], - } - - def fireWindShift_label_setUp(self, tree, node): - self.setWords(node, "") - node.set("descriptor", "") - node.set("indentLabel", "Wind shift..........") - return self.DONE() - - # For Surrounding Ridge Wind. - def surroundingRidgeWind_phrase(self): - return { - "setUpMethod": self.surroundingRidgeWind_setUp, - "wordMethod": self.vector_words, - "phraseMethods": self.standard_vector_phraseMethods(), - } - def surroundingRidgeWind_setUp(self, tree, node): - self.wind_setUp(tree, node, gustFlag=0, element="FreeWind") - node.set("descriptor", "") - node.set("indentLabel","Surrounding ridge...") - return self.DONE() - - # For Chance of Preciptiation. - def pop_phrase(self): - return { - "setUpMethod": self.pop_setUp, - "wordMethod": self.pop_words, - "phraseMethods": self.standard_phraseMethods(), - } - def pop_setUp(self, tree, node): - elementInfoList = [self.ElementInfo("PoP", "Average")] - self.subPhraseSetUp(tree, node, elementInfoList, self.scalarConnector) - node.set("descriptor", "") - node.set("indentLabel", "POP.................") - return self.DONE() - - def pop_words(self, tree, node) : - "Create phrase Probability of Precipitation" - statDict = node.getStatDict() - popStats = self.getStats(statDict, "PoP") - if popStats is None: - return self.setWords(node.parent, "MISSING") - pop = self.getValue(popStats) - threshold = self.nlValue(self.null_nlValue( - tree, node, "PoP", "PoP"), pop) - if int(pop) < threshold: - return self.setWords(node, "null") - else: - words = `int(pop)` + " percent" - return self.setWords(node, words) - - # For Stability Class. - def stabilityClass_phrase(self): - return { - "setUpMethod": self.stabilityClass_setUp, - "wordMethod": self.stabilityClass_words, - "phraseMethods": self.standard_phraseMethods(), - } - - def stabilityClass_setUp(self, tree, node): - elementInfoList = [self.ElementInfo("Stability", "List")] - self.subPhraseSetUp(tree, node, elementInfoList, self.scalarConnector) - node.set("descriptor", "") - node.set("indentLabel", "Stability class.....") - return self.DONE() - - def stabilityClass_words(self, tree, node) : - "Create phrase Stability Class" - statDict = node.getStatDict() - stability = self.getStats(statDict, "Stability") - if stability is None: - return self.setWords(node.parent, "MISSING") - words = `int(self.getValue(stability))` - return self.setWords(node, words) - - # For Marine Layer. - def marineLayer_phrase(self): - return { - "setUpMethod": self.marineLayer_setUp, - "wordMethod": self.marineLayer_words, - "phraseMethods": self.standard_phraseMethods(), - } - - def marineLayer_setUp(self, tree, node): - elementInfoList = [self.ElementInfo("MarineLayer", "List")] - self.subPhraseSetUp(tree, node, elementInfoList, self.scalarConnector) - node.set("descriptor", "") - node.set("indentLabel", "Marine layer........") - return self.DONE() - - def marineLayer_words(self, tree, node) : - "Create phrase MarineLayer" - statDict = node.getStatDict() - marineLayer = self.getStats(statDict, "MarineLayer") - if marineLayer is None: - return self.setWords(node.parent, "MISSING") - words = `int(self.getValue(marineLayer))` - return self.setWords(node, words) - - def td_phrase(self): - return { - "setUpMethod": self.td_setUp, - "wordMethod": self.td_words, - "phraseMethods": self.standard_phraseMethods(), - } - - def td_setUp(self, tree, node): - elementInfoList = [self.ElementInfo("Td", "List")] - self.subPhraseSetUp(tree, node, elementInfoList, self.scalarConnector) - node.set("descriptor", "") - node.set("indentLabel", "Dewpoint............") - return self.DONE() - - def td_words(self, tree, node): - "Create phrase Td" - statDict = node.getStatDict() - td = self.getValue(self.getStats(statDict, "Td"), "Avg") - if td is None: - return self.setWords(node.parent, "MISSING") - words = `int(td)` - return self.setWords(node, words) - - # For Begin/End of Preciptiation. - def pcpnTiming_phrase(self): - return { - "setUpMethod": self.pcpnTiming_setUp, - "phraseMethods": [self.postProcessPhrase], - } - - def pcpnTiming_setUp(self, tree, node): - self.setWords(node, " ") - node.set("descriptor", "") - node.set("indentLabel", "Begin/end of pcpn...") - return self.DONE() - - def _checkStrs(self, checkStrings, inputStr, orderStrings=0, checkMode=1): - # Check the inputStr for the list of checkStrings. - # If a checkString is a tuple, at least one of the - # given tuple strings must be found in the inputStr - # If orderStrings == 1, the strings must occur in order in the inputStr - # If checkMode == 0, the strings should NOT be found in the inputStr - # Returns 1 if successful, the failed checkString if not. - curIndex = -1 - for cStr in checkStrings: - if type(cStr) == types.TupleType: - # Will pass if ANY of these strings are found - # Not valid with checkMode of zero - if not checkMode: - continue - found = 0 - for subStr in cStr: - strIndex = inputStr.find(subStr) - if strIndex >= 0: - found = 1 - break - else: - found = 0 - if not found: - return subStr - else: - # Must find exact string - strIndex = inputStr.find(cStr) - if strIndex < 0: - if checkMode: - return cStr - else: - if not checkMode: - return cStr - # Check the ordering - if orderStrings: - inputStr = inputStr[strIndex:] - return 1 - - - -### For Testing -## def getPreviousProduct(self, stqPil, searchString, version=0): -## f = open("/home/eagle6/hansen/ui/middendorf/GTFSTQBYZ"+`version`, "r") -## product = f.read() -## f.close() -## #print "returning", product -## return product - diff --git a/cave/com.raytheon.viz.gfe/localization/gfe/userPython/textUtilities/regular/HighSeas_AT2_Overrides.py b/cave/com.raytheon.viz.gfe/localization/gfe/userPython/textUtilities/regular/HighSeas_AT2_Overrides.py index 669409d862..f8e39c776c 100644 --- a/cave/com.raytheon.viz.gfe/localization/gfe/userPython/textUtilities/regular/HighSeas_AT2_Overrides.py +++ b/cave/com.raytheon.viz.gfe/localization/gfe/userPython/textUtilities/regular/HighSeas_AT2_Overrides.py @@ -20,7 +20,6 @@ import HighSeas_AT2 import string, time, re, os, types, copy import TextRules, SampleAnalysis import ForecastNarrative -import UserInfo #********************************************************************** # MAKE NO CHANGES HERE diff --git a/cave/com.raytheon.viz.gfe/localization/gfe/userPython/textUtilities/regular/UserInfo.py b/cave/com.raytheon.viz.gfe/localization/gfe/userPython/textUtilities/regular/UserInfo.py index e82a49629a..c005a50427 100644 --- a/cave/com.raytheon.viz.gfe/localization/gfe/userPython/textUtilities/regular/UserInfo.py +++ b/cave/com.raytheon.viz.gfe/localization/gfe/userPython/textUtilities/regular/UserInfo.py @@ -28,80 +28,7 @@ class UserInfo(TextRules.TextRules, SampleAnalysis.SampleAnalysis): def forecasterDict(self): self.debug_print("Debug: forecasterDict in UserInfo") return { - "clandsea": "Landsea", - "mnelson": "Nelson", - "sstripli": "Stripling", - "echrist": "Christensen", - "jlewitsk": "Lewitsky", - "alevine": "AL", - "jaguirre": "Aguirre", - "grubio": "GR", - "dmundell": "Mundell", - "cmcelroy": "McElroy", - "alatto": "Latto", - "mformosa": "Formosa", - "nramos": "Ramos", - "mtichace": "MT", - "erivera": "ERA", - "jcangial": "Cangialosi", - "sstewart": "Stewart", - "pmanougi": "Manougian", - "dfigursk": "DJF", - "Jsienkie": "Sienkiewicz", - "fachorn": "FAchorn", - "cjuckins": "Juckins", - "jclark": "Clark", - "tcollins": "Collins", - "jkells": "Kells", - "dmills": "Mills", - "dscovil": "Scovil", - "kachorn": "KAchorn", - "gbancrof": "Bancroft", - "kbell": "Bell", - "tholley": "Holley", - "mhuffman": "Huffman", - "dkosier": "Kosier", - "jkrekele": "Krekeler", - "fmusonda": "Musonda", - "jkrekele": "Krekeler", - "jnolt": "Nolt", - "breinhar": "Reinhart", - "jkrekele": "Krekeler", - "mrowland": "Rowland", - "tshaw": "Shaw", - "lsommerv": "Sommerville", - "elau": "ELau", - "cbrenchl": "Brenchley", - "rballard": "RBallard", - "jbravend": "Bravender", - "kkodama": "Kodama", - "tbirchar": "Birchard", - "cjacobso": "Jacobson", - "jjelsema": "Jelsema", - "jpowell": "Powell", - "dwroe": "Wroe", - "mballard": "MBallard", - "abedal": "Bedal", - "rbohlin": "Bohlin", - "bburke": "Burke", - "pdonalds": "Donaldson", - "leaton": "Eaton", - "mfoster": "Foster", - "agibbs": "Gibbs", - "shouston": "Houston", - "nhui": "Hui", - "rkinel": "Kinel", - "hlau": "Lau", - "imorriso": "Morrison", - "tstall": "Stall", - "valmanza": "Almanza", - "chevalie": "Chevalier", - "mdye": "Dye", - "jsaucier": "Saucier", - "msardi": "MAS", - "tlefebvre": "LeFebvre", - "thansen": "Hansen", - "swhite": "White", + "clandsea": "Landsea" } def _getForecasterName(self, argDict): diff --git a/cave/com.raytheon.viz.gfe/localization/gfe/userPython/utilities/BOIVerifyConfig.py b/cave/com.raytheon.viz.gfe/localization/gfe/userPython/utilities/BOIVerifyConfig.py index f244c00650..abbbb599ef 100644 --- a/cave/com.raytheon.viz.gfe/localization/gfe/userPython/utilities/BOIVerifyConfig.py +++ b/cave/com.raytheon.viz.gfe/localization/gfe/userPython/utilities/BOIVerifyConfig.py @@ -107,7 +107,6 @@ VERCONFIG["QPF"] =(0,0,0,(0.05,0.10,0.25,0.50,1.00),0.05,1.0,"BV_Change2","QP # SAVE_MODELS=["GFS40","GFS40BC","ADJMAV","ADJMAVBC","ADJMEX","ADJMEXBC", "ADJMEH","ADJMEN","ADJMEL", - "MOSGuide","MOSGuideBC", "NAM12","NAM12BC","ADJMET","ADJMETBC", "ADJDGX","ADJDGXBC", "ADJFWC","ADJFWCBC", diff --git a/cave/com.raytheon.viz.gfe/localization/gfe/userPython/utilities/SmartScript.py b/cave/com.raytheon.viz.gfe/localization/gfe/userPython/utilities/SmartScript.py index 93534dff25..45766eb7f9 100644 --- a/cave/com.raytheon.viz.gfe/localization/gfe/userPython/utilities/SmartScript.py +++ b/cave/com.raytheon.viz.gfe/localization/gfe/userPython/utilities/SmartScript.py @@ -2749,34 +2749,3 @@ class SmartScript(BaseTool.BaseTool): status = transmitter.transmitProduct(practice) return status - def sendWFOMessage(self, wfos, message): - ''' - Sends a message to a list of wfos - - Args: - wfos: string or list, set or tuple of strings containing the destination wfo(s) - - message: string containing the message to be sent - - Returns: - string: empty if successful or error message - - Raises: - TypeError: if wfos is not a string, list, tuple or set - ''' - - if not wfos: - # called with empty wfo list, nothing to do - return "" - - javaWfos = ArrayList() - if type(wfos) in [list, tuple, set]: - for wfo in wfos: - javaWfos.add(wfo) - elif type(wfos) is str: - javaWfos.add(wfos) - else: - raise TypeError("Invalid type received for wfos: " + type(wfos)) - - response = self.__dataMgr.getClient().sendWFOMessage(javaWfos, message) - return response.message() diff --git a/cave/com.raytheon.viz.gfe/localization/gfe/userPython/utilities/TropicalUtility.py b/cave/com.raytheon.viz.gfe/localization/gfe/userPython/utilities/TropicalUtility.py index 57e9c8307a..9514f2d1b1 100644 --- a/cave/com.raytheon.viz.gfe/localization/gfe/userPython/utilities/TropicalUtility.py +++ b/cave/com.raytheon.viz.gfe/localization/gfe/userPython/utilities/TropicalUtility.py @@ -433,20 +433,10 @@ class TropicalUtility(GridManipulation.GridManipulation): final_message += "MergeProposedSS procedure now, and finish " final_message += "preparing the grids for the WFO TCV." - # If we are in test mode, just display the command which - # would be executed - if testMode: - msg = "Test message to WFO {}: '{}'".format(wfo, final_message) - LogStream.logDebug(msg) + msg = "Test message to WFO {}: '{}'".format(wfo, final_message) + LogStream.logDebug(msg) - result = "" # Simulate a successful transfer - - # Otherwise, actually send this message - else: - msg = "Live message to WFO {}: '{}'".format(wfo, final_message) - LogStream.logDebug(msg) - - result = self.sendWFOMessage(wfo, final_message) + result = "" # Simulate a successful transfer # Keep track of which offices successfully got the message results.append(SendMessageResult(result == "", wfo, result)) @@ -736,21 +726,9 @@ class TropicalUtility(GridManipulation.GridManipulation): if testMode is None: testMode = self._testMode -# # Get the status of each WFO's communications -# wfoStatus = self.getWfoStatus() - # See which WFOs we need to notify (bothWfos, windWfos, surgeWfos) = self.getWfosAttention(field, anyChanges) - - # Send a message to each office -# message = "%s grids containing tropical, wind and storm surge hazards"%\ -# (field) -# self.sendMessageToWfos(bothWfos, message, self._testMode) - -# message = "%s grids containing tropical, wind hazards" % (field) -# self.sendMessageToWfos(windWfos, message, self._testMode) - message = "%s grids containing tropical, storm surge hazards" % (field) self.sendMessageToWfos(surgeWfos, message, testMode) diff --git a/cave/com.raytheon.viz.gfe/src/com/raytheon/viz/gfe/core/internal/ParmManager.java b/cave/com.raytheon.viz.gfe/src/com/raytheon/viz/gfe/core/internal/ParmManager.java index 5e01d5dfc1..41b11a40de 100644 --- a/cave/com.raytheon.viz.gfe/src/com/raytheon/viz/gfe/core/internal/ParmManager.java +++ b/cave/com.raytheon.viz.gfe/src/com/raytheon/viz/gfe/core/internal/ParmManager.java @@ -20,6 +20,7 @@ package com.raytheon.viz.gfe.core.internal; +import java.io.File; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; @@ -41,6 +42,7 @@ import org.eclipse.core.runtime.ListenerList; import com.raytheon.uf.common.dataplugin.gfe.db.objects.DatabaseID; import com.raytheon.uf.common.dataplugin.gfe.db.objects.DatabaseID.DataType; +import com.raytheon.uf.common.dataplugin.gfe.exception.GfeException; import com.raytheon.uf.common.dataplugin.gfe.db.objects.GridLocation; import com.raytheon.uf.common.dataplugin.gfe.db.objects.GridParmInfo; import com.raytheon.uf.common.dataplugin.gfe.db.objects.ParmID; @@ -164,6 +166,8 @@ import com.raytheon.viz.gfe.types.MutableInteger; * APIs. * Mar 16, 2017 6092 randerso Made decodeDbString public for use in runProcedure.py * Jan 08, 2018 19900 ryu Fix CAVE crash when starting GFE for non-activated site. + * Feb 01, 2019 ---- mjames Use only BASE level for now/dev. + * Feb 04, 2019 ---- mjames Force sync of python files required by GFE perspective. * * * @@ -2908,25 +2912,50 @@ public class ParmManager implements IParmManager, IMessageClient { private List initVirtualCalcParmDefinitions() { // retrieve the inventory from the ifpServer IPathManager pathMgr = PathManagerFactory.getPathManager(); - LocalizationContext[] contexts = new LocalizationContext[] { - pathMgr.getContext(LocalizationType.COMMON_STATIC, - LocalizationLevel.BASE), - pathMgr.getContext(LocalizationType.COMMON_STATIC, - LocalizationLevel.SITE), - pathMgr.getContext(LocalizationType.COMMON_STATIC, - LocalizationLevel.USER) }; Map modMap = new HashMap<>(); - for (LocalizationContext context : contexts) { - LocalizationFile[] files = pathMgr.listFiles(context, - FileUtil.join("gfe", "vcmodule"), new String[] { "py" }, + + LocalizationContext context = pathMgr.getContext( + LocalizationType.COMMON_STATIC, + LocalizationLevel.BASE); + + // vcmodule files + LocalizationFile[] files = pathMgr.listFiles(context, + "gfe/vcmodule", new String[] { "py" }, + false, true); + for (LocalizationFile lf : files) { + String modName = LocalizationUtil.extractName(lf.getPath()) + .replace(".py", ""); + modMap.put(modName, lf); + } + + String[] syncPaths = { + "python", + "python/time", + "python/dataaccess", + "gfe/vcmodule", + "gfe/vcmodule/utility", + "gfe/python", + "gfe/textproducts/templates/product", + "gfe/textproducts/templates", + "gfe/textproducts", + "vtec" + }; + + for (String path : syncPaths){ + LocalizationFile[] baseGfeFiles = pathMgr.listFiles(context, + path, new String[] {"py" }, false, true); - for (LocalizationFile lf : files) { - String modName = LocalizationUtil.extractName(lf.getPath()) - .replace(".py", ""); - modMap.put(modName, lf); + for (LocalizationFile lf : baseGfeFiles) { + try { + File pyFile = lf.getFile(true); + } catch (LocalizationException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } } } + List definitions = new ArrayList<>(modMap.size()); for (Entry entry : modMap.entrySet()) { @@ -2934,7 +2963,8 @@ public class ParmManager implements IParmManager, IMessageClient { LocalizationFile modFile = entry.getValue(); try { // gets the module from the ifpServer - modFile.getFile(true); + + modFile.openInputStream(); // create the VCModule statusHandler.debug("Loading VCModule: " + modFile); diff --git a/cave/com.raytheon.viz.grid/src/com/raytheon/viz/grid/inv/GridUpdater.java b/cave/com.raytheon.viz.grid/src/com/raytheon/viz/grid/inv/GridUpdater.java index 1052861180..5395d4c563 100644 --- a/cave/com.raytheon.viz.grid/src/com/raytheon/viz/grid/inv/GridUpdater.java +++ b/cave/com.raytheon.viz.grid/src/com/raytheon/viz/grid/inv/GridUpdater.java @@ -203,31 +203,31 @@ public class GridUpdater extends GridInventoryUpdater { * real state of the record here and it is left to the receiver of * updates to figure it out. */ - GridRecord schrödingersRecord = new GridRecord(); + GridRecord schrodingersRecord = new GridRecord(); DataTime time = record.getDataTime(); - schrödingersRecord.setDataTime(new DataTime(time.getRefTime(), + schrodingersRecord.setDataTime(new DataTime(time.getRefTime(), time.getFcstTime() - value.timeOffset)); - schrödingersRecord.setDatasetId(value.node.getModelName()); + schrodingersRecord.setDatasetId(value.node.getModelName()); Parameter param = new Parameter( value.node.getDesc().getAbbreviation(), value.node.getDesc().getName(), value.node.getDesc().getUnit()); - schrödingersRecord.setParameter(param); - schrödingersRecord.setLevel(value.node.getLevel()); + schrodingersRecord.setParameter(param); + schrodingersRecord.setLevel(value.node.getLevel()); if (value.node instanceof GatherLevelNode) { - schrödingersRecord.setEnsembleId(null); + schrodingersRecord.setEnsembleId(null); } else { - schrödingersRecord.setEnsembleId(record.getEnsembleId()); + schrodingersRecord.setEnsembleId(record.getEnsembleId()); } - schrödingersRecord.setSecondaryId(record.getSecondaryId()); - schrödingersRecord.setLocation(record.getLocation()); + schrodingersRecord.setSecondaryId(record.getSecondaryId()); + schrodingersRecord.setLocation(record.getLocation()); try { - uriUpdateQueue.put(schrödingersRecord.getDataURI()); + uriUpdateQueue.put(schrodingersRecord.getDataURI()); } catch (InterruptedException e) { statusHandler.handle(Priority.PROBLEM, "Failed to send derived update for " - + schrödingersRecord.getDataURI(), + + schrodingersRecord.getDataURI(), e); } } diff --git a/cave/com.raytheon.viz.hydro/localization/menus/app-obs/baseCollectDissem.xml b/cave/com.raytheon.viz.hydro/localization/menus/app-obs/baseCollectDissem.xml deleted file mode 100644 index 53114f2a47..0000000000 --- a/cave/com.raytheon.viz.hydro/localization/menus/app-obs/baseCollectDissem.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.hydro/localization/menus/app-obs/index.xml b/cave/com.raytheon.viz.hydro/localization/menus/app-obs/index.xml deleted file mode 100644 index b986fdc89b..0000000000 --- a/cave/com.raytheon.viz.hydro/localization/menus/app-obs/index.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.lightning/localization/menus/lightning/lightningMenuItems.xml b/cave/com.raytheon.viz.lightning/localization/menus/lightning/lightningMenuItems.xml index eac5c154e7..49d4975cb2 100644 --- a/cave/com.raytheon.viz.lightning/localization/menus/lightning/lightningMenuItems.xml +++ b/cave/com.raytheon.viz.lightning/localization/menus/lightning/lightningMenuItems.xml @@ -1,36 +1,43 @@ - - + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - + + + + + @@ -39,32 +46,34 @@ - - + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/cave/com.raytheon.viz.lpi/localization/basemaps/88D.lpi b/cave/com.raytheon.viz.lpi/localization/basemaps/88D.lpi index ebf53ead92..fc148849ed 100644 --- a/cave/com.raytheon.viz.lpi/localization/basemaps/88D.lpi +++ b/cave/com.raytheon.viz.lpi/localization/basemaps/88D.lpi @@ -74,6 +74,7 @@ 37.0242 -80.2742 276.000 KFCX 40.0060 -82.7150 273.469 TCMH 47.1158 -124.1069 265.279 KLGX + 19.9000 -75.1595 450.000 KNAW 30.7217 -97.3828 268.638 KGRK 30.1253 -93.2159 265.279 KLCH 41.7311 -93.7229 261.262 KDMX diff --git a/cave/com.raytheon.viz.pointdata/localization/menus/obs/baseSurface.xml b/cave/com.raytheon.viz.pointdata/localization/menus/obs/baseSurface.xml index 4d8560ee18..a0459170ce 100644 --- a/cave/com.raytheon.viz.pointdata/localization/menus/obs/baseSurface.xml +++ b/cave/com.raytheon.viz.pointdata/localization/menus/obs/baseSurface.xml @@ -1,5 +1,7 @@ + diff --git a/cave/com.raytheon.viz.pointdata/localization/plotModels/ldadHydro15minPrecipDesign.svg b/cave/com.raytheon.viz.pointdata/localization/plotModels/ldadHydro15minPrecipDesign.svg deleted file mode 100644 index f50c755ba8..0000000000 --- a/cave/com.raytheon.viz.pointdata/localization/plotModels/ldadHydro15minPrecipDesign.svg +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - - - 75 - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.pointdata/localization/plotModels/ldadHydro1hrPrecipDesign.svg b/cave/com.raytheon.viz.pointdata/localization/plotModels/ldadHydro1hrPrecipDesign.svg deleted file mode 100644 index a2c07f7fc5..0000000000 --- a/cave/com.raytheon.viz.pointdata/localization/plotModels/ldadHydro1hrPrecipDesign.svg +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - - - 75 - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.pointdata/localization/plotModels/ldadHydro30minPrecipDesign.svg b/cave/com.raytheon.viz.pointdata/localization/plotModels/ldadHydro30minPrecipDesign.svg deleted file mode 100644 index b4617d8fa3..0000000000 --- a/cave/com.raytheon.viz.pointdata/localization/plotModels/ldadHydro30minPrecipDesign.svg +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - - - 75 - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.pointdata/localization/plotModels/ldadHydro3hrPrecipDesign.svg b/cave/com.raytheon.viz.pointdata/localization/plotModels/ldadHydro3hrPrecipDesign.svg deleted file mode 100644 index 0927284a3c..0000000000 --- a/cave/com.raytheon.viz.pointdata/localization/plotModels/ldadHydro3hrPrecipDesign.svg +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - - - 75 - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.pointdata/localization/plotModels/ldadHydro5minPrecipDesign.svg b/cave/com.raytheon.viz.pointdata/localization/plotModels/ldadHydro5minPrecipDesign.svg deleted file mode 100644 index 750bc2d600..0000000000 --- a/cave/com.raytheon.viz.pointdata/localization/plotModels/ldadHydro5minPrecipDesign.svg +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - - - 75 - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.pointdata/localization/plotModels/ldadMesoDesign.svg b/cave/com.raytheon.viz.pointdata/localization/plotModels/ldadMesoDesign.svg deleted file mode 100644 index 161e36263f..0000000000 --- a/cave/com.raytheon.viz.pointdata/localization/plotModels/ldadMesoDesign.svg +++ /dev/null @@ -1,200 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - arrow - - - - - 75 - 59 - 018 - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.pointdata/localization/plotModels/ldadMesoHiWcDesign.svg b/cave/com.raytheon.viz.pointdata/localization/plotModels/ldadMesoHiWcDesign.svg deleted file mode 100644 index 43b8c2744a..0000000000 --- a/cave/com.raytheon.viz.pointdata/localization/plotModels/ldadMesoHiWcDesign.svg +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - - - - 75 - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.pointdata/localization/plotModels/ldadQCallDesign.svg b/cave/com.raytheon.viz.pointdata/localization/plotModels/ldadQCallDesign.svg deleted file mode 100644 index 520c764626..0000000000 --- a/cave/com.raytheon.viz.pointdata/localization/plotModels/ldadQCallDesign.svg +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - - - - 0 - - 0 - - arrow - - 0 - - 75 - 59 - 018 - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.pointdata/localization/plotModels/ldadQCfailDesign.svg b/cave/com.raytheon.viz.pointdata/localization/plotModels/ldadQCfailDesign.svg deleted file mode 100644 index 3cce4e9a41..0000000000 --- a/cave/com.raytheon.viz.pointdata/localization/plotModels/ldadQCfailDesign.svg +++ /dev/null @@ -1,125 +0,0 @@ - - - - - - - - - 0 - - 0 - arrow - - 0 - - 75 - 59 - 018 - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.product.awips/awips.product b/cave/com.raytheon.viz.product.awips/awips.product index 3d1dd2d353..941df92cf5 100644 --- a/cave/com.raytheon.viz.product.awips/awips.product +++ b/cave/com.raytheon.viz.product.awips/awips.product @@ -84,7 +84,6 @@ - @@ -95,7 +94,6 @@ - @@ -105,7 +103,9 @@ + + @@ -117,6 +117,8 @@ + + diff --git a/cave/com.raytheon.viz.product.awips/icons/awipsLogo.png b/cave/com.raytheon.viz.product.awips/icons/awipsLogo.png new file mode 100644 index 0000000000..60e9e344ef Binary files /dev/null and b/cave/com.raytheon.viz.product.awips/icons/awipsLogo.png differ diff --git a/cave/com.raytheon.viz.product.awips/icons/cave_128x128.png b/cave/com.raytheon.viz.product.awips/icons/cave_128x128.png new file mode 100755 index 0000000000..c674357a67 Binary files /dev/null and b/cave/com.raytheon.viz.product.awips/icons/cave_128x128.png differ diff --git a/cave/com.raytheon.viz.product.awips/icons/cave_16x16.png b/cave/com.raytheon.viz.product.awips/icons/cave_16x16.png new file mode 100755 index 0000000000..60e9e344ef Binary files /dev/null and b/cave/com.raytheon.viz.product.awips/icons/cave_16x16.png differ diff --git a/cave/com.raytheon.viz.product.awips/icons/cave_256x256.png b/cave/com.raytheon.viz.product.awips/icons/cave_256x256.png new file mode 100644 index 0000000000..d3889baf1a Binary files /dev/null and b/cave/com.raytheon.viz.product.awips/icons/cave_256x256.png differ diff --git a/cave/com.raytheon.viz.product.awips/icons/cave_32x32.png b/cave/com.raytheon.viz.product.awips/icons/cave_32x32.png new file mode 100755 index 0000000000..14240043f0 Binary files /dev/null and b/cave/com.raytheon.viz.product.awips/icons/cave_32x32.png differ diff --git a/cave/com.raytheon.viz.product.awips/icons/cave_48x48.png b/cave/com.raytheon.viz.product.awips/icons/cave_48x48.png new file mode 100755 index 0000000000..08b2f5ffa4 Binary files /dev/null and b/cave/com.raytheon.viz.product.awips/icons/cave_48x48.png differ diff --git a/cave/com.raytheon.viz.product.awips/icons/cave_64x64.png b/cave/com.raytheon.viz.product.awips/icons/cave_64x64.png new file mode 100755 index 0000000000..4429370b7c Binary files /dev/null and b/cave/com.raytheon.viz.product.awips/icons/cave_64x64.png differ diff --git a/cave/com.raytheon.viz.product.awips/icons/ipr.gif b/cave/com.raytheon.viz.product.awips/icons/ipr.gif new file mode 100644 index 0000000000..bf385e5e98 Binary files /dev/null and b/cave/com.raytheon.viz.product.awips/icons/ipr.gif differ diff --git a/cave/com.raytheon.viz.product.awips/icons/sample.gif b/cave/com.raytheon.viz.product.awips/icons/sample.gif new file mode 100644 index 0000000000..34fb3c9d8c Binary files /dev/null and b/cave/com.raytheon.viz.product.awips/icons/sample.gif differ diff --git a/cave/com.raytheon.viz.product.awips/nawips.product b/cave/com.raytheon.viz.product.awips/nawips.product deleted file mode 100644 index cc7d333fe7..0000000000 --- a/cave/com.raytheon.viz.product.awips/nawips.product +++ /dev/null @@ -1,125 +0,0 @@ - - - - - - - - - %caveAboutText - - - - - - - - -data @user.home/caveData -user @user.home/caveData - - -consoleLog - - -XX:+UseG1GC --Dosgi.instance.area.readOnly=true --Dorg.eclipse.update.reconcile=false --Dorg.eclipse.swt.internal.gtk.cairoGraphics=false --Dorg.eclipse.ui/KEY_CONFIGURATION_ID=com.raytheon.viz.ui.cave.scheme --Dqpid.dest_syntax=BURL --Dlogback.configurationFile=logback-viz-core.xml --Dlogback.statusListenerClass=com.raytheon.uf.common.logback.UFLogbackInternalStatusListener --Dthrift.stream.maxsize=200 --Dviz.memory.warn.threshold=10M --Dhttps.certificate.check=true --XX:+UnlockExperimentalVMOptions --XX:G1HeapRegionSize=4M --XX:InitiatingHeapOccupancyPercent=25 --XX:G1MixedGCCountTarget=16 --XX:G1MixedGCLiveThresholdPercent=25 --XX:G1OldCSetRegionThresholdPercent=25 --XX:G1HeapWastePercent=5 --XX:SoftRefLRUPolicyMSPerMB=1000 - - -Xmx3072M -XX:MaxDirectMemorySize=2G --XX:OnOutOfMemoryError="capture -t no -p $pid &" - - -XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts - - - - - - - - - - - - - - - jdk1.7.0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/cave/com.raytheon.viz.product.awips/thinclient.product b/cave/com.raytheon.viz.product.awips/thinclient.product deleted file mode 100644 index a9dd021f74..0000000000 --- a/cave/com.raytheon.viz.product.awips/thinclient.product +++ /dev/null @@ -1,138 +0,0 @@ - - - - - - - - - %caveAboutText - - - - - - - - -data @user.home/caveData -user @user.home/caveData -alertviz -vm "C:/Program Files/Raytheon/AWIPS II/Java/jre/bin/javaw.exe" - - -consoleLog - - -XX:+UseG1GC --Dosgi.instance.area.readOnly=true --Dorg.eclipse.update.reconcile=false --Dorg.eclipse.ui/KEY_CONFIGURATION_ID=com.raytheon.viz.ui.cave.scheme --Dqpid.dest_syntax=BURL --Dlogback.configurationFile=logback-viz-alertview.xml --Dlogback.statusListenerClass=com.raytheon.uf.common.logback.UFLogbackInternalStatusListener --Dthrift.stream.maxsize=200 --Dd2d.sat.background.load=false --Dviz.memory.warn.threshold=10M --Dhttps.certificate.check=true --XX:+UnlockExperimentalVMOptions --XX:G1HeapRegionSize=4M --XX:InitiatingHeapOccupancyPercent=25 --XX:G1MixedGCCountTarget=16 --XX:G1MixedGCLiveThresholdPercent=25 --XX:G1OldCSetRegionThresholdPercent=25 --XX:G1HeapWastePercent=5 --XX:SoftRefLRUPolicyMSPerMB=1000 - - -Dfile.encoding=UTF-8 -Xmx2560M - - - - - - - - - - - - - - - - jdk1.7.0 - jdk1.7.0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/cave/com.raytheon.viz.satellite/localization/bundles/DefaultSatellite.xml b/cave/com.raytheon.viz.satellite/localization/bundles/DefaultSatellite.xml index 2a1b853ce2..11ac13d681 100644 --- a/cave/com.raytheon.viz.satellite/localization/bundles/DefaultSatellite.xml +++ b/cave/com.raytheon.viz.satellite/localization/bundles/DefaultSatellite.xml @@ -1,28 +1,4 @@ - - + + + + + + + + + PLAN_VIEW + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PLAN_VIEW + + + + + + + + + + + + PLAN_VIEW + + + + + + + + + + + + + World + mapdata.world
    + name not in ('CANADA', 'UNITED STATES') + the_geom +
    +
    + + + PLAN_VIEW + + + + + + + + + + + + + Canada + mapdata.canada
    + the_geom +
    +
    + + + PLAN_VIEW + + + + + + + + + + + + County Boundaries + mapdata.county
    + the_geom +
    +
    + + + PLAN_VIEW + + + + + + + + + + + + State Boundaries Zoom + mapdata.states
    + the_geom +
    +
    + + + PLAN_VIEW + + + + + + + + + + + + + State Boundaries + mapdata.states
    + the_geom +
    +
    + State/County Boundaries +
    +
    + 2147483647 + + PROJCS["Geostationary", + GEOGCS["WGS84(DD)", + DATUM["WGS84", + SPHEROID["WGS84", 6378137.0, 298.257223563]], + PRIMEM["Greenwich", 0.0], + UNIT["degree", 0.017453292519943295], + AXIS["Geodetic longitude", EAST], + AXIS["Geodetic latitude", NORTH]], + PROJECTION["Geostationary"], + PARAMETER["semi_major", 6371229.0], + PARAMETER["semi_minor", 6371229.0], + PARAMETER["central_meridian", -75.0], + PARAMETER["latitude_of_origin", 0.0], + PARAMETER["false_easting", 0.0], + PARAMETER["false_northing", 0.0], + PARAMETER["orbital_height", 35800000.0], + PARAMETER["sweep_axis", 0.0], + UNIT["m", 1.0], + AXIS["Easting", EAST], + AXIS["Northing", NORTH]] + + +
    +
    +
    + + 250 + 1050 + 700 + 1500 + Forward + true + +
    + + + + + + + PLAN_VIEW + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PLAN_VIEW + + + + + + + + + + + + PLAN_VIEW + + + + + + + + + + + + + World + mapdata.world
    + the_geom +
    +
    + + + PLAN_VIEW + + + + + + + + + + + + + Canada + mapdata.canada
    + the_geom +
    +
    + + + PLAN_VIEW + + + + + + + + + + + + County Boundaries + mapdata.county
    + the_geom +
    +
    + + + PLAN_VIEW + + + + + + + + + + + + State Boundaries Zoom + mapdata.states
    + the_geom +
    +
    + + + PLAN_VIEW + + + + + + + + + + + + + State Boundaries + mapdata.states
    + the_geom +
    +
    + State/County Boundaries +
    +
    + 8 + + PROJCS["Geostationary", + GEOGCS["WGS84(DD)", + DATUM["WGS84", + SPHEROID["WGS84", 6378137.0, 298.257223563]], + PRIMEM["Greenwich", 0.0], + UNIT["degree", 0.017453292519943295], + AXIS["Geodetic longitude", EAST], + AXIS["Geodetic latitude", NORTH]], + PROJECTION["Geostationary"], + PARAMETER["semi_major", 6371229.0], + PARAMETER["semi_minor", 6371229.0], + PARAMETER["central_meridian", -75.0], + PARAMETER["latitude_of_origin", 0.0], + PARAMETER["false_easting", 0.0], + PARAMETER["false_northing", 0.0], + PARAMETER["orbital_height", 35800000.0], + PARAMETER["sweep_axis", 0.0], + UNIT["m", 1.0], + AXIS["Easting", EAST], + AXIS["Northing", NORTH]] + + 1 + +
    +
    +
    + + 250 + 1050 + 700 + 1500 + Forward + true + +
    + + + + + + + PLAN_VIEW + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PLAN_VIEW + + + + + + + + + + + + PLAN_VIEW + + + + + + + + + + + + + World + mapdata.world
    + name not in ('CANADA', 'UNITED STATES') + the_geom +
    +
    + + + PLAN_VIEW + + + + + + + + + + + + + Canada + mapdata.canada
    + the_geom +
    +
    + + + PLAN_VIEW + + + + + + + + + + + + County Boundaries + mapdata.county
    + the_geom +
    +
    + + + PLAN_VIEW + + + + + + + + + + + + State Boundaries Zoom + mapdata.states
    + the_geom +
    +
    + + + PLAN_VIEW + + + + + + + + + + + + + State Boundaries + mapdata.states
    + the_geom +
    +
    + State/County Boundaries +
    +
    + + + PLAN_VIEW + + + + + + + + + + + + + + Cities + mapdata.city
    + the_geom + prog_disc +
    +
    + 8 + + PROJCS["Geostationary", + GEOGCS["WGS84(DD)", + DATUM["WGS84", + SPHEROID["WGS84", 6378137.0, 298.257223563]], + PRIMEM["Greenwich", 0.0], + UNIT["degree", 0.017453292519943295], + AXIS["Geodetic longitude", EAST], + AXIS["Geodetic latitude", NORTH]], + PROJECTION["Geostationary"], + PARAMETER["semi_major", 6371229.0], + PARAMETER["semi_minor", 6371229.0], + PARAMETER["central_meridian", -75.0], + PARAMETER["latitude_of_origin", 0.0], + PARAMETER["false_easting", 0.0], + PARAMETER["false_northing", 0.0], + PARAMETER["orbital_height", 35800000.0], + PARAMETER["sweep_axis", 0.0], + UNIT["m", 1.0], + AXIS["Easting", EAST], + AXIS["Northing", NORTH]] + + 1 + +
    +
    +
    + + 250 + 1050 + 700 + 1500 + Forward + true + +
    + + + + + + + PLAN_VIEW + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PLAN_VIEW + + + + + + + + + + + + PLAN_VIEW + + + + + + + + + + + + + World + mapdata.world
    + name not in ('CANADA', 'UNITED STATES') + the_geom +
    +
    + + + PLAN_VIEW + + + + + + + + + + + + + Canada + mapdata.canada
    + the_geom +
    +
    + + + PLAN_VIEW + + + + + + + + + + + + County Boundaries + mapdata.county
    + the_geom +
    +
    + + + PLAN_VIEW + + + + + + + + + + + + State Boundaries Zoom + mapdata.states
    + the_geom +
    +
    + + + PLAN_VIEW + + + + + + + + + + + + + State Boundaries + mapdata.states
    + the_geom +
    +
    + State/County Boundaries +
    +
    + + + PLAN_VIEW + + + + + + + + + + + + + + Cities + mapdata.city
    + the_geom + prog_disc +
    +
    + 8 + + PROJCS["Geostationary", + GEOGCS["WGS84(DD)", + DATUM["WGS84", + SPHEROID["WGS84", 6378137.0, 298.257223563]], + PRIMEM["Greenwich", 0.0], + UNIT["degree", 0.017453292519943295], + AXIS["Geodetic longitude", EAST], + AXIS["Geodetic latitude", NORTH]], + PROJECTION["Geostationary"], + PARAMETER["semi_major", 6371229.0], + PARAMETER["semi_minor", 6371229.0], + PARAMETER["central_meridian", -75.0], + PARAMETER["latitude_of_origin", 0.0], + PARAMETER["false_easting", 0.0], + PARAMETER["false_northing", 0.0], + PARAMETER["orbital_height", 35800000.0], + PARAMETER["sweep_axis", 0.0], + UNIT["m", 1.0], + AXIS["Easting", EAST], + AXIS["Northing", NORTH]] + + 1 + +
    +
    +
    + + 250 + 1050 + 700 + 1500 + Forward + true + +
    + + + + + + + PLAN_VIEW + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PLAN_VIEW + + + + + + + + + + + + PLAN_VIEW + + + + + + + + + + + + + World + mapdata.world
    + the_geom +
    +
    + + + PLAN_VIEW + + + + + + + + + + + + County Boundaries + mapdata.county
    + the_geom +
    +
    + State/County Boundaries +
    +
    + 8 + + PROJCS["Mercator (SP: 20.0, CM: 0.0)", + GEOGCS["WGS84(DD)", + DATUM["WGS84", + SPHEROID["WGS84", 6378137.0, 298.257223563]], + PRIMEM["Greenwich", 0.0], + UNIT["degree", 0.017453292519943295], + AXIS["Geodetic longitude", EAST], + AXIS["Geodetic latitude", NORTH]], + PROJECTION["Mercator_2SP"], + PARAMETER["semi_major", 6371229.0], + PARAMETER["semi_minor", 6371229.0], + PARAMETER["standard_parallel_1", 20.0], + PARAMETER["latitude_of_origin", 0.0], + PARAMETER["central_meridian", 0.0], + PARAMETER["false_easting", 0.0], + PARAMETER["false_northing", 0.0], + UNIT["m", 1.0], + AXIS["Easting", EAST], + AXIS["Northing", NORTH]] + + 1 + +
    +
    +
    + + 250 + 1050 + 700 + 1500 + Forward + true + +
    +
    + <?xml version="1.0" encoding="UTF-8"?> +<perspectiveLayout> +<info part="PartStack@492d38a2"/> +</perspectiveLayout> +
    diff --git a/cave/com.raytheon.viz.satellite/localization/bundles/GOES17Display.xml b/cave/com.raytheon.viz.satellite/localization/bundles/GOES17Display.xml new file mode 100644 index 0000000000..280ffc26ca --- /dev/null +++ b/cave/com.raytheon.viz.satellite/localization/bundles/GOES17Display.xml @@ -0,0 +1,1022 @@ + + + + + + + + + + PLAN_VIEW + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PLAN_VIEW + + + + + + + + + + + + PLAN_VIEW + + + + + + + + + + + + + World + mapdata.world
    + name not in ('CANADA', 'UNITED STATES') + the_geom +
    +
    + + + PLAN_VIEW + + + + + + + + + + + + + Canada + mapdata.canada
    + the_geom +
    +
    + + + PLAN_VIEW + + + + + + + + + + + + County Boundaries + mapdata.county
    + the_geom +
    +
    + + + PLAN_VIEW + + + + + + + + + + + + State Boundaries Zoom + mapdata.states
    + the_geom +
    +
    + + + PLAN_VIEW + + + + + + + + + + + + + State Boundaries + mapdata.states
    + the_geom +
    +
    + State/County Boundaries +
    +
    + 2147483647 + + PROJCS["Geostationary", + GEOGCS["WGS84(DD)", + DATUM["WGS84", + SPHEROID["WGS84", 6378137.0, 298.257223563]], + PRIMEM["Greenwich", 0.0], + UNIT["degree", 0.017453292519943295], + AXIS["Geodetic longitude", EAST], + AXIS["Geodetic latitude", NORTH]], + PROJECTION["Geostationary"], + PARAMETER["semi_major", 6371229.0], + PARAMETER["semi_minor", 6371229.0], + PARAMETER["central_meridian", -138.0], + PARAMETER["latitude_of_origin", 0.0], + PARAMETER["false_easting", 0.0], + PARAMETER["false_northing", 0.0], + PARAMETER["orbital_height", 35800000.0], + PARAMETER["sweep_axis", 0.0], + UNIT["m", 1.0], + AXIS["Easting", EAST], + AXIS["Northing", NORTH]] + + +
    +
    +
    + + 250 + 1050 + 700 + 1500 + Forward + true + +
    + + + + + + + PLAN_VIEW + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PLAN_VIEW + + + + + + + + + + + + PLAN_VIEW + + + + + + + + + + + + + World + mapdata.world
    + the_geom +
    +
    + + + PLAN_VIEW + + + + + + + + + + + + + Canada + mapdata.canada
    + the_geom +
    +
    + + + PLAN_VIEW + + + + + + + + + + + + County Boundaries + mapdata.county
    + the_geom +
    +
    + + + PLAN_VIEW + + + + + + + + + + + + State Boundaries Zoom + mapdata.states
    + the_geom +
    +
    + + + PLAN_VIEW + + + + + + + + + + + + + State Boundaries + mapdata.states
    + the_geom +
    +
    + State/County Boundaries +
    +
    + 8 + + PROJCS["Geostationary", + GEOGCS["WGS84(DD)", + DATUM["WGS84", + SPHEROID["WGS84", 6378137.0, 298.257223563]], + PRIMEM["Greenwich", 0.0], + UNIT["degree", 0.017453292519943295], + AXIS["Geodetic longitude", EAST], + AXIS["Geodetic latitude", NORTH]], + PROJECTION["Geostationary"], + PARAMETER["semi_major", 6371229.0], + PARAMETER["semi_minor", 6371229.0], + PARAMETER["central_meridian", -138.0], + PARAMETER["latitude_of_origin", 0.0], + PARAMETER["false_easting", 0.0], + PARAMETER["false_northing", 0.0], + PARAMETER["orbital_height", 35800000.0], + PARAMETER["sweep_axis", 0.0], + UNIT["m", 1.0], + AXIS["Easting", EAST], + AXIS["Northing", NORTH]] + + 1 + +
    +
    +
    + + 250 + 1050 + 700 + 1500 + Forward + true + +
    + + + + + + + PLAN_VIEW + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PLAN_VIEW + + + + + + + + + + + + PLAN_VIEW + + + + + + + + + + + + + World + mapdata.world
    + name not in ('CANADA', 'UNITED STATES') + the_geom +
    +
    + + + PLAN_VIEW + + + + + + + + + + + + + Canada + mapdata.canada
    + the_geom +
    +
    + + + PLAN_VIEW + + + + + + + + + + + + County Boundaries + mapdata.county
    + the_geom +
    +
    + + + PLAN_VIEW + + + + + + + + + + + + State Boundaries Zoom + mapdata.states
    + the_geom +
    +
    + + + PLAN_VIEW + + + + + + + + + + + + + State Boundaries + mapdata.states
    + the_geom +
    +
    + State/County Boundaries +
    +
    + 8 + + PROJCS["Geostationary", + GEOGCS["WGS84(DD)", + DATUM["WGS84", + SPHEROID["WGS84", 6378137.0, 298.257223563]], + PRIMEM["Greenwich", 0.0], + UNIT["degree", 0.017453292519943295], + AXIS["Geodetic longitude", EAST], + AXIS["Geodetic latitude", NORTH]], + PROJECTION["Geostationary"], + PARAMETER["semi_major", 6371229.0], + PARAMETER["semi_minor", 6371229.0], + PARAMETER["central_meridian", -138.0], + PARAMETER["latitude_of_origin", 0.0], + PARAMETER["false_easting", 0.0], + PARAMETER["false_northing", 0.0], + PARAMETER["orbital_height", 35800000.0], + PARAMETER["sweep_axis", 0.0], + UNIT["m", 1.0], + AXIS["Easting", EAST], + AXIS["Northing", NORTH]] + + 1 + +
    +
    +
    + + 250 + 1050 + 700 + 1500 + Forward + true + +
    + + + + + + + PLAN_VIEW + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PLAN_VIEW + + + + + + + + + + + + PLAN_VIEW + + + + + + + + + + + + + State Boundaries + mapdata.states
    + the_geom +
    +
    + State/County Boundaries +
    +
    + + + PLAN_VIEW + + + + + + + + + + + + + PLAN_VIEW + + + + + + + + + + + + + Latitude/Longitude + mapdata.latlon10
    + the_geom +
    +
    + + + PLAN_VIEW + + + + + + + + + + + + + + latlon10.lpi + + + Latitude/Longitude +
    +
    + + + PLAN_VIEW + + + + + + + + + + + + + + Cities + mapdata.city
    + the_geom + prog_disc +
    +
    + + + PLAN_VIEW + + + + + + + + + + + basemaps/raob.spi + RAOB Station Locations + + + 8 + + PROJCS["Mercator_1SP", + GEOGCS["WGS84(DD)", + DATUM["WGS84", + SPHEROID["WGS84", 6378137.0, 298.257223563]], + PRIMEM["Greenwich", 0.0], + UNIT["degree", 0.017453292519943295], + AXIS["Geodetic longitude", EAST], + AXIS["Geodetic latitude", NORTH]], + PROJECTION["Mercator_1SP"], + PARAMETER["semi_major", 6371200.0], + PARAMETER["semi_minor", 6371200.0], + PARAMETER["latitude_of_origin", 0.0], + PARAMETER["central_meridian", -158.5], + PARAMETER["scale_factor", 1.0], + PARAMETER["false_easting", 0.0], + PARAMETER["false_northing", 0.0], + UNIT["m", 1.0], + AXIS["Easting", EAST], + AXIS["Northing", NORTH]] + + 1 + +
    +
    +
    + + 250 + 1050 + 700 + 1500 + Forward + true + +
    + + + + + + + PLAN_VIEW + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PLAN_VIEW + + + + + + + + + + + + PLAN_VIEW + + + + + + + + + + + + + World + mapdata.world
    + the_geom +
    +
    + + + PLAN_VIEW + + + + + + + + + + + + + Canada + mapdata.canada
    + the_geom +
    +
    + + + PLAN_VIEW + + + + + + + + + + + + County Boundaries + mapdata.county
    + the_geom +
    +
    + + + PLAN_VIEW + + + + + + + + + + + + + State Boundaries Zoom + mapdata.states
    + the_geom +
    +
    + State/County Boundaries +
    +
    + + + PLAN_VIEW + + + + + + + + + + + + + + Cities + mapdata.city
    + the_geom + prog_disc +
    +
    + + + PLAN_VIEW + + + + + + + + + + + + + PLAN_VIEW + + + + + + + + + + + + + Latitude/Longitude + mapdata.latlon10
    + the_geom +
    +
    + + + PLAN_VIEW + + + + + + + + + + + + + + latlon10.lpi + + + Latitude/Longitude +
    +
    + 8 + + PROJCS["AWIPS Polar Stereographic (SP: 60.0, CM: -150.0)", + GEOGCS["WGS84(DD)", + DATUM["WGS84", + SPHEROID["WGS84", 6378137.0, 298.257223563]], + PRIMEM["Greenwich", 0.0], + UNIT["degree", 0.017453292519943295], + AXIS["Geodetic longitude", EAST], + AXIS["Geodetic latitude", NORTH]], + PROJECTION["Stereographic_North_Pole"], + PARAMETER["semi_major", 6371229.0], + PARAMETER["semi_minor", 6371229.0], + PARAMETER["central_meridian", -150.0], + PARAMETER["Standard_Parallel_1", 60.0], + PARAMETER["scale_factor", 1.0], + PARAMETER["false_easting", 0.0], + PARAMETER["false_northing", 0.0], + UNIT["m", 1.0], + AXIS["Easting", EAST], + AXIS["Northing", NORTH]] + + 1 + +
    +
    +
    + + 250 + 1050 + 700 + 1500 + Forward + true + +
    +
    + <?xml version="1.0" encoding="UTF-8"?> +<perspectiveLayout> +<info part="PartStack@492d38a2"/> +</perspectiveLayout> +
    diff --git a/cave/com.raytheon.viz.satellite/localization/menus/satellite/goesr/goesrMenu.xml b/cave/com.raytheon.viz.satellite/localization/menus/satellite/goesr/goesrMenu.xml index 09ebb93690..ead1583f90 100644 --- a/cave/com.raytheon.viz.satellite/localization/menus/satellite/goesr/goesrMenu.xml +++ b/cave/com.raytheon.viz.satellite/localization/menus/satellite/goesr/goesrMenu.xml @@ -1,59 +1,125 @@ - - - - - - - - - - - - - - - - - - + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + @@ -91,27 +157,4 @@ - - - - - - - - - - - - - - - - - - - diff --git a/cave/com.raytheon.viz.spi/localization/basemaps/88Dvb.spi b/cave/com.raytheon.viz.spi/localization/basemaps/88Dvb.spi deleted file mode 100755 index 01d3fca740..0000000000 --- a/cave/com.raytheon.viz.spi/localization/basemaps/88Dvb.spi +++ /dev/null @@ -1,206 +0,0 @@ - 3001 TADW 38.6950 -76.8450 113 47.694 - 3002 TATL 33.6470 -84.2620 352 42.259 - 3003 TBNA 35.9800 -86.6620 268 31.022 - 3004 TBOS 42.1580 -70.9330 86 28.083 - 3005 TBWI 39.0900 -76.6300 97 74.319 - 3006 TCLE 41.2900 -82.0080 305 18.453 - 3007 TCLT 35.3370 -80.8850 285 195.450 - 3008 TCMH 40.0060 -82.7200 376 114.532 - 3009 TCVG 38.8980 -84.5800 345 87.436 - 3010 TDAL 32.9260 -96.9680 204 16.142 - 3011 TDAY 40.0220 -84.1230 333 71.685 - 3012 TDCA 38.7590 -76.9620 112 12.393 - 3013 TDEN 39.7280 -104.5300 1870 6.665 - 3014 TDFW 33.0650 -96.9180 191 65.463 - 3015 TDTW 42.1110 -83.5150 253 65.547 - 3016 TEWR 40.5930 -74.2700 44 32.844 - 3017 TFLL 26.1260 -80.3350 39 57.772 - 3018 THOU 29.5160 -95.2420 38 16.499 - 3019 TIAD 39.0840 -77.5290 155 12.869 - 3020 TIAH 30.0650 -95.5670 83 81.019 - 3021 TICT 37.5070 -97.4370 442 16.340 - 3022 TIND 39.6370 -86.4360 277 15.458 - 3023 TJFK 40.5890 -73.8810 36 84.357 - 3024 TLAS 36.1440 -115.0070 674 50.329 - 3025 TMCI 39.4980 -94.7420 357 86.918 - 3026 TMCO 28.3440 -81.3260 55 70.627 - 3027 TMDW 41.6510 -87.7300 250 29.922 - 3028 TMEM 34.8960 -89.9930 158 51.059 - 3029 TMIA 25.7580 -80.4910 40 18.114 - 3030 TMKE 42.8190 -88.0460 306 44.305 - 3031 TMSP 44.8710 -92.9330 367 49.913 - 3032 TMSY 30.0220 -90.4030 32 254.179 - 3033 TOKC 35.2760 -97.5100 429 6.159 - 3034 TORD 41.7970 -87.8580 243 19.398 - 3035 TPBI 26.6880 -80.2730 43 120.537 - 3036 TPHL 39.9490 -75.0690 50 56.100 - 3037 TPHX 33.4210 -112.1600 357 47.805 - 3038 TPIT 40.5010 -80.4860 454 22.899 - 3039 TRDU 36.0020 -78.6970 168 41.808 - 3040 TSDF 38.0460 -85.6100 239 30.286 - 3041 TSJU 18.4770 -66.1790 51 4363.212 - 3042 TSLC 40.9670 -111.9300 1408 54.429 - 3043 TSTL 38.8050 -90.4890 211 20.531 - 3044 TTPA 27.8600 -82.5180 30 20.628 - 3045 TTUL 36.0710 -95.8270 270 26.305 - 0 KFTG 39.7867 -104.5458 1803 150.876 - 1 PAHG 60.7258 -151.3514 79 313.045 - 2 PACG 56.8528 -135.5292 67 7450.065 - 3 PAPD 65.0350 -147.5017 850 842.316 - 4 PAEC 64.5114 -165.2950 17 1806.983 - 5 PAKC 58.6794 -156.6294 20 792.520 - 8 PABC 60.7919 -161.8764 52 376.107 - 9 PAIH 59.4614 -146.3031 21 595.827 - 10 PHKM 20.1256 -155.7778 1250 116.650 - 11 PHMO 21.1328 -157.1800 447 259.549 - 12 PHKI 21.8942 -159.5522 58 518.528 - 13 PHWA 19.0950 -155.5689 452 4513.304 - 14 KBOX 41.9558 -71.1369 38 420.733 - 15 KPBZ 40.5317 -80.2181 388 169.083 - 16 KDDC 37.7608 -99.9689 849 233.397 - 17 KEAX 38.8097 -94.2639 326 310.707 - 18 KGLD 39.3658 -101.6997 1197 297.648 - 19 KICT 37.6539 -97.4428 437 222.500 - 20 KICX 37.5908 -112.8622 3477 589.546 - 21 KINX 36.1750 -95.5639 219 521.543 - 22 KMTX 41.2628 -112.4478 2125 383.678 - 23 KTWX 38.9969 -96.2319 448 171.534 - 24 KTLX 35.3331 -97.2778 397 180.752 - 25 KFDR 34.3622 -98.9764 415 252.275 - 27 KVNX 36.7408 -98.1278 396 118.259 - 28 KMPX 44.8489 -93.5656 310 220.593 - 29 KDLH 46.8369 -92.2097 468 1861.106 - 30 KBIS 46.7708 -100.7606 543 180.467 - 31 KMBX 48.3925 -100.8650 489 280.463 - 32 KUEX 40.3208 -98.4419 648 880.702 - 33 KGRK 30.7219 -97.3831 176 129.041 - 34 KFWS 32.5731 -97.3031 224 431.056 - 35 KDYX 32.5383 -99.2544 497 182.891 - 36 KLIX 30.3367 -89.8256 7 65.601 - 37 KCCX 40.9231 -78.0036 789 368.299 - 38 KDIX 39.9469 -74.4108 48 322.790 - 39 KOKX 40.8656 -72.8639 27 166.074 - 40 KRTX 45.7147 -122.9653 515 277.978 - 41 KCBX 43.4906 -116.2356 1004 629.511 - 42 KILN 39.4203 -83.8217 346 213.120 - 43 KIND 39.7075 -86.2803 259 407.201 - 44 KJKL 37.5908 -83.3131 447 158.313 - 45 KLVX 37.9753 -85.9439 235 158.932 - 46 KHPX 36.7367 -87.2850 188 84.450 - 47 KPAH 37.0683 -88.7719 128 161.418 - 48 KHGX 29.4719 -95.0792 5 193.894 - 49 KFFC 33.3636 -84.5658 281 223.255 - 50 KVAX 30.8903 -83.0017 58 132.200 - 51 KJGX 32.6753 -83.3511 170 136.667 - 52 KMLB 28.1133 -80.6542 11 177.566 - 53 KAMA 35.2333 -101.7092 1176 368.464 - 54 KTFX 47.4597 -111.3853 1227 201.705 - 55 KMSX 47.0411 -113.9861 2601 432.154 - 56 KATX 48.1944 -122.4958 162 867.399 - 57 KOTX 47.6803 -117.6267 782 240.154 - 58 KDTX 42.6997 -83.4717 351 828.241 - 59 KGRR 42.8939 -85.5447 255 170.480 - 60 KMQT 46.5311 -87.5483 462 357.094 - 61 KAPX 44.9072 -84.7197 480 265.058 - 63 KBYX 24.5975 -81.7031 3 352.511 - 64 KAMX 25.6111 -80.4128 4 171.966 - 65 KCRP 27.7842 -97.5111 14 207.892 - 66 KDFX 29.2728 -100.2806 371 348.553 - 67 KEWX 29.7039 -98.0283 207 223.170 - 68 KBRO 25.9161 -97.4189 7 814.900 - 69 KCLE 41.4131 -81.8597 250 195.357 - 70 KRLX 38.3111 -81.7228 360 191.626 - 71 KBBX 39.4961 -121.6317 56 187.978 - 72 KDAX 38.5011 -121.6778 9 110.694 - 73 KMUX 37.1553 -121.8983 1138 222.502 - 74 PGUA 13.4556 144.8111 89 14152.670 - 75 KILX 40.1506 -89.3369 190 193.178 - 76 KLOT 41.6047 -88.0847 217 192.907 - 77 KSGF 37.2353 -93.4006 419 190.667 - 78 KLSX 38.6989 -90.6828 199 323.954 - 79 KEPZ 31.8731 -106.6981 1346 364.470 - 80 KHDX 33.0764 -106.1228 1385 144.251 - 81 KLBB 33.6542 -101.8142 1069 175.824 - 82 KMAF 31.9433 -102.1892 940 3762.060 - 83 KSJT 31.3714 -100.4925 620 172.694 - 84 KMHX 34.7761 -76.8761 10 167.175 - 85 KRAX 35.6656 -78.4897 114 186.438 - 86 KLTX 33.9894 -78.4289 20 284.462 - 87 KFSX 34.5744 -111.1978 2433 302.679 - 88 KYUX 32.4953 -114.6567 57 1173.600 - 89 KIWA 33.2892 -111.6700 446 149.376 - 90 KEMX 31.8936 -110.6303 1707 384.653 - 91 KLNX 41.9578 -100.5764 974 255.059 - 92 KOAX 41.3203 -96.3667 376 206.950 - 93 KABX 35.1497 -106.8239 1925 557.998 - 94 KFDX 34.6353 -103.6300 1525 187.264 - 95 KPOE 31.1556 -92.9758 133 116.824 - 96 KLCH 30.1253 -93.2158 4 623.701 - 97 KSHV 32.4508 -93.8414 89 265.285 - 98 KLWX 38.9753 -77.4778 89 221.139 - 99 KFCX 37.0244 -80.2739 940 290.056 - 100 KDOX 38.8256 -75.4397 16 152.828 - 101 KAKQ 36.9839 -77.0072 36 1148.702 - 102 KBHX 40.4983 -124.2919 788 1990.655 - 103 KEYX 35.0978 -117.5608 904 142.473 - 104 KESX 35.7011 -114.8914 1596 277.298 - 105 KRGX 39.7542 -119.4622 2722 382.740 - 106 KDMX 41.7311 -93.7228 321 261.254 - 107 KDVN 41.6117 -90.5808 247 595.206 - 108 KFSD 43.5878 -96.7294 469 389.814 - 109 KMRX 36.1686 -83.4017 438 577.953 - 110 KLZK 34.8364 -92.2622 186 224.540 - 111 KGWX 33.8967 -88.3289 156 214.192 - 112 KNQA 35.3447 -89.8733 92 1104.941 - 113 KOHX 36.2472 -86.5625 189 152.653 - 114 KCLX 32.6556 -81.0422 31 436.854 - 115 KCAE 33.9486 -81.1183 75 143.926 - 116 KGSP 34.8833 -82.2200 308 131.476 - 117 KCBW 46.0392 -67.8064 244 3067.950 - 118 KGYX 43.8914 -70.2564 134 226.816 - 119 KVTX 34.4117 -119.1794 894 121.052 - 120 KVBX 34.8381 -120.3969 401 178.080 - 121 KNKX 32.9189 -117.0419 313 114.141 - 122 KSOX 33.8178 -117.6358 993 313.831 - 123 KHNX 36.3142 -119.6322 79 617.209 - 124 KGRB 44.4983 -88.1114 223 230.218 - 125 KARX 43.8228 -91.1911 418 250.826 - 126 KMKX 42.9678 -88.5506 314 156.315 - 127 KBMX 33.1722 -86.7697 211 165.426 - 128 KMXX 32.5367 -85.7897 131 115.623 - 129 KEOX 31.4606 -85.4594 142 511.482 - 169 KDGX 32.2800 -89.9843 162 340.879 - 134 KMOB 30.6794 -88.2397 68 220.036 - 135 KTBW 27.7056 -82.4017 13 1947.623 - 136 KENX 42.5864 -74.0639 599 184.532 - 137 KBGM 42.1997 -75.9847 526 163.465 - 138 KBUF 42.9489 -78.7367 227 233.238 - 139 KCXX 44.5111 -73.1669 104 217.324 - 141 KLRX 40.7397 -116.8028 2254 250.847 - 142 KMAX 42.0811 -122.7172 2464 219.696 - 143 KPDT 45.6906 -118.8528 497 320.527 - 144 KCYS 41.1519 -104.8061 2010 367.919 - 145 KGJX 39.0622 -108.2139 3277 437.104 - 146 KPUX 38.4594 -104.1814 1722 237.148 - 147 KRIW 43.0661 -108.4772 1826 1339.633 - 148 KJAX 30.4847 -81.7019 10 249.312 - 149 KEVX 30.5644 -85.9214 45 108.929 - 150 KTLH 30.3975 -84.3289 20 159.977 - 151 KBLX 45.8539 -108.6067 1180 301.567 - 152 KGGW 48.2064 -106.6250 746 589.295 - 153 KSFX 43.1058 -112.6861 1467 205.839 - 154 KABR 45.4558 -98.4131 427 244.930 - 155 KMVX 47.5278 -97.3256 323 394.056 - 156 KUDX 44.1250 -102.8297 989 469.607 - 157 KHTX 34.9306 -86.0833 577 278.877 - 158 KIWX 41.3589 -85.7000 314 190.032 - 161 KSRX 35.2908 -94.3619 209 146.391 - 162 KTYX 43.7558 -75.6791 605 641.833 - 163 TJUA 18.1156 -66.0781 916 41.567 - 132 KBIX 30.5239 -88.9847 45 73.358 - 26 KCRI 35.2383 -97.4603 424 19.631 - 164 LPLA 38.7303 -27.3217 1081 20011.945 - 165 RKJK 35.9211 126.6083 25 120.815 - 166 RKSG 36.9558 127.0211 17 1187.438 - 167 RODN 26.3019 127.9097 73 2267.486 - 168 KVWX 38.2602 -87.7245 204 203.632 diff --git a/cave/com.raytheon.viz.texteditor/META-INF/MANIFEST.MF b/cave/com.raytheon.viz.texteditor/META-INF/MANIFEST.MF index 1a61ddfe6e..00e8138bc0 100644 --- a/cave/com.raytheon.viz.texteditor/META-INF/MANIFEST.MF +++ b/cave/com.raytheon.viz.texteditor/META-INF/MANIFEST.MF @@ -9,7 +9,6 @@ Require-Bundle: com.raytheon.uf.common.activetable, com.raytheon.uf.common.auth, com.raytheon.uf.common.dataplugin.radar, com.raytheon.uf.common.dataplugin.text, - com.raytheon.uf.common.dataplugin.text.subscription, com.raytheon.uf.common.dataplugin.warning, com.raytheon.uf.common.python, com.raytheon.uf.common.serialization.comm, diff --git a/cave/com.raytheon.viz.texteditor/src/com/raytheon/viz/texteditor/alarmalert/util/AlarmAlertFunctions.java b/cave/com.raytheon.viz.texteditor/src/com/raytheon/viz/texteditor/alarmalert/util/AlarmAlertFunctions.java index 50cc635eeb..1a772632e4 100644 --- a/cave/com.raytheon.viz.texteditor/src/com/raytheon/viz/texteditor/alarmalert/util/AlarmAlertFunctions.java +++ b/cave/com.raytheon.viz.texteditor/src/com/raytheon/viz/texteditor/alarmalert/util/AlarmAlertFunctions.java @@ -667,43 +667,22 @@ public class AlarmAlertFunctions { } /* - * Try to load the workstation file. If there is no workstation file then - * try to load the site file and create a new workstation file from it. If - * there is no site file, then create a new default workstation file. + * Try to load the site file. */ public static AAPACombined loadSiteAlarms(ILocalizationFileObserver listener) { - LocalizationFile workstationFile = getFile( - initLocalization(LocalizationLevel.WORKSTATION), SITE_FILE); AAPACombined aapaCombined = null; - if (workstationFile == null || !workstationFile.exists()) { - // no workstation file found. try the site file - LocalizationFile siteFile = getFile(initSiteLocalization(), - SITE_FILE); - if (siteFile == null) { - aapaCombined = createDefaultAAPACombined(); - } else { - try { - aapaCombined = loadFile(siteFile.getFile()); - } catch (FileNotFoundException e) { - aapaCombined = createDefaultAAPACombined(); - } - } - // save work file - if (workstationFile != null) { - saveAlarms(aapaCombined, workstationFile); - } + LocalizationFile siteFile = getFile(initSiteLocalization(), SITE_FILE); + if (siteFile == null) { + aapaCombined = createDefaultAAPACombined(); } else { try { - aapaCombined = loadFile(workstationFile.getFile()); + aapaCombined = loadFile(siteFile.getFile()); } catch (FileNotFoundException e) { aapaCombined = createDefaultAAPACombined(); } } - if (workstationFile != null) { - workstationFile.addFileUpdatedObserver(listener); - } return aapaCombined; } diff --git a/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gui/WarngenDialog.java b/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gui/WarngenDialog.java index ce46192bed..43268bf176 100644 --- a/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gui/WarngenDialog.java +++ b/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gui/WarngenDialog.java @@ -262,7 +262,7 @@ IWarningsArrivedListener, ISimulatedTimeChangeListener { /** "OK" button text */ private static final String OK_BTN_LABEL = "Create Text"; - /** "Restart" button text */ + /** "" button text */ private static final String RS_BTN_LABEL = "Restart"; /** "Cancel" button text */ @@ -496,16 +496,6 @@ IWarningsArrivedListener, ISimulatedTimeChangeListener { } }); - instructionsLabel = new Label(mainComposite, SWT.BOLD); - instructionsLabel.setText("Instructions:"); - - gd = new GridData(SWT.FILL, SWT.DEFAULT, true, false); - gd.heightHint = INSTRUCTIONS_HEIGHT_IN_LINES; - instructionsBox = new Text(mainComposite, SWT.BORDER | SWT.READ_ONLY - | SWT.MULTI); - instructionsBox.setText(""); - instructionsBox.setLayoutData(gd); - startTimeTimer(); } @@ -789,6 +779,14 @@ IWarningsArrivedListener, ISimulatedTimeChangeListener { }); createTrackGroup(backupTrackEditComp); createEditGroup(backupTrackEditComp); + + gd = new GridData(SWT.FILL, SWT.FILL, true, true); + gd.heightHint = 40; + instructionsBox = new Text(mainComposite, SWT.NONE | SWT.READ_ONLY + | SWT.MULTI); + instructionsBox.setText(""); + instructionsBox.setLayoutData(gd); + //instructionsBox.setSize(SWT.DEFAULT, SWT.DEFAULT); } @@ -952,7 +950,7 @@ IWarningsArrivedListener, ISimulatedTimeChangeListener { && !warngenLayer.getStormTrackState().isNonstationary()) { str += INSTRUCTION_DRAG_STORM + "\n"; } else if (warngenLayer.getStormTrackState().trackVisible) { - str += "Adjust Centroid in any Frame" + "\n"; + str += "Adjust Centroid in any Frame | "; } str += "Adjust box around Warning Area"; } @@ -961,9 +959,9 @@ IWarningsArrivedListener, ISimulatedTimeChangeListener { str = presetInstruct; } instructionsBox.setText(str); - Point p1 = instructionsBox.getSize(); - Point p2 = instructionsBox.computeSize(SWT.DEFAULT, SWT.DEFAULT); - instructionsBox.setSize(new Point(p1.x, p2.y)); + //Point p1 = instructionsBox.getSize(); + //Point p2 = instructionsBox.computeSize(SWT.DEFAULT, SWT.DEFAULT); + //instructionsBox.setSize(new Point(p1.x, p2.y)); } /** diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/AllWWA.xml b/cave/com.raytheon.viz.warnings/localization/bundles/AllWWA.xml index a6cb75cedc..bb8efe04a8 100644 --- a/cave/com.raytheon.viz.warnings/localization/bundles/AllWWA.xml +++ b/cave/com.raytheon.viz.warnings/localization/bundles/AllWWA.xml @@ -1,31 +1,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + PLAN_VIEW + + + + + + + + + + + + + + + + + + + + + + + + + + + PLAN_VIEW + + + + + + + + + + + + + + + + + + + + + + + + + + PLAN_VIEW + + + + + + + + + + + + + + + + + + + + + + + + + + + PLAN_VIEW + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cave/com.raytheon.viz.warnings/localization/menus/warnings/baseWarnings.xml b/cave/com.raytheon.viz.warnings/localization/menus/warnings/baseWarnings.xml index f6165748e9..d62b5625fc 100644 --- a/cave/com.raytheon.viz.warnings/localization/menus/warnings/baseWarnings.xml +++ b/cave/com.raytheon.viz.warnings/localization/menus/warnings/baseWarnings.xml @@ -1,29 +1,14 @@ - + + - + + + @@ -67,16 +70,13 @@ - - - - --> + --> diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/res/spring/gfe-request.xml b/edexOsgi/com.raytheon.edex.plugin.gfe/res/spring/gfe-request.xml index 780c587c21..4118389a0f 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/res/spring/gfe-request.xml +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/res/spring/gfe-request.xml @@ -76,7 +76,6 @@ - @@ -86,7 +85,6 @@ - diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/src/com/raytheon/edex/plugin/gfe/server/handler/RsyncGridsToCWFHandler.java b/edexOsgi/com.raytheon.edex.plugin.gfe/src/com/raytheon/edex/plugin/gfe/server/handler/RsyncGridsToCWFHandler.java deleted file mode 100644 index 9dd86c74ee..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/src/com/raytheon/edex/plugin/gfe/server/handler/RsyncGridsToCWFHandler.java +++ /dev/null @@ -1,76 +0,0 @@ -/** - * This software was developed and / or modified by Raytheon Company, - * pursuant to Contract DG133W-05-CQ-1067 with the US Government. - * - * U.S. EXPORT CONTROLLED TECHNICAL DATA - * This software product contains export-restricted data whose - * export/transfer/disclosure is restricted by U.S. law. Dissemination - * to non-U.S. persons whether in the United States or abroad requires - * an export license or other authorization. - * - * Contractor Name: Raytheon Company - * Contractor Address: 6825 Pine Street, Suite 340 - * Mail Stop B8 - * Omaha, NE 68106 - * 402.291.0100 - * - * See the AWIPS II Master Rights File ("Master Rights File.pdf") for - * further licensing information. - **/ -package com.raytheon.edex.plugin.gfe.server.handler; - -import java.io.IOException; - -import com.raytheon.uf.common.dataplugin.gfe.request.RsyncGridsToCWFRequest; -import com.raytheon.uf.common.serialization.comm.IRequestHandler; -import com.raytheon.uf.common.status.IUFStatusHandler; -import com.raytheon.uf.common.status.UFStatus; -import com.raytheon.uf.common.util.RunProcess; - -/** - * rsync GFE grids to CWF handler - * - *
    - * 
    - * SOFTWARE HISTORY
    - * 
    - * Date         Ticket#    Engineer    Description
    - * ------------ ---------- ----------- --------------------------
    - * Jul 15, 2015  #4013     randerso     Initial creation
    - * 
    - * 
    - * - * @author randerso - * @version 1.0 - */ - -public class RsyncGridsToCWFHandler implements - IRequestHandler { - protected static final IUFStatusHandler statusHandler = UFStatus - .getHandler(RsyncGridsToCWFHandler.class); - - @Override - public Object handleRequest(RsyncGridsToCWFRequest request) - throws Exception { - - String command = "/awips2/GFESuite/bin/rsyncGridsToCWF.sh " - + request.getSiteID(); - statusHandler.info("Running: \"" + command + "\""); - RunProcess proc; - try { - proc = RunProcess.getRunProcess().exec(command); - } catch (IOException e) { - statusHandler.error("Error executing " + command, e); - return null; - } - - int exitCode = proc.waitFor(); - if (exitCode != 0) { - statusHandler.error(command - + " terminated abnormally with exit code: " + exitCode); - } - - return null; - } - -} diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/src/com/raytheon/edex/plugin/gfe/server/handler/SendWFOMessageHandler.java b/edexOsgi/com.raytheon.edex.plugin.gfe/src/com/raytheon/edex/plugin/gfe/server/handler/SendWFOMessageHandler.java deleted file mode 100644 index c00953d10b..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/src/com/raytheon/edex/plugin/gfe/server/handler/SendWFOMessageHandler.java +++ /dev/null @@ -1,112 +0,0 @@ -/** - * This software was developed and / or modified by Raytheon Company, - * pursuant to Contract DG133W-05-CQ-1067 with the US Government. - * - * U.S. EXPORT CONTROLLED TECHNICAL DATA - * This software product contains export-restricted data whose - * export/transfer/disclosure is restricted by U.S. law. Dissemination - * to non-U.S. persons whether in the United States or abroad requires - * an export license or other authorization. - * - * Contractor Name: Raytheon Company - * Contractor Address: 6825 Pine Street, Suite 340 - * Mail Stop B8 - * Omaha, NE 68106 - * 402.291.0100 - * - * See the AWIPS II Master Rights File ("Master Rights File.pdf") for - * further licensing information. - **/ - -package com.raytheon.edex.plugin.gfe.server.handler; - -import java.util.HashMap; -import java.util.Map; - -import jep.JepException; - -import com.raytheon.edex.plugin.gfe.config.IFPServerConfig; -import com.raytheon.uf.common.dataplugin.gfe.exception.GfeException; -import com.raytheon.uf.common.dataplugin.gfe.python.GfePyIncludeUtil; -import com.raytheon.uf.common.dataplugin.gfe.request.SendWFOMessageRequest; -import com.raytheon.uf.common.dataplugin.gfe.server.message.ServerResponse; -import com.raytheon.uf.common.localization.IPathManager; -import com.raytheon.uf.common.localization.LocalizationContext; -import com.raytheon.uf.common.localization.LocalizationContext.LocalizationLevel; -import com.raytheon.uf.common.localization.LocalizationContext.LocalizationType; -import com.raytheon.uf.common.localization.LocalizationUtil; -import com.raytheon.uf.common.localization.PathManagerFactory; -import com.raytheon.uf.common.python.PyUtil; -import com.raytheon.uf.common.python.PythonScript; -import com.raytheon.uf.common.serialization.comm.IRequestHandler; - -/** - * Send WFO Message Handler - * - *
    - * 
    - * SOFTWARE HISTORY
    - * 
    - * Date         Ticket#    Engineer    Description
    - * ------------ ---------- ----------- --------------------------
    - * Feb 22, 2016  #5374     randerso     Initial creation
    - * Jul 14, 2016  #5747     dgilling     Move edex_static to common_static.
    - * 
    - * 
    - * - * @author randerso - */ -public class SendWFOMessageHandler extends BaseGfeRequestHandler implements - IRequestHandler { - - private static final String SCRIPT_PATH = LocalizationUtil.join("gfe", - "python", "isc", "sendWFOMessage.py"); - - @Override - public ServerResponse handleRequest(SendWFOMessageRequest request) { - ServerResponse response = new ServerResponse<>(); - - String siteID = request.getSiteID(); - IFPServerConfig config; - try { - config = getIfpServer(request).getConfig(); - - Map args = new HashMap<>(); - args.put("siteID", siteID); - args.put("config", config); - args.put("destSites", request.getWfos()); - args.put("message", request.getMessage()); - - IPathManager pathMgr = PathManagerFactory.getPathManager(); - LocalizationContext cx = pathMgr.getContext( - LocalizationType.COMMON_STATIC, LocalizationLevel.BASE); - final String scriptPath = pathMgr.getFile(cx, SCRIPT_PATH) - .getPath(); - final String includePath = PyUtil.buildJepIncludePath( - GfePyIncludeUtil.getCommonPythonIncludePath(), - GfePyIncludeUtil.getIscScriptsIncludePath(), - GfePyIncludeUtil.getGfeConfigIncludePath(siteID)); - - try (PythonScript script = new PythonScript(scriptPath, - includePath, SendWFOMessageHandler.class.getClassLoader())) { - try { - script.execute("runFromJava", args); - } catch (JepException e) { - String msg = "Error servicing SendWFOMessageRequest from site [" - + siteID + "]: " + e.getLocalizedMessage(); - response.addMessage(msg); - } - } catch (JepException e) { - String msg = "Error creating PythonScript object for: [" - + scriptPath + "]: " + e.getLocalizedMessage(); - response.addMessage(msg); - } - } catch (GfeException e) { - String msg = "Error retrieving site config for site [" + siteID - + "]: " + e.getLocalizedMessage(); - response.addMessage(msg); - } - - return response; - } -} diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/config/serverConfig.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/config/serverConfig.py index c4ddf674e7..85ddfc5a3d 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/config/serverConfig.py +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/config/serverConfig.py @@ -1,22 +1,4 @@ ## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## # serverConfig -- base GFE server configuration file # # NOTE: THIS FILE SHOULD NOT BE USER-MODIFIED. INSTEAD REFER TO THE @@ -120,8 +102,6 @@ # section of the GFE Online Help for more information. ## - - #---------------------------------------------------------------------------- # USEFUL DEFINES #---------------------------------------------------------------------------- @@ -134,7 +114,6 @@ import LogStream from collections import defaultdict BASELINE = getattr(siteConfig, 'BASELINE', 0) -#D scfp=open('/localapps/logs/scdebug.log','w') class dbConfig(object): """Class to create GFE databases from modelDict""" def __init__(self,modelDict): @@ -2378,8 +2357,8 @@ else: #--------------------------------------------------------------------------- # base urls for the ISC Routing Table ISC_ROUTING_TABLE_ADDRESS = { - "ANCF" : "http://svcbu-ancf.er.awips.noaa.gov:8080/irt", - "BNCF" : "http://svcbu-bncf.er.awips.noaa.gov:8080/irt" + "ANCF" : "http://localhost:8081/irt", + "BNCF" : "http://localhost:8081/irt" } @@ -2818,21 +2797,6 @@ modelDict['LAPS'] = { ], } -modelDict['MOSGuide'] = { - 'D2DAccumulativeElements': ['pop12hr', 'pop6hr', 'thp12hr', 'thp3hr', - 'thp6hr', 'tcc', 'tp6hr', 'tp12hr', 'wgs'], - 'D2DMODELS': 'MOSGuide', - 'DB': ('MOSGuide', 'GRID', '', NO, NO, 2, 0), - 'INITMODULES': 'MOSGuide', - 'Parms': [([MaxT], MaxTTC), - ([MinT], MinTTC), - ([RH, Td, Temp, Wind], TC1), - ([PoP, PoP12, QPF, QPF12, TstmPrb12], TC12NG), - ([TstmPrb3], TC3NG), - ([PoP6, QPF6, Sky, TstmPrb6, WindGust], TC6NG), - ], - } - modelDict['MSAS'] = { 'D2DAccumulativeElements': ['tp', 'cp'], 'D2DDBVERSIONS': 6, @@ -3204,7 +3168,6 @@ if SID in groups['ALASKA_SITES']: updateModelDict(modelDict,'GFS20','D2DMODELS', 'AK-GFS22') updateModelDict(modelDict,'HIRESWarw','D2DMODELS', 'HiResW-ARW-AK') updateModelDict(modelDict,'HIRESWnmm','D2DMODELS', 'HiResW-NMM-AK') - updateModelDict(modelDict,'MOSGuide','D2DMODELS', 'MOSGuide-AK') updateModelDict(modelDict,'NAM12','D2DMODELS', 'AK-NAM11') updateModelDict(modelDict,'NamDNG','D2DMODELS', 'AK-NamDNG3') updateModelDict(modelDict,'NationalBlend','D2DMODELS', 'NationalBlendAK') @@ -3219,7 +3182,7 @@ if SID in groups['ALASKA_SITES']: updateModelDict(modelDict,'PETSS','D2DMODELS', 'P-ETSS-AK') # Model databases for Alaska includeOnly = ['AKwave4', 'AKwave10', 'BaseTerrain', 'CRMTopo', 'ECMWFHiRes', 'ESTOFS', - 'ETSS', 'GFS20', 'GWW', 'HIRESWarw', 'HIRESWnmm', 'MOSGuide', 'NAM12', + 'ETSS', 'GFS20', 'GWW', 'HIRESWarw', 'HIRESWnmm', 'NAM12', 'NamDNG', 'NationalBlend', 'NED', 'NewTerrain', 'RTMA', 'RTOFS-Alaska', 'RTOFS-Arctic', 'RTOFS-Bering', 'RTOFS-GulfAlaska', 'SAT', 'SREF', 'URMA', 'nwpsCG1AER', 'nwpsCG1AFG', 'nwpsCG1AJK', 'nwpsCG1ALU', 'nwpsTrkngCG0AER', @@ -3248,11 +3211,10 @@ elif SID == "HFO": updateModelDict(modelDict,'ECMWFHiRes','D2DMODELS', 'ECMWF-HiRes') updateModelDict(modelDict,'RTOFS-Honolulu','D2DMODELS', 'RTOFS-Honolulu') updateModelDict(modelDict,'ESTOFS','D2DMODELS', 'estofsHI') - updateModelDict(modelDict,'MOSGuide','D2DMODELS', 'MOSGuide-HI') updateModelDict(modelDict,'NationalBlend','D2DMODELS', 'NationalBlendHI') # Model databases for HFO includeOnly = ['ECMWFHiRes', 'ESTOFS', 'GFS75', 'WaveWatch', 'GlobalWave', - 'HIRESWarw', 'HIRESWnmm', 'MOSGuide', 'NamDNG', 'NationalBlend', + 'HIRESWarw', 'HIRESWnmm', 'NamDNG', 'NationalBlend', 'RTMA', 'RTOFS-Honolulu', 'SPC', 'TPCProb', 'TPCProbPrelim', 'nwpsCG1GUM', 'nwpsCG1HFO', 'nwpsTrkngCG0GUM', 'nwpsTrkngCG0HFO', ] diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/python/LocalizationSupport.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/python/LocalizationSupport.py index f1fe2b6cc7..1d224f4dec 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/python/LocalizationSupport.py +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/python/LocalizationSupport.py @@ -48,10 +48,8 @@ CAVE_CONFIG = LocalizationType.CAVE_CONFIG COMMON_STATIC = LocalizationType.COMMON_STATIC BASE = LocalizationLevel.BASE -REGION = LocalizationLevel.REGION CONFIGURED = LocalizationLevel.CONFIGURED SITE = LocalizationLevel.SITE -WORKSTATION = LocalizationLevel.WORKSTATION USER = LocalizationLevel.USER def getLocalizationFile(loctype, loclevel, contextname, filename): @@ -79,4 +77,4 @@ def writeFile(loctype, loclevel, contextname, filename, contents): def deleteFile(loctype, loclevel, contextname, filename): localizationFile = getLocalizationFile(loctype, loclevel, contextname, filename) - localizationFile.delete() \ No newline at end of file + localizationFile.delete() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/python/isc/IrtServer.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/python/isc/IrtServer.py index 095029444a..f794699a4a 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/python/isc/IrtServer.py +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/python/isc/IrtServer.py @@ -215,18 +215,6 @@ def putVTECActiveTable(dataFile, xmlPacket): except: logProblem("Error executing ingestAT: ", traceback.format_exc()) -def sendWfoMessage(siteID, msgFile): - with open(msgFile, 'r') as fp: - message = fp.read() - - logEvent("Message received from site: %s\n%s" % (siteID, message)) - - # send to AlertViz - from awips import NotificationMessage - msg = NotificationMessage.NotificationMessage(port='9581', message=message, - category='GFE', priority='SIGNIFICANT', source='GFE') - msg.send() - def putTCVFiles(siteID, tarFile): from . import LocalizationSupport diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/python/isc/iscDataRec.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/python/isc/iscDataRec.py index 8689ba19d6..3d2c05f1b0 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/python/isc/iscDataRec.py +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/python/isc/iscDataRec.py @@ -128,9 +128,7 @@ def execIscDataRec(MSGID, SUBJECT, FILES): else: # create a xml element tree to replace the missing one. This will # occur when OB8.2 sites send ISC data to OB8.3 sites, and also when - # active table exchanges occur. We default to 98000000 and 98000001 - # on dx4 since that is where the primary and svcbu servers are located. - # This will cause log errors until everyone is on OB8.3. + # active table exchanges occur. We default to 98000000. iscE = Element('isc') destinationsE = SubElement(iscE, 'destinations') x = 98000000 @@ -215,8 +213,6 @@ def execIscDataRec(MSGID, SUBJECT, FILES): IrtServer.serviceISCRequest(dataFile) elif SUBJECT == 'PUT_TCV_FILES': IrtServer.putTCVFiles(srcServer.get('site'), dataFile) - elif SUBJECT == 'SEND_WFO_MESSAGE': - IrtServer.sendWfoMessage(srcServer.get('site'), dataFile) else: logProblem("unknown subject: ", SUBJECT) continue diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/python/isc/iscExtract.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/python/isc/iscExtract.py index 140681dd2a..cea07c218e 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/python/isc/iscExtract.py +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/python/isc/iscExtract.py @@ -1,24 +1,4 @@ -#!/common/bphillip/awips/bin/python - -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## +#!/usr/bin/env python # # Port of iscExtract.py # @@ -492,4 +472,4 @@ def executeIscExtract(parmNames, databaseName, startTime, endTime, except: logProblem("Failure", traceback.format_exc()) - \ No newline at end of file + diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/python/isc/iscUtil.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/python/isc/iscUtil.py index 6b96eceff0..ec47c83eea 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/python/isc/iscUtil.py +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/python/isc/iscUtil.py @@ -1,23 +1,3 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - # # Utility module of isc functions # @@ -41,12 +21,6 @@ # # -## -# This is a base file that is not intended to be overridden. -## - - - import string, IrtAccess, JUtil, logging import xml, pickle, tempfile, os, socket from xml.etree import ElementTree @@ -102,54 +76,10 @@ def swapCoord(coord): return coord def serverBoxText(server): - #returns text based on the server dictionary that should be placed - #into the dialog - hostport = None - if server['host'][0:3] in ['dx4', 'px3'] and server['port'] in \ - ['98000000', '98000001']: - if server['port'] == "98000000": - hostport = server['host'] + "-primary" - elif server['port'] == "98000001": - hostport = server['host'] + "-svcbu" - - if hostport is None: - hostport = server['host'] + "/" + server['port'] - + hostport = server['host'] + "/" + server['port'] return server['site'] + "-> " + hostport + "@" + \ server['mhsid'].lower() -def sortServers(a, b): -# sort function for the list of servers. Sorts in priority order for -# most likely to have the data. Order is: -# dx4 or px3 98000000 site==mhsid -# dx4 or px3 98000001 site==mhsid -# dx4 or px3 98000000 site!=mhsid -# dx4 or px3 98000001 site!=mhsid -# all others in random order. - sameSiteA = (a['mhsid'] == a['site']) - sameSiteB = (b['mhsid'] == b['site']) - if sameSiteA and not sameSiteB: - return -1 - elif not sameSiteA and sameSiteB: - return 1 - #both are same sites, check for host next - else: - regHostA = (a['host'][0:3] in ['dx4', 'px3']) - regHostB = (b['host'][0:3] in ['dx4', 'px3']) - if regHostA and not regHostB: - return -1 - elif not regHostA and regHostB: - return 1 - # same host, but not preferred host - else: - regPortA = (a['port'] == "98000000") - regPortB = (b['port'] == "98000000") - if regPortA and not regPortB: - return -1 - elif not regPortA and regPortB: - return 1 - return 1 #must be non-standard, put at end of list - def createDomainDict(xml): irt = IrtAccess.IrtAccess("") #decodes the packet of information from the ISC_REQUEST_QUERY call @@ -191,7 +121,6 @@ def createDomainDict(xml): guiText = serverBoxText(info) serverDictT2S[guiText] = info serverDictS2T[str(info)] = guiText - list.sort(sortServers) domains[site] = list elif domainE.tag == "welist": diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/python/isc/sendWFOMessage.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/python/isc/sendWFOMessage.py deleted file mode 100644 index 41f35f87dd..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/python/isc/sendWFOMessage.py +++ /dev/null @@ -1,106 +0,0 @@ -#!/usr/bin/env python -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## -# -# Send Message to a list of WFOs -# -# -# SOFTWARE HISTORY -# -# Date Ticket# Engineer Description -# ------------ ---------- ----------- -------------------------- -# 02/22/2016 5374 randerso Initial Creation. -# 07/11/2016 5774 randerso Change to send WFO message to all active -# IFP servers, not just "best" -# -## - -## -# This is a base file that is not intended to be overridden. -## - - - -import os, errno, tempfile - -import xml -from xml.etree import ElementTree -from xml.etree.ElementTree import Element, SubElement - -import IrtAccess - -logger = None - -def init_logging(): - import iscUtil - import logging - global logger - logger = iscUtil.getLogger("sendWFOMessage", logLevel=logging.INFO) - - -def runFromJava(siteID, config, destSites, message): - import siteConfig - - host = str(config.getServerHost()) - port = str(config.getRpcPort()) - protocol = str(config.getProtocolVersion()) - mhsid = str(config.getMhsid()) - ancf = str(config.iscRoutingTableAddress().get("ANCF")) - bncf = str(config.iscRoutingTableAddress().get("BNCF")) - xmtScript = str(config.transmitScript()) - - init_logging() - - iscProductsDir = os.path.join(siteConfig.GFESUITE_HOME, "products", "ISC") - - - # get temporary file name for WFO message - with tempfile.NamedTemporaryFile(suffix='.sendWFOMessage', dir=iscProductsDir, delete=False) as fp: - fp.write(message) - fname = fp.name - - - sourceServer = {'mhsid' : mhsid, - 'host' : host, - 'port' : port, - 'protocol': protocol, - 'site' : siteID} - - try: - if not destSites: - raise RuntimeError('No destSites supplied') - - if not message: - raise RuntimeError('No message supplied') - - irt = IrtAccess.IrtAccess(ancf, bncf, logger=logger) - msgSendDest, xml = irt.createDestinationXML(destSites, sourceServer, findBestMatch=False) - - # create the XML file - with tempfile.NamedTemporaryFile(suffix='.xml', dir=iscProductsDir, delete=False) as fd: - fnameXML = fd.name - fd.write(ElementTree.tostring(xml)) - - if len(msgSendDest) > 0: - # Now send the message - logger.debug("msgSendDest: "+ str(msgSendDest)) - irt.transmitFiles("SEND_WFO_MESSAGE", msgSendDest, mhsid, [fname, fnameXML], xmtScript) - except: - logger.exception('Error sending WFO message to sites:' + destSites + "\n" + message) diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/AKMOSGuide.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/AKMOSGuide.py deleted file mode 100644 index 836c045eda..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/AKMOSGuide.py +++ /dev/null @@ -1,91 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -# AK MOS Guide Grids from Decoder/ingest: -# Maximum temperature (F) -# Minimum temperature (F) -# 2-m temperature (F) -# 2-m dew point (F) -# Relative humidity (%) -# Wind direction (deg) -# Wind speed (kts) -# 6-hour probability of precipitation (%) -# 12-hour probability of precipitation (%) - -from Init import * -class AKMOSGuideForecaster(Forecaster): - def __init__(self): - Forecaster.__init__(self, "MOSGuide", "MOSGuide") - - def calcT(self, t_FHAG2): - return self.KtoF(t_FHAG2) - - def calcTd(self, dpt_FHAG2): - return self.KtoF(dpt_FHAG2) - - def calcRH(self, rh_FHAG2): - return rh_FHAG2 - - def calcMaxT(self, mxt_FHAG2): - return self.KtoF(mxt_FHAG2) - - def calcMinT(self, mnt_FHAG2): - return self.KtoF(mnt_FHAG2) - - def calcPoP6(self, pop6hr_SFC): - return pop6hr_SFC - - def calcPoP12(self, pop12hr_SFC): - return pop12hr_SFC - -# def calcQPF6(self, tp6hr_SFC): -# return (tp6hr_SFC / 25.4) - -# def calcQPF12(self, tp12hr_SFC): -# return (tp12hr_SFC / 25.4) - - def calcWind(self, ws_FHAG10, wd_FHAG10): - return (ws_FHAG10 * 1.94, wd_FHAG10) - -# def calcWindGust(self, wgs_FHAG10): -# return (wgs_FHAG10 * 1.94) - -# def calcSky(self, tcc_SFC): -# return tcc_SFC - -# def calcTstmPrb12(self, thp12hr_SFC): -# return thp12hr_SFC - -# def calcTstmPrb6(self, thp6hr_SFC): -# return thp6hr_SFC - -# def calcTstmPrb3(self, thp3hr_SFC): -# return thp3hr_SFC - -def main(): - AKMOSGuideForecaster().run() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/AKNAM40.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/AKNAM40.py deleted file mode 100644 index bfe31e6f3b..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/AKNAM40.py +++ /dev/null @@ -1,57 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -from NAM40 import * - -class AKNAM40Forecaster(NAM40Forecaster): - - # Alaska does not set most of the boundry layer temps - def calcT(self, t_FHAG2, t_BL030, p_SFC, topo, stopo, gh_c, t_c): - p_SFC = p_SFC / 100 # get the surface pres. in mb - pres = [p_SFC, p_SFC - 15] - return self._calcT([t_FHAG2, t_BL030], pres, topo, stopo, gh_c, t_c) - - # Alaska does not get pop_SFC - def calcPoP(self, gh_c, rh_c, QPF, topo): - rhavg = where(less(gh_c, topo), float32(-1), rh_c) - rhavg[greater(gh_c, topo + 5000 * 0.3048)] = -1 - count = where(not_equal(rhavg, -1), float32(1), float32(0)) - rhavg[equal(rhavg, -1)] = 0 - count = add.reduce(count, 0) - rhavg = add.reduce(rhavg, 0) - ## add this much based on humidity only - dpop = where(count, rhavg / (count + .001), float32(0)) - 70.0 - dpop[less(dpop, -30)] = -30 - ## calculate the base PoP - pop = where(less(QPF, 0.02), QPF * 1000, QPF * 350 + 13) - pop += dpop # add the adjustment based on humidity - pop.clip(0, 100, pop) # clip to 100% - return pop - -def main(): - AKNAM40Forecaster().run() \ No newline at end of file diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/AKWAVE.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/AKWAVE.py deleted file mode 100644 index b04027f38f..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/AKWAVE.py +++ /dev/null @@ -1,36 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -from GWW import * - -class AKWAVEForecaster(GWWForecaster): - def __init__(self): - Forecaster.__init__(self, "AKWAVE", "AKWAVE") - -def main(): - AKWAVEForecaster().run() \ No newline at end of file diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/AKwave10.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/AKwave10.py deleted file mode 100644 index 5d06286b6f..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/AKwave10.py +++ /dev/null @@ -1,42 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -from Init import * -from WW3 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from WW3 model -## output. -## -##-------------------------------------------------------------------------- -class AKwave10Forecaster(WW3Forecaster): - def __init__(self): - WW3Forecaster.__init__(self, "AKwave10", "AKwave10") - -def main(): - AKwave10Forecaster().run() \ No newline at end of file diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/AKwave4.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/AKwave4.py deleted file mode 100644 index f3c5b2db3c..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/AKwave4.py +++ /dev/null @@ -1,42 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -from Init import * -from WW3 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from WW3 model -## output. -## -##-------------------------------------------------------------------------- -class AKwave4Forecaster(WW3Forecaster): - def __init__(self): - WW3Forecaster.__init__(self, "AKwave4", "AKwave4") - -def main(): - AKwave4Forecaster().run() \ No newline at end of file diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/ENPwave.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/ENPwave.py deleted file mode 100644 index 1765b43f8b..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/ENPwave.py +++ /dev/null @@ -1,42 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -from Init import * -from WW3 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from WW3 model -## output. -## -##-------------------------------------------------------------------------- -class ENPwaveForecaster(WW3Forecaster): - def __init__(self): - WW3Forecaster.__init__(self, "ENPwave", "ENPwave") - -def main(): - ENPwaveForecaster().run() \ No newline at end of file diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/EPwave10.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/EPwave10.py deleted file mode 100644 index a54c306741..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/EPwave10.py +++ /dev/null @@ -1,42 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -from Init import * -from WW3 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from WW3 model -## output. -## -##-------------------------------------------------------------------------- -class EPwave10Forecaster(WW3Forecaster): - def __init__(self): - WW3Forecaster.__init__(self, "EPwave10", "EPwave10") - -def main(): - EPwave10Forecaster().run() \ No newline at end of file diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/EPwave4.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/EPwave4.py deleted file mode 100644 index 0ffd00147b..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/EPwave4.py +++ /dev/null @@ -1,43 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -from Init import * -from WW3 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from WW3 model -## output. -## -##-------------------------------------------------------------------------- -class EPwave4Forecaster(WW3Forecaster): - def __init__(self): - WW3Forecaster.__init__(self, "EPwave4", "EPwave4") - -def main(): - EPwave4Forecaster().run() - diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/ETSSHiRes.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/ETSSHiRes.py deleted file mode 100644 index d0033ea67b..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/ETSSHiRes.py +++ /dev/null @@ -1,55 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## ETSS smart init - -from Init import * - -##-------------------------------------------------------------------------- -class ETSSHiResForecaster(Forecaster): - def __init__(self): - Forecaster.__init__(self, "ETSSHiRes","ETSSHiRes") - - #=========================================================================== - # Ingest the gridded ETSS storm surge guidance - #=========================================================================== - def calcStormSurge(self, ETSRG_SFC): - return ETSRG_SFC / 0.3048 - - def calcSurgeTide(self, ETCWL_SFC): - return ETCWL_SFC / 0.3048 - - def calcAstroTide(self, TIDE_SFC): - return TIDE_SFC / 0.3048 - -def main(): - ETSSHiResForecaster().run() - -if __name__ == "__main__": - main() - diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/GFS190.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/GFS190.py deleted file mode 100644 index 3ab5582fb2..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/GFS190.py +++ /dev/null @@ -1,541 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -from Init import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from GFS190 model -## output. -## -##-------------------------------------------------------------------------- -class GFS190Forecaster(Forecaster): - def __init__(self): - Forecaster.__init__(self, "GFS190") - -##-------------------------------------------------------------------------- -## These levels will be used to create vertical soundings. These are -## defined here since they are model dependent. -##-------------------------------------------------------------------------- - def levels(self): - return ["MB850", "MB700", "MB500", "MB400", "MB300"] - -##------------------------------------------------------------------------- -## Returns the maximum of the specified MaxT and the T grids -##-------------------------------------------------------------------------- - def calcMaxT(self, T, MaxT): - if MaxT is None: - return T - return maximum(MaxT, T) - -##------------------------------------------------------------------------- -## Returns the minimum of the specified MinT and T grids -##-------------------------------------------------------------------------- - def calcMinT(self, T, MinT): - if MinT is None: - return T - return minimum(MinT, T) - - -##------------------------------------------------------------------------- -## Internal function that returns the surface temperature based on -## the specified geoPot. height and temperature cube. This function -## interpolates the temperature at elevation specified by the topo -## grid. -##-------------------------------------------------------------------------- - def getSFCt(self, gh_c, t_c, topo): - sp = self.newGrid(-1) # a grid of -1 everywhere - for i in xrange(1, gh_c.shape[0]): # for each level - ## get the points where the gh level is above the topo value - mask = logical_and(equal(sp, -1), greater_equal(gh_c[i], topo)) - ## interpolate between this level and the one below it - sp[mask] = self.linear(gh_c[i], gh_c[i - 1], - t_c[i], t_c[i - 1], topo) - - return sp - -##------------------------------------------------------------------------- -## Calculates the temperature at the elevation indicated in the topo -## grid. This tool simply interpolates the temperature value from -## model's isobaric temperature cube. -##------------------------------------------------------------------------- - def calcT(self, gh_c, t_c, topo): - tmb = self.newGrid(-1) - # calc sfc_temp at topo - for i in xrange(1, gh_c.shape[0]): - # interp temp in this layer - tval1 = self.linear(gh_c[i], gh_c[i - 1], t_c[i], t_c[i - 1], topo) - # assign temp to points in this layer - m = logical_and(equal(tmb, -1), greater(gh_c[i], topo)) - tmb[m] = tval1[m] - ## convert from kelvin to fahrenheit - return self.KtoF(tmb) - -##------------------------------------------------------------------------- -## Calculates dew point from the specified pressure, temp and rh -## fields. -##------------------------------------------------------------------------- - def calcTd(self, p_SFC, T, t_FHAG2, stopo, topo, rh_BL030): - rh_FHAG2 = rh_BL030 - # at the model surface - sfce = rh_FHAG2 / 100 * self.esat(t_FHAG2) # partial pres of H2O - w = (0.622 * sfce) / ((p_SFC + 0.0001) / 100 - sfce)# meters / millibar - # at the true surface - tsfce = self.esat(self.FtoK(T)) # saturation vap.pres. at sfc - dpdz = 287.04 * t_FHAG2 / (p_SFC / 100 * 9.8) # meters / millibar - newp = p_SFC / 100 + (stopo - topo) / dpdz # adj. sfc press. - ws = (0.622 * tsfce) / (newp - tsfce) # sat. mixing ratio - rh = w / ws # calc relative humidity - - # Finally, calculate the dew point - tsfcesat = rh * tsfce - tsfcesat = clip(tsfcesat, 0.00001, tsfcesat) - b = 26.66082 - log(tsfcesat) - td = (b - sqrt(b * b - 223.1986)) / 0.0182758048 - td = self.KtoF(td) - td = where(w > ws, T, td) - return td - -##------------------------------------------------------------------------- -## Calculates RH from the T and Td grids -##------------------------------------------------------------------------- - def calcRH(self, T, Td): - Tc = .556 * (T - 32.0) - Tdc = .556 * (Td - 32.0) - Vt = 6.11 * pow(10, (Tc * 7.5 / (Tc + 237.3))) - Vd = 6.11 * pow(10, (Tdc * 7.5 / (Tdc + 237.3))) - RH = (Vd / Vt) * 100.0 - # Return the new value - return RH - -##------------------------------------------------------------------------- -## Returns the maximum of the specified MaxRH and the RH grids -##-------------------------------------------------------------------------- - def calcMaxRH(self, RH, MaxRH): - if MaxRH is None: - return RH - return maximum(MaxRH, RH) - -##------------------------------------------------------------------------- -## Returns the minimum of the specified MinRH and RH grids -##-------------------------------------------------------------------------- - def calcMinRH(self, RH, MinRH): - if MinRH is None: - return RH - return minimum(MinRH, RH) - -##------------------------------------------------------------------------- -## Calculates QPF from the total precip field out of the model -##------------------------------------------------------------------------- - def calcQPF(self, tp_SFC): - qpf = tp_SFC / 25.4 # convert from millimeters to inches - return qpf - - def calcSky(self, rh_c, gh_c, topo, p_SFC): - return self.skyFromRH(rh_c, gh_c, topo, p_SFC) - -##------------------------------------------------------------------------- -## Calculates Prob. of Precip. based on QPF and RH cube. Where there -## is QPF > 0 ramp the PoP from (0.01, 35%) to 100%. Then in areas -## of QPF < 0.2 raise the PoP if it's very humid. -##------------------------------------------------------------------------- - def calcPoP(self, gh_c, rh_c, QPF, topo): - rhavg = where(less(gh_c, topo), float32(-1), rh_c) - rhavg[greater(gh_c, topo + 5000 * 0.3048)] = -1 - count = not_equal(rhavg, -1) - rhavg[equal(rhavg, -1)] = 0 - count = add.reduce(count, 0, dtype=float32) - rhavg = add.reduce(rhavg, 0) - ## add this much based on humidity only - dpop = where(count, rhavg / (count + .001), 0) - 70.0 - dpop[less(dpop, -30)] = -30 - ## calculate the base PoP - pop = where(less(QPF, 0.02), QPF * 1000, QPF * 350 + 13) - pop += dpop # add the adjustment based on humidity - pop.clip(0, 100, pop) # clip to 100% - return pop - -##------------------------------------------------------------------------- -## Calculates the Freezing level based on height and temperature -## cubes. Finds the height at which freezing occurs. -##------------------------------------------------------------------------- - def calcFzLevel(self, gh_c, t_c, topo): - fzl = self.newGrid(-1) - - # for each level in the height cube, find the freezing level - for i in xrange(gh_c.shape[0]): - try: - val = gh_c[i - 1] + (gh_c[i] - gh_c[i - 1]) / (t_c[i] - t_c[i - 1])\ - * (273.15 - t_c[i - 1]) - except: - val = gh_c[i] - - ## save the height value in fzl - m = logical_and(equal(fzl, -1), less_equal(t_c[i], 273.15)) - fzl[m] = val[m] - fzl *= 3.28 # convert to feet - return fzl - -##------------------------------------------------------------------------- -## Calculates the Snow level based on wet-bulb zero height. -##------------------------------------------------------------------------- - def calcSnowLevel(self, gh_c, t_c, rh_c): - # Only use the levels that are >= freezind (plus one level) - # This is a performance and memory optimization - clipindex = 2 - for i in xrange(t_c.shape[0] - 1, -1, -1): - if maximum.reduce(maximum.reduce(t_c[i])) >= 273.15: - clipindex = i + 1 - break - gh_c = gh_c[:clipindex, :, :] - t_c = t_c[:clipindex, :, :] - rh_c = rh_c[:clipindex, :, :] - - snow = self.newGrid(-1) - # - # make pressure cube - # - pmb = ones_like(gh_c) - for i in xrange(gh_c.shape[0]): - pmb[i] = self.pres[i] - pmb = clip(pmb, 1, 1050) - # - # convert temps to C and limit to reasonable values - # - tc = t_c - 273.15 - tc = clip(tc, -120, 60) - # - # limit RH to reasonable values - # - rh = clip(rh_c, 0.5, 99.5) - # - # calculate the wetbulb temperatures - # (this is expensive - even in numeric python - and somewhat - # wasteful, since you do not need to calculate the wetbulb - # temp for all levels when it may cross zero way down toward - # the bottom. Nevertheless - all the gridpoints will cross - # zero at different levels - so you cannot know ahead of time - # how high up to calculate them. In the end - this was the - # most expedient way to code it - and it works - so I stuck - # with it. - # - wetb = self.Wetbulb(tc, rh, pmb) - tc = rh = pmb = None - # - # find the zero level - # - for i in xrange(1, gh_c.shape[0]): - try: - val = gh_c[i - 1] + (gh_c[i] - gh_c[i - 1]) / (wetb[i] - wetb[i - 1])\ - * (-wetb[i - 1]) - except: - val = gh_c[i] - - m = logical_and(equal(snow, -1), less_equal(wetb[i], 0)) - snow[m] = val[m] - # - # convert to feet - # - snow *= 3.28 - - return snow - -##------------------------------------------------------------------------- -## Calculates Snow amount based on the Temp, Freezing level, QPF, -## topo and Weather grid -##------------------------------------------------------------------------- - def calcSnowAmt(self, T, FzLevel, QPF, topo, Wx): - # figure out the snow to liquid ratio - snowr = T * -0.5 + 22.5 - snowr[less(T, 9)] = 20 - snowr[greater_equal(T, 30)] = 0 - # calc. snow amount based on the QPF and the ratio - snowamt = where(less_equal(FzLevel - 1000, topo * 3.28), - snowr * QPF, float32(0)) - # Only make snow at points where the weather is snow - snowmask = logical_or(equal(Wx[0], 1), equal(Wx[0], 3)) - snowmask = logical_or(snowmask, logical_or(equal(Wx[0], 7), - equal(Wx[0], 9))) -# snowamt = where(snowmask, snowamt, 0) - snowamt[logical_not(snowmask)] = 0 - return snowamt - -##-------------------------------------------------------------------------- -## Calculate the Haines index based on the temp and RH cubes -## Define self.whichHainesIndex to be "HIGH", "MEDIUM", or "LOW". -## Default is "HIGH". -##-------------------------------------------------------------------------- - def calcHaines(self, t_c, rh_c): - return self.hainesIndex(self.whichHainesIndex, t_c, rh_c) - - -##------------------------------------------------------------------------- -## Calculates the mixing height for the given sfc temperature, -## temperature cube, height cube and topo -##------------------------------------------------------------------------- - def calcMixHgt(self, T, topo, t_c, gh_c): - mask = greater_equal(gh_c, topo) # points where height > topo - pt = [] - for i in xrange(len(self.pres)): # for each pres. level - p = self.newGrid(self.pres[i]) # get the pres. value in mb - tmp = self.ptemp(t_c[i], p) # calculate the pot. temp - pt = pt + [tmp] # add to the list - pt = array(pt) - # set up masks -# pt = where(mask, pt, 0) - pt[logical_not(mask)] = 0 - avg = add.accumulate(pt, 0) - count = add.accumulate(mask, 0) - mh = self.newGrid(-1) - # for each pres. level, calculate a running avg. of pot temp. - # As soon as the next point deviates from the running avg by - # more than 3 deg. C, interpolate to get the mixing height. - for i in xrange(1, avg.shape[0]): - runavg = avg[i] / (count[i] + .0001) # calc. running avg - diffpt = pt[i] - runavg # calc. difference - # calc. the interpolated mixing height - tmh = self.linear(pt[i], pt[i - 1], gh_c[i], gh_c[i - 1], runavg) - # assign new values if the difference is greater than 3 - m = logical_and(logical_and(mask[i], equal(mh, -1)), greater(diffpt, 3)) - mh[m] = tmh[m] - - mh -= topo - mh *= 3.28 # convert to feet - return mh - -##------------------------------------------------------------------------- -## Converts the lowest available wind level from m/s to knots -##------------------------------------------------------------------------- - def calcWind(self, wind_BL030): - mag = wind_BL030[0] * 1.94 # get the wind speed and convert - dir = wind_BL030[1] # get wind dir - return (mag, dir) # assemble speed and dir into a tuple - -##------------------------------------------------------------------------- -## Calculates the wind at 3000 feet AGL. -##------------------------------------------------------------------------- - def calcFreeWind(self, gh_c, wind_c, topo): - wm = wind_c[0] - wd = wind_c[1] - # Make a grid that's topo + 3000 feet (914 meters) - fatopo = topo + 914.4 - # find the points that are above the 3000 foot level - mask = greater_equal(gh_c, fatopo) - # initialize the grids into which the value are stored - famag = self.newGrid(-1) - fadir = self.newGrid(-1) - # start at the bottom and store the first point we find that's - # above the topo + 3000 feet level. - for i in xrange(wind_c[0].shape[0]): - m = logical_and(equal(famag, -1), mask[i]) - famag[m] = wm[i][m] - - m = logical_and(equal(fadir, -1), mask[i]) - fadir[m] = wd[i][m] - fadir.clip(0, 360, fadir) # clip the value to 0, 360 - famag *= 1.94 # convert to knots - return (famag, fadir) # return the tuple of grids - -##------------------------------------------------------------------------- -## Calculates the average wind vector in the mixed layer as defined -## by the mixing height. This function creates a mask that identifies -## all grid points between the ground and the mixing height and calculates -## a vector average of the wind field in that layer. -##------------------------------------------------------------------------- - def calcTransWind(self, MixHgt, wind_c, gh_c, topo): - nmh = MixHgt * 0.3048 # convert MixHt from feet -> meters - u, v = self._getUV(wind_c[0], wind_c[1]) # get the wind grids - # set a mask at points between the topo and topo + MixHt - mask = logical_and(greater_equal(gh_c, topo), - less_equal(gh_c, nmh + topo)) - # set the points outside the layer to zero - u[logical_not(mask)] = 0 - v[logical_not(mask)] = 0 - - mask = add.reduce(mask).astype(float32) # add up the number of set points vert. - mmask = mask + 0.0001 - # calculate the average value in the mixed layerlayer - u = where(mask, add.reduce(u) / mmask, float32(0)) - v = where(mask, add.reduce(v) / mmask, float32(0)) - # convert u, v to mag, dir - tmag, tdir = self._getMD(u, v) - tmag = tmag * 1.94 # convert to knots - tmag = clip(tmag, 0, 125) # clip speed to 125 knots - return (tmag, tdir) - -##------------------------------------------------------------------------- -## Uses a derivation of the Bourgouin allgorithm to calculate precipitation -## type, and other algorithms to determine the coverage and intensity. -## The Bourgoin technique figures out precip type from calculating how -## long a hydrometer is exposed to alternating layers of above zero (C) and -## below zero temperature layers. This tool calculates at each grid point -## which of the four Bourgouin cases apply. Then the appropriate algorithm -## is applied to that case that further refines the precip. type. Once the -## type is determined, other algorithms are used to determine the coverage -## and intensity. See the Weather and Forecasting Journal article Oct. 2000, -## "A Method to Determine Precipitation Types", by Pierre Bourgouin -##------------------------------------------------------------------------- - def calcWx(self, QPF, T, t_c, gh_c, p_SFC, topo, sli_SFC): - gh_c = gh_c[:13, :, :] - t_c = t_c[:13, :, :] - T = self.FtoK(T) - p_SFC = p_SFC / 100 # sfc pres. in mb - pres = self.pres - a1 = self.empty() - a2 = self.empty() - a3 = self.empty() - aindex = self.empty() - # Go through the levels to identify each case type 0-3 - for i in xrange(1, gh_c.shape[0] - 1): - # get the sfc pres. and temp. - pbot = where(greater(gh_c[i - 1], topo), pres[i - 1], p_SFC) - tbot = where(greater(gh_c[i - 1], topo), t_c[i - 1], T) - # Calculate the area of this layer in Temp/pres coordinates - a11, a22, cross = self.getAreas(pbot, tbot, pres[i], t_c[i]) - topomask = greater(gh_c[i], topo) - a1 = where(logical_and(equal(aindex, 0), topomask), - a1 + a11, a1) - a2 = where(logical_and(equal(aindex, 1), topomask), - a2 + a11, a2) - a3 = where(logical_and(equal(aindex, 2), topomask), - a3 + a11, a3) - topomask = logical_and(topomask, cross) - aindex = where(topomask, aindex + 1, aindex) - a1 = where(logical_and(equal(aindex, 0), topomask), - a1 + a22, a1) - a2 = where(logical_and(equal(aindex, 1), topomask), - a2 + a22, a2) - a3 = where(logical_and(equal(aindex, 2), topomask), - a3 + a22, a3) - - # Now apply a different algorithm for each type - key = ['::::', - "Wide:S:-::", "Wide:R:-::", - "Wide:S:-::^Wide:R:-::", - 'Wide:ZR:-::', 'Wide:IP:-::', - 'Wide:ZR:-::^Wide:IP:-::', - "Sct:SW:-::", "Sct:RW:-::", - "Sct:SW:-::^Sct:RW:-::", - "Chc:ZR:-::", 'Chc:IP:-::', - 'Chc:ZR:-::^Chc:IP:-::'] - - wx = self.empty(int8) - # Case d (snow) - snowmask = equal(aindex, 0) - wx[logical_and(snowmask, greater(a1, 0))] = 2 - wx[logical_and(snowmask, less_equal(a1, 0))] = 1 - - # Case c (rain / snow / rainSnowMix) - srmask = equal(aindex, 1) - wx[logical_and(srmask, less(a1, 5.6))] = 1 - wx[logical_and(srmask, greater(a1, 13.2))] = 2 - wx[logical_and(srmask, - logical_and(greater_equal(a1, 5.6), - less(a1, 13.2)))] = 3 - - - # Case a (Freezing Rain / Ice Pellets) - ipmask = equal(aindex, 2) - ipm = greater(a1, a2 * 0.66 + 66) - wx[logical_and(ipmask, ipm)] = 5 - zrm = less(a1, a2 * 0.66 + 46) - wx[logical_and(ipmask, zrm)] = 4 - zrm = logical_not(zrm) - ipm = logical_not(ipm) - wx[logical_and(ipmask, logical_and(zrm, ipm))] = 6 - - # Case b (Ice pellets / rain) - cmask = greater_equal(aindex, 3) - ipmask = logical_and(less(a3, 2), cmask) - wx[logical_and(ipmask, less(a1, 5.6))] = 1 - wx[logical_and(ipmask, greater(a1, 13.2))] = 2 - wx[logical_and(ipmask, logical_and(greater_equal(a1, 5.6), - less_equal(a1, 13.2)))] = 3 - - ipmask = logical_and(greater_equal(a3, 2), cmask) - wx[logical_and(ipmask, greater(a1, 66 + 0.66 * a2))] = 5 - wx[logical_and(ipmask, less(a1, 46 + 0.66 * a2))] = 4 - wx[logical_and(ipmask, logical_and(greater_equal(a1, 46 + 0.66 * a2), - less_equal(a1, 66 + 0.66 * a2)))] = 6 - - # Make showers (scattered/Chc) -# convecMask = greater(cp_SFC / (tp_SFC + .001), 0.5) -# wx = where(logical_and(not_equal(wx, 0), convecMask), wx + 6, wx) - - # Thunder - for i in xrange(len(key)): - tcov = string.split(key[i], ":")[0] - if tcov == "Chc" or tcov == "": - tcov = "Sct" - key.append(key[i] + "^" + tcov - + ":T:::") - wx[less_equal(sli_SFC, -3)] += 13 - - # No wx where no qpf - wx[less(QPF, 0.01)] = 0 - return(wx, key) - -##------------------------------------------------------------------------- -## Calculates chance of wetting rain based on QPF. -##------------------------------------------------------------------------- - def calcCWR(self, QPF): - m1 = less(QPF, 0.01) # all the places that are dry - m2 = greater_equal(QPF, 0.3) # all the places that are wet - # all the places that are 0.01 to 0.10 - m3 = logical_and(greater_equal(QPF, 0.01), less_equal(QPF, 0.1)) - # all the places that are 0.1 to 0.3 - m4 = logical_and(greater(QPF, 0.1), less(QPF, 0.3)) - # assign 0 to the dry grid point, 100 to the wet grid points, - # and a ramping function to all point in between - cwr = where(m1, float32(0), where(m2, float32(100), - where(m3, 444.4 * (QPF - 0.01) + 10, - where(m4, 250 * (QPF - 0.1) + 50, - QPF)))) - return cwr - -##------------------------------------------------------------------------- -## Calculates Lightning Activity Level based on total precip., lifted index -## and 3-D relative humidity. -##------------------------------------------------------------------------- - def calcLAL(self, tp_SFC, sli_SFC, rh_c, rh_BL030): - bli = sli_SFC # surface lifted index - ttp = self.newGrid(0.00001) # nearly zero grid - lal = self.newGrid(1) # initialize the return grid to 1 - # Add one to lal if QPF > 0.5 - lal[logical_and(greater(ttp, 0), greater(tp_SFC / ttp, 0.5))] += 1 - # make an average rh field - midrh = add.reduce(rh_c[6:9], 0) / 3 - # Add one to lal if mid-level rh high and low level rh low - lal[logical_and(greater(midrh, 70), less(rh_BL030, 30))] += 1 - - # Add on to lal if lifted index is <-3 and another if <-5 - lal[less(bli, -3)] += 1 - lal[less(bli, -5)] += 1 - return lal - -def main(): - GFS190Forecaster().run() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/GFS40.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/GFS40.py deleted file mode 100644 index 32846ffa44..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/GFS40.py +++ /dev/null @@ -1,1097 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -from Init import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from GFS80 model -## output. -## -##-------------------------------------------------------------------------- -class GFS40Forecaster(Forecaster): - def __init__(self): - Forecaster.__init__(self, "GFS40", "GFS40") - -####-------------------------------------------------------------------------- -#### These levels will be used to create vertical soundings. These are -#### defined here since they are model dependent. -####-------------------------------------------------------------------------- - def levels(self): - return ["MB1000", "MB975", "MB950", "MB925", "MB900", "MB875", "MB850", - "MB825", "MB800", "MB775", "MB750", "MB725", "MB700", - "MB675", "MB650", "MB625", "MB600", "MB575", "MB550", - "MB525", "MB500", "MB450", "MB400", "MB350", "MB300"] - -####------------------------------------------------------------------------- -#### Returns the maximum of the specified MaxT and the T grids -####-------------------------------------------------------------------------- - def calcMaxT(self, T, MaxT): - if MaxT is None: - return T - return maximum(MaxT, T) - -####------------------------------------------------------------------------- -#### Returns the minimum of the specified MinT and T grids -####-------------------------------------------------------------------------- - def calcMinT(self, T, MinT): - if MinT is None: - return T - return minimum(MinT, T) - - -####------------------------------------------------------------------------- -#### Calculates the temperature at the elevation indicated in the topo -#### grid. This tool simply interpolates the temperature value from -#### model's isobaric temperature cube. -####------------------------------------------------------------------------- - def calcT(self, t_FHAG2, t_BL030, t_BL3060, t_BL6090, t_BL90120, - t_BL120150, t_BL150180, p_SFC, topo, stopo, gh_c, t_c): - p_SFC = p_SFC / 100 # get the surface pres. in mb - pres = [p_SFC, p_SFC - 15, p_SFC - 45, p_SFC - 75, - p_SFC - 105, p_SFC - 135] - temps = [t_FHAG2, t_BL030, t_BL3060, t_BL6090, t_BL90120, - t_BL120150, t_BL150180] - return self._calcT(temps, pres, topo, stopo, gh_c, t_c) - - def _calcT(self, temps, pres, topo, stopo, gh_c, t_c): - p = self.newGrid(-1) - tmb = self.newGrid(-1) - tms = self.newGrid(-1) - # go up the column to figure out the surface pressure - for i in xrange(1, gh_c.shape[0]): - higher = greater(gh_c[i], topo) # identify points > topo - # interpolate the pressure at topo height - val = self.linear(gh_c[i], gh_c[i - 1], - log(self.pres[i]), log(self.pres[i - 1]), topo) - val[greater(val, 500)] = 500 - val.clip(-.00001, 10, val) - - m = logical_and(equal(p, -1), higher) - p[m]= exp(val)[m] - - # interpolate the temperature at true elevation - tval1 = self.linear(gh_c[i], gh_c[i - 1], t_c[i], t_c[i - 1], topo) - - m = logical_and(equal(tmb, -1), higher) - tmb[m] = tval1[m] - # interpolate the temperature at model elevation - tval2 = self.linear(gh_c[i], gh_c[i - 1], t_c[i], t_c[i - 1], stopo) - - m = logical_and(equal(tms, -1), greater(gh_c[i], stopo)) - tms[m] = tval2[m] - - - # define the pres. of each of the boundary layers - st = self.newGrid(-1) - # Calculate the lapse rate in units of pressure - for i in xrange(1, len(pres)): - val = self.linear(pres[i], pres[i - 1], temps[i], temps[i - 1], p) - gm = greater(pres[i - 1], p) - lm = less_equal(pres[i], p) - mask = logical_and(gm, lm) - - m = logical_and(equal(st, -1), mask) - st[m] = val[m] - - # where topo level is above highest level in BL fields...use tmb - m = logical_and(equal(st,-1),less(p, pres[-1])) - st[m] = tmb[m] - - # where topo level is below model surface...use difference - # of t at pressure of surface and tFHAG2 and subtract from tmb - m = equal(st, -1) - st[m] = (tmb - tms + temps[0])[m] - - return self.KtoF(st) - -####------------------------------------------------------------------------- -#### Calculates dew point from the specified pressure, temp and rh -#### fields. -####------------------------------------------------------------------------- - def calcTd(self, p_SFC, T, t_FHAG2, stopo, topo, rh_FHAG2): - # at the model surface - sfce = rh_FHAG2 / 100 * self.esat(t_FHAG2) # partial pres of H2O - w = (0.622 * sfce) / ((p_SFC + 0.0001) / 100 - sfce)# meters / millibar - # at the true surface - tsfce = self.esat(self.FtoK(T)) # saturation vap.pres. at sfc - dpdz = 287.04 * t_FHAG2 / (p_SFC / 100 * 9.8) # meters / millibar - newp = p_SFC / 100 + (stopo - topo) / dpdz # adj. sfc press. - ws = (0.622 * tsfce) / (newp - tsfce) # sat. mixing ratio - rh = w / ws # calc relative humidity - - # Finally, calculate the dew point - tsfcesat = rh * tsfce - tsfcesat = clip(tsfcesat, 0.00001, tsfcesat) - b = 26.66082 - log(tsfcesat) - td = (b - sqrt(b * b - 223.1986)) / 0.0182758048 - td = self.KtoF(td) - td = where(w > ws, T, td) - return td - -####------------------------------------------------------------------------- -#### Calculates RH from the T and Td grids -####------------------------------------------------------------------------- - def calcRH(self, T, Td): - Tc = .556 * (T - 32.0) - Tdc = .556 * (Td - 32.0) - Vt = 6.11 * pow(10, (Tc * 7.5 / (Tc + 237.3))) - Vd = 6.11 * pow(10, (Tdc * 7.5 / (Tdc + 237.3))) - RH = (Vd / Vt) * 100.0 - # Return the new value - return RH - -####------------------------------------------------------------------------- -#### Returns the maximum of the specified MaxRH and the RH grids -####-------------------------------------------------------------------------- - def calcMaxRH(self, RH, MaxRH): - if MaxRH is None: - return RH - return maximum(MaxRH, RH) - -####------------------------------------------------------------------------- -#### Returns the minimum of the specified MinRH and RH grids -####-------------------------------------------------------------------------- - def calcMinRH(self, RH, MinRH): - if MinRH is None: - return RH - return minimum(MinRH, RH) - -####------------------------------------------------------------------------- -#### Calculates QPF from the total precip field out of the model -####------------------------------------------------------------------------- - def calcQPF(self, tp_SFC): - qpf = tp_SFC / 25.4 # convert from millimeters to inches - return qpf - -####------------------------------------------------------------------------- -#### Calculates sky (0-100) from the total precip field out of the model -####------------------------------------------------------------------------- - - ########################################################################### - # Calculates Sky condition (fractional cloud cover) from model RH at - # specific pressure levels. Uses reduced equations from Walcek, MWR June - # 1994. Adds up the amount of fractional clouds calculated at each layer - # based on topography (i.e. no clouds below ground) then divides by a - # suggested number of layers to produce an average sky. - ########################################################################### - def calcSky(self, rh_c, gh_c, topo, p_SFC, rh_BL030, rh_BL3060, rh_BL6090, - rh_BL90120, rh_BL120150, rh_BL150180): - - tmpP_SFC = p_SFC.copy() - tmpP_SFC /= 100.0 # convert surfp to millibars - x = 560.0 # delta x (85km - 850km) - - # Define a percentage of f100 to use as a filter (0.0 - 1.0) - # Remember f100 is an exponential function, so changes will be more - # pronounced in the 0.5-1.0 range than the 0.0-0.5 range. - percent = 0.37 - - # Define a list of boundary layer levels to include - BL_levels = ['BL030', 'BL3060', 'BL6090', 'BL90120', 'BL120150', - 'BL150180'] - - # Construct a boundary layer pressure and RH cube - bl_Pcube = [] - bl_RHcube = [] - - # Place all BL RH levels into a cube - bl_RHcube += [rh_BL030] - bl_RHcube += [rh_BL3060] - bl_RHcube += [rh_BL6090] - bl_RHcube += [rh_BL90120] - bl_RHcube += [rh_BL120150] - bl_RHcube += [rh_BL150180] - - bl_RHcube = array(bl_RHcube) - - - # Make a cube of boundary layer pressures - for lvl in BL_levels: - if lvl == 'BL030': - tmpP = tmpP_SFC - 15.0 - elif lvl == 'BL3060': - tmpP = tmpP_SFC - 45.0 - elif lvl == 'BL6090': - tmpP = tmpP_SFC - 75.0 - elif lvl == 'BL90120': - tmpP = tmpP_SFC - 105.0 - elif lvl == 'BL120150': - tmpP = tmpP_SFC - 135.0 - elif lvl == 'BL150180': - tmpP = tmpP_SFC - 165.0 - bl_Pcube += [tmpP] - bl_Pcube = array(bl_Pcube) - - - # Make a model level pressure cube - pmb = ones_like(gh_c) - for i in xrange(gh_c.shape[0]): - pmb[i] = self.pres[i] - - - # Convert BL pressures to sigma levels - BL_sigma = bl_Pcube / tmpP_SFC - del bl_Pcube - BL_sigma = clip(BL_sigma, 0.1, 1.0) - - # Convert model level pressure cube to sigma surfaces - pp = pmb / tmpP_SFC - del tmpP_SFC - pp = clip(pp, 0.1, 1.0) - - - # Account for topography in the model cube, don't need to worry about - # this with the BL cube since those are guaranteed to be above ground - tmpRH_c = where(less(gh_c, topo), float32(0.0), rh_c) - - #======================================================================= - # Create new RH and sigma cubes - - newRH_c = [] - newSigma_c = [] - - # See which boundary layer levels have pressures > lowest "signficant" - # model level pressure - for bl_i in xrange(BL_sigma.shape[0]): - - # Make a mask to identify which points from the boundary - # layer level have greater pressure than lowest "significant" - # model level - BL_mask = greater(BL_sigma[bl_i], pp[0]) - - # See how many points we've found - count = sum(sum(BL_mask, 1)) - - # If there are no points - don't include this BL level - if count == 0: - continue - - # Compute a temporary RH grid where it is lower than the lowest - # "significant" model level data - tmpRH = where(BL_mask, bl_RHcube[bl_i], float32(0.0)) - - - # Compute a temporary sigma grid for this boundary layer level - # where it is lower than the lowest "significant" model level - tmpSigma = where(BL_mask, BL_sigma[bl_i], float32(0.0)) - - # Insert this level into the new RH and sigma cubes - newRH_c += [tmpRH] - newSigma_c += [tmpSigma] - - - # Add lowest "significant" model level to RH and sigma cubes - newRH_c += [tmpRH_c[0]] - newSigma_c += [pp[0]] - - - # Insert boundary layer RH into RH cube where appropriate - for lvl in xrange(1, len(self.levels())): - - # Look at each boundary layer level - for bl_i in xrange(BL_sigma.shape[0]): - - # Make a mask to identify which points from the boundary - # layer level fall between the surrounding "significant" - # model levels - BL_mask = logical_and(greater(BL_sigma[bl_i], pp[lvl]), - less(BL_sigma[bl_i], pp[lvl - 1])) - - # See how many points we've found - count = sum(sum(BL_mask, 1)) - - # If there are no points - don't include this BL level - if count == 0: - continue - - # Compute a temporary RH grid where it is between the two - # "significant" model level data - tmpRH = where(BL_mask, bl_RHcube[bl_i], float32(0.0)) - - - # Compute a temporary sigma grid for this boundary layer level - # where it is between the two "significant" model levels - tmpSigma = where(BL_mask, BL_sigma[bl_i], float32(0.0)) - - # Insert this level into the new RH and sigma cubes - newRH_c += [tmpRH] - newSigma_c += [tmpSigma] - - - # Add top of layer we just examined to RH and sigma cube - newRH_c += [tmpRH_c[lvl]] - newSigma_c += [pp[lvl]] - - del bl_RHcube - del BL_sigma - del tmpRH_c - - # Finish off the new cubes - newRH_c = array(newRH_c) - newSigma_c = array(newSigma_c) - - # Determine maximum possible sky fraction - fmax = 78.0 + x / 15.5 - - # Compute sky fraction for both pressure cubes - f100 = where(less(newSigma_c, 0.7), - fmax * (newSigma_c - 0.1) / 0.6, - 30.0 + (1.0 - newSigma_c) * (fmax - 30.0) / 0.3) - - # Compute RH depression at 37% f100 [ (1-RHe) in Walcek ] - c = 0.196 + (0.76 - x / 2834.0) * (1.0 - newSigma_c) - - del newSigma_c - - # Compute critical RH threshold to use as a filter - # Note (percent * f100)/f100 = percent - try: - rhCrit = log(percent) * c + 1.0 - except: - rhCrit = 0.0 - - # Ensure "critical RH" is valid - rhCrit = clip(rhCrit, 0.0, 1.0) - - # Compute sky fraction for the model cube - c = (newRH_c / 100.0 - 1.0) / c - c = exp(c) - f = minimum(f100 * c, 100.0) - - # Where RH is less than the critical value, set it to 0 contribution - f[less(newRH_c / 100.0, rhCrit)] = 0.0 - - del newRH_c - - # Compress cubes vertically - f = self.squishZ(f, (f.shape[0] / 5) - 1) # was 5 - - # Convert sky fractions to an actual percentage - f[4] *= 0.25 - f /= 100.0 - - sky = f[0] - for i in xrange(1, f.shape[0]): - sky = sky + f[i] - sky * f[i] - - grid = sky * 100.0 - - return grid - -####------------------------------------------------------------------------- -#### Calculates Prob. of Precip. based on QPF and RH cube. Where there -#### is QPF > 0 ramp the PoP from (0.01, 35%) to 100%. Then in areas -#### of QPF < 0.2 raise the PoP if it's very humid. -####------------------------------------------------------------------------- - def calcPoP(self, gh_c, rh_c, QPF, topo): - rhavg = where(less(gh_c, topo), float32(-1), rh_c) - rhavg[greater(gh_c, topo + 5000 * 0.3048)] = -1 - count = not_equal(rhavg, -1) - rhavg[equal(rhavg, -1)] = 0 - count = add.reduce(count, 0, dtype=float32) - rhavg = add.reduce(rhavg, 0) - ## add this much based on humidity only - dpop = where(count, rhavg / (count + .001), 0) - 70.0 - dpop[less(dpop, -30)] = -30 - ## calculate the base PoP - pop = where(less(QPF, 0.02), QPF * 1000, QPF * 350 + 13) - pop += dpop # add the adjustment based on humidity - pop = clip(pop, 0, 100) # clip to 100% - return pop - -####------------------------------------------------------------------------- -#### Calculates the Freezing level based on height and temperature -#### cubes. Finds the height at which freezing occurs. -####------------------------------------------------------------------------- - def calcFzLevel(self, gh_FRZ): - return gh_FRZ * 3.28 - -####------------------------------------------------------------------------- -#### Calculates the Snow level based on wet-bulb zero height. -####------------------------------------------------------------------------- - def calcSnowLevel(self, gh_c, t_c, rh_c): - # Only use the levels that are >= freezind (plus one level) - # This is a performance and memory optimization - clipindex = 2 - for i in xrange(t_c.shape[0] - 1, -1, -1): - if maximum.reduce(maximum.reduce(t_c[i])) >= 273.15: - clipindex = i + 1 - break - gh_c = gh_c[:clipindex, :, :] - t_c = t_c[:clipindex, :, :] - rh_c = rh_c[:clipindex, :, :] - - snow = self.newGrid(-1) - # - # make pressure cube - # - pmb = ones_like(gh_c) - for i in xrange(gh_c.shape[0]): - pmb[i] = self.pres[i] - pmb = clip(pmb, 1, 1050) - # - # convert temps to C and limit to reasonable values - # - tc = t_c - 273.15 - tc = clip(tc, -120, 60) - # - # limit RH to reasonable values - # - rh = clip(rh_c, 0.5, 99.5) - # - # calculate the wetbulb temperatures - # (this is expensive - even in numeric python - and somewhat - # wasteful, since you do not need to calculate the wetbulb - # temp for all levels when it may cross zero way down toward - # the bottom. Nevertheless - all the gridpoints will cross - # zero at different levels - so you cannot know ahead of time - # how high up to calculate them. In the end - this was the - # most expedient way to code it - and it works - so I stuck - # with it. - # - wetb = self.Wetbulb(tc, rh, pmb) - tc = rh = pmb = None - # - # find the zero level - # - for i in xrange(1, gh_c.shape[0]): - try: - val = gh_c[i - 1] + (gh_c[i] - gh_c[i - 1]) / (wetb[i] - wetb[i - 1])\ - * (-wetb[i - 1]) - except: - val = gh_c[i] - - m = logical_and(equal(snow, -1), less_equal(wetb[i], 0)) - snow[m] = val[m] - # - # convert to feet - # - snow *= 3.28 - - return snow - -####------------------------------------------------------------------------- -#### Calculates Snow amount based on the Temp, Freezing level, QPF, -#### topo and Weather grid -####------------------------------------------------------------------------- -# def calcSnowAmt(self, T, FzLevel, QPF, topo, Wx): -# # figure out the snow to liquid ratio -# m1 = less(T, 9) -# m2 = greater_equal(T, 30) -# snowr = T * -0.5 + 22.5 -# snowr[m1] = float32(20)) -# snowr[m2] = float32(0) -# # calc. snow amount based on the QPF and the ratio -# snowamt = where(less_equal(FzLevel - 1000, topo * 3.28), -# snowr * QPF, float32(0)) -# # Only make snow at points where the weather is snow -# snowmask = logical_or(equal(Wx[0], 1), equal(Wx[0], 3)) -# snowmask = logical_or(snowmask, logical_or(equal(Wx[0], 7), -# equal(Wx[0], 9))) -# snowamt[logical_not(snowmask)] = 0 -# return snowamt - -########################################################### -## GRR Snow Init - begin -## This Routine Does SnowAmt - Not SnowRatio -########################################################### - def calcSnowAmt(self, T, QPF, gh_c, t_c, rh_c, pvv_c, gh_MB925, gh_MB800, gh_MB850, gh_MB700, gh_MB750, gh_MB650, gh_MB600, gh_MB550): - - #t_c is tCube, rh_c is rhCube, etc. - #we do not want the lowest 4 levels in the cubes - gh_c = gh_c[4:, :, :] - t_c = t_c[4:, :, :] - rh_c = rh_c[4:, :, :] - pvv_c = pvv_c[4:, :, :] - - - print "Got", len(t_c), "t grids and", len(rh_c), "rh grids" - - # Some thresholds used throughout the tool - dryRH = 75.0 # dry atm below this value - lrMin = 10.0 # lapse rate minimum - lrMax = 6.5 # laspe rate maximum - lrMaxAdj = 0.3 # max lapse rate adjustment value - - # extract the shapes and make some variables - #cubeShape = (len(t_c) - 1, t_c.shape[1], t_c.shape[2]) - cubeShape = (len(t_c), t_c.shape[1], t_c.shape[2]) - gridShape = (t_c.shape[1], t_c.shape[2]) - layerSR = zeros(cubeShape, dtype = float32) - pvvAvg = zeros(cubeShape, dtype = float32) - pvvSum = zeros(gridShape, dtype = float32) - - #print "cubeShape = ", cubeShape - - for i in range(len(gh_c) - 1): - #for i in range(len(gh_c)): - #print "processing layer", gh_c[i] - # calculate the average temp and rh in the layer - avgTemp = t_c[i] - 273.15 # Convert to C - avgRH = rh_c[i] - - # get the base snowRatio based on the avgTemp - layerSR[i] = self.baseSnowRatio(avgTemp) - - # adjust snowRatio based on lapseRate - #lr = -(t_c[i+1] - t_c[i]) - #lrAdj = where(greater_equal(lr,6.5), 1.0 + ((lr - lrMin) / (lrMax - lrMin)) * lrMaxAdj, float32(1.0)) - #layerSR[i] = layerSR[i] * lrAdj - - # Calc avg pressure vertical velocity, scale based on RH and sum - # reverse the pvvAvg sign so up is positive - pvvAvg[i] = -10 * (pvv_c[i]) - # clip downward vertical velocities - pvvAvg[i][less(pvvAvg[i], 0.0)] = 0.0 - # Scale vertical velocity as a function of the square of RH. - # This scaling will efectively negate a snowratio contribution in - # layers that are dry. - pvvAvg[i] = where(less(avgRH, 80.0), pvvAvg[i] * ((avgRH * avgRH) / 6400.0), pvvAvg[i]) - pvvSum = pvvSum + pvvAvg[i] - - # Normalize the layerSnowRatio based on the pvv fraction of the total - totalSnowRatio = zeros(gridShape, dtype = float32) - #tweak the pvvSum grid to avoid division by zero - pvvSum[less_equal(pvvSum, 0.0)] = .0001 - for i in range(len(layerSR)): - srGrid = layerSR[i] * pvvAvg[i] / pvvSum - totalSnowRatio = totalSnowRatio + srGrid - - # Finally clip the snowRatio to zero under two conditions - # cube where min colum temp > -8.0C and rh > 75% - # This is basically Baumgardt - Top Down Approach - No ice No dice! - mask = logical_and(less(t_c, 265.15), greater_equal(rh_c, 50.0)) - mask = sum(mask) # reduce to single level by adding bits verically - totalSnowRatio[equal(mask, 0)] = 0.0 - - thicknessSnowRatio = zeros(gridShape, dtype = float32) - -######################################################### -# Pick an applicable thickness scheme for your area - - myThickness = "850-700" - #myThickness = "925-700" - #myThickness = "850-650" - #myThickness = "800-600" - #myThickness = "750-550" - -########################################################## - - if myThickness == "850-700": - thicknessSnowRatio = 20.0 - pow(((gh_MB700 - gh_MB850) - 1437.0) / 29.0 , 2) - elif myThickness == "925-700": - thicknessSnowRatio = 20.0 - pow(((gh_MB700 - gh_MB925) - 2063.0) / 41.0 , 2) - elif myThickness == "850-650": - thicknessSnowRatio = 20.0 - pow(((gh_MB650 - gh_MB850) - 1986.0) / 39.0 , 2) - elif myThickness == "800-600": - thicknessSnowRatio = 20.0 - pow(((gh_MB600 - gh_MB800) - 2130.0) / 42.0 , 2) - else: # "750-500" - thicknessSnowRatio = 20.0 - pow(((gh_MB550 - gh_MB750) - 2296.0) / 45.0 , 2) - - thicknessSnowRatio[less(thicknessSnowRatio, 0.0)] = 0.0 - - totalSnowRatio = (totalSnowRatio * 0.50) + (thicknessSnowRatio * 0.50) - totalSnowRatio = where(less_equal(pvvSum, 100.0), (totalSnowRatio * 0.01 * pvvSum) + (thicknessSnowRatio * (1.0 - pvvSum * 0.01)), totalSnowRatio) - totalSnowRatio = where(less(pvvSum, 1.0), thicknessSnowRatio, totalSnowRatio) - - # If there's any layer above 0.0C, snowRatio gets 0 - mask = greater(t_c, 272.65) - mask = sum(mask) # reduce to single level by adding bits vertically - # if mask == 0, nowhere in the column is temp < 0.5C - totalSnowRatio[not_equal(mask, 0)] = 0.0 - - #Calculate Snowfall - taper to zero from 31 to 34 F. - snowfall = QPF * totalSnowRatio - snowfall = where(greater(T, 31.0), pow(35.0 - T, 2) / 16.0 * snowfall , snowfall) - snowfall[greater(T, 35.0)] = 0.0 - - # Return the new value - return snowfall - - - ### Given a grid of temperature in Celcius, this method computes - ### the base snowRatio based on the spline curve as defined by the - ### coefficients. - def baseSnowRatio(self, tGrid): - # set up the spline coefficients - tThresh = [-30.0, -21.0, -18.0, -15.0, -12.0, -10.0, -8.0, -5.0, -3.0, 2.0] - a = [9.0, 21.0, 31.0, 35.0, 26.0, 15.0, 9.0, 5.0, 4.0] - b = [0.4441, 3.1119, 2.8870, -0.6599, -5.2475, -4.5685, -1.9786, -0.7544, -0.3329] - c = [0.0, 0.2964, -0.3714, -0.8109, -0.7183, 1.0578, 0.2372, 0.1709, 0.0399] - d = [0.0110, -0.0742, -0.0488, 0.0103, 0.2960, -0.1368, -0.0074, -0.0218, -0.0027] - - # Initialize the coeficient grids - aGrid = self.newGrid(a[-1]) #last value in list - bGrid = self.newGrid(b[-1]) - cGrid = self.newGrid(c[-1]) - dGrid = self.newGrid(d[-1]) - tDiff = zeros(tGrid.shape, dtype = float) - - # define grids of coefficients based on tGrid - for i in range(len(tThresh) - 1): - mask1 = greater_equal(tGrid, tThresh[i]) - mask2 = less(tGrid, tThresh[i + 1]) - mask = logical_and(mask1, mask2) # area b/w threshold - tDiff = where(mask, tGrid - tThresh[i], tDiff) - aGrid = where(mask, a[i], aGrid) - bGrid = where(mask, b[i], bGrid) - cGrid = where(mask, c[i], cGrid) - dGrid = where(mask, d[i], dGrid) - - # Do the calcuation using the grids of spline coefficients - baseRatio = aGrid + bGrid * tDiff + cGrid * tDiff * tDiff \ - + dGrid * pow(tDiff, 3) - - # Clip the snowRatio grid to 10.0 where tGrid is outside limits - #baseRatio[greater(tGrid, 1.0)] = 0.0 - #baseRatio[less(tGrid, tThresh[0])] = 10.0 - - return baseRatio - - -############################################################################### -## END-- GRR Snow Init -############################################################################### - -########################################################### -## GRR SnowRatio Init - begin -## This routine does SnowRatio - Not SnowAmt! -########################################################### - def calcSnowRatio(self, gh_c, t_c, rh_c, pvv_c, gh_MB925, gh_MB800, gh_MB850, gh_MB750, gh_MB700, gh_MB650, gh_MB600, gh_MB550): - - #t_c is tCube, rh_c is rhCube, etc. - #we do not want the lowest 4 levels in the cubes - gh_c = gh_c[4:, :, :] - t_c = t_c[4:, :, :] - rh_c = rh_c[4:, :, :] - pvv_c = pvv_c[4:, :, :] - - - print "Got", len(t_c), "t grids and", len(rh_c), "rh grids" - - # Some thresholds used throughout the tool - dryRH = 75.0 # dry atm below this value - lrMin = 10.0 # lapse rate minimum - lrMax = 6.5 # laspe rate maximum - lrMaxAdj = 0.3 # max lapse rate adjustment value - - # extract the shapes and make some variables - #cubeShape = (len(t_c) - 1, t_c.shape[1], t_c.shape[2]) - cubeShape = (len(t_c), t_c.shape[1], t_c.shape[2]) - gridShape = (t_c.shape[1], t_c.shape[2]) - layerSR = zeros(cubeShape, dtype = float) - pvvAvg = zeros(cubeShape, dtype = float) - pvvSum = zeros(gridShape, dtype = float) - - #print "cubeShape = ", cubeShape - - for i in range(len(gh_c) - 1): - #for i in range(len(gh_c)): - #print "processing layer", gh_c[i] - # calculate the average temp and rh in the layer - avgTemp = t_c[i] - 273.15 # Convert to C - avgRH = rh_c[i] - - # get the base snowRatio based on the avgTemp - layerSR[i] = self.baseSnowRatio(avgTemp) - - # adjust snowRatio based on lapseRate - #lr = -(t_c[i+1] - t_c[i]) - #lrAdj = where(greater_equal(lr,6.5), 1.0 + ((lr - lrMin) / (lrMax - lrMin)) * lrMaxAdj, float32(1.0)) - #layerSR[i] = layerSR[i] * lrAdj - - # Calc avg pressure vertical velocity, scale based on RH and sum - # reverse the pvvAvg sign so up is positive - pvvAvg[i] = -10 * (pvv_c[i]) - # clip downward vertical velocities - pvvAvg[i][less(pvvAvg[i], 0.0)] = 0.0 - # Scale vertical velocity as a function of the square of RH. - # This scaling will efectively negate a snowratio contribution in - # layers that are dry. - pvvAvg[i] = where(less(avgRH, 80.0), pvvAvg[i] * ((avgRH * avgRH) / 6400.0), pvvAvg[i]) - pvvSum = pvvSum + pvvAvg[i] - - # Normalize the layerSnowRatio based on the pvv fraction of the total - totalSnowRatio = zeros(gridShape, dtype = float) - #tweak the pvvSum grid to avoid division by zero - pvvSum[less_equal(pvvSum, 0.0)] = .0001 - - for i in range(len(layerSR)): - srGrid = layerSR[i] * pvvAvg[i] / pvvSum - totalSnowRatio = totalSnowRatio + srGrid - - # Finally clip the snowRatio to zero under two conditions - # cube where min colum temp > -8.0C and rh > 75% - # This is basically Baumgardt - Top Down Approach - No ice No dice! - mask = logical_and(less(t_c, 265.15), greater_equal(rh_c, 50.0)) - mask = sum(mask) # reduce to single level by adding bits verically - totalSnowRatio[equal(mask, 0)] = 0.0 - - thicknessSnowRatio = zeros(gridShape, dtype=float) - -######################################################### -# Pick an applicable thickness scheme for your area - - myThickness = "850-700" - #myThickness = "925-700" - #myThickness = "850-650" - #myThickness = "800-600" - #myThickness = "750-550" - -########################################################## - - if myThickness == "850-700": - thicknessSnowRatio = 20.0 - pow(((gh_MB700 - gh_MB850) - 1437.0) / 29.0 , 2) - elif myThickness == "925-700": - thicknessSnowRatio = 20.0 - pow(((gh_MB700 - gh_MB925) - 2063.0) / 41.0 , 2) - elif myThickness == "850-650": - thicknessSnowRatio = 20.0 - pow(((gh_MB650 - gh_MB850) - 1986.0) / 39.0 , 2) - elif myThickness == "800-600": - thicknessSnowRatio = 20.0 - pow(((gh_MB600 - gh_MB800) - 2130.0) / 42.0 , 2) - else: # "750-500" - thicknessSnowRatio = 20.0 - pow(((gh_MB550 - gh_MB750) - 2296.0) / 45.0 , 2) - - - - thicknessSnowRatio[less(thicknessSnowRatio, 0.0)] = 0.0 - totalSnowRatio = (totalSnowRatio * 0.50) + (thicknessSnowRatio * 0.50) - totalSnowRatio = where(less_equal(pvvSum, 100.0), (totalSnowRatio * 0.01 * pvvSum) + (thicknessSnowRatio * (1.0 - pvvSum * 0.01)), totalSnowRatio) - totalSnowRatio = where(less(pvvSum, 1.0), thicknessSnowRatio, totalSnowRatio) - - # If there's any layer above 0.0C, snowRatio gets 0 - mask = greater(t_c, 272.65) - mask = sum(mask) # reduce to single level by adding bits vertically - # if mask == 0, nowhere in the column is temp < 0.5C - totalSnowRatio[not_equal(mask, 0)] = 0.0 - - # Return the new value - return totalSnowRatio - - - ### Given a grid of temperature in Celcius, this method computes - ### the base snowRatio based on the spline curve as defined by the - ### coefficients. - def baseSnowRatio(self, tGrid): - # set up the spline coefficients - tThresh = [-30.0, -21.0, -18.0, -15.0, -12.0, -10.0, -8.0, -5.0, -3.0, 2.0] - a = [9.0, 21.0, 31.0, 35.0, 26.0, 15.0, 9.0, 5.0, 4.0] - b = [0.4441, 3.1119, 2.8870, -0.6599, -5.2475, -4.5685, -1.9786, -0.7544, -0.3329] - c = [0.0, 0.2964, -0.3714, -0.8109, -0.7183, 1.0578, 0.2372, 0.1709, 0.0399] - d = [0.0110, -0.0742, -0.0488, 0.0103, 0.2960, -0.1368, -0.0074, -0.0218, -0.0027] - - # Initialize the coeficient grids - aGrid = self.newGrid(a[-1]) #last value in list - bGrid = self.newGrid(b[-1]) - cGrid = self.newGrid(c[-1]) - dGrid = self.newGrid(d[-1]) - tDiff = zeros(tGrid.shape, dtype = float) - - # define grids of coefficients based on tGrid - for i in range(len(tThresh) - 1): - mask1 = greater_equal(tGrid, tThresh[i]) - mask2 = less(tGrid, tThresh[i + 1]) - mask = logical_and(mask1, mask2) # area b/w threshold - tDiff = where(mask, tGrid - tThresh[i], tDiff) - aGrid = where(mask, a[i], aGrid) - bGrid = where(mask, b[i], bGrid) - cGrid = where(mask, c[i], cGrid) - dGrid = where(mask, d[i], dGrid) - - # Do the calcuation using the grids of spline coefficients - baseRatio = aGrid + bGrid * tDiff + cGrid * tDiff * tDiff \ - + dGrid * pow(tDiff, 3) - - # Clip the snowRatio grid to 10.0 where tGrid is outside limits - #baseRatio[greater(tGrid, 1.0)] = 0.0 - #baseRatio[less(tGrid, tThresh[0])] = 10.0 - - return baseRatio - - -############################################################################### -## END-- GRR SnowRatio Init -############################################################################### -####-------------------------------------------------------------------------- -#### Calculate the Haines index based on the temp and RH cubes -#### Define self.whichHainesIndex to be "HIGH", "MEDIUM", or "LOW". -#### Default is "HIGH". -####-------------------------------------------------------------------------- - def calcHaines(self, t_c, rh_c): - return self.hainesIndex(self.whichHainesIndex, t_c, rh_c) - - -####------------------------------------------------------------------------- -#### Calculates the mixing height for the given sfc temperature, -#### temperature cube, height cube and topo -####------------------------------------------------------------------------- - def calcMixHgt(self, T, topo, t_c, gh_c): - mask = greater_equal(gh_c, topo) # points where height > topo - pt = [] - for i in xrange(len(self.pres)): # for each pres. level - p = self.newGrid(self.pres[i]) # get the pres. value in mb - tmp = self.ptemp(t_c[i], p) # calculate the pot. temp - pt = pt + [tmp] # add to the list - pt = array(pt) - # set up masks - pt[logical_not(mask)] = 0 - avg = add.accumulate(pt, 0) - count = add.accumulate(mask, 0) - mh = self.newGrid(-1) - # for each pres. level, calculate a running avg. of pot temp. - # As soon as the next point deviates from the running avg by - # more than 3 deg. C, interpolate to get the mixing height. - for i in xrange(1, avg.shape[0]): - runavg = avg[i] / (count[i] + .0001) # calc. running avg - diffpt = pt[i] - runavg # calc. difference - # calc. the interpolated mixing height - tmh = self.linear(pt[i], pt[i - 1], gh_c[i], gh_c[i - 1], runavg) - # assign new values if the difference is greater than 3 - m = logical_and(logical_and(mask[i], equal(mh, -1)), - greater(diffpt, 3)) - mh[m] = tmh[m] - - mh -= topo - mh *= 3.28 # convert to feet - return mh - -####------------------------------------------------------------------------- -#### Converts the lowest available wind level from m/s to knots -####------------------------------------------------------------------------- - def calcWind(self, wind_FHAG10): - mag = wind_FHAG10[0] * 1.94 # get the wind speed and convert - dir = wind_FHAG10[1] # get wind dir - return (mag, dir) # assemble speed and dir into a tuple - -####------------------------------------------------------------------------- -#### Calculates the wind at 3000 feet AGL. -####------------------------------------------------------------------------- - def calcFreeWind(self, gh_c, wind_c, topo): - wm = wind_c[0] - wd = wind_c[1] - # Make a grid that's topo + 3000 feet (914 meters) - fatopo = topo + 914.4 - # find the points that are above the 3000 foot level - mask = greater_equal(gh_c, fatopo) - # initialize the grids into which the value are stored - famag = self.newGrid(-1) - fadir = self.newGrid(-1) - # start at the bottom and store the first point we find that's - # above the topo + 3000 feet level. - for i in xrange(wind_c[0].shape[0]): - m = logical_and(equal(famag, -1), mask[i]) - famag[m] = wm[i][m] - - m = logical_and(equal(fadir, -1), mask[i]) - fadir[m] = wd[i][m] - fadir.clip(0, 360, fadir) # clip the value to 0, 360 - famag *= 1.94 # convert to knots - return (famag, fadir) # return the tuple of grids - -####------------------------------------------------------------------------- -#### Calculates the average wind vector in the mixed layer as defined -#### by the mixing height. This function creates a mask that identifies -#### all grid points between the ground and the mixing height and calculates -#### a vector average of the wind field in that layer. -####------------------------------------------------------------------------- - def calcTransWind(self, MixHgt, wind_c, gh_c, topo): - nmh = MixHgt * 0.3048 # convert MixHt from feet -> meters - u, v = self._getUV(wind_c[0], wind_c[1]) # get the wind grids - # set a mask at points between the topo and topo + MixHt - mask = logical_and(greater_equal(gh_c, topo), - less_equal(gh_c, nmh + topo)) - # set the points outside the layer to zero - u[logical_not(mask)] = 0 - v[logical_not(mask)] = 0 - - mask = add.reduce(mask).astype(float32) # add up the number of set points vert. - mmask = mask + 0.0001 - # calculate the average value in the mixed layerlayer - u = where(mask, add.reduce(u) / mmask, float32(0)) - v = where(mask, add.reduce(v) / mmask, float32(0)) - # convert u, v to mag, dir - tmag, tdir = self._getMD(u, v) - #tdir.clip(0, 359.5, tdir) #should this be added? - tmag *= 1.94 # convert to knots - tmag.clip(0, 125, tmag) # clip speed to 125 knots - return (tmag, tdir) - -####------------------------------------------------------------------------- -#### Uses a derivation of the Bourgouin allgorithm to calculate precipitation -#### type, and other algorithms to determine the coverage and intensity. -#### The Bourgoin technique figures out precip type from calculating how -#### long a hydrometer is exposed to alternating layers of above zero (C) and -#### below zero temperature layers. This tool calculates at each grid point -#### which of the four Bourgouin cases apply. Then the appropriate algorithm -#### is applied to that case that further refines the precip. type. Once the -#### type is determined, other algorithms are used to determine the coverage -#### and intensity. See the Weather and Forecasting Journal article Oct. 2000, -#### "A Method to Determine Precipitation Types", by Pierre Bourgouin -####------------------------------------------------------------------------- - def calcWx(self, QPF, T, t_c, gh_c, p_SFC, topo, sli_SFC): - gh_c = gh_c[:13, :, :] - t_c = t_c[:13, :, :] - T = self.FtoK(T) - p_SFC = p_SFC / 100 # sfc pres. in mb - pres = self.pres - a1 = self.empty() - a2 = self.empty() - a3 = self.empty() - aindex = self.empty() - # Go through the levels to identify each case type 0-3 - for i in xrange(1, gh_c.shape[0] - 1): - # get the sfc pres. and temp. - pbot = where(greater(gh_c[i - 1], topo), pres[i - 1], p_SFC) - tbot = where(greater(gh_c[i - 1], topo), t_c[i - 1], T) - # Calculate the area of this layer in Temp/pres coordinates - a11, a22, cross = self.getAreas(pbot, tbot, pres[i], t_c[i]) - topomask = greater(gh_c[i], topo) - a1 = where(logical_and(equal(aindex, 0), topomask), - a1 + a11, a1) - a2 = where(logical_and(equal(aindex, 1), topomask), - a2 + a11, a2) - a3 = where(logical_and(equal(aindex, 2), topomask), - a3 + a11, a3) - topomask = logical_and(topomask, cross) - aindex[topomask] += 1 - a1 = where(logical_and(equal(aindex, 0), topomask), - a1 + a22, a1) - a2 = where(logical_and(equal(aindex, 1), topomask), - a2 + a22, a2) - a3 = where(logical_and(equal(aindex, 2), topomask), - a3 + a22, a3) - - # Now apply a different algorithm for each type - key = ['::::', - "Wide:S:-::", "Wide:R:-::", - "Wide:S:-::^Wide:R:-::", - 'Wide:ZR:-::', 'Wide:IP:-::', - 'Wide:ZR:-::^Wide:IP:-::', - "Sct:SW:-::", "Sct:RW:-::", - "Sct:SW:-::^Sct:RW:-::", - "Chc:ZR:-::", 'Chc:IP:-::', - 'Chc:ZR:-::^Chc:IP:-::'] - - wx = self.empty(int8) - # Case d (snow) - snowmask = equal(aindex, 0) - wx[logical_and(snowmask, greater(a1, 0))] = 2 - wx[logical_and(snowmask, less_equal(a1, 0))] = 1 - - # Case c (rain / snow / rainSnowMix) - srmask = equal(aindex, 1) - wx[logical_and(srmask, less(a1, 5.6))] = 1 - wx[logical_and(srmask, greater(a1, 13.2))] = 2 - wx[logical_and(srmask, - logical_and(greater_equal(a1, 5.6), - less(a1, 13.2)))] = 3 - - - # Case a (Freezing Rain / Ice Pellets) - ipmask = equal(aindex, 2) - ipm = greater(a1, a2 * 0.66 + 66) - wx[logical_and(ipmask, ipm)] = 5 - zrm = less(a1, a2 * 0.66 + 46) - wx[logical_and(ipmask, zrm)] = 4 - zrm = logical_not(zrm) - ipm = logical_not(ipm) - wx[logical_and(ipmask, logical_and(zrm, ipm))] = 6 - - # Case b (Ice pellets / rain) - cmask = greater_equal(aindex, 3) - ipmask = logical_and(less(a3, 2), cmask) - wx[logical_and(ipmask, less(a1, 5.6))] = 1 - wx[logical_and(ipmask, greater(a1, 13.2))] = 2 - wx[logical_and(ipmask, - logical_and(greater_equal(a1, 5.6), - less(a1, 13.2)))] = 3 - - ipmask = logical_and(greater_equal(a3, 2), cmask) - wx[logical_and(ipmask, greater(a1, 66 + 0.66 * a2))] = 5 - wx[logical_and(ipmask, less(a1, 46 + 0.66 * a2))] = 4 - wx[logical_and(ipmask, logical_and(greater_equal(a1, 46 + 0.66 * a2), - less_equal(a1, 66 + 0.66 * a2)))] = 6 - - # Make showers (scattered/Chc) -# convecMask = greater(cp_SFC / (tp_SFC + .001), 0.5) -# wx = where(logical_and(not_equal(wx, 0), convecMask), wx + 6, wx) - - # Thunder - for i in xrange(len(key)): - tcov = string.split(key[i], ":")[0] - if tcov == "Chc" or tcov == "": - tcov = "Sct" - key.append(key[i] + "^" + tcov - + ":T:::") - wx[less_equal(sli_SFC, -3)] += 13 - - # No wx where no qpf - wx[less(QPF, 0.01)] = 0 - - return(wx, key) - -####------------------------------------------------------------------------- -#### Calculates chance of wetting rain based on QPF. -####------------------------------------------------------------------------- - def calcCWR(self, QPF): - m1 = less(QPF, 0.01) # all the places that are dry - m2 = greater_equal(QPF, 0.3) # all the places that are wet - # all the places that are 0.01 to 0.10 - m3 = logical_and(greater_equal(QPF, 0.01), less_equal(QPF, 0.1)) - # all the places that are 0.1 to 0.3 - m4 = logical_and(greater(QPF, 0.1), less(QPF, 0.3)) - # assign 0 to the dry grid point, 100 to the wet grid points, - # and a ramping function to all point in between - cwr = where(m1, float32(0), where(m2, float32(100), - where(m3, 444.4 * (QPF - 0.01) + 10, - where(m4, 250 * (QPF - 0.1) + 50, - QPF)))) - return cwr - -####------------------------------------------------------------------------- -#### Calculates Lightning Activity Level based on total precip., lifted index -#### and 3-D relative humidity. -####------------------------------------------------------------------------- - def calcLAL(self, tp_SFC, sli_SFC, rh_c, rh_BL030): - bli = sli_SFC # surface lifted index - ttp = self.newGrid(0.00001) # nearly zero grid - lal = self.newGrid(1) # initialize the return grid to 1 - # Add one to lal if QPF > 0.5 - lal[logical_and(greater(ttp, 0), greater(tp_SFC / ttp, 0.5))] += 1 - # make an average rh field - midrh = add.reduce(rh_c[6:9], 0) / 3 - # Add one to lal if mid-level rh high and low level rh low - lal[logical_and(greater(midrh, 70), less(rh_BL030, 30))] += 1 - - # Add on to lal if lifted index is <-3 and another if <-5 - lal[less(bli, -3)] += 1 - lal[less(bli, -5)] += 1 - return lal - - -def main(): - GFS40Forecaster().run() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/GFS75.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/GFS75.py deleted file mode 100644 index 398409ffc5..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/GFS75.py +++ /dev/null @@ -1,539 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -from Init import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from GFS75 model -## output. -## -##-------------------------------------------------------------------------- -class GFS75Forecaster(Forecaster): - def __init__(self): - Forecaster.__init__(self, "GFS75") - -##-------------------------------------------------------------------------- -## These levels will be used to create vertical soundings. These are -## defined here since they are model dependent. -##-------------------------------------------------------------------------- - def levels(self): - return ["MB1000", "MB950", "MB900", "MB850", - "MB800", "MB750", "MB700", - "MB650", "MB600", "MB500", "MB450", "MB400", "MB350", - "MB300"] - -##------------------------------------------------------------------------- -## Returns the maximum of the specified MaxT and the T grids -##-------------------------------------------------------------------------- - def calcMaxT(self, T, MaxT): - if MaxT is None: - return T - return maximum(MaxT, T) - -##------------------------------------------------------------------------- -## Returns the minimum of the specified MinT and T grids -##-------------------------------------------------------------------------- - def calcMinT(self, T, MinT): - if MinT is None: - return T - return minimum(MinT, T) - - -##------------------------------------------------------------------------- -## Calculates the temperature at the elevation indicated in the topo -## grid. This tool simply interpolates the temperature value from -## model's isobaric temperature cube. -##------------------------------------------------------------------------- - def calcT(self, t_FHAG2, stopo, topo): -# Temperature drops by .0074 C/meter per Hans' computations - elevationDiff = topo - stopo # in m. - tcorr = elevationDiff * 0.00714 #K - return self.KtoF(t_FHAG2 - tcorr) - -##------------------------------------------------------------------------- -## Calculates dew point from the specified pressure, temp and rh -## fields. -##------------------------------------------------------------------------- - def calcTd(self, gh_c, t_c, rh_BL030, rh_MB850, rh_MB800, rh_MB750, rh_MB700, rh_MB650, - t_MB1000, t_MB900, t_MB850, t_MB800, t_MB750, t_MB700, t_MB650, topo): - - tmb = self.newGrid(-1) - - #calc sfc_temp at topo - for i in xrange(1, gh_c.shape[0]): - - #interpolate temp in this layer - tval1 = self.linear(gh_c[i], gh_c[i - 1], t_c[i], t_c[i - 1], topo) - tmb = where(logical_and(equal(tmb, -1), greater(gh_c[i], topo)), tval1, tmb) - - temp = self.KtoF(tmb) - - rh = rh_BL030 - rh = where(logical_and(greater_equal(topo, 1327),less(topo, 1828)),rh_MB850, rh) - rh = where(logical_and(greater_equal(topo, 1828),less(topo, 2438)),rh_MB800, rh) - rh = where(logical_and(greater_equal(topo, 2438),less(topo, 3048)),rh_MB750, rh) - rh = where(logical_and(greater_equal(topo, 3048),less(topo, 3657)),rh_MB700, rh) - rh = where(logical_and(greater_equal(topo, 3657),less(topo, 4267)),rh_MB650, rh) - - rh_linear = self.linear(0, 4400, 1.0, 1.001, topo) - rh = rh * rh_linear - rh = clip(rh, 3.0, 100.0) - - - rh = rh + .01 - Tc = .556 * (temp - 32.0) - - ret = .9 * Tc - ret1 = 112 + ret - ret2 = ret1 * (rh ** .125) / 1.7783 - Tdc = ret2 - 112 + .1 * Tc - Td = (1.8 * Tdc) + 32 - - return Td - -##------------------------------------------------------------------------- -## Calculates RH from the T and Td grids -##------------------------------------------------------------------------- - def calcRH(self, rh_BL030, rh_MB850, rh_MB800, rh_MB750, rh_MB700, rh_MB650, topo): - rh = rh_BL030 - - rh = where(logical_and(greater_equal(topo, 1327),less(topo, 1828)),rh_MB850, rh) - rh = where(logical_and(greater_equal(topo, 1828),less(topo, 2438)),rh_MB800, rh) - rh = where(logical_and(greater_equal(topo, 2438),less(topo, 3048)),rh_MB750, rh) - rh = where(logical_and(greater_equal(topo, 3048),less(topo, 3657)),rh_MB700, rh) - rh = where(logical_and(greater_equal(topo, 3657),less(topo, 4267)),rh_MB650, rh) - - rh_linear = self.linear(0, 4400, 1.0, 1.001, topo) - - rh = rh * rh_linear - rh = clip(rh, 3.0, 100.0) - - return rh - -##------------------------------------------------------------------------- -## Returns the maximum of the specified MaxRH and the RH grids -##-------------------------------------------------------------------------- - def calcMaxRH(self, RH, MaxRH): - if MaxRH is None: - return RH - return maximum(MaxRH, RH) - -##------------------------------------------------------------------------- -## Returns the minimum of the specified MinRH and RH grids -##-------------------------------------------------------------------------- - def calcMinRH(self, RH, MinRH): - if MinRH is None: - return RH - return minimum(MinRH, RH) - -##------------------------------------------------------------------------- -## Calculates QPF from the total precip field out of the model -##------------------------------------------------------------------------- - def calcQPF(self, tp_SFC): - qpf = tp_SFC / 25.4 # convert from millimeters to inches - return qpf - - def calcSky(self, rh_c, topo): - rh_c = rh_c[:8, :, :] - rh_c[less_equal(rh_c, 25.0)] = 25.0 - rh_c[less_equal(rh_c, 100.0)] = 100.0 - - rh900 = rh_c[2] - rh850 = rh_c[3] - rh800 = rh_c[4] - rh750 = rh_c[5] - rh700 = rh_c[6] - - index900 = self.linear(25, 100, 0, 100, rh900) - index850 = self.linear(25, 100, 0, 100, rh850) - index800 = self.linear(25, 100, 0, 100, rh800) - index750 = self.linear(25, 100, 0, 125, rh750) - index700 = self.linear(25, 100, 0, 150, rh700) - - skyindex = index900 + index850 + index800 + index750 + index700 - skyindex = clip(skyindex, 0, 500) - - sky = self.linear(0, 500, 0, 100, skyindex) - - return sky - -##------------------------------------------------------------------------- -## Calculates Prob. of Precip. based on QPF and RH cube. Where there -## is QPF > 0 ramp the PoP from (0.01, 35%) to 100%. Then in areas -## of QPF < 0.2 raise the PoP if it's very humid. -##------------------------------------------------------------------------- - def calcPoP(self, rh_c, pvv_MB700, topo): - # use only the first 11 levels (up to 500MB) - rh_c = rh_c[:8, :, :] - rh_c[less_equal(rh_c, 43.0)] = 43.0 - rh_c[greater_equal(rh_c, 100.0)] = 100.0 - - rh900 = rh_c[2] - rh850 = rh_c[3] - rh800 = rh_c[4] - rh750 = rh_c[5] - rh700 = rh_c[6] - omega700 = pvv_MB700 - - popindex900 = self.linear(43, 100, 0, 60, rh900) - popindex850 = self.linear(43, 100, 0, 70, rh850) - popindex800 = self.linear(43, 100, 0, 80, rh800) - popindex750 = self.linear(43, 100, 0, 90, rh750) - popindex700 = self.linear(43, 100, 0, 100, rh700) - - omegacorpos = self.linear(0, -2, 0, 50, omega700) - omegacorneg = self.linear(0, 1, 0, -50, omega700) - - popindex = popindex900 + popindex850 + popindex800 + popindex750 + popindex700 + omegacorpos + omegacorneg - - popindex = clip(popindex, 0, 500) - - pop = self.linear(0, 500, 0, 100, popindex) - - return pop - -##------------------------------------------------------------------------- -## Calculates the Freezing level based on height and temperature -## cubes. Finds the height at which freezing occurs. -##------------------------------------------------------------------------- - def calcFzLevel(self, gh_c, t_c, topo): - fzl = self.newGrid(-1) - - # for each level in the height cube, find the freezing level - for i in xrange(gh_c.shape[0]): - try: - val = gh_c[i - 1] + (gh_c[i] - gh_c[i - 1]) / (t_c[i] - t_c[i - 1])\ - * (273.15 - t_c[i - 1]) - except: - val = gh_c[i] - - ## save the height value in fzl - fzl = where(logical_and(equal(fzl, -1), - less_equal(t_c[i], 273.15)), val, fzl) - - - return fzl * 3.28 # convert to feet - -##------------------------------------------------------------------------- -## Calculates the Snow level based on wet-bulb zero height. -##------------------------------------------------------------------------- - def calcSnowLevel(self, gh_c, t_c, rh_c): - # Only use the levels that are >= freezind (plus one level) - # This is a performance and memory optimization - clipindex = 2 - for i in xrange(t_c.shape[0] - 1, -1, -1): - if maximum.reduce(maximum.reduce(t_c[i])) >= 273.15: - clipindex = i + 1 - break - gh_c = gh_c[:clipindex, :, :] - t_c = t_c[:clipindex, :, :] - rh_c = rh_c[:clipindex, :, :] - - snow = self.newGrid(-1) - # - # make pressure cube - # - pmb = ones_like(gh_c) - for i in xrange(gh_c.shape[0]): - pmb[i] = self.pres[i] - pmb = clip(pmb, 1, 1050) - # - # convert temps to C and limit to reasonable values - # - tc = t_c - 273.15 - tc = clip(tc, -120, 60) - # - # limit RH to reasonable values - # - rh = clip(rh_c, 0.5, 99.5) - # - # calculate the wetbulb temperatures - # (this is expensive - even in numeric python - and somewhat - # wasteful, since you do not need to calculate the wetbulb - # temp for all levels when it may cross zero way down toward - # the bottom. Nevertheless - all the gridpoints will cross - # zero at different levels - so you cannot know ahead of time - # how high up to calculate them. In the end - this was the - # most expedient way to code it - and it works - so I stuck - # with it. - # - wetb = self.Wetbulb(tc, rh, pmb) - tc = rh = pmb = None - # - # find the zero level - # - for i in xrange(1, gh_c.shape[0]): - try: - val = gh_c[i - 1] + (gh_c[i] - gh_c[i - 1]) / (wetb[i] - wetb[i - 1])\ - * (-wetb[i - 1]) - except: - val = gh_c[i] - snow = where(logical_and(equal(snow, -1), less_equal(wetb[i], 0)), - val, snow) - # - # convert to feet - # - snow = snow * 3.28 - - return snow - -##------------------------------------------------------------------------- -## Calculates Snow amount based on the Temp, Freezing level, QPF, -## topo and Weather grid -##------------------------------------------------------------------------- - def calcSnowAmt(self, T, FzLevel, QPF, topo, Wx): - # figure out the snow to liquid ratio - snowr = T * -0.5 + 22.5 - snowr[less(T, 9)] = 20 - snowr[greater_equal(T, 30)] = 0 - # calc. snow amount based on the QPF and the ratio - snowamt = where(less_equal(FzLevel - 1000, topo * 3.28), - snowr * QPF, float32(0)) - # Only make snow at points where the weather is snow - snowmask = logical_or(equal(Wx[0], 1), equal(Wx[0], 3)) - snowmask = logical_or(snowmask, logical_or(equal(Wx[0], 7), - equal(Wx[0], 9))) - snowamt[logical_not(snowmask)] = 0 - return snowamt - -##-------------------------------------------------------------------------- -## Calculate the Haines index based on the temp and RH cubes -## Define self.whichHainesIndex to be "HIGH", "MEDIUM", or "LOW". -## Default is "HIGH". -##-------------------------------------------------------------------------- - def calcHaines(self, t_c, rh_c): - return self.hainesIndex(self.whichHainesIndex, t_c, rh_c) - - -##------------------------------------------------------------------------- -## Calculates the mixing height for the given sfc temperature, -## temperature cube, height cube and topo -##------------------------------------------------------------------------- - def calcMixHgt(self, T, topo, t_c, gh_c): - mask = greater_equal(gh_c, topo) # points where height > topo - pt = [] - for i in xrange(len(self.pres)): # for each pres. level - p = self.newGrid(self.pres[i]) # get the pres. value in mb - tmp = self.ptemp(t_c[i], p) # calculate the pot. temp - pt = pt + [tmp] # add to the list - pt = array(pt) - # set up masks - pt[logical_not(mask)] = 0 - - avg = add.accumulate(pt, 0) - count = add.accumulate(mask, 0) - mh = self.newGrid(-1) - # for each pres. level, calculate a running avg. of pot temp. - # As soon as the next point deviates from the running avg by - # more than 3 deg. C, interpolate to get the mixing height. - for i in xrange(1, avg.shape[0]): - runavg = avg[i] / (count[i] + .0001) # calc. running avg - diffpt = pt[i] - runavg # calc. difference - # calc. the interpolated mixing height - tmh = self.linear(pt[i], pt[i - 1], gh_c[i], gh_c[i - 1], runavg) - # assign new values if the difference is greater than 3 - mh = where(logical_and(logical_and(mask[i], equal(mh, -1)), - greater(diffpt, 3)), tmh, mh) - return (mh - topo) * 3.28 # convert to feet - -##------------------------------------------------------------------------- -## Converts the lowest available wind level from m/s to knots -##------------------------------------------------------------------------- - def calcWind(self, wind_FHAG10, wind_MB850, wind_MB800, wind_MB750, wind_MB700, wind_MB650, topo): - mag = wind_FHAG10[0] * 1.94 # get the wind speed and convert - dir = wind_FHAG10[1] # get the wind direction - - mag = where(logical_and(greater_equal(topo, 1327), less(topo, 1828)), wind_MB850[0] * 1.94, mag) - dir = where(logical_and(greater_equal(topo, 1327), less(topo, 1828)), wind_MB850[1], dir) - - mag = where(logical_and(greater_equal(topo, 1828), less(topo, 2438)), wind_MB800[0] * 1.94, mag) - dir = where(logical_and(greater_equal(topo, 1828), less(topo, 2438)), wind_MB800[1], dir) - - mag = where(logical_and(greater_equal(topo, 2438), less(topo, 3048)), wind_MB750[0] * 1.94, mag) - dir = where(logical_and(greater_equal(topo, 2438), less(topo, 3048)), wind_MB750[1], dir) - - mag = where(logical_and(greater_equal(topo, 3048), less(topo, 3657)), wind_MB700[0] * 1.94, mag) - dir = where(logical_and(greater_equal(topo, 3048), less(topo, 3657)), wind_MB700[1], dir) - - mag = where(logical_and(greater_equal(topo, 3657), less(topo, 4267)), wind_MB650[0] * 1.94, mag) - dir = where(logical_and(greater_equal(topo, 3657), less(topo, 4267)), wind_MB650[1], dir) - - mag_cor_up = self.linear(1327, 4267, 1, 1.3, topo) - - mag_cor_lo = self.linear(1327, 50, 1, 0.7, topo) - - mag = where(logical_and(greater_equal(topo, 1327),less(topo, 4267)), mag*mag_cor_up, mag) - mag = where(logical_and(greater_equal(topo, 50),less(topo, 1327)), mag*mag_cor_lo, mag) - - dir = clip(dir, 0, 359.5) - - return (mag, dir) - -##------------------------------------------------------------------------- -## Calculates the wind at 3000 feet AGL. -##------------------------------------------------------------------------- - def calcFreeWind(self, gh_c, wind_c, topo): - wm = wind_c[0] - wd = wind_c[1] - # Make a grid that's topo + 3000 feet (914 meters) - fatopo = topo + 914.4 - # find the points that are above the 3000 foot level - mask = greater_equal(gh_c, fatopo) - # initialize the grids into which the value are stored - famag = self.newGrid(-1) - fadir = self.newGrid(-1) - # start at the bottom and store the first point we find that's - # above the topo + 3000 feet level. - for i in xrange(wind_c[0].shape[0]): - famag = where(logical_and(equal(famag, -1), mask[i]), wm[i], famag) - fadir = where(logical_and(equal(fadir, -1), mask[i]), wd[i], fadir) - fadir = clip(fadir, 0, 360) # clip the value to 0, 360 - famag = famag * 1.94 # convert to knots - return (famag, fadir) # return the tuple of grids - -##------------------------------------------------------------------------- -## Calculates the average wind vector in the mixed layer as defined -## by the mixing height. This function creates a mask that identifies -## all grid points between the ground and the mixing height and calculates -## a vector average of the wind field in that layer. -##------------------------------------------------------------------------- - def calcTransWind(self, MixHgt, wind_c, gh_c, topo): - nmh = MixHgt * 0.3048 # convert MixHt from feet -> meters - u, v = self._getUV(wind_c[0], wind_c[1]) # get the wind grids - # set a mask at points between the topo and topo + MixHt - mask = logical_and(greater_equal(gh_c, topo), - less_equal(gh_c, nmh + topo)) - # set the points outside the layer to zero - u[logical_not(mask)] = 0 - v[logical_not(mask)] = 0 - - mask = add.reduce(mask).astype(float32) # add up the number of set points vert. - mmask = mask + 0.0001 - # calculate the average value in the mixed layerlayer - u = where(mask, add.reduce(u) / mmask, float32(0)) - v = where(mask, add.reduce(v) / mmask, float32(0)) - # convert u, v to mag, dir - tmag, tdir = self._getMD(u, v) - tmag *= 1.94 # convert to knots - tmag.clip(0, 125, tmag) # clip speed to 125 knots - return (tmag, tdir) - - - def calcWx(self, t_MB850, t_MB700, t_MB500, rh_MB850, rh_MB700, cape_SFC, PoP): - # first calculate K-index to establish heavy rain threat - t850 = t_MB850 - 273.2 - t700 = t_MB700 - 273.2 - t500 = t_MB500 - 273.2 - rh850 = rh_MB850 - rh700 = rh_MB700 - - ratio1 = ((log10(rh850 / 100.0) / 7.5) + (t850 / (t850 + 237.3))) - td850 = ((237.3 * ratio1) / (1.0 - ratio1)) - ratio2 = ((log10(rh700 / 100.0) / 7.5) + (t700 / (t700 + 237.3))) - td700 = ((237.3 * ratio2) / (1.0 - ratio2)) - kindex = ((t850 - t500) + td850 - (t700 - td700)) - - # now on to the weather - - key = ['::::', - "Iso:RW:m::", - "Sct:RW:m::", - "Lkly:RW:m::", - "Ocnl:RW:m::", - "Iso:RW:+::", - "Sct:RW:+::", - "Lkly:RW:+::", - "Ocnl:RW:+::"] - - wx = self.empty(int8) - wx[less_equal(PoP, 14.4)] = 0 - - hvymask = greater_equal(kindex, 35) - wx[logical_and(hvymask, logical_and(greater(PoP, 14.4), less(PoP, 24.4)))] = 5 - wx[logical_and(hvymask, logical_and(greater(PoP, 24.4), less(PoP, 54.4)))] = 6 - wx[logical_and(hvymask, logical_and(greater(PoP, 54.4), less(PoP, 74.4)))] = 7 - wx[logical_and(hvymask, greater(PoP, 74.4))] = 8 - - lgtmask = less(kindex, 35) - wx[logical_and(lgtmask, logical_and(greater(PoP, 14.4), less(PoP, 24.4)))] = 1 - wx[logical_and(lgtmask, logical_and(greater(PoP, 24.4), less(PoP, 54.4)))] = 2 - wx[logical_and(lgtmask, logical_and(greater(PoP, 54.4), less(PoP, 74.4)))] = 3 - wx[logical_and(lgtmask, greater(PoP, 74.4))] = 4 - - # Thunder - for i in xrange(len(key)): - tcov = string.split(key[i], ":")[0] - if tcov == "": - tcov = "Iso" - key.append(key[i] + "^" + tcov + ":T:::") - wx[logical_and(greater(PoP, 14.4), greater_equal(cape_SFC, 1000))] += 9 - - return(wx, key) - -##------------------------------------------------------------------------- -## Calculates chance of wetting rain based on QPF. -##------------------------------------------------------------------------- - def calcCWR(self, QPF): - m1 = less(QPF, 0.01) # all the places that are dry - m2 = greater_equal(QPF, 0.3) # all the places that are wet - # all the places that are 0.01 to 0.10 - m3 = logical_and(greater_equal(QPF, 0.01), less_equal(QPF, 0.1)) - # all the places that are 0.1 to 0.3 - m4 = logical_and(greater(QPF, 0.1), less(QPF, 0.3)) - # assign 0 to the dry grid point, 100 to the wet grid points, - # and a ramping function to all point in between - cwr = where(m1, float32(0), where(m2, float32(100), - where(m3, 444.4 * (QPF - 0.01) + 10, - where(m4, 250 * (QPF - 0.1) + 50, - QPF)))) - return cwr - -##------------------------------------------------------------------------- -## Calculates Lightning Activity Level based on total precip., lifted index -## and 3-D relative humidity. -##------------------------------------------------------------------------- - def calcLAL(self, tp_SFC, sli_SFC, rh_c, rh_BL030): - bli = sli_SFC # surface lifted index - ttp = self.newGrid(0.00001) # nearly zero grid - lal = self.newGrid(1) # initialize the return grid to 1 - # Add one to lal if QPF > 0.5 - lal[logical_and(greater(ttp, 0), greater(tp_SFC / ttp, 0.5))] += 1 - - # make an average rh field - midrh = add.reduce(rh_c[6:9], 0) / 3 - # Add one to lal if mid-level rh high and low level rh low - lal[logical_and(greater(midrh, 70), less(rh_BL030, 30))] += 1 - - # Add on to lal if lifted index is <-3 and another if <-5 - lal[less(bli, -3)] += 1 - lal[less(bli, -5)] += 1 - - return lal - -def main(): - GFS75Forecaster().run() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/GFS80.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/GFS80.py deleted file mode 100644 index 3313b29c61..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/GFS80.py +++ /dev/null @@ -1,563 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -from Init import * -import LogStream - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from GFS80 model -## output. -## -##-------------------------------------------------------------------------- -class GFS80Forecaster(Forecaster): - def __init__(self): - Forecaster.__init__(self, "GFS80", "GFS80") - -##-------------------------------------------------------------------------- -## These levels will be used to create vertical soundings. These are -## defined here since they are model dependent. -##-------------------------------------------------------------------------- - def levels(self): - return ["MB1000", "MB975", "MB950", "MB925", "MB900", "MB875", "MB850", - "MB825", "MB800", "MB775", "MB750", "MB725", "MB700", - "MB675", "MB650", "MB625", "MB600", "MB575", "MB550", - "MB525", "MB500", "MB450", "MB400", "MB350", "MB300"] - -##------------------------------------------------------------------------- -## Returns the maximum of the specified MaxT and the T grids -##-------------------------------------------------------------------------- - def calcMaxT(self, T, MaxT): - if MaxT is None: - return T - return maximum(MaxT, T) - -##------------------------------------------------------------------------- -## Returns the minimum of the specified MinT and T grids -##-------------------------------------------------------------------------- - def calcMinT(self, T, MinT): - if MinT is None: - return T - return minimum(MinT, T) - - -##------------------------------------------------------------------------- -## Calculates the temperature at the elevation indicated in the topo -## grid. This tool simply interpolates the temperature value from -## model's isobaric temperature cube. -##------------------------------------------------------------------------- - def calcT(self, t_FHAG2, t_BL030, t_BL3060, t_BL6090, t_BL90120, - t_BL120150, t_BL150180, p_SFC, topo, stopo, gh_c, t_c): - p_SFC = p_SFC / 100 # get the surface pres. in mb - pres = [p_SFC, p_SFC - 15, p_SFC - 45, p_SFC - 75, - p_SFC - 105, p_SFC - 135] - temps = [t_FHAG2, t_BL030, t_BL3060, t_BL6090, t_BL90120, - t_BL120150, t_BL150180] - return self._calcT(temps, pres, topo, stopo, gh_c, t_c) - - def _calcT(self, temps, pres, topo, stopo, gh_c, t_c): - p = self.newGrid(-1) - tmb = self.newGrid(-1) - tms = self.newGrid(-1) - # go up the column to figure out the surface pressure - for i in xrange(1, gh_c.shape[0]): - higher = greater(gh_c[i], topo) # identify points > topo - # interpolate the pressure at topo height - val = self.linear(gh_c[i], gh_c[i - 1], - log(self.pres[i]), log(self.pres[i - 1]), topo) - val[greater(val, 500)] = 500 - val = clip(val, -.00001, 10) - p = where(logical_and(equal(p, -1), higher), - exp(val), p) - # interpolate the temperature at true elevation - tval1 = self.linear(gh_c[i], gh_c[i - 1], t_c[i], t_c[i - 1], topo) - tmb = where(logical_and(equal(tmb, -1), higher), tval1, tmb) - # interpolate the temperature at model elevation - tval2 = self.linear(gh_c[i], gh_c[i - 1], t_c[i], t_c[i - 1], stopo) - tms = where(logical_and(equal(tms, -1), greater(gh_c[i], stopo)), - tval2, tms) - - - # define the pres. of each of the boundary layers - st = self.newGrid(-1) - # Calculate the lapse rate in units of pressure - for i in xrange(1, len(pres)): - val = self.linear(pres[i], pres[i - 1], temps[i], temps[i - 1], p) - gm = greater(pres[i - 1], p) - lm = less_equal(pres[i], p) - mask = logical_and(gm, lm) - st = where(logical_and(equal(st, -1), mask), - val, st) - - # where topo level is above highest level in BL fields...use tmb - st = where(logical_and(equal(st,-1),less(p, pres[-1])), tmb, st) - - # where topo level is below model surface...use difference - # of t at pressure of surface and tFHAG2 and subtract from tmb - st = where(equal(st, -1), tmb - tms + temps[0], st) - return self.KtoF(st) - -##------------------------------------------------------------------------- -## Calculates dew point from the specified pressure, temp and rh -## fields. -##------------------------------------------------------------------------- - def calcTd(self, p_SFC, T, t_FHAG2, stopo, topo, rh_FHAG2): - # at the model surface - sfce = rh_FHAG2 / 100 * self.esat(t_FHAG2) # partial pres of H2O - w = (0.622 * sfce) / ((p_SFC + 0.0001) / 100 - sfce)# meters / millibar - # at the true surface - tsfce = self.esat(self.FtoK(T)) # saturation vap.pres. at sfc - dpdz = 287.04 * t_FHAG2 / (p_SFC / 100 * 9.8) # meters / millibar - newp = p_SFC / 100 + (stopo - topo) / dpdz # adj. sfc press. - ws = (0.622 * tsfce) / (newp - tsfce) # sat. mixing ratio - rh = w / ws # calc relative humidity - - # Finally, calculate the dew point - tsfcesat = rh * tsfce - tsfcesat = clip(tsfcesat, 0.00001, tsfcesat) - b = 26.66082 - log(tsfcesat) - td = (b - sqrt(b * b - 223.1986)) / 0.0182758048 - td = self.KtoF(td) - td = where(w > ws, T, td) - return td - -##------------------------------------------------------------------------- -## Calculates RH from the T and Td grids -##------------------------------------------------------------------------- - def calcRH(self, T, Td): - Tc = .556 * (T - 32.0) - Tdc = .556 * (Td - 32.0) - Vt = 6.11 * pow(10, (Tc * 7.5 / (Tc + 237.3))) - Vd = 6.11 * pow(10, (Tdc * 7.5 / (Tdc + 237.3))) - RH = (Vd / Vt) * 100.0 - # Return the new value - return RH - -##------------------------------------------------------------------------- -## Returns the maximum of the specified MaxRH and the RH grids -##-------------------------------------------------------------------------- - def calcMaxRH(self, RH, MaxRH): - if MaxRH is None: - return RH - return maximum(MaxRH, RH) - -##------------------------------------------------------------------------- -## Returns the minimum of the specified MinRH and RH grids -##-------------------------------------------------------------------------- - def calcMinRH(self, RH, MinRH): - if MinRH is None: - return RH - return minimum(MinRH, RH) - -##------------------------------------------------------------------------- -## Calculates QPF from the total precip field out of the model -##------------------------------------------------------------------------- - def calcQPF(self, tp_SFC): - qpf = tp_SFC / 25.4 # convert from millimeters to inches - return qpf - -##------------------------------------------------------------------------- -## Calculates sky (0-100) from the total precip field out of the model -##------------------------------------------------------------------------- - def calcSky(self, rh_c, gh_c, topo, p_SFC): - return self.skyFromRH(rh_c, gh_c, topo, p_SFC) - -##------------------------------------------------------------------------- -## Calculates Prob. of Precip. based on QPF and RH cube. Where there -## is QPF > 0 ramp the PoP from (0.01, 35%) to 100%. Then in areas -## of QPF < 0.2 raise the PoP if it's very humid. -##------------------------------------------------------------------------- - def calcPoP(self, gh_c, rh_c, QPF, topo): - rhavg = where(less(gh_c, topo), float32(-1), rh_c) - rhavg[greater(gh_c, topo + 5000 * 0.3048)] = -1 - count = not_equal(rhavg, -1) - rhavg[equal(rhavg, -1)] = 0 - count = add.reduce(count, 0, dtype=float32) - rhavg = add.reduce(rhavg, 0) - ## add this much based on humidity only - dpop = where(count, rhavg / (count + .001), 0) - 70.0 - dpop[less(dpop, -30)] = -30 - ## calculate the base PoP - pop = where(less(QPF, 0.02), QPF * 1000, QPF * 350 + 13) - pop = pop + dpop # add the adjustment based on humidity - pop = clip(pop, 0, 100) # clip to 100% - return pop - -##------------------------------------------------------------------------- -## Calculates the Freezing level based on height and temperature -## cubes. Finds the height at which freezing occurs. -##------------------------------------------------------------------------- - def calcFzLevel(self, gh_c, t_c, topo): - fzl = self.newGrid(-1) - - # for each level in the height cube, find the freezing level - for i in xrange(gh_c.shape[0]): - try: - val = gh_c[i - 1] + (gh_c[i] - gh_c[i - 1]) / (t_c[i] - t_c[i - 1])\ - * (273.15 - t_c[i - 1]) - except: - val = gh_c[i] - - ## save the height value in fzl - fzl = where(logical_and(equal(fzl, -1), - less_equal(t_c[i], 273.15)), val, fzl) - - return fzl * 3.28 # convert to feet - -##------------------------------------------------------------------------- -## Calculates the Snow level based on wet-bulb zero height. -##------------------------------------------------------------------------- - def calcSnowLevel(self, gh_c, t_c, rh_c): - # Only use the levels that are >= freezind (plus one level) - # This is a performance and memory optimization - clipindex = 2 - for i in xrange(t_c.shape[0] - 1, -1, -1): - if maximum.reduce(maximum.reduce(t_c[i])) >= 273.15: - clipindex = i + 1 - break - gh_c = gh_c[:clipindex, :, :] - t_c = t_c[:clipindex, :, :] - rh_c = rh_c[:clipindex, :, :] - - snow = self.newGrid(-1) - # - # make pressure cube - # - pmb = ones_like(gh_c) - for i in xrange(gh_c.shape[0]): - pmb[i] = self.pres[i] - pmb = clip(pmb, 1, 1050) - # - # convert temps to C and limit to reasonable values - # - tc = t_c - 273.15 - tc = clip(tc, -120, 60) - # - # limit RH to reasonable values - # - rh = clip(rh_c, 0.5, 99.5) - # - # calculate the wetbulb temperatures - # (this is expensive - even in numeric python - and somewhat - # wasteful, since you do not need to calculate the wetbulb - # temp for all levels when it may cross zero way down toward - # the bottom. Nevertheless - all the gridpoints will cross - # zero at different levels - so you cannot know ahead of time - # how high up to calculate them. In the end - this was the - # most expedient way to code it - and it works - so I stuck - # with it. - # - wetb = self.Wetbulb(tc, rh, pmb) - tc = rh = pmb = None - # - # find the zero level - # - for i in xrange(1, gh_c.shape[0]): - try: - val = gh_c[i - 1] + (gh_c[i] - gh_c[i - 1]) / (wetb[i] - wetb[i - 1])\ - * (-wetb[i - 1]) - except: - val = gh_c[i] - snow = where(logical_and(equal(snow, -1), less_equal(wetb[i], 0)), - val, snow) - # - # convert to feet - # - snow = snow * 3.28 - - return snow - -##------------------------------------------------------------------------- -## Calculates Snow amount based on the Temp, Freezing level, QPF, -## topo and Weather grid -##------------------------------------------------------------------------- - def calcSnowAmt(self, T, FzLevel, QPF, topo, Wx): - # figure out the snow to liquid ratio - snowr = T * -0.5 + 22.5 - snowr[less(T, 9)] = 20 - snowr[greater_equal(T, 30)] = 0 - # calc. snow amount based on the QPF and the ratio - snowamt = where(less_equal(FzLevel - 1000, topo * 3.28), - snowr * QPF, float32(0)) - # Only make snow at points where the weather is snow - snowmask = logical_or(equal(Wx[0], 1), equal(Wx[0], 3)) - snowmask = logical_or(snowmask, logical_or(equal(Wx[0], 7), - equal(Wx[0], 9))) - snowamt[logical_not(snowmask)] = 0 - return snowamt - -##-------------------------------------------------------------------------- -## Calculate the Haines index based on the temp and RH cubes -## Define self.whichHainesIndex to be "HIGH", "MEDIUM", or "LOW". -## Default is "HIGH". -##-------------------------------------------------------------------------- - def calcHaines(self, t_c, rh_c): - return self.hainesIndex(self.whichHainesIndex, t_c, rh_c) - - -##------------------------------------------------------------------------- -## Calculates the mixing height for the given sfc temperature, -## temperature cube, height cube and topo -##------------------------------------------------------------------------- - def calcMixHgt(self, T, topo, t_c, gh_c): - mask = greater_equal(gh_c, topo) # points where height > topo - pt = [] - for i in xrange(len(self.pres)): # for each pres. level - p = self.newGrid(self.pres[i]) # get the pres. value in mb - tmp = self.ptemp(t_c[i], p) # calculate the pot. temp - pt = pt + [tmp] # add to the list - pt = array(pt) - # set up masks - pt[logical_not(mask)] = 0 - avg = add.accumulate(pt, 0) - count = add.accumulate(mask, 0).astype(float32) - mh = self.newGrid(-1) - # for each pres. level, calculate a running avg. of pot temp. - # As soon as the next point deviates from the running avg by - # more than 3 deg. C, interpolate to get the mixing height. - for i in xrange(1, avg.shape[0]): - runavg = avg[i] / (count[i] + .0001) # calc. running avg - diffpt = pt[i] - runavg # calc. difference - # calc. the interpolated mixing height - tmh = self.linear(pt[i], pt[i - 1], gh_c[i], gh_c[i - 1], runavg) - # assign new values if the difference is greater than 3 - mh = where(logical_and(logical_and(mask[i], equal(mh, -1)), - greater(diffpt, 3)), tmh, mh) - mh -= topo - mh *= 3.28 # convert to feet - return mh - -##------------------------------------------------------------------------- -## Converts the lowest available wind level from m/s to knots -##------------------------------------------------------------------------- - def calcWind(self, wind_FHAG10): - mag = wind_FHAG10[0] * 1.94 # get the wind speed and convert - dir = wind_FHAG10[1] # get wind dir - return (mag, dir) # assemble speed and dir into a tuple - -##------------------------------------------------------------------------- -## Calculates the wind at 3000 feet AGL. -##------------------------------------------------------------------------- - def calcFreeWind(self, gh_c, wind_c, topo): - wm = wind_c[0] - wd = wind_c[1] - # Make a grid that's topo + 3000 feet (914 meters) - fatopo = topo + 914.4 - # find the points that are above the 3000 foot level - mask = greater_equal(gh_c, fatopo) - # initialize the grids into which the value are stored - famag = self.newGrid(-1) - fadir = self.newGrid(-1) - # start at the bottom and store the first point we find that's - # above the topo + 3000 feet level. - for i in xrange(wind_c[0].shape[0]): - famag = where(logical_and(equal(famag, -1), mask[i]), wm[i], famag) - fadir = where(logical_and(equal(fadir, -1), mask[i]), wd[i], fadir) - fadir = clip(fadir, 0, 360) # clip the value to 0, 360 - famag = famag * 1.94 # convert to knots - return (famag, fadir) # return the tuple of grids - -##------------------------------------------------------------------------- -## Calculates the average wind vector in the mixed layer as defined -## by the mixing height. This function creates a mask that identifies -## all grid points between the ground and the mixing height and calculates -## a vector average of the wind field in that layer. -##------------------------------------------------------------------------- - def calcTransWind(self, MixHgt, wind_c, gh_c, topo): - nmh = MixHgt * 0.3048 # convert MixHt from feet -> meters - u, v = self._getUV(wind_c[0], wind_c[1]) # get the wind grids - # set a mask at points between the topo and topo + MixHt - mask = logical_and(greater_equal(gh_c, topo), - less_equal(gh_c, nmh + topo)) - # set the points outside the layer to zero - u[logical_not(mask)] = 0 - v[logical_not(mask)] = 0 - - mask = add.reduce(mask).astype(float32) # add up the number of set points vert. - mmask = mask + 0.0001 - # calculate the average value in the mixed layerlayer - u = where(mask, add.reduce(u) / mmask, float32(0)) - v = where(mask, add.reduce(v) / mmask, float32(0)) - # convert u, v to mag, dir - tmag, tdir = self._getMD(u, v) - tmag = tmag * 1.94 # convert to knots - tmag = clip(tmag, 0, 125) # clip speed to 125 knots - return (tmag, tdir) - -##------------------------------------------------------------------------- -## Uses a derivation of the Bourgouin algorithm to calculate precipitation -## type, and other algorithms to determine the coverage and intensity. -## The Bourgoin technique figures out precip type from calculating how -## long a hydrometer is exposed to alternating layers of above zero (C) and -## below zero temperature layers. This tool calculates at each grid point -## which of the four Bourgouin cases apply. Then the appropriate algorithm -## is applied to that case that further refines the precip. type. Once the -## type is determined, other algorithms are used to determine the coverage -## and intensity. See the Weather and Forecasting Journal article Oct. 2000, -## "A Method to Determine Precipitation Types", by Pierre Bourgouin -##------------------------------------------------------------------------- - def calcWx(self, QPF, T, t_c, gh_c, p_SFC, topo, sli_SFC): - gh_c = gh_c[:13, :, :] - t_c = t_c[:13, :, :] - T = self.FtoK(T) - p_SFC = p_SFC / 100 # sfc pres. in mb - pres = self.pres - a1 = self.empty() - a2 = self.empty() - a3 = self.empty() - aindex = self.empty() - # Go through the levels to identify each case type 0-3 - for i in xrange(1, gh_c.shape[0] - 1): - # get the sfc pres. and temp. - pbot = where(greater(gh_c[i - 1], topo), pres[i - 1], p_SFC) - tbot = where(greater(gh_c[i - 1], topo), t_c[i - 1], T) - # Calculate the area of this layer in Temp/pres coordinates - a11, a22, cross = self.getAreas(pbot, tbot, pres[i], t_c[i]) - topomask = greater(gh_c[i], topo) - a1 = where(logical_and(equal(aindex, 0), topomask), - a1 + a11, a1) - a2 = where(logical_and(equal(aindex, 1), topomask), - a2 + a11, a2) - a3 = where(logical_and(equal(aindex, 2), topomask), - a3 + a11, a3) - topomask = logical_and(topomask, cross) - aindex = where(topomask, aindex + 1, aindex) - a1 = where(logical_and(equal(aindex, 0), topomask), - a1 + a22, a1) - a2 = where(logical_and(equal(aindex, 1), topomask), - a2 + a22, a2) - a3 = where(logical_and(equal(aindex, 2), topomask), - a3 + a22, a3) - - # Now apply a different algorithm for each type - key = ['::::', - "Wide:S:-::", "Wide:R:-::", - "Wide:S:-::^Wide:R:-::", - 'Wide:ZR:-::', 'Wide:IP:-::', - 'Wide:ZR:-::^Wide:IP:-::', - "Sct:SW:-::", "Sct:RW:-::", - "Sct:SW:-::^Sct:RW:-::", - "Chc:ZR:-::", 'Chc:IP:-::', - 'Chc:ZR:-::^Chc:IP:-::'] - - wx = self.empty(int8) - # Case d (snow) - snowmask = equal(aindex, 0) - wx[logical_and(snowmask, greater(a1, 0))] = 2 - wx[logical_and(snowmask, less_equal(a1, 0))] = 1 - - # Case c (rain / snow / rainSnowMix) - srmask = equal(aindex, 1) - wx[logical_and(srmask, less(a1, 5.6))] = 1 - wx[logical_and(srmask, greater(a1, 13.2))] = 2 - wx[logical_and(srmask, - logical_and(greater_equal(a1, 5.6), - less(a1, 13.2)))] = 3 - - # Case a (Freezing Rain / Ice Pellets) - ipmask = equal(aindex, 2) - ipm = greater(a1, a2 * 0.66 + 66) - wx[logical_and(ipmask, ipm)] = 5 - zrm = less(a1, a2 * 0.66 + 46) - wx[logical_and(ipmask, zrm)] = 4 - zrm = logical_not(zrm) - ipm = logical_not(ipm) - wx[logical_and(ipmask, logical_and(zrm, ipm))] = 6 - - # Case b (Ice pellets / rain) - cmask = greater_equal(aindex, 3) - ipmask = logical_and(less(a3, 2), cmask) - wx[logical_and(ipmask, less(a1, 5.6))] = 1 - wx[logical_and(ipmask, greater(a1, 13.2))] = 2 - wx[logical_and(ipmask, logical_and(greater_equal(a1, 5.6), - less_equal(a1, 13.2)))] = 3 - - ipmask = logical_and(greater_equal(a3, 2), cmask) - wx[logical_and(ipmask, greater(a1, 66 + 0.66 * a2))] = 5 - wx[logical_and(ipmask, less(a1, 46 + 0.66 * a2))] = 4 - wx[logical_and(ipmask, logical_and(greater_equal(a1, 46 + 0.66 * a2), - less_equal(a1, 66 + 0.66 * a2)))] = 6 - - # Make showers (scattered/Chc) -# convecMask = greater(cp_SFC / (tp_SFC + .001), 0.5) -# wx = where(logical_and(not_equal(wx, 0), convecMask), wx + 6, wx) - - # Thunder - for i in xrange(len(key)): - tcov = string.split(key[i], ":")[0] - if tcov == "Chc" or tcov == "": - tcov = "Sct" - key.append(key[i] + "^" + tcov - + ":T:::") - wx[less_equal(sli_SFC, -3)] += 13 - - # No wx where no qpf - wx[less(QPF, 0.01)] = 0 - return(wx, key) - -##------------------------------------------------------------------------- -## Calculates chance of wetting rain based on QPF. -##------------------------------------------------------------------------- - def calcCWR(self, QPF): - m1 = less(QPF, 0.01) # all the places that are dry - m2 = greater_equal(QPF, 0.3) # all the places that are wet - # all the places that are 0.01 to 0.10 - m3 = logical_and(greater_equal(QPF, 0.01), less_equal(QPF, 0.1)) - # all the places that are 0.1 to 0.3 - m4 = logical_and(greater(QPF, 0.1), less(QPF, 0.3)) - # assign 0 to the dry grid point, 100 to the wet grid points, - # and a ramping function to all point in between - cwr = where(m1, float32(0), where(m2, float32(100), - where(m3, 444.4 * (QPF - 0.01) + 10, - where(m4, 250 * (QPF - 0.1) + 50, - QPF)))) - return cwr - -##------------------------------------------------------------------------- -## Calculates Lightning Activity Level based on total precip., lifted index -## and 3-D relative humidity. -##------------------------------------------------------------------------- - def calcLAL(self, tp_SFC, sli_SFC, rh_c, rh_BL030): - bli = sli_SFC # surface lifted index - ttp = self.newGrid(0.00001) # nearly zero grid - lal = self.newGrid(1) # initialize the return grid to 1 - # Add one to lal if QPF > 0.5 - lal[logical_and(greater(ttp, 0), greater(tp_SFC / ttp, 0.5))] += 1 - - # make an average rh field - midrh = add.reduce(rh_c[6:9], 0) / 3 - # Add one to lal if mid-level rh high and low level rh low - lal[logical_and(greater(midrh, 70), less(rh_BL030, 30))] += 1 - - # Add on to lal if lifted index is <-3 and another if <-5 - lal[less(bli, -3)] += 1 - lal[less(bli, -5)] += 1 - return lal - - -def main(): - GFS80Forecaster().run() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/GFSLAMPGrid.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/GFSLAMPGrid.py deleted file mode 100755 index 535d4d4868..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/GFSLAMPGrid.py +++ /dev/null @@ -1,76 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# This file contains entries for the 2.5km Gridded LAMP database -# initialization. -# -# SOFTWARE HISTORY -# -# Date Ticket# Engineer Description -# ------------ ---------- ----------- -------------------------- -# 09/28/2011 Josh Watson Initial Creation. -# 12/22/2015 Josh Watson -# -## - - - -# Import existing model database initialization parameters -from Init import * -class GFSLAMPGridForecaster(Forecaster): - def __init__(self): - Forecaster.__init__(self, "GFSLAMPGrid","GFSLAMPGrid") - - def calcCigHgt(self, cc_CLG): - ceil = cc_CLG / 0.3048 - ceil[less(cc_CLG, 0)] = -99. - return ceil - - def calcVis(self, vis_SFC): - return (vis_SFC / 0.3048 / 5280.0) - - def calcT(self, t_FHAG2): - return self.KtoF(t_FHAG2) - - def calcTd(self, dpt_FHAG2): - return self.KtoF(dpt_FHAG2) - - def calcSky(self, tcc_SFC): - return clip(tcc_SFC, 0, 100) - - def calcWind(self, wd_FHAG10, ws_FHAG10): - spd = self.convertMsecToKts(ws_FHAG10) - dir = wd_FHAG10 - return (spd, dir) - -################################################################################ -# Set this file up to run with SmartInitialization - -def main(): - GFSLAMPGridForecaster().run() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/GLERL.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/GLERL.py deleted file mode 100644 index b4f819a474..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/GLERL.py +++ /dev/null @@ -1,67 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -from Init import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from GLERL model -## output. -## -##-------------------------------------------------------------------------- -class GLERLForecaster(Forecaster): - def __init__(self): - Forecaster.__init__(self, "GLERL", "GLERL") - -##-------------------------------------------------------------------------- -## Calculates wave height from the GLERL model. Converts to feet from meters -##-------------------------------------------------------------------------- - def calcWaveHeight(self, wvhgt_SFC): - # Convert meters to feet - grid = wvhgt_SFC * 3.28 - grid[greater_equal(grid, 50.0)] = 0.0 - return grid - - -##-------------------------------------------------------------------------- -## Calculates Primary Swell from GLERL model. -# Note: have to use wave height for magnitude since that info not available. -##-------------------------------------------------------------------------- - def calcSwell(self, WaveHeight, wvdir_SFC): - # extract the wind speed and direction - mag = WaveHeight - dir = clip(wvdir_SFC, 0, 359.5) - return (mag, dir) - -##-------------------------------------------------------------------------- -## Calculates Primary Period from GLERL model. -##-------------------------------------------------------------------------- - def calcPeriod(self, wvper_SFC): - return clip(wvper_SFC, 0, 60) - -def main(): - GLERLForecaster().run() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/GWW.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/GWW.py deleted file mode 100644 index 4cd756c8eb..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/GWW.py +++ /dev/null @@ -1,181 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -from Init import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from GWW model -## output. -## -##-------------------------------------------------------------------------- -class GWWForecaster(Forecaster): - def __init__(self): - Forecaster.__init__(self, "GWW", "GWW") - -##-------------------------------------------------------------------------- -## Calculates wave height from the GWW model. Converts to feet from meters -##-------------------------------------------------------------------------- - def calcWaveHeight(self, htsgw_SFC): - # Convert meters to feet - grid = htsgw_SFC * 3.28 - grid[greater_equal(grid, 50.0)] = 0.0 - - # points where we don't have real wave data - editAreaMask = equal(grid, 0.0) - dataMask = greater(htsgw_SFC, 0.0) - # points where elevation = 0 - topoGrid = self.getTopo() - topoMask = less_equal(topoGrid, 0.0) - - # points over water where we need more data - editAreaMask = logical_and(editAreaMask, topoMask) - borderMask = self.getMaskBorder(editAreaMask) - borderMask = logical_and(borderMask, dataMask) - editPoints = self.getMaskIndicies(editAreaMask) - borderPoints = self.getMaskIndicies(borderMask) - for te in editPoints: # for each point - numSum = 0.0 - denomSum = 0.0 - for b in borderPoints: - # points in the same row, column or diagonal - if (abs(te[0] - b[0]) > 10) or (abs(te[1] - b[1]) > 10): - continue - if te[0] == b[0] or te[1] == b[1] or \ - abs(te[0] - b[0]) == abs(te[1] - b[1]): - xdist = float(te[0] - b[0]) - ydist = float(te[1] - b[1]) - # calculate the distance to the border point - dist = sqrt(xdist * xdist + ydist * ydist) - value = grid[b[0], b[1]] - # Accumulate the distance-weighted average - if value > 0: - numSum = numSum + value / dist - denomSum = denomSum + 1 / dist - if denomSum > 0: - grid[te[0], te[1]] = numSum / denomSum - else: - grid[te[0], te[1]] = 0.0 - - # mask off wave data where topo is above zero - grid[logical_not(topoMask)] = 0.0 - - # Return the new value - return grid - -##-------------------------------------------------------------------------- -## Calculates wind from the GWW model. COnvert from meters/sec to knots. -##-------------------------------------------------------------------------- - def calcWind(self, wind_SFC): - # extract the wind speed and direction - mag = where(greater(wind_SFC[0], 100), float32(0), wind_SFC[0]*1.94) # convert - dir = where(greater(wind_SFC[0], 100), float32(0), wind_SFC[1]) - dir = clip(dir, 0, 359.5) - return (mag, dir) - -##-------------------------------------------------------------------------- -## Calculates Primary Swell from GWW model. -# Note: have to use wave height for magnitude since that info not available. -##-------------------------------------------------------------------------- - def calcSwell(self, WaveHeight, dirpw_SFC): - # extract the wind speed and direction - mag = WaveHeight - dir = clip(dirpw_SFC, 0, 359.5) - return (mag, dir) - -##-------------------------------------------------------------------------- -## Calculates Secondary Swell from GWW model. -# Note: have to use wave height for magnitude since that info not available. -##-------------------------------------------------------------------------- - def calcSwell2(self, WaveHeight, dirsw_SFC): - # extract the wind speed and direction - mag = WaveHeight - dir = clip(dirsw_SFC, 0, 359.5) - return (mag, dir) - -##-------------------------------------------------------------------------- -## Calculates Primary Period from GWW model. -##-------------------------------------------------------------------------- - def calcPeriod(self, perpw_SFC): - return clip(perpw_SFC, 0, 60) - -##-------------------------------------------------------------------------- -## Calculates Secondary Period from GWW model. -##-------------------------------------------------------------------------- - def calcPeriod2(self, persw_SFC): - return clip(persw_SFC, 0, 60) - -##-------------------------------------------------------------------------- -## Gets the indicies at o, l -##-------------------------------------------------------------------------- - def getindicies(self, o, l): - if o > 0: - a = slice(o, l); b = slice(0, l - o) - elif o < 0: - a = slice(0, l + o); b = slice(-o, l) - else: - a = slice(0, l); b = slice(0, l) - return a, b - -##-------------------------------------------------------------------------- -## Gives an offset grid for array, a, by x and y points -##-------------------------------------------------------------------------- - def offset(self, a, x, y): - sy1, sy2 = self.getindicies(y, a.shape[0]) - sx1, sx2 = self.getindicies(x, a.shape[1]) - b = zeros_like(a) - b[sy1,sx1] = a[sy2,sx2] - return b - -##-------------------------------------------------------------------------- -## Given a numeric array of 1s and 0s this method returns a similar -## array with cells set that encompass the mask, unset everywhere else -##-------------------------------------------------------------------------- - def getMaskBorder(self, mask): - border = mask.copy() - for i in [-1, 0, 1]: - for j in [-1, 0, 1]: - border[self.offset(mask, i, j)] = True - return border - -##-------------------------------------------------------------------------- -## Given a numeric array of 1s and 0s this method returns a list of -## the (x, y) indices that are set to 1. -##-------------------------------------------------------------------------- - def getMaskIndicies(self, mask): - flatIndicies = flatnonzero(mask) # get the indicies of the set cells - ysize = mask.shape[1] - indexes = [] - # convert the flat indicies to the x, y indicies - for i in flatIndicies: - indexes.append((i / ysize, i % ysize)) - return indexes - - - -def main(): - GWWForecaster().run() \ No newline at end of file diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/HIRESWarw.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/HIRESWarw.py deleted file mode 100644 index 258b7f536d..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/HIRESWarw.py +++ /dev/null @@ -1,324 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -from Init import * - -##------------------------------------------------------------------------- -## Model that produces surface weather elements from model -## output. -## -class HIRESWarwForecaster(Forecaster): - def __init__(self): - Forecaster.__init__(self, "HIRESWarw") - self.oldqpf = 0.0 #initializes a temporary grid to zero - -####-------------------------------------------------------------------------- -#### These levels will be used to create vertical soundings. These are -#### defined here since they are model dependent. -####-------------------------------------------------------------------------- - def levels(self): - return ["MB1000", "MB925", "MB850", "MB700", "MB500", "MB400", "MB300"] - -####------------------------------------------------------------------------- -#### Returns the maximum of the specified MaxT and the T grids -####-------------------------------------------------------------------------- - def calcMaxT(self, T, MaxT): - if MaxT is None: - return T - return maximum(MaxT, T) - -####------------------------------------------------------------------------- -#### Returns the minimum of the specified MinT and T grids -####-------------------------------------------------------------------------- - def calcMinT(self, T, MinT): - if MinT is None: - return T - return minimum(MinT, T) - - -####------------------------------------------------------------------------- -#### Calculates the temperature at the elevation indicated in the topo -#### grid. This tool simply interpolates the temperature value from -#### model's isobaric temperature cube. -####------------------------------------------------------------------------- - def calcT(self, t_FHAG2, t_BL030, t_BL3060, t_BL6090, t_BL90120, - t_BL120150, p_SFC, topo, stopo, gh_c, t_c): - p_SFC = p_SFC / 100 # get the surface pres. in mb - pres = [p_SFC, p_SFC - 15, p_SFC - 45, p_SFC - 75, - p_SFC - 105, p_SFC - 135] - temps = [t_FHAG2, t_BL030, t_BL3060, t_BL6090, t_BL90120, - t_BL120150] - return self._calcT(temps, pres, topo, stopo, gh_c, t_c) - - def _calcT(self, temps, pres, topo, stopo, gh_c, t_c): - p = self.newGrid(-1) - tmb = self.newGrid(-1) - tms = self.newGrid(-1) - # go up the column to figure out the surface pressure - for i in xrange(1, gh_c.shape[0]): - higher = greater(gh_c[i], topo) # identify points > topo - # interpolate the pressure at topo height - val = self.linear(gh_c[i], gh_c[i - 1], - log(self.pres[i]), log(self.pres[i - 1]), topo) - val[greater(val, 500)] = 500 - val.clip(-.00001, 10, val) - - m = logical_and(equal(p, -1), higher) - p[m]= exp(val)[m] - - # interpolate the temperature at true elevation - tval1 = self.linear(gh_c[i], gh_c[i - 1], t_c[i], t_c[i - 1], topo) - - m = logical_and(equal(tmb, -1), higher) - tmb[m] = tval1[m] - # interpolate the temperature at model elevation - tval2 = self.linear(gh_c[i], gh_c[i - 1], t_c[i], t_c[i - 1], stopo) - - m = logical_and(equal(tms, -1), greater(gh_c[i], stopo)) - tms[m] = tval2[m] - - - # define the pres. of each of the boundary layers - st = self.newGrid(-1) - # Calculate the lapse rate in units of pressure - for i in xrange(1, len(pres)): - val = self.linear(pres[i], pres[i - 1], temps[i], temps[i - 1], p) - gm = greater(pres[i - 1], p) - lm = less_equal(pres[i], p) - mask = logical_and(gm, lm) - - m = logical_and(equal(st, -1), mask) - st[m] = val[m] - - # where topo level is above highest level in BL fields...use tmb - m = logical_and(equal(st,-1),less(p, pres[-1])) - st[m] = tmb[m] - - # where topo level is below model surface...use difference - # of t at pressure of surface and tFHAG2 and subtract from tmb - m = equal(st, -1) - st[m] = (tmb - tms + temps[0])[m] - - return self.KtoF(st) - -####------------------------------------------------------------------------- -#### Calculates dew point from the specified pressure, temp and rh -#### fields. -####------------------------------------------------------------------------- - def calcTd(self, p_SFC, T, t_FHAG2, stopo, topo, rh_FHAG2): - # at the model surface - sfce = rh_FHAG2 / 100 * self.esat(t_FHAG2) # partial pres of H2O - w = (0.622 * sfce) / ((p_SFC + 0.0001) / 100 - sfce)# meters / millibar - # at the true surface - tsfce = self.esat(self.FtoK(T)) # saturation vap.pres. at sfc - dpdz = 287.04 * t_FHAG2 / (p_SFC / 100 * 9.8) # meters / millibar - newp = p_SFC / 100 + (stopo - topo) / dpdz # adj. sfc press. - ws = (0.622 * tsfce) / (newp - tsfce) # sat. mixing ratio - rh = w / ws # calc relative humidity - - # Finally, calculate the dew point - tsfcesat = rh * tsfce - tsfcesat = clip(tsfcesat, 0.00001, tsfcesat) - b = 26.66082 - log(tsfcesat) - td = (b - sqrt(b * b - 223.1986)) / 0.0182758048 - td = self.KtoF(td) - td = where(w > ws, T, td) - return td - -####------------------------------------------------------------------------- -#### Calculates RH from the T and Td grids -####------------------------------------------------------------------------- - def calcRH(self, T, Td): - Tc = .556 * (T - 32.0) - Tdc = .556 * (Td - 32.0) - Vt = 6.11 * pow(10, (Tc * 7.5 / (Tc + 237.3))) - Vd = 6.11 * pow(10, (Tdc * 7.5 / (Tdc + 237.3))) - RH = (Vd / Vt) * 100.0 - # Return the new value - return RH - -####------------------------------------------------------------------------- -#### Returns the maximum of the specified MaxRH and the RH grids -####-------------------------------------------------------------------------- - def calcMaxRH(self, RH, MaxRH): - if MaxRH is None: - return RH - return maximum(MaxRH, RH) - -####------------------------------------------------------------------------- -#### Returns the minimum of the specified MinRH and RH grids -####-------------------------------------------------------------------------- - def calcMinRH(self, RH, MinRH): - if MinRH is None: - return RH - return minimum(MinRH, RH) - -####------------------------------------------------------------------------- -#### Calculates QPF from the total precip field out of the model -####------------------------------------------------------------------------- - def calcQPF(self, tp_SFC): - qpf = tp_SFC / 25.4 # convert from millimeters to inches - return qpf - -##-------------------------------------------------------------------------- -## Calculates the Freezing level based on height and temperature -## cubes. Finds the height at which freezing occurs. -##-------------------------------------------------------------------------- -# def calcFzLevel(self, gh_c, t_c, topo): -# fzl = self.newGrid(-1) -# -# # for each level in the height cube, find the freezing level -# for i in xrange(gh_c.shape[0]): -# try: -# val = gh_c[i-1] + (gh_c[i] - gh_c[i-1]) / (t_c[i] - t_c[i-1])\ -# * (273.15 - t_c[i-1]) -# except: -# val = gh_c[i] -# ## save the height value in fzl -# m =logical_and(equal(fzl, -1), less_equal(t_c[i], 273.15)) -# fzl[m] = val[m] -# -# fzl *= 3.28 # convert to feet -# return fzl -# -##-------------------------------------------------------------------------- -## Calculates the mixing height for the given sfc temperature, -## temperature cube, height cube and topo -##-------------------------------------------------------------------------- - def calcMixHgt(self, T, topo, t_c, gh_c): - mask = greater_equal(gh_c, topo) # points where height > topo - pt = [] - for i in xrange(len(self.pres)): # for each pres. level - p = self.newGrid(self.pres[i]) # get the pres. value in mb - tmp = self.ptemp(t_c[i], p) # calculate the pot. temp - pt = pt + [tmp] # add to the list - pt = array(pt) - # set up masks - pt[logical_not(mask)] = 0 - avg = add.accumulate(pt, 0) - count = add.accumulate(mask, 0) - mh = self.newGrid(-1) - # for each pres. level, calculate a running avg. of pot temp. - # As soon as the next point deviates from the running avg by - # more than 3 deg. C, interpolate to get the mixing height. - for i in xrange(1, avg.shape[0]): - runavg = avg[i] / (count[i] + .0001) # calc. running avg - diffpt = pt[i] - runavg # calc. difference - # calc. the interpolated mixing height - tmh = self.linear(pt[i], pt[i - 1], gh_c[i], gh_c[i - 1], runavg) - # assign new values if the difference is greater than 3 - m = logical_and(logical_and(mask[i], equal(mh, -1)), - greater(diffpt, 3)) - mh[m] = tmh[m] - - mh -= topo - mh *= 3.28 # convert to feet - return mh - -####------------------------------------------------------------------------- -#### Converts the lowest available wind level from m/s to knots -####------------------------------------------------------------------------- - def calcWind(self, wind_FHAG10): - mag = wind_FHAG10[0] * 1.94 # get the wind speed and convert - dir = wind_FHAG10[1] # get wind dir - return (mag, dir) # assemble speed and dir into a tuple - -####------------------------------------------------------------------------- -#### Calculates the wind at 3000 feet AGL. -####------------------------------------------------------------------------- - def calcFreeWind(self, gh_c, wind_c, topo): - wm = wind_c[0] - wd = wind_c[1] - # Make a grid that's topo + 3000 feet (914 meters) - fatopo = topo + 914.4 - # find the points that are above the 3000 foot level - mask = greater_equal(gh_c, fatopo) - # initialize the grids into which the value are stored - famag = self.newGrid(-1) - fadir = self.newGrid(-1) - # start at the bottom and store the first point we find that's - # above the topo + 3000 feet level. - for i in xrange(wind_c[0].shape[0]): - m = logical_and(equal(famag, -1), mask[i]) - famag[m] = wm[i][m] - - m = logical_and(equal(fadir, -1), mask[i]) - fadir[m] = wd[i][m] - fadir.clip(0, 360, fadir) # clip the value to 0, 360 - famag *= 1.94 # convert to knots - return (famag, fadir) # return the tuple of grids - -##-------------------------------------------------------------------------- -## Calculates the average wind vector in the mixed layer as defined -## by the mixing height. This function creates a mask that identifies -## all grid points between the ground and the mixing height and calculates -## a vector average of the wind field in that layer. -##-------------------------------------------------------------------------- - def calcTransWind(self, MixHgt, wind_c, gh_c, topo): - nmh = MixHgt * 0.3048 # convert MixHt from feet -> meters - u, v = self._getUV(wind_c[0], wind_c[1]) # get the wind grids - # set a mask at points between the topo and topo + MixHt - mask = logical_and(greater_equal(gh_c, topo), - less_equal(gh_c, nmh + topo)) - # set the points outside the layer to zero - u[logical_not(mask)] = 0 - v[logical_not(mask)] = 0 - - mask = add.reduce(mask).astype(float32) # add up the number of set points vert. - mmask = mask + 0.0001 - # calculate the average value in the mixed layerlayer - u = where(mask, add.reduce(u) / mmask, float32(0)) - v = where(mask, add.reduce(v) / mmask, float32(0)) - # convert u, v to mag, dir - tmag, tdir = self._getMD(u, v) - tdir.clip(0, 359.5, tdir) - tmag *= 1.94 # convert to knots - tmag.clip(0, 125, tmag) # clip speed to 125 knots - return (tmag, tdir) - -##-------------------------------------------------------------------------- -## Calculates chance of wetting rain based on QPF. -##-------------------------------------------------------------------------- - def calcCWR(self, QPF): - m1 = less(QPF, 0.01) # all the places that are dry - m2 = greater_equal(QPF, 0.3) # all the places that are wet - # all the places that are 0.01 to 0.10 - m3 = logical_and(greater_equal(QPF, 0.01), less_equal(QPF, 0.1)) - # all the places that are 0.1 to 0.3 - m4 = logical_and(greater(QPF, 0.1), less(QPF, 0.3)) - # assign 0 to the dry grid point, 100 to the wet grid points, - # and a ramping function to all point in between - cwr = where(m1, float32(0), where(m2, float32(100), - where(m3, 444.4 * (QPF - 0.01) + 10, - where(m4, 250 * (QPF - 0.1) + 50, - QPF)))) - return cwr - -##-------------------------------------------------------------------------- -def main(): - HIRESWarwForecaster().run() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/HIRESWnmm.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/HIRESWnmm.py deleted file mode 100644 index 7ed564b937..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/HIRESWnmm.py +++ /dev/null @@ -1,324 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -from Init import * - -##------------------------------------------------------------------------- -## Model that produces surface weather elements from model -## output. -## -class HIRESWnmmForecaster(Forecaster): - def __init__(self): - Forecaster.__init__(self, "HIRESWnmm") - self.oldqpf = 0.0 #initializes a temporary grid to zero - -####-------------------------------------------------------------------------- -#### These levels will be used to create vertical soundings. These are -#### defined here since they are model dependent. -####-------------------------------------------------------------------------- - def levels(self): - return ["MB1000", "MB925", "MB850", "MB700", "MB500", "MB400", "MB300"] - -####------------------------------------------------------------------------- -#### Returns the maximum of the specified MaxT and the T grids -####-------------------------------------------------------------------------- - def calcMaxT(self, T, MaxT): - if MaxT is None: - return T - return maximum(MaxT, T) - -####------------------------------------------------------------------------- -#### Returns the minimum of the specified MinT and T grids -####-------------------------------------------------------------------------- - def calcMinT(self, T, MinT): - if MinT is None: - return T - return minimum(MinT, T) - - -####------------------------------------------------------------------------- -#### Calculates the temperature at the elevation indicated in the topo -#### grid. This tool simply interpolates the temperature value from -#### model's isobaric temperature cube. -####------------------------------------------------------------------------- - def calcT(self, t_FHAG2, t_BL030, t_BL3060, t_BL6090, t_BL90120, - t_BL120150, p_SFC, topo, stopo, gh_c, t_c): - p_SFC = p_SFC / 100 # get the surface pres. in mb - pres = [p_SFC, p_SFC - 15, p_SFC - 45, p_SFC - 75, - p_SFC - 105, p_SFC - 135] - temps = [t_FHAG2, t_BL030, t_BL3060, t_BL6090, t_BL90120, - t_BL120150] - return self._calcT(temps, pres, topo, stopo, gh_c, t_c) - - def _calcT(self, temps, pres, topo, stopo, gh_c, t_c): - p = self.newGrid(-1) - tmb = self.newGrid(-1) - tms = self.newGrid(-1) - # go up the column to figure out the surface pressure - for i in xrange(1, gh_c.shape[0]): - higher = greater(gh_c[i], topo) # identify points > topo - # interpolate the pressure at topo height - val = self.linear(gh_c[i], gh_c[i - 1], - log(self.pres[i]), log(self.pres[i - 1]), topo) - val[greater(val, 500)] = 500 - val.clip(-.00001, 10, val) - - m = logical_and(equal(p, -1), higher) - p[m]= exp(val)[m] - - # interpolate the temperature at true elevation - tval1 = self.linear(gh_c[i], gh_c[i - 1], t_c[i], t_c[i - 1], topo) - - m = logical_and(equal(tmb, -1), higher) - tmb[m] = tval1[m] - # interpolate the temperature at model elevation - tval2 = self.linear(gh_c[i], gh_c[i - 1], t_c[i], t_c[i - 1], stopo) - - m = logical_and(equal(tms, -1), greater(gh_c[i], stopo)) - tms[m] = tval2[m] - - - # define the pres. of each of the boundary layers - st = self.newGrid(-1) - # Calculate the lapse rate in units of pressure - for i in xrange(1, len(pres)): - val = self.linear(pres[i], pres[i - 1], temps[i], temps[i - 1], p) - gm = greater(pres[i - 1], p) - lm = less_equal(pres[i], p) - mask = logical_and(gm, lm) - - m = logical_and(equal(st, -1), mask) - st[m] = val[m] - - # where topo level is above highest level in BL fields...use tmb - m = logical_and(equal(st,-1),less(p, pres[-1])) - st[m] = tmb[m] - - # where topo level is below model surface...use difference - # of t at pressure of surface and tFHAG2 and subtract from tmb - m = equal(st, -1) - st[m] = (tmb - tms + temps[0])[m] - - return self.KtoF(st) - -####------------------------------------------------------------------------- -#### Calculates dew point from the specified pressure, temp and rh -#### fields. -####------------------------------------------------------------------------- - def calcTd(self, p_SFC, T, t_FHAG2, stopo, topo, rh_FHAG2): - # at the model surface - sfce = rh_FHAG2 / 100 * self.esat(t_FHAG2) # partial pres of H2O - w = (0.622 * sfce) / ((p_SFC + 0.0001) / 100 - sfce)# meters / millibar - # at the true surface - tsfce = self.esat(self.FtoK(T)) # saturation vap.pres. at sfc - dpdz = 287.04 * t_FHAG2 / (p_SFC / 100 * 9.8) # meters / millibar - newp = p_SFC / 100 + (stopo - topo) / dpdz # adj. sfc press. - ws = (0.622 * tsfce) / (newp - tsfce) # sat. mixing ratio - rh = w / ws # calc relative humidity - - # Finally, calculate the dew point - tsfcesat = rh * tsfce - tsfcesat = clip(tsfcesat, 0.00001, tsfcesat) - b = 26.66082 - log(tsfcesat) - td = (b - sqrt(b * b - 223.1986)) / 0.0182758048 - td = self.KtoF(td) - td = where(w > ws, T, td) - return td - -####------------------------------------------------------------------------- -#### Calculates RH from the T and Td grids -####------------------------------------------------------------------------- - def calcRH(self, T, Td): - Tc = .556 * (T - 32.0) - Tdc = .556 * (Td - 32.0) - Vt = 6.11 * pow(10, (Tc * 7.5 / (Tc + 237.3))) - Vd = 6.11 * pow(10, (Tdc * 7.5 / (Tdc + 237.3))) - RH = (Vd / Vt) * 100.0 - # Return the new value - return RH - -####------------------------------------------------------------------------- -#### Returns the maximum of the specified MaxRH and the RH grids -####-------------------------------------------------------------------------- - def calcMaxRH(self, RH, MaxRH): - if MaxRH is None: - return RH - return maximum(MaxRH, RH) - -####------------------------------------------------------------------------- -#### Returns the minimum of the specified MinRH and RH grids -####-------------------------------------------------------------------------- - def calcMinRH(self, RH, MinRH): - if MinRH is None: - return RH - return minimum(MinRH, RH) - -####------------------------------------------------------------------------- -#### Calculates QPF from the total precip field out of the model -####------------------------------------------------------------------------- - def calcQPF(self, tp_SFC): - qpf = tp_SFC / 25.4 # convert from millimeters to inches - return qpf - -##-------------------------------------------------------------------------- -## Calculates the Freezing level based on height and temperature -## cubes. Finds the height at which freezing occurs. -##-------------------------------------------------------------------------- -# def calcFzLevel(self, gh_c, t_c, topo): -# fzl = self.newGrid(-1) -# -# # for each level in the height cube, find the freezing level -# for i in xrange(gh_c.shape[0]): -# try: -# val = gh_c[i-1] + (gh_c[i] - gh_c[i-1]) / (t_c[i] - t_c[i-1])\ -# * (273.15 - t_c[i-1]) -# except: -# val = gh_c[i] -# ## save the height value in fzl -# m =logical_and(equal(fzl, -1), less_equal(t_c[i], 273.15)) -# fzl[m] = val[m] -# -# fzl *= 3.28 # convert to feet -# return fzl -# -##-------------------------------------------------------------------------- -## Calculates the mixing height for the given sfc temperature, -## temperature cube, height cube and topo -##-------------------------------------------------------------------------- - def calcMixHgt(self, T, topo, t_c, gh_c): - mask = greater_equal(gh_c, topo) # points where height > topo - pt = [] - for i in xrange(len(self.pres)): # for each pres. level - p = self.newGrid(self.pres[i]) # get the pres. value in mb - tmp = self.ptemp(t_c[i], p) # calculate the pot. temp - pt = pt + [tmp] # add to the list - pt = array(pt) - # set up masks - pt[logical_not(mask)] = 0 - avg = add.accumulate(pt, 0) - count = add.accumulate(mask, 0) - mh = self.newGrid(-1) - # for each pres. level, calculate a running avg. of pot temp. - # As soon as the next point deviates from the running avg by - # more than 3 deg. C, interpolate to get the mixing height. - for i in xrange(1, avg.shape[0]): - runavg = avg[i] / (count[i] + .0001) # calc. running avg - diffpt = pt[i] - runavg # calc. difference - # calc. the interpolated mixing height - tmh = self.linear(pt[i], pt[i - 1], gh_c[i], gh_c[i - 1], runavg) - # assign new values if the difference is greater than 3 - m = logical_and(logical_and(mask[i], equal(mh, -1)), - greater(diffpt, 3)) - mh[m] = tmh[m] - - mh -= topo - mh *= 3.28 # convert to feet - return mh - -####------------------------------------------------------------------------- -#### Converts the lowest available wind level from m/s to knots -####------------------------------------------------------------------------- - def calcWind(self, wind_FHAG10): - mag = wind_FHAG10[0] * 1.94 # get the wind speed and convert - dir = wind_FHAG10[1] # get wind dir - return (mag, dir) # assemble speed and dir into a tuple - -####------------------------------------------------------------------------- -#### Calculates the wind at 3000 feet AGL. -####------------------------------------------------------------------------- - def calcFreeWind(self, gh_c, wind_c, topo): - wm = wind_c[0] - wd = wind_c[1] - # Make a grid that's topo + 3000 feet (914 meters) - fatopo = topo + 914.4 - # find the points that are above the 3000 foot level - mask = greater_equal(gh_c, fatopo) - # initialize the grids into which the value are stored - famag = self.newGrid(-1) - fadir = self.newGrid(-1) - # start at the bottom and store the first point we find that's - # above the topo + 3000 feet level. - for i in xrange(wind_c[0].shape[0]): - m = logical_and(equal(famag, -1), mask[i]) - famag[m] = wm[i][m] - - m = logical_and(equal(fadir, -1), mask[i]) - fadir[m] = wd[i][m] - fadir.clip(0, 360, fadir) # clip the value to 0, 360 - famag *= 1.94 # convert to knots - return (famag, fadir) # return the tuple of grids - -##-------------------------------------------------------------------------- -## Calculates the average wind vector in the mixed layer as defined -## by the mixing height. This function creates a mask that identifies -## all grid points between the ground and the mixing height and calculates -## a vector average of the wind field in that layer. -##-------------------------------------------------------------------------- - def calcTransWind(self, MixHgt, wind_c, gh_c, topo): - nmh = MixHgt * 0.3048 # convert MixHt from feet -> meters - u, v = self._getUV(wind_c[0], wind_c[1]) # get the wind grids - # set a mask at points between the topo and topo + MixHt - mask = logical_and(greater_equal(gh_c, topo), - less_equal(gh_c, nmh + topo)) - # set the points outside the layer to zero - u[logical_not(mask)] = 0 - v[logical_not(mask)] = 0 - - mask = add.reduce(mask).astype(float32) # add up the number of set points vert. - mmask = mask + 0.0001 - # calculate the average value in the mixed layerlayer - u = where(mask, add.reduce(u) / mmask, float32(0)) - v = where(mask, add.reduce(v) / mmask, float32(0)) - # convert u, v to mag, dir - tmag, tdir = self._getMD(u, v) - tdir.clip(0, 359.5, tdir) - tmag *= 1.94 # convert to knots - tmag.clip(0, 125, tmag) # clip speed to 125 knots - return (tmag, tdir) - -##-------------------------------------------------------------------------- -## Calculates chance of wetting rain based on QPF. -##-------------------------------------------------------------------------- - def calcCWR(self, QPF): - m1 = less(QPF, 0.01) # all the places that are dry - m2 = greater_equal(QPF, 0.3) # all the places that are wet - # all the places that are 0.01 to 0.10 - m3 = logical_and(greater_equal(QPF, 0.01), less_equal(QPF, 0.1)) - # all the places that are 0.1 to 0.3 - m4 = logical_and(greater(QPF, 0.1), less(QPF, 0.3)) - # assign 0 to the dry grid point, 100 to the wet grid points, - # and a ramping function to all point in between - cwr = where(m1, float32(0), where(m2, float32(100), - where(m3, 444.4 * (QPF - 0.01) + 10, - where(m4, 250 * (QPF - 0.1) + 50, - QPF)))) - return cwr - -##-------------------------------------------------------------------------- -def main(): - HIRESWnmmForecaster().run() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/MOSGuide.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/MOSGuide.py deleted file mode 100644 index f9bb140c8b..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/MOSGuide.py +++ /dev/null @@ -1,80 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -from Init import * -class MOSGuideForecaster(Forecaster): - def __init__(self): - Forecaster.__init__(self, "MOSGuide", "MOSGuide") - - def calcT(self, t_FHAG2): - return self.KtoF(t_FHAG2) - - def calcTd(self, dpt_FHAG2): - return self.KtoF(dpt_FHAG2) - - def calcRH(self, rh_FHAG2): - return rh_FHAG2 - - def calcMaxT(self, mxt_FHAG2): - return self.KtoF(mxt_FHAG2) - - def calcMinT(self, mnt_FHAG2): - return self.KtoF(mnt_FHAG2) - - def calcPoP6(self, pop6hr_SFC): - return pop6hr_SFC - - def calcPoP12(self, pop12hr_SFC): - return pop12hr_SFC - - def calcQPF6(self, tp6hr_SFC): - return (tp6hr_SFC / 25.4) - - def calcQPF12(self, tp12hr_SFC): - return (tp12hr_SFC / 25.4) - - def calcWind(self, wind_FHAG10): - return (wind_FHAG10[0] * 1.94, wind_FHAG10[1]) - - def calcWindGust(self, wgs_FHAG10): - return (wgs_FHAG10 * 1.94) - - def calcSky(self, tcc_SFC): - return tcc_SFC - - def calcTstmPrb12(self, thp12hr_SFC): - return thp12hr_SFC - - def calcTstmPrb6(self, thp6hr_SFC): - return thp6hr_SFC - - def calcTstmPrb3(self, thp3hr_SFC): - return thp3hr_SFC - -def main(): - MOSGuideForecaster().run() \ No newline at end of file diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/NAM80.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/NAM80.py deleted file mode 100644 index 5750acfd51..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/NAM80.py +++ /dev/null @@ -1,551 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -from Init import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from NAM80 model -## output. -## -##-------------------------------------------------------------------------- -class NAM80Forecaster(Forecaster): - def __init__(self): - Forecaster.__init__(self, "NAM80", "NAM80") - -##-------------------------------------------------------------------------- -## These levels will be used to create vertical soundings. These are -## defined here since they are model dependent. -##-------------------------------------------------------------------------- - def levels(self): - return ["MB1000", "MB950", "MB900", "MB850", "MB800", "MB750", - "MB700", "MB650", "MB600", "MB550", "MB500", - "MB450", "MB400", "MB350"] - -##-------------------------------------------------------------------------- -## Returns the maximum of the specified MaxT and the T grids -##-------------------------------------------------------------------------- - def calcMaxT(self, T, MaxT): - if MaxT is None: - return T - return maximum(MaxT, T) - -##-------------------------------------------------------------------------- -## Returns the minimum of the specified MinT and T grids -##-------------------------------------------------------------------------- - def calcMinT(self, T, MinT): - if MinT is None: - return T - return minimum(MinT, T) - -##-------------------------------------------------------------------------- -## Calculates the temperature at the elevation indicated in the topo -## grid. This tool uses the model's boundary layers to calculate a lapse -## rate and then applies that lapse rate to the difference between the -## model topography and the true topography. This algorithm calculates -## the surface temperature for three different sets of points: those that -## fall above the boundary layer, in the boundary layer, and below the -## boundary layer. -##-------------------------------------------------------------------------- - def calcT(self, t_FHAG2, t_BL030, t_BL3060, t_BL6090, t_BL90120, - t_BL120150, p_SFC, topo, stopo, gh_c, t_c): - p = self.newGrid(-1) - tmb = self.newGrid(-1) - tms = self.newGrid(-1) - # go up the column to figure out the surface pressure - for i in xrange(1, gh_c.shape[0]): - higher = greater(gh_c[i], topo) - # interpolate the pressure at topo height - val = self.linear(gh_c[i], gh_c[i - 1], - log(self.pres[i]), log(self.pres[i - 1]), topo) - val = clip(val, -.00001, 10) - p = where(logical_and(equal(p, -1), higher), - exp(val), p) - # interpolate the temperature at true elevation - tval1 = self.linear(gh_c[i], gh_c[i - 1], t_c[i], t_c[i - 1], topo) - tmb = where(logical_and(equal(tmb, -1), higher), - tval1, tmb) - # interpolate the temperature at model elevation - tval2 = self.linear(gh_c[i], gh_c[i - 1], t_c[i], t_c[i - 1], stopo) - tms = where(logical_and(equal(tms, -1), greater(gh_c[i], stopo)), - tval2, tms) - - p_SFC = p_SFC / 100 # get te surface pres. in mb - # define the pres. of each of the boundary layers - pres = [p_SFC, p_SFC - 15, p_SFC - 45, p_SFC - 75, p_SFC - 105, - p_SFC - 135] - # list of temperature grids - temps = [t_FHAG2, t_BL030, t_BL3060, t_BL6090, t_BL90120, t_BL120150] - st = self.newGrid(-1) - # Calculate the lapse rate in units of pressure - for i in xrange(1, len(pres)): - val = self.linear(pres[i], pres[i - 1], temps[i], temps[i - 1], p) - gm = greater(pres[i - 1], p) - lm = less_equal(pres[i], p) - mask = logical_and(gm, lm) - st = where(logical_and(equal(st, -1), mask), - val, st) - - # where topo level is above highest level in BL fields...use tmb - st = where(logical_and(equal(st,-1),less(p,p_SFC-135)),tmb,st) - - # where topo level is below model surface...use difference - # of t at pressure of surface and tFHAG2 and subtract from tmb - st = where(equal(st, -1), tmb - tms + t_FHAG2, st) - return self.KtoF(st) - -##-------------------------------------------------------------------------- -## Calculates dew point from the specified pressure, temp and rh -## fields. -##-------------------------------------------------------------------------- - def calcTd(self, p_SFC, T, t_FHAG2, stopo, topo, rh_FHAG2): - # at the model surface - sfce = rh_FHAG2 / 100 * self.esat(t_FHAG2) - w = (0.622 * sfce) / ((p_SFC + 0.0001) / 100 - sfce) - # at the true surface - tsfce = self.esat(self.FtoK(T)) - dpdz = 287.04 * t_FHAG2 / (p_SFC / 100 * 9.8) # meters / millibar - newp = p_SFC / 100 + (stopo - topo) / dpdz - ws = (0.622 * tsfce) / (newp - tsfce) - rh = w / ws - # Finally, calculate the dew point - tsfcesat = rh * tsfce - tsfcesat = clip(tsfcesat, 0.00001, tsfcesat) - b = 26.66082 - log(tsfcesat) - td = (b - sqrt(b * b - 223.1986)) / 0.0182758048 - td = self.KtoF(td) - td = where(w > ws, T, td) - return td - -##------------------------------------------------------------------------- -## Calculates RH from the T and Td grids -##------------------------------------------------------------------------- - def calcRH(self, T, Td): - Tc = .556 * (T - 32.0) - Tdc = .556 * (Td - 32.0) - Vt = 6.11 * pow(10, (Tc * 7.5 / (Tc + 237.3))) - Vd = 6.11 * pow(10, (Tdc * 7.5 / (Tdc + 237.3))) - RH = (Vd / Vt) * 100.0 - # Return the new value - return RH - -##------------------------------------------------------------------------- -## Returns the maximum of the specified MaxRH and the RH grids -##-------------------------------------------------------------------------- - def calcMaxRH(self, RH, MaxRH): - if MaxRH is None: - return RH - return maximum(MaxRH, RH) - -##------------------------------------------------------------------------- -## Returns the minimum of the specified MinRH and RH grids -##-------------------------------------------------------------------------- - def calcMinRH(self, RH, MinRH): - if MinRH is None: - return RH - return minimum(MinRH, RH) - -##-------------------------------------------------------------------------- -## Calculates QPF from the total precip field out of the model -##-------------------------------------------------------------------------- - def calcQPF(self, tp_SFC): - qpf = tp_SFC / 25.4 # convert from millimeters to inches - return qpf - - def calcSky(self, rh_c, gh_c, topo, p_SFC): - return self.skyFromRH(rh_c, gh_c, topo, p_SFC) - -##-------------------------------------------------------------------------- -## Calculates Prob. of Precip. based on QPF and RH cube. Where there -## is QPF > 0 ramp the PoP from (0.01, 35%) to 100%. Then in areas -## of QPF < 0.2 raise the PoP if it's very humid. -##-------------------------------------------------------------------------- - def calcPoP(self, gh_c, rh_c, QPF, topo): - rhavg = where(less(gh_c, topo), float32(-1), rh_c) - rhavg[greater(gh_c, topo + 5000 * 0.3048)] = -1 - count = not_equal(rhavg, -1) - rhavg[equal(rhavg, -1)] = 0 - count = add.reduce(count, 0, dtype=float32) - rhavg = add.reduce(rhavg, 0) - ## add this much based on humidity only - dpop = where(count, rhavg / (count + .001), 0) - 70.0 - dpop[less(dpop, -30)] = -30 - ## calculate the base PoP - pop = where(less(QPF, 0.02), QPF * 1000, QPF * 350 + 13) - pop += dpop # add the adjustment based on humidity - pop = clip(pop, 0, 100) # clip to 100% - return pop - -##-------------------------------------------------------------------------- -## Calculates the Freezing level based on height and temperature -## cubes. Finds the height at which freezing occurs. -##-------------------------------------------------------------------------- - def calcFzLevel(self, gh_c, t_c, topo): - fzl = self.newGrid(-1) - # for each level in the height cube, find the freezing level - for i in xrange(gh_c.shape[0]): - try: - val = gh_c[i - 1] + (gh_c[i] - gh_c[i - 1]) / (t_c[i] - t_c[i - 1])\ - * (273.15 - t_c[i - 1]) - except: - val = gh_c[i] - ## save the height value in fzl - fzl = where(logical_and(equal(fzl, -1), - less_equal(t_c[i], 273.15)), val, fzl) - return fzl * 3.28 # convert to feet - -##------------------------------------------------------------------------- -## Calculates the Snow level based on wet-bulb zero height. -##------------------------------------------------------------------------- - def calcSnowLevel(self, gh_c, t_c, rh_c): - # Only use the levels that are >= freezind (plus one level) - # This is a performance and memory optimization - clipindex = 2 - for i in xrange(t_c.shape[0] - 1, -1, -1): - if maximum.reduce(maximum.reduce(t_c[i])) >= 273.15: - clipindex = i + 1 - break - gh_c = gh_c[:clipindex, :, :] - t_c = t_c[:clipindex, :, :] - rh_c = rh_c[:clipindex, :, :] - - snow = self.newGrid(-1) - # - # make pressure cube - # - pmb = ones_like(gh_c) - for i in xrange(gh_c.shape[0]): - pmb[i] = self.pres[i] - pmb = clip(pmb, 1, 1050) - # - # convert temps to C and limit to reasonable values - # - tc = t_c - 273.15 - tc = clip(tc, -120, 60) - # - # limit RH to reasonable values - # - rh = clip(rh_c, 0.5, 99.5) - # - # calculate the wetbulb temperatures - # (this is expensive - even in numeric python - and somewhat - # wasteful, since you do not need to calculate the wetbulb - # temp for all levels when it may cross zero way down toward - # the bottom. Nevertheless - all the gridpoints will cross - # zero at different levels - so you cannot know ahead of time - # how high up to calculate them. In the end - this was the - # most expedient way to code it - and it works - so I stuck - # with it. - # - wetb = self.Wetbulb(tc, rh, pmb) - tc = rh = pmb = None - # - # find the zero level - # - for i in xrange(1, gh_c.shape[0]): - try: - val = gh_c[i - 1] + (gh_c[i] - gh_c[i - 1]) / (wetb[i] - wetb[i - 1])\ - * (-wetb[i - 1]) - except: - val = gh_c[i] - snow = where(logical_and(equal(snow, -1), less_equal(wetb[i], 0)), - val, snow) - # convert to feet - # - snow = snow * 3.28 - - return snow - -##-------------------------------------------------------------------------- -## Calculates Snow amount based on the Temp, Freezing level, QPF, -## topo and Weather grid -##-------------------------------------------------------------------------- - def calcSnowAmt(self, T, FzLevel, QPF, topo, Wx): - # figure out the snow to liquid ratio - snowr = T * -0.5 + 22.5 - snowr[less(T, 9)] = 20 - snowr[greater_equal(T, 30)] = 0 - # calc. snow amount based on the QPF and the ratio - snowamt = where(less_equal(FzLevel - 1000, topo * 3.28), - snowr * QPF, float32(0)) - # Only make snow at points where the weather is snow - snowmask = logical_or(equal(Wx[0], 1), equal(Wx[0], 3)) - snowmask = logical_or(snowmask, logical_or(equal(Wx[0], 7), - equal(Wx[0], 9))) - snowamt[logical_not(snowmask)] = 0 - return snowamt - -##-------------------------------------------------------------------------- -## Calculate the Haines index based on the temp and RH cubes -## Define self.whichHainesIndex to be "HIGH", "MEDIUM", or "LOW". -## Default is "HIGH". -##-------------------------------------------------------------------------- - def calcHaines(self, t_c, rh_c): - return self.hainesIndex(self.whichHainesIndex, t_c, rh_c) - -##-------------------------------------------------------------------------- -## Calculates the mixing height for the given sfc temperature, -## temperature cube, height cube and topo -##-------------------------------------------------------------------------- - def calcMixHgt(self, T, topo, t_c, gh_c): - mask = greater_equal(gh_c, topo) # points where height > topo - pt = [] - for i in xrange(len(self.pres)): # for each pres. level - p = self.newGrid(self.pres[i]) # get the pres. value in mb - tmp = self.ptemp(t_c[i], p) # calculate the pot. temp - pt = pt + [tmp] # add to the list - pt = array(pt) - pt[logical_not(mask)] = 0 - avg = add.accumulate(pt, 0) - count = add.accumulate(mask, 0) - mh = self.newGrid(-1) - # for each pres. level, calculate a running avg. of pot temp. - # As soon as the next point deviates from the running avg by - # more than 3 deg. C, interpolate to get the mixing height. - for i in xrange(1, avg.shape[0]): - runavg = avg[i] / (count[i] + .0001) - diffpt = pt[i] - runavg - # calc. the interpolated mixing height - tmh = self.linear(pt[i], pt[i - 1], gh_c[i], gh_c[i - 1], runavg) - # assign new values if the difference is greater than 3 - mh = where(logical_and(logical_and(mask[i], equal(mh, -1)), - greater(diffpt, 3)), tmh, mh) - return (mh - topo) * 3.28 - -##-------------------------------------------------------------------------- -## Converts the lowest available wind level from m/s to knots -##-------------------------------------------------------------------------- - def calcWind(self, wind_FHAG10): - mag = wind_FHAG10[0] # get the wind grids - dir = wind_FHAG10[1] # get wind dir - mag = mag * 1.94 # convert to knots - dir = clip(dir, 0, 359.5) - return (mag, dir) # assemble speed and dir into a tuple - -##-------------------------------------------------------------------------- -## Calculates the wind at 3000 feet AGL. -##-------------------------------------------------------------------------- - def calcFreeWind(self, gh_c, wind_c, topo): - wm = wind_c[0] - wd = wind_c[1] - # Make a grid that's topo + 3000 feet (914 meters) - fatopo = topo + 914.4 # 3000 feet - # find the points that are above the 3000 foot level - mask = greater_equal(gh_c, fatopo) - # initialize the grids into which the value are stored - famag = self.newGrid(-1) - fadir = self.newGrid(-1) - # start at the bottom and store the first point we find that's - # above the topo + 3000 feet level. - for i in xrange(wind_c[0].shape[0]): - # Interpolate (maybe) - famag = where(logical_and(equal(famag, -1), mask[i]), wm[i], famag) - fadir = where(logical_and(equal(fadir, -1), mask[i]), wd[i], fadir) - fadir = clip(fadir, 0, 359.5) # clip the value to 0, 360 - famag = famag * 1.94 # convert to knots - return (famag, fadir) # return the tuple of grids - -##-------------------------------------------------------------------------- -## Calculates the average wind vector in the mixed layer as defined -## by the mixing height. This function creates a mask that identifies -## all grid points between the ground and the mixing height and calculates -## a vector average of the wind field in that layer. -##-------------------------------------------------------------------------- - def calcTransWind(self, MixHgt, wind_c, gh_c, topo): - nmh = MixHgt * 0.3048 # convert MixHt from feet -> meters - u, v = self._getUV(wind_c[0], wind_c[1]) # get the wind grids - # set a mask at points between the topo and topo + MixHt - mask = logical_and(greater_equal(gh_c, topo), - less_equal(gh_c, nmh + topo)) - # set the points outside the layer to zero - u[logical_not(mask)] = 0 - v[logical_not(mask)] = 0 - mask = add.reduce(mask).astype(float32) # add up the number of set points vert. - mmask = mask + 0.00001 - # calculate the average value in the mixed layerlayer - u = where(mask, add.reduce(u) / mmask, float32(0)) - v = where(mask, add.reduce(v) / mmask, float32(0)) - # convert u, v to mag, dir - tmag, tdir = self._getMD(u, v) - tdir = clip(tdir, 0, 359.5) - tmag = tmag * 1.94 # convert to knots - tmag = clip(tmag, 0, 125) # clip speed to 125 knots - return (tmag, tdir) - - -##-------------------------------------------------------------------------- -## Uses a derivation of the Bourgouin allgorithm to calculate precipitation -## type, and other algorithms to determine the coverage and intensity. -## The Bourgoin technique figures out precip type from calculating how -## long a hydrometer is exposed to alternating layers of above zero (C) and -## below zero temperature layers. This tool calculates at each grid point -## which of the four Bourgouin cases apply. Then the appropriate algorithm -## is applied to that case that further refines the precip. type. Once the -## type is determined, other algorithms are used to determine the coverage -## and intensity. See the Weather and Forecasting Journal article Oct. 2000, -## "A Method to Determine Precipitation Types", by Pierre Bourgouin -##-------------------------------------------------------------------------- - def calcWx(self, QPF, T, p_SFC, t_c, gh_c, topo, tp_SFC, cp_SFC, - bli_BL0180): - gh_c = gh_c[:13, :, :] - t_c = t_c[:13, :, :] - T = self.FtoK(T) - p_SFC = p_SFC / 100 # sfc pres. in mb - pres = self.pres - a1 = self.empty() - a2 = self.empty() - a3 = self.empty() - aindex = self.empty() - # Go through the levels to identify each case type 0-3 - for i in xrange(1, gh_c.shape[0] - 1): - # get the sfc pres. and temp. - pbot = where(greater(gh_c[i - 1], topo), pres[i - 1], p_SFC) - tbot = where(greater(gh_c[i - 1], topo), t_c[i - 1], T) - # Calculate the area of this layer in Temp/pres coordinates - a11, a22, cross = self.getAreas(pbot, tbot, pres[i], t_c[i]) - topomask = greater(gh_c[i], topo) - a1 = where(logical_and(equal(aindex, 0), topomask), - a1 + a11, a1) - a2 = where(logical_and(equal(aindex, 1), topomask), - a2 + a11, a2) - a3 = where(logical_and(equal(aindex, 2), topomask), - a3 + a11, a3) - topomask = logical_and(topomask, cross) - aindex = where(topomask, aindex + 1, aindex) - a1 = where(logical_and(equal(aindex, 0), topomask), - a1 + a22, a1) - a2 = where(logical_and(equal(aindex, 1), topomask), - a2 + a22, a2) - a3 = where(logical_and(equal(aindex, 2), topomask), - a3 + a22, a3) - - # Now apply a different algorithm for each type - key = ['::::', - "Wide:S:-::", "Wide:R:-::", - "Wide:S:-::^Wide:R:-::", - 'Wide:ZR:-::', 'Wide:IP:-::', - 'Wide:ZR:-::^Wide:IP:-::', - "Sct:SW:-::", "Sct:RW:-::", - "Sct:SW:-::^Sct:RW:-::", - "Chc:ZR:-::", 'Chc:IP:-::', - 'Chc:ZR:-::^Chc:IP:-::'] - - wx = self.empty(int8) - # Case d (snow) - snowmask = equal(aindex, 0) - wx[logical_and(snowmask, greater(a1, 0))] = 2 - wx[logical_and(snowmask, less_equal(a1, 0))] = 1 - - # Case c (rain / snow / rainSnowMix) - srmask = equal(aindex, 1) - wx[logical_and(srmask, less(a1, 5.6))] = 1 - wx[logical_and(srmask, greater(a1, 13.2))] = 2 - wx[logical_and(srmask, - logical_and(greater_equal(a1, 5.6), - less(a1, 13.2)))] = 3 - - # Case a (Freezing Rain / Ice Pellets) - ipmask = equal(aindex, 2) - ipm = greater(a1, a2 * 0.66 + 66) - wx[logical_and(ipmask, ipm)] = 5 - zrm = less(a1, a2 * 0.66 + 46) - wx[logical_and(ipmask, zrm)] = 4 - zrm = logical_not(zrm) - ipm = logical_not(ipm) - wx[logical_and(ipmask, logical_and(zrm, ipm))] = 6 - - # Case b (Ice pellets / rain) - cmask = greater_equal(aindex, 3) - ipmask = logical_and(less(a3, 2), cmask) - wx[logical_and(ipmask, less(a1, 5.6))] = 1 - wx[logical_and(ipmask, greater(a1, 13.2))] = 2 - wx[logical_and(ipmask, logical_and(greater_equal(a1, 5.6), - less_equal(a1, 13.2)))] = 3 - - ipmask = logical_and(greater_equal(a3, 2), cmask) - wx[logical_and(ipmask, greater(a1, 66 + 0.66 * a2))] = 5 - wx[logical_and(ipmask, less(a1, 46 + 0.66 * a2))] = 4 - wx[logical_and(ipmask, logical_and(greater_equal(a1, 46 + 0.66 * a2), - less_equal(a1, 66 + 0.66 * a2)))] = 6 - - # Make showers (scattered/Chc) - convecMask = greater(cp_SFC / (tp_SFC + .001), 0.5) - wx[logical_and(not_equal(wx, 0), convecMask)] += 6 - - # Thunder - for i in xrange(len(key)): - tcov = string.split(key[i], ":")[0] - if tcov == "Chc" or tcov == "": - tcov = "Sct" - key.append(key[i] + "^" + tcov - + ":T:::") - wx[less_equal(bli_BL0180, -3)] += 13 - - # No wx where no qpf - wx[less(QPF, 0.01)] = 0 - return(wx, key) - -##-------------------------------------------------------------------------- -## Calculates chance of wetting rain based on QPF. -##-------------------------------------------------------------------------- - def calcCWR(self, QPF): - m1 = less(QPF, 0.01) # all the places that are dry - m2 = greater_equal(QPF, 0.3) # all the places that are wet - # all the places that are 0.01 to 0.10 - m3 = logical_and(greater_equal(QPF, 0.01), less_equal(QPF, 0.1)) - # all the places that are 0.1 to 0.3 - m4 = logical_and(greater(QPF, 0.1), less(QPF, 0.3)) - # assign 0 to the dry grid point, 100 to the wet grid points, - # and a ramping function to all point in between - cwr = where(m1, float32(0), where(m2, float32(100), - where(m3, 444.4 * (QPF - 0.01) + 10, - where(m4, 250 * (QPF - 0.1) + 50, - QPF)))) - return cwr - -##-------------------------------------------------------------------------- -## Calculates Lightning Activity Level based on total precip., lifted index -## and 3-D relative humidity. -##-------------------------------------------------------------------------- - def calcLAL(self, bli_BL0180, tp_SFC, cp_SFC, rh_c, rh_FHAG2): - lal = self.newGrid(1) - # Add one to lal if we have 0.5 mm of precip. - lal[logical_and(greater(cp_SFC, 0), greater(tp_SFC / cp_SFC, 0.5))] += 1 - - # make an average rh field - midrh = add.reduce(rh_c[6:9], 0) / 3 - # Add one to lal if mid-level rh high and low level rh low - lal[logical_and(greater(midrh, 70), less(rh_FHAG2, 30))] += 1 - - # Add on to lal if lifted index is <-3 and another if <-5 - lal[less(bli_BL0180, -3)] += 1 - lal[less(bli_BL0180, -5)] += 1 - return lal - - -def main(): - NAM80Forecaster().run() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/NAM95.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/NAM95.py deleted file mode 100644 index 06cbc78d92..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/NAM95.py +++ /dev/null @@ -1,553 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -from Init import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from NAM95 model -## output. (Alaska) -## -##-------------------------------------------------------------------------- -class NAM95Forecaster(Forecaster): - def __init__(self): - Forecaster.__init__(self, "NAM95", "NAM95") - -##-------------------------------------------------------------------------- -## These levels will be used to create vertical soundings. These are -## defined here since they are model dependent. -##-------------------------------------------------------------------------- - def levels(self): - return ["MB1000", "MB950", "MB900", "MB850", "MB800", "MB750", - "MB700", "MB650", "MB600", "MB550", "MB500", - "MB450", "MB400", "MB350"] - -##-------------------------------------------------------------------------- -## Returns the maximum of the specified MaxT and the T grids -##-------------------------------------------------------------------------- - def calcMaxT(self, T, MaxT): - if MaxT is None: - return T - return maximum(MaxT, T) - -##-------------------------------------------------------------------------- -## Returns the minimum of the specified MinT and T grids -##-------------------------------------------------------------------------- - def calcMinT(self, T, MinT): - if MinT is None: - return T - return minimum(MinT, T) - -##-------------------------------------------------------------------------- -## Calculates the temperature at the elevation indicated in the topo -## grid. This tool uses the model's boundary layers to calculate a lapse -## rate and then applies that lapse rate to the difference between the -## model topography and the true topography. This algorithm calculates -## the surface temperature for three different sets of points: those that -## fall above the boundary layer, in the boundary layer, and below the -## boundary layer. -##-------------------------------------------------------------------------- - def calcT(self, t_FHAG2, t_BL030, t_BL3060, t_BL6090, t_BL90120, - t_BL120150, p_SFC, topo, stopo, gh_c, t_c): - p = self.newGrid(-1) - tmb = self.newGrid(-1) - tms = self.newGrid(-1) - # go up the column to figure out the surface pressure - for i in xrange(1, gh_c.shape[0]): - higher = greater(gh_c[i], topo) - # interpolate the pressure at topo height - val = self.linear(gh_c[i], gh_c[i - 1], - log(self.pres[i]), log(self.pres[i - 1]), topo) - val = clip(val, -.00001, 10) - p = where(logical_and(equal(p, -1), higher), - exp(val), p) - # interpolate the temperature at true elevation - tval1 = self.linear(gh_c[i], gh_c[i - 1], t_c[i], t_c[i - 1], topo) - tmb = where(logical_and(equal(tmb, -1), higher), - tval1, tmb) - # interpolate the temperature at model elevation - tval2 = self.linear(gh_c[i], gh_c[i - 1], t_c[i], t_c[i - 1], stopo) - tms = where(logical_and(equal(tms, -1), greater(gh_c[i], stopo)), - tval2, tms) - - p_SFC = p_SFC / 100 # get te surface pres. in mb - # define the pres. of each of the boundary layers - pres = [p_SFC, p_SFC - 15, p_SFC - 45, p_SFC - 75, p_SFC - 105, - p_SFC - 135] - # list of temperature grids - temps = [t_FHAG2, t_BL030, t_BL3060, t_BL6090, t_BL90120, t_BL120150] - st = self.newGrid(-1) - # Calculate the lapse rate in units of pressure - for i in xrange(1, len(pres)): - val = self.linear(pres[i], pres[i - 1], temps[i], temps[i - 1], p) - gm = greater(pres[i - 1], p) - lm = less_equal(pres[i], p) - mask = logical_and(gm, lm) - st = where(logical_and(equal(st, -1), mask), - val, st) - - # where topo level is above highest level in BL fields...use tmb - st = where(logical_and(equal(st,-1),less(p,p_SFC-135)),tmb,st) - - # where topo level is below model surface...use difference - # of t at pressure of surface and tFHAG2 and subtract from tmb - st = where(equal(st, -1), tmb - tms + t_FHAG2, st) - return self.KtoF(st) - -##-------------------------------------------------------------------------- -## Calculates dew point from the specified pressure, temp and rh -## fields. -##-------------------------------------------------------------------------- - def calcTd(self, p_SFC, T, t_FHAG2, stopo, topo, rh_FHAG2): - # at the model surface - sfce = rh_FHAG2 / 100 * self.esat(t_FHAG2) - w = (0.622 * sfce) / ((p_SFC + 0.0001) / 100 - sfce) - # at the true surface - tsfce = self.esat(self.FtoK(T)) - dpdz = 287.04 * t_FHAG2 / (p_SFC / 100 * 9.8) # meters / millibar - newp = p_SFC / 100 + (stopo - topo) / dpdz - ws = (0.622 * tsfce) / (newp - tsfce) - rh = w / ws - # Finally, calculate the dew point - tsfcesat = rh * tsfce - tsfcesat = clip(tsfcesat, 0.00001, tsfcesat) - b = 26.66082 - log(tsfcesat) - td = (b - sqrt(b * b - 223.1986)) / 0.0182758048 - td = self.KtoF(td) - td = where(w > ws, T, td) - return td - -##------------------------------------------------------------------------- -## Calculates RH from the T and Td grids -##------------------------------------------------------------------------- - def calcRH(self, T, Td): - Tc = .556 * (T - 32.0) - Tdc = .556 * (Td - 32.0) - Vt = 6.11 * pow(10, (Tc * 7.5 / (Tc + 237.3))) - Vd = 6.11 * pow(10, (Tdc * 7.5 / (Tdc + 237.3))) - RH = (Vd / Vt) * 100.0 - # Return the new value - return RH - -##------------------------------------------------------------------------- -## Returns the maximum of the specified MaxRH and the RH grids -##-------------------------------------------------------------------------- - def calcMaxRH(self, RH, MaxRH): - if MaxRH is None: - return RH - return maximum(MaxRH, RH) - -##------------------------------------------------------------------------- -## Returns the minimum of the specified MinRH and RH grids -##-------------------------------------------------------------------------- - def calcMinRH(self, RH, MinRH): - if MinRH is None: - return RH - return minimum(MinRH, RH) - -##-------------------------------------------------------------------------- -## Calculates QPF from the total precip field out of the model -##-------------------------------------------------------------------------- - def calcQPF(self, tp_SFC): - qpf = tp_SFC / 25.4 # convert from millimeters to inches - return qpf - - def calcSky(self, rh_c, gh_c, topo, p_SFC): - return self.skyFromRH(rh_c, gh_c, topo, p_SFC) - -##-------------------------------------------------------------------------- -## Calculates Prob. of Precip. based on QPF and RH cube. Where there -## is QPF > 0 ramp the PoP from (0.01, 35%) to 100%. Then in areas -## of QPF < 0.2 raise the PoP if it's very humid. -##-------------------------------------------------------------------------- - def calcPoP(self, gh_c, rh_c, QPF, topo): - rhavg = where(less(gh_c, topo), float32(-1), rh_c) - rhavg[greater(gh_c, topo + 5000 * 0.3048)] = -1 - count = not_equal(rhavg, -1) - rhavg[equal(rhavg, -1)] = 0 - count = add.reduce(count, 0, dtype=float32) - rhavg = add.reduce(rhavg, 0) - ## add this much based on humidity only - dpop = where(count, rhavg / (count + .001), 0) - 70.0 - dpop[less(dpop, -30)] = -30 - ## calculate the base PoP - pop = where(less(QPF, 0.02), QPF * 1000, QPF * 350 + 13) - pop += dpop # add the adjustment based on humidity - pop = clip(pop, 0, 100) # clip to 100% - return pop - -##-------------------------------------------------------------------------- -## Calculates the Freezing level based on height and temperature -## cubes. Finds the height at which freezing occurs. -##-------------------------------------------------------------------------- - def calcFzLevel(self, gh_c, t_c, topo): - fzl = self.newGrid(-1) - # for each level in the height cube, find the freezing level - for i in xrange(gh_c.shape[0]): - try: - val = gh_c[i - 1] + (gh_c[i] - gh_c[i - 1]) / (t_c[i] - t_c[i - 1])\ - * (273.15 - t_c[i - 1]) - except: - val = gh_c[i] - ## save the height value in fzl - fzl = where(logical_and(equal(fzl, -1), - less_equal(t_c[i], 273.15)), val, fzl) - return fzl * 3.28 # convert to feet - -##------------------------------------------------------------------------- -## Calculates the Snow level based on wet-bulb zero height. -##------------------------------------------------------------------------- - def calcSnowLevel(self, gh_c, t_c, rh_c): - # Only use the levels that are >= freezind (plus one level) - # This is a performance and memory optimization - clipindex = 2 - for i in xrange(t_c.shape[0] - 1, -1, -1): - if maximum.reduce(maximum.reduce(t_c[i])) >= 273.15: - clipindex = i + 1 - break - gh_c = gh_c[:clipindex, :, :] - t_c = t_c[:clipindex, :, :] - rh_c = rh_c[:clipindex, :, :] - - snow = self.newGrid(-1) - # - # make pressure cube - # - pmb = ones_like(gh_c) - for i in xrange(gh_c.shape[0]): - pmb[i] = self.pres[i] - pmb = clip(pmb, 1, 1050) - # - # convert temps to C and limit to reasonable values - # - tc = t_c - 273.15 - tc = clip(tc, -120, 60) - # - # limit RH to reasonable values - # - rh = clip(rh_c, 0.5, 99.5) - # - # calculate the wetbulb temperatures - # (this is expensive - even in numeric python - and somewhat - # wasteful, since you do not need to calculate the wetbulb - # temp for all levels when it may cross zero way down toward - # the bottom. Nevertheless - all the gridpoints will cross - # zero at different levels - so you cannot know ahead of time - # how high up to calculate them. In the end - this was the - # most expedient way to code it - and it works - so I stuck - # with it. - # - wetb = self.Wetbulb(tc, rh, pmb) - tc = rh = pmb = None - # - # find the zero level - # - for i in xrange(1, gh_c.shape[0]): - try: - val = gh_c[i - 1] + (gh_c[i] - gh_c[i - 1]) / (wetb[i] - wetb[i - 1])\ - * (-wetb[i - 1]) - except: - val = gh_c[i] - snow = where(logical_and(equal(snow, -1), less_equal(wetb[i], 0)), - val, snow) - # - # convert to feet - # - snow = snow * 3.28 - - return snow - -##-------------------------------------------------------------------------- -## Calculates Snow amount based on the Temp, Freezing level, QPF, -## topo and Weather grid -##-------------------------------------------------------------------------- - def calcSnowAmt(self, T, FzLevel, QPF, topo, Wx): - # figure out the snow to liquid ratio - snowr = T * -0.5 + 22.5 - snowr[less(T, 9)] = 20 - snowr[greater_equal(T, 30)] = 0 - # calc. snow amount based on the QPF and the ratio - snowamt = where(less_equal(FzLevel - 1000, topo * 3.28), - snowr * QPF, float32(0)) - # Only make snow at points where the weather is snow - snowmask = logical_or(equal(Wx[0], 1), equal(Wx[0], 3)) - snowmask = logical_or(snowmask, logical_or(equal(Wx[0], 7), - equal(Wx[0], 9))) - snowamt[logical_not(snowmask)] = 0 - return snowamt - -##-------------------------------------------------------------------------- -## Calculate the Haines index based on the temp and RH cubes -## Define self.whichHainesIndex to be "HIGH", "MEDIUM", or "LOW". -## Default is "HIGH". -##-------------------------------------------------------------------------- - def calcHaines(self, t_c, rh_c): - return self.hainesIndex(self.whichHainesIndex, t_c, rh_c) - -##-------------------------------------------------------------------------- -## Calculates the mixing height for the given sfc temperature, -## temperature cube, height cube and topo -##-------------------------------------------------------------------------- - def calcMixHgt(self, T, topo, t_c, gh_c): - mask = greater_equal(gh_c, topo) # points where height > topo - pt = [] - for i in xrange(len(self.pres)): # for each pres. level - p = self.newGrid(self.pres[i]) # get the pres. value in mb - tmp = self.ptemp(t_c[i], p) # calculate the pot. temp - pt = pt + [tmp] # add to the list - pt = array(pt) - pt[logical_not(mask)] = 0 - avg = add.accumulate(pt, 0) - count = add.accumulate(mask, 0) - mh = self.newGrid(-1) - # for each pres. level, calculate a running avg. of pot temp. - # As soon as the next point deviates from the running avg by - # more than 3 deg. C, interpolate to get the mixing height. - for i in xrange(1, avg.shape[0]): - runavg = avg[i] / (count[i] + .0001) - diffpt = pt[i] - runavg - # calc. the interpolated mixing height - tmh = self.linear(pt[i], pt[i - 1], gh_c[i], gh_c[i - 1], runavg) - # assign new values if the difference is greater than 3 - mh = where(logical_and(logical_and(mask[i], equal(mh, -1)), - greater(diffpt, 3)), tmh, mh) - return (mh - topo) * 3.28 - -##-------------------------------------------------------------------------- -## Converts the lowest available wind level from m/s to knots -##-------------------------------------------------------------------------- - def calcWind(self, wind_FHAG10): - mag = wind_FHAG10[0] # get the wind grids - dir = wind_FHAG10[1] # get wind dir - mag = mag * 1.94 # convert to knots - dir = clip(dir, 0, 359.5) - return (mag, dir) # assemble speed and dir into a tuple - -##-------------------------------------------------------------------------- -## Calculates the wind at 3000 feet AGL. -##-------------------------------------------------------------------------- - def calcFreeWind(self, gh_c, wind_c, topo): - wm = wind_c[0] - wd = wind_c[1] - # Make a grid that's topo + 3000 feet (914 meters) - fatopo = topo + 914.4 # 3000 feet - # find the points that are above the 3000 foot level - mask = greater_equal(gh_c, fatopo) - # initialize the grids into which the value are stored - famag = self.newGrid(-1) - fadir = self.newGrid(-1) - # start at the bottom and store the first point we find that's - # above the topo + 3000 feet level. - for i in xrange(wind_c[0].shape[0]): - # Interpolate (maybe) - famag = where(logical_and(equal(famag, -1), mask[i]), wm[i], famag) - fadir = where(logical_and(equal(fadir, -1), mask[i]), wd[i], fadir) - fadir = clip(fadir, 0, 359.5) # clip the value to 0, 360 - famag = famag * 1.94 # convert to knots - return (famag, fadir) # return the tuple of grids - -##-------------------------------------------------------------------------- -## Calculates the average wind vector in the mixed layer as defined -## by the mixing height. This function creates a mask that identifies -## all grid points between the ground and the mixing height and calculates -## a vector average of the wind field in that layer. -##-------------------------------------------------------------------------- - def calcTransWind(self, MixHgt, wind_c, gh_c, topo): - nmh = MixHgt * 0.3048 # convert MixHt from feet -> meters - u, v = self._getUV(wind_c[0], wind_c[1]) # get the wind grids - # set a mask at points between the topo and topo + MixHt - mask = logical_and(greater_equal(gh_c, topo), - less_equal(gh_c, nmh + topo)) - # set the points outside the layer to zero - u[logical_not(mask)] = 0 - v[logical_not(mask)] = 0 - mask = add.reduce(mask).astype(float32) # add up the number of set points vert. - mmask = mask + 0.00001 - # calculate the average value in the mixed layerlayer - u = where(mask, add.reduce(u) / mmask, float32(0)) - v = where(mask, add.reduce(v) / mmask, float32(0)) - # convert u, v to mag, dir - tmag, tdir = self._getMD(u, v) - - tdir.clip(0, 359.5, tdir) - tmag *= 1.94 # convert to knots - tmag.clip(0, 125, tdir) # clip speed to 125 knots - return (tmag, tdir) - - -##-------------------------------------------------------------------------- -## Uses a derivation of the Bourgouin allgorithm to calculate precipitation -## type, and other algorithms to determine the coverage and intensity. -## The Bourgoin technique figures out precip type from calculating how -## long a hydrometer is exposed to alternating layers of above zero (C) and -## below zero temperature layers. This tool calculates at each grid point -## which of the four Bourgouin cases apply. Then the appropriate algorithm -## is applied to that case that further refines the precip. type. Once the -## type is determined, other algorithms are used to determine the coverage -## and intensity. See the Weather and Forecasting Journal article Oct. 2000, -## "A Method to Determine Precipitation Types", by Pierre Bourgouin -##-------------------------------------------------------------------------- - def calcWx(self, QPF, T, p_SFC, t_c, gh_c, topo, tp_SFC, cp_SFC, - bli_BL0180): - gh_c = gh_c[:13, :, :] - t_c = t_c[:13, :, :] - T = self.FtoK(T) - p_SFC = p_SFC / 100 # sfc pres. in mb - pres = self.pres - a1 = self.empty() - a2 = self.empty() - a3 = self.empty() - aindex = self.empty() - # Go through the levels to identify each case type 0-3 - for i in xrange(1, gh_c.shape[0] - 1): - # get the sfc pres. and temp. - pbot = where(greater(gh_c[i - 1], topo), pres[i - 1], p_SFC) - tbot = where(greater(gh_c[i - 1], topo), t_c[i - 1], T) - # Calculate the area of this layer in Temp/pres coordinates - a11, a22, cross = self.getAreas(pbot, tbot, pres[i], t_c[i]) - topomask = greater(gh_c[i], topo) - a1 = where(logical_and(equal(aindex, 0), topomask), - a1 + a11, a1) - a2 = where(logical_and(equal(aindex, 1), topomask), - a2 + a11, a2) - a3 = where(logical_and(equal(aindex, 2), topomask), - a3 + a11, a3) - topomask = logical_and(topomask, cross) - aindex = where(topomask, aindex + 1, aindex) - a1 = where(logical_and(equal(aindex, 0), topomask), - a1 + a22, a1) - a2 = where(logical_and(equal(aindex, 1), topomask), - a2 + a22, a2) - a3 = where(logical_and(equal(aindex, 2), topomask), - a3 + a22, a3) - - # Now apply a different algorithm for each type - key = ['::::', - "Wide:S:-::", "Wide:R:-::", - "Wide:S:-::^Wide:R:-::", - 'Wide:ZR:-::', 'Wide:IP:-::', - 'Wide:ZR:-::^Wide:IP:-::', - "Sct:SW:-::", "Sct:RW:-::", - "Sct:SW:-::^Sct:RW:-::", - "Chc:ZR:-::", 'Chc:IP:-::', - 'Chc:ZR:-::^Chc:IP:-::'] - - wx = self.empty(int8) - # Case d (snow) - snowmask = equal(aindex, 0) - wx[logical_and(snowmask, greater(a1, 0))] = 2 - wx[logical_and(snowmask, less_equal(a1, 0))] = 1 - - # Case c (rain / snow / rainSnowMix) - srmask = equal(aindex, 1) - wx[logical_and(srmask, less(a1, 5.6))] = 1 - wx[logical_and(srmask, greater(a1, 13.2))] = 2 - wx[logical_and(srmask, - logical_and(greater_equal(a1, 5.6), - less(a1, 13.2)))] = 3 - - # Case a (Freezing Rain / Ice Pellets) - ipmask = equal(aindex, 2) - ipm = greater(a1, a2 * 0.66 + 66) - wx[logical_and(ipmask, ipm)] = 5 - zrm = less(a1, a2 * 0.66 + 46) - wx[logical_and(ipmask, zrm)] = 4 - zrm = logical_not(zrm) - ipm = logical_not(ipm) - wx[logical_and(ipmask, logical_and(zrm, ipm))] = 6 - - # Case b (Ice pellets / rain) - cmask = greater_equal(aindex, 3) - ipmask = logical_and(less(a3, 2), cmask) - wx[logical_and(ipmask, less(a1, 5.6))] = 1 - wx[logical_and(ipmask, greater(a1, 13.2))] = 2 - wx[logical_and(ipmask, logical_and(greater_equal(a1, 5.6), - less_equal(a1, 13.2)))] = 3 - - ipmask = logical_and(greater_equal(a3, 2), cmask) - wx[logical_and(ipmask, greater(a1, 66 + 0.66 * a2))] = 5 - wx[logical_and(ipmask, less(a1, 46 + 0.66 * a2))] = 4 - wx[logical_and(ipmask, logical_and(greater_equal(a1, 46 + 0.66 * a2), - less_equal(a1, 66 + 0.66 * a2)))] = 6 - - # Make showers (scattered/Chc) - convecMask = greater(cp_SFC / (tp_SFC + .001), 0.5) - wx[logical_and(not_equal(wx, 0), convecMask)] += 6 - - # Thunder - for i in xrange(len(key)): - tcov = string.split(key[i], ":")[0] - if tcov == "Chc" or tcov == "": - tcov = "Sct" - key.append(key[i] + "^" + tcov - + ":T:::") - wx[less_equal(bli_BL0180, -3)] += 13 - - # No wx where no qpf - wx[less(QPF, 0.01)] = 0 - return(wx, key) - -##-------------------------------------------------------------------------- -## Calculates chance of wetting rain based on QPF. -##-------------------------------------------------------------------------- - def calcCWR(self, QPF): - m1 = less(QPF, 0.01) # all the places that are dry - m2 = greater_equal(QPF, 0.3) # all the places that are wet - # all the places that are 0.01 to 0.10 - m3 = logical_and(greater_equal(QPF, 0.01), less_equal(QPF, 0.1)) - # all the places that are 0.1 to 0.3 - m4 = logical_and(greater(QPF, 0.1), less(QPF, 0.3)) - # assign 0 to the dry grid point, 100 to the wet grid points, - # and a ramping function to all point in between - cwr = where(m1, float32(0), where(m2, float32(100), - where(m3, 444.4 * (QPF - 0.01) + 10, - where(m4, 250 * (QPF - 0.1) + 50, - QPF)))) - return cwr - -##-------------------------------------------------------------------------- -## Calculates Lightning Activity Level based on total precip., lifted index -## and 3-D relative humidity. -##-------------------------------------------------------------------------- - def calcLAL(self, bli_BL0180, tp_SFC, cp_SFC, rh_c, rh_FHAG2): - lal = self.newGrid(1) - # Add one to lal if we have 0.5 mm of precip. - lal[logical_and(greater(cp_SFC, 0), greater(tp_SFC / cp_SFC, 0.5))] += 1 - - # make an average rh field - midrh = add.reduce(rh_c[6:9], 0) / 3 - # Add one to lal if mid-level rh high and low level rh low - lal[logical_and(greater(midrh, 70), less(rh_FHAG2, 30))] += 1 - - # Add on to lal if lifted index is <-3 and another if <-5 - lal[less(bli_BL0180, -3)] += 1 - lal[less(bli_BL0180, -5)] += 1 - return lal - - -def main(): - NAM95Forecaster().run() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/OPCTAFBE.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/OPCTAFBE.py deleted file mode 100644 index 4a718410e3..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/OPCTAFBE.py +++ /dev/null @@ -1,220 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -################################################################################ -# This file contains code to produce OPC wave height databases. -# -# Author: Matthew H. Belk Created: 07/26/2007 -# WFO BOX Last Modified: 07/26/2007 -# - -from Init import * - -class OPCWAVEForecaster(Forecaster): - - def __init__(self): - Forecaster.__init__(self, "OPCTAFBE", "OPCTAFBE") - -#-------------------------------------------------------------------------- -## Calculates wave height from the WNAWAVE model. Converts to feet from meters -##-------------------------------------------------------------------------- - def calcWaveHeight(self, htsgw_SFC, topo): - - # Assign the value filtering out everything above 50 meters - grid = htsgw_SFC.copy() - grid[greater(htsgw_SFC, 50)] = 0.0 - grid *= 3.28 - - # Make a mask where topo is 0.0 m MSL - topoMask = equal(topo, 0.0) - - # Make a mask where data is missing - dataMask = equal(grid, 0.0) - - # Bring the data all the way into the coast - grid = self.fillEditArea(grid, logical_and(dataMask, topoMask)) - - # Ensure grid values are between 0 ft and 100 ft - grid.clip(0, 100, grid) - - # Return completed grid - but only where topo is 0 ft MSL - grid[logical_not(topoMask)] = 0.0 - return grid - - - -################################################################################ -## -## Start utility methods needed for fill routine - -##-------------------------------------------------------------------------- -## Gets the indicies at o, l -##-------------------------------------------------------------------------- - def getindicies(self, o, l): - if o > 0: - a = slice(o, l); b = slice(0, l - o) - elif o < 0: - a = slice(0, l + o); b = slice(-o, l) - else: - a = slice(0, l); b = slice(0, l) - return a, b - - -##-------------------------------------------------------------------------- -## Gives an offset grid for array, a, by x and y points -##-------------------------------------------------------------------------- - def offset(self, a, x, y): - sy1, sy2 = self.getindicies(y, a.shape[0]) - sx1, sx2 = self.getindicies(x, a.shape[1]) - b = zeros_like(a) - b[sy1,sx1] = a[sy2,sx2] - return b - - -##-------------------------------------------------------------------------- -## Given a numeric array of 1s and 0s this method returns a similar -## array with cells set that encompass the mask, unset everywhere else -##-------------------------------------------------------------------------- - def getMaskBorder(self, mask): - border = self.empty(bool) - for i in [-1, 0, 1]: - for j in [-1, 0, 1]: - border[self.offset(mask, i, j)] = True - return logical_xor(border, mask) - - -##-------------------------------------------------------------------------- -## Given a numeric array of 1s and 0s this method returns a list of -## the (x, y) indicies that are set to 1. -##-------------------------------------------------------------------------- - def getMaskIndicies(self, mask): - flatIndicies = flatnonzero(mask) # get the indicies of the set cells - ysize = mask.shape[1] - indexes = [] - # convert the flat indicies to the x, y indicies - for i in flatIndicies: - indexes.append((i / ysize, i % ysize)) - return indexes - - -##-------------------------------------------------------------------------- -## Define a method to fill the specified edit area -##-------------------------------------------------------------------------- - def fillEditArea(self, grid, fillMask): - - # Now fill in the rest of the grid - borderMask = self.getMaskBorder(fillMask) - editPoints = self.getMaskIndicies(fillMask) - borderPoints = self.getMaskIndicies(borderMask) - - for e in editPoints: # for each point - numSum = 0.0 - denomSum = 0.0 - for b in borderPoints: - if e[0] == b[0] or e[1] == b[1] or \ - abs(e[0] - b[0]) == abs(e[1] - b[1]): - xdist = float(e[0] - b[0]) - ydist = float(e[1] - b[1]) - # calculate the distance to the border point - dist = sqrt(xdist * xdist + ydist * ydist) - value = grid[b[0], b[1]] - # Accumulate the distance-weighted average - if value > 0: - numSum = numSum + value / dist - denomSum = denomSum + 1 / dist - if denomSum > 0: - grid[e[0], e[1]] = numSum / denomSum - else: - grid[e[0], e[1]] = 0.0 - - # Return completed grid - return grid - - -##-------------------------------------------------------------------------- -## Smooths the grid in the "filled in" area... -##-------------------------------------------------------------------------- - def Smooth(self, grid, fillMask): - # make a copy of the original grid - a = grid - # smooth a 3 times in succession to wipe out any noise - for x in range(3): - a = self.smoothGrid(a) - # in the "filled-in" area, replace the current data with - # the smoothed data - grid = where(fillMask, a, grid) - return grid - - - def smoothGrid(self, grid): - # This code is essentially the NumericSmooth example - # smart tool customized for our purposes. - # factors of less than 3 are useless or dangerous - factor = 3 - if factor < 3: - return grid - - half = int(factor)/ 2 - sg = zeros(grid.shape,float64) - count = zeros(grid.shape,float64) - gridOfOnes = ones(grid.shape,float64) - for y in range(-half, half + 1): - for x in range(-half, half + 1): - if y < 0: - yTargetSlice = slice(-y, None, None) - ySrcSlice = slice(0, y, None) - if y == 0: - yTargetSlice = slice(0, None, None) - ySrcSlice = slice(0, None, None) - if y > 0: - yTargetSlice = slice(0, -y, None) - ySrcSlice = slice(y, None, None) - if x < 0: - xTargetSlice = slice(-x, None, None) - xSrcSlice = slice(0, x, None) - if x == 0: - xTargetSlice = slice(0, None, None) - xSrcSlice = slice(0, None, None) - if x > 0: - xTargetSlice = slice(0, -x, None) - xSrcSlice = slice(x, None, None) - - target = [yTargetSlice, xTargetSlice] - src = [ySrcSlice, xSrcSlice] - sg[target] = sg[target] + grid[src] - count[target] = count[target] + gridOfOnes[src] - return sg / count - - -## -## End utility methods needed for fill routine -################################################################################ - - -def main(): - OPCWAVEForecaster().run() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/OPCTAFBNW.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/OPCTAFBNW.py deleted file mode 100644 index cc8036cd08..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/OPCTAFBNW.py +++ /dev/null @@ -1,220 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -################################################################################ -# This file contains code to produce OPC wave height databases. -# -# Author: Matthew H. Belk Created: 07/26/2007 -# WFO BOX Last Modified: 07/26/2007 -# - -from Init import * - -class OPCWAVEForecaster(Forecaster): - - def __init__(self): - Forecaster.__init__(self, "OPCTAFBNW", "OPCTAFBNW") - -#-------------------------------------------------------------------------- -## Calculates wave height from the WNAWAVE model. Converts to feet from meters -##-------------------------------------------------------------------------- - def calcWaveHeight(self, htsgw_SFC, topo): - - # Assign the value filtering out everything above 50 meters - grid = htsgw_SFC.copy() - grid[greater(htsgw_SFC, 50)] = 0.0 - grid *= 3.28 - - # Make a mask where topo is 0.0 m MSL - topoMask = equal(topo, 0.0) - - # Make a mask where data is missing - dataMask = equal(grid, 0.0) - - # Bring the data all the way into the coast - grid = self.fillEditArea(grid, logical_and(dataMask, topoMask)) - - # Ensure grid values are between 0 ft and 100 ft - grid.clip(0, 100, grid) - - # Return completed grid - but only where topo is 0 ft MSL - grid[logical_not(topoMask)] = 0.0 - return grid - - - -################################################################################ -## -## Start utility methods needed for fill routine - -##-------------------------------------------------------------------------- -## Gets the indicies at o, l -##-------------------------------------------------------------------------- - def getindicies(self, o, l): - if o > 0: - a = slice(o, l); b = slice(0, l - o) - elif o < 0: - a = slice(0, l + o); b = slice(-o, l) - else: - a = slice(0, l); b = slice(0, l) - return a, b - - -##-------------------------------------------------------------------------- -## Gives an offset grid for array, a, by x and y points -##-------------------------------------------------------------------------- - def offset(self, a, x, y): - sy1, sy2 = self.getindicies(y, a.shape[0]) - sx1, sx2 = self.getindicies(x, a.shape[1]) - b = zeros_like(a) - b[sy1,sx1] = a[sy2,sx2] - return b - - -##-------------------------------------------------------------------------- -## Given a numeric array of 1s and 0s this method returns a similar -## array with cells set that encompass the mask, unset everywhere else -##-------------------------------------------------------------------------- - def getMaskBorder(self, mask): - border = self.empty(bool) - for i in [-1, 0, 1]: - for j in [-1, 0, 1]: - border[self.offset(mask, i, j)] = True - return logical_xor(border, mask) - - -##-------------------------------------------------------------------------- -## Given a numeric array of 1s and 0s this method returns a list of -## the (x, y) indicies that are set to 1. -##-------------------------------------------------------------------------- - def getMaskIndicies(self, mask): - flatIndicies = flatnonzero(mask) # get the indicies of the set cells - ysize = mask.shape[1] - indexes = [] - # convert the flat indicies to the x, y indicies - for i in flatIndicies: - indexes.append((i / ysize, i % ysize)) - return indexes - - -##-------------------------------------------------------------------------- -## Define a method to fill the specified edit area -##-------------------------------------------------------------------------- - def fillEditArea(self, grid, fillMask): - - # Now fill in the rest of the grid - borderMask = self.getMaskBorder(fillMask) - editPoints = self.getMaskIndicies(fillMask) - borderPoints = self.getMaskIndicies(borderMask) - - for e in editPoints: # for each point - numSum = 0.0 - denomSum = 0.0 - for b in borderPoints: - if e[0] == b[0] or e[1] == b[1] or \ - abs(e[0] - b[0]) == abs(e[1] - b[1]): - xdist = float(e[0] - b[0]) - ydist = float(e[1] - b[1]) - # calculate the distance to the border point - dist = sqrt(xdist * xdist + ydist * ydist) - value = grid[b[0], b[1]] - # Accumulate the distance-weighted average - if value > 0: - numSum = numSum + value / dist - denomSum = denomSum + 1 / dist - if denomSum > 0: - grid[e[0], e[1]] = numSum / denomSum - else: - grid[e[0], e[1]] = 0.0 - - # Return completed grid - return grid - - -##-------------------------------------------------------------------------- -## Smooths the grid in the "filled in" area... -##-------------------------------------------------------------------------- - def Smooth(self, grid, fillMask): - # make a copy of the original grid - a = grid - # smooth a 3 times in succession to wipe out any noise - for x in range(3): - a = self.smoothGrid(a) - # in the "filled-in" area, replace the current data with - # the smoothed data - grid = where(fillMask, a, grid) - return grid - - - def smoothGrid(self, grid): - # This code is essentially the NumericSmooth example - # smart tool customized for our purposes. - # factors of less than 3 are useless or dangerous - factor = 3 - if factor < 3: - return grid - - half = int(factor)/ 2 - sg = zeros(grid.shape,float64) - count = zeros(grid.shape,float64) - gridOfOnes = ones(grid.shape,float64) - for y in range(-half, half + 1): - for x in range(-half, half + 1): - if y < 0: - yTargetSlice = slice(-y, None, None) - ySrcSlice = slice(0, y, None) - if y == 0: - yTargetSlice = slice(0, None, None) - ySrcSlice = slice(0, None, None) - if y > 0: - yTargetSlice = slice(0, -y, None) - ySrcSlice = slice(y, None, None) - if x < 0: - xTargetSlice = slice(-x, None, None) - xSrcSlice = slice(0, x, None) - if x == 0: - xTargetSlice = slice(0, None, None) - xSrcSlice = slice(0, None, None) - if x > 0: - xTargetSlice = slice(0, -x, None) - xSrcSlice = slice(x, None, None) - - target = [yTargetSlice, xTargetSlice] - src = [ySrcSlice, xSrcSlice] - sg[target] = sg[target] + grid[src] - count[target] = count[target] + gridOfOnes[src] - return sg / count - - -## -## End utility methods needed for fill routine -################################################################################ - - -def main(): - OPCWAVEForecaster().run() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/OPCTAFBSW.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/OPCTAFBSW.py deleted file mode 100644 index ee7707731b..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/OPCTAFBSW.py +++ /dev/null @@ -1,220 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -################################################################################ -# This file contains code to produce OPC wave height databases. -# -# Author: Matthew H. Belk Created: 07/26/2007 -# WFO BOX Last Modified: 07/26/2007 -# - -from Init import * - -class OPCWAVEForecaster(Forecaster): - - def __init__(self): - Forecaster.__init__(self, "OPCTAFBSW", "OPCTAFBSW") - -#-------------------------------------------------------------------------- -## Calculates wave height from the WNAWAVE model. Converts to feet from meters -##-------------------------------------------------------------------------- - def calcWaveHeight(self, htsgw_SFC, topo): - - # Assign the value filtering out everything above 50 meters - grid = htsgw_SFC.copy() - grid[greater(htsgw_SFC, 50)] = 0.0 - grid *= 3.28 - - # Make a mask where topo is 0.0 m MSL - topoMask = equal(topo, 0.0) - - # Make a mask where data is missing - dataMask = equal(grid, 0.0) - - # Bring the data all the way into the coast - grid = self.fillEditArea(grid, logical_and(dataMask, topoMask)) - - # Ensure grid values are between 0 ft and 100 ft - grid.clip(0, 100, grid) - - # Return completed grid - but only where topo is 0 ft MSL - grid[logical_not(topoMask)] = 0.0 - return grid - - - -################################################################################ -## -## Start utility methods needed for fill routine - -##-------------------------------------------------------------------------- -## Gets the indicies at o, l -##-------------------------------------------------------------------------- - def getindicies(self, o, l): - if o > 0: - a = slice(o, l); b = slice(0, l - o) - elif o < 0: - a = slice(0, l + o); b = slice(-o, l) - else: - a = slice(0, l); b = slice(0, l) - return a, b - - -##-------------------------------------------------------------------------- -## Gives an offset grid for array, a, by x and y points -##-------------------------------------------------------------------------- - def offset(self, a, x, y): - sy1, sy2 = self.getindicies(y, a.shape[0]) - sx1, sx2 = self.getindicies(x, a.shape[1]) - b = zeros_like(a) - b[sy1,sx1] = a[sy2,sx2] - return b - - -##-------------------------------------------------------------------------- -## Given a numeric array of 1s and 0s this method returns a similar -## array with cells set that encompass the mask, unset everywhere else -##-------------------------------------------------------------------------- - def getMaskBorder(self, mask): - border = self.empty(bool) - for i in [-1, 0, 1]: - for j in [-1, 0, 1]: - border[self.offset(mask, i, j)] = True - return logical_xor(border, mask) - - -##-------------------------------------------------------------------------- -## Given a numeric array of 1s and 0s this method returns a list of -## the (x, y) indicies that are set to 1. -##-------------------------------------------------------------------------- - def getMaskIndicies(self, mask): - flatIndicies = flatnonzero(mask) # get the indicies of the set cells - ysize = mask.shape[1] - indexes = [] - # convert the flat indicies to the x, y indicies - for i in flatIndicies: - indexes.append((i / ysize, i % ysize)) - return indexes - - -##-------------------------------------------------------------------------- -## Define a method to fill the specified edit area -##-------------------------------------------------------------------------- - def fillEditArea(self, grid, fillMask): - - # Now fill in the rest of the grid - borderMask = self.getMaskBorder(fillMask) - editPoints = self.getMaskIndicies(fillMask) - borderPoints = self.getMaskIndicies(borderMask) - - for e in editPoints: # for each point - numSum = 0.0 - denomSum = 0.0 - for b in borderPoints: - if e[0] == b[0] or e[1] == b[1] or \ - abs(e[0] - b[0]) == abs(e[1] - b[1]): - xdist = float(e[0] - b[0]) - ydist = float(e[1] - b[1]) - # calculate the distance to the border point - dist = sqrt(xdist * xdist + ydist * ydist) - value = grid[b[0], b[1]] - # Accumulate the distance-weighted average - if value > 0: - numSum = numSum + value / dist - denomSum = denomSum + 1 / dist - if denomSum > 0: - grid[e[0], e[1]] = numSum / denomSum - else: - grid[e[0], e[1]] = 0.0 - - # Return completed grid - return grid - - -##-------------------------------------------------------------------------- -## Smooths the grid in the "filled in" area... -##-------------------------------------------------------------------------- - def Smooth(self, grid, fillMask): - # make a copy of the original grid - a = grid - # smooth a 3 times in succession to wipe out any noise - for x in range(3): - a = self.smoothGrid(a) - # in the "filled-in" area, replace the current data with - # the smoothed data - grid = where(fillMask, a, grid) - return grid - - - def smoothGrid(self, grid): - # This code is essentially the NumericSmooth example - # smart tool customized for our purposes. - # factors of less than 3 are useless or dangerous - factor = 3 - if factor < 3: - return grid - - half = int(factor)/ 2 - sg = zeros(grid.shape,float64) - count = zeros(grid.shape,float64) - gridOfOnes = ones(grid.shape,float64) - for y in range(-half, half + 1): - for x in range(-half, half + 1): - if y < 0: - yTargetSlice = slice(-y, None, None) - ySrcSlice = slice(0, y, None) - if y == 0: - yTargetSlice = slice(0, None, None) - ySrcSlice = slice(0, None, None) - if y > 0: - yTargetSlice = slice(0, -y, None) - ySrcSlice = slice(y, None, None) - if x < 0: - xTargetSlice = slice(-x, None, None) - xSrcSlice = slice(0, x, None) - if x == 0: - xTargetSlice = slice(0, None, None) - xSrcSlice = slice(0, None, None) - if x > 0: - xTargetSlice = slice(0, -x, None) - xSrcSlice = slice(x, None, None) - - target = [yTargetSlice, xTargetSlice] - src = [ySrcSlice, xSrcSlice] - sg[target] = sg[target] + grid[src] - count[target] = count[target] + gridOfOnes[src] - return sg / count - - -## -## End utility methods needed for fill routine -################################################################################ - - -def main(): - OPCWAVEForecaster().run() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/SREF.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/SREF.py deleted file mode 100644 index 403f920c5c..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/SREF.py +++ /dev/null @@ -1,64 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - - - -from Init import * - -##-------------------------------------------------------------------------- -## Module that produces surface weather elements from SREF model -## output. -## -##-------------------------------------------------------------------------- -class SREFForecaster(Forecaster): - def __init__(self): - Forecaster.__init__(self, "SREF") - -##-------------------------------------------------------------------------- -## These levels will be used to create vertical soundings. These are -## defined here since they are model dependent. -##-------------------------------------------------------------------------- - def levels(self): - return ["MB1000", "MB850", "MB700", "MB500", "MB250"] - - def calcT(self, tmean_FHAG2): - return self.KtoF(tmean_FHAG2) - - def calcTd(self, dptmean_FHAG2): - return self.KtoF(dptmean_FHAG2) - - def calcWind(self, uwmean_FHAG10, vwmean_FHAG10): - uw = uwmean_FHAG10 * -1.0 - vw = vwmean_FHAG10 * -1.0 - (mag, dir) = self._getMD(uw, vw) - mag = mag * 1.94 - dir = clip(dir, 0, 359.5) - return (mag, dir) - -def main(): - SREFForecaster().run() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/WCwave10.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/WCwave10.py deleted file mode 100644 index b417c8862e..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/WCwave10.py +++ /dev/null @@ -1,44 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - - - -from Init import * -from WW3 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from WW3 model -## output. -## -##-------------------------------------------------------------------------- -class WCwave10Forecaster(WW3Forecaster): - def __init__(self): - WW3Forecaster.__init__(self, "WCwave10", "WCwave10") - -def main(): - WCwave10Forecaster().run() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/WCwave4.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/WCwave4.py deleted file mode 100644 index ad269b4d7c..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/WCwave4.py +++ /dev/null @@ -1,44 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - - - -from Init import * -from WW3 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from WW3 model -## output. -## -##-------------------------------------------------------------------------- -class WCwave4Forecaster(WW3Forecaster): - def __init__(self): - WW3Forecaster.__init__(self, "WCwave4", "WCwave4") - -def main(): - WCwave4Forecaster().run() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/WNAwave.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/WNAwave.py deleted file mode 100644 index e6d09eab02..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/WNAwave.py +++ /dev/null @@ -1,44 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - - - -from Init import * -from WW3 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from WW3 model -## output. -## -##-------------------------------------------------------------------------- -class WNAwaveForecaster(WW3Forecaster): - def __init__(self): - WW3Forecaster.__init__(self, "WNAwave", "WNAwave") - -def main(): - WNAwaveForecaster().run() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/WNAwave10.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/WNAwave10.py deleted file mode 100644 index fb8dfbe102..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/WNAwave10.py +++ /dev/null @@ -1,44 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - - - -from Init import * -from WW3 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from WW3 model -## output. -## -##-------------------------------------------------------------------------- -class WNAwave10Forecaster(WW3Forecaster): - def __init__(self): - WW3Forecaster.__init__(self, "WNAwave10", "WNAwave10") - -def main(): - WNAwave10Forecaster().run() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/WNAwave4.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/WNAwave4.py deleted file mode 100644 index 126f2b926e..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/WNAwave4.py +++ /dev/null @@ -1,44 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - - - -from Init import * -from WW3 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from WW3 model -## output. -## -##-------------------------------------------------------------------------- -class WNAwave4Forecaster(WW3Forecaster): - def __init__(self): - WW3Forecaster.__init__(self, "WNAwave4", "WNAwave4") - -def main(): - WNAwave4Forecaster().run() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/WW3.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/WW3.py deleted file mode 100644 index 9a30f22676..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/WW3.py +++ /dev/null @@ -1,106 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - - - -from Init import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from WW3 model -## output. -## -##-------------------------------------------------------------------------- -class WW3Forecaster(Forecaster): - def __init__(self, srcdb, destdb): - Forecaster.__init__(self, srcdb, destdb) - -##-------------------------------------------------------------------------- -## Calculates wave height from the WW3 model. Converts to feet from meters -##-------------------------------------------------------------------------- - def calcWaveHeight(self, htsgw_SFC): - # Convert meters to feet - grid = htsgw_SFC * 3.281 - # Return the new value - return grid - -##-------------------------------------------------------------------------- -## Calculates wind wave height from the WW3 model. Converts to feet from meters -##-------------------------------------------------------------------------- - def calcWindWaveHgt(self, wvhgt_SFC): - # Convert meters to feet - grid = wvhgt_SFC * 3.281 - # Return the new value - return grid - -##-------------------------------------------------------------------------- -## Calculates wind from the WW3 model. Convert from meters/sec to knots. -##-------------------------------------------------------------------------- - def calcWind(self, wind_SFC): - # extract the wind speed and direction - mag = wind_SFC[0].copy() - mag[greater(wind_SFC[0], 100)] = 0 - mag *= 1.94 # convert - dir = wind_SFC[1].copy() - dir[greater(wind_SFC[0], 100)] = 0 - dir.clip(0, 359.5, dir) - return (mag, dir) - -##-------------------------------------------------------------------------- -## Calculates Primary Swell from WW3 model. -# Note: have to use wave height for magnitude since that info not available. -##-------------------------------------------------------------------------- - def calcSwell(self, swell_OSEQD1, swdir_OSEQD1): - # extract the wind speed and direction - mag = swell_OSEQD1 - dir = clip(swdir_OSEQD1, 0, 359.5) - return (mag, dir) - -##-------------------------------------------------------------------------- -## Calculates Secondary Swell from WW3 model. -# Note: have to use wave height for magnitude since that info not available. -##-------------------------------------------------------------------------- - def calcSwell2(self, swell_OSEQD2, swdir_OSEQD2): - # extract the wind speed and direction - mag = swell_OSEQD2 - dir = clip(swdir_OSEQD2, 0, 359.5) - return (mag, dir) - -##-------------------------------------------------------------------------- -## Calculates Primary Period from WW3 model. -##-------------------------------------------------------------------------- - def calcPeriod(self, swper_OSEQD1): - return clip(swper_OSEQD1, 0, 60) - -##-------------------------------------------------------------------------- -## Calculates Secondary Period from WW3 model. -##-------------------------------------------------------------------------- - def calcPeriod2(self, swper_OSEQD2): - return clip(swper_OSEQD2, 0, 60) - -def main(): - WW3Forecaster().run() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/gfsLR.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/gfsLR.py deleted file mode 100644 index 9b549f8200..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/gfsLR.py +++ /dev/null @@ -1,545 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -from Init import * - -class gfsLRForecaster(Forecaster): -##------------------------------------------------------------------------- -## Module that calculates surface weather elements from gfsLR model -## output. -##------------------------------------------------------------------------- - def __init__(self): - Forecaster.__init__(self, "gfsLR") - -##------------------------------------------------------------------------- -## These levels will be used to create vertical soundings. These are -## defined here since they are model dependent. -##------------------------------------------------------------------------- - def levels(self): - return ["MB1000", "MB850", "MB700", "MB500", "MB300"] - -##------------------------------------------------------------------------- -## Returns the maximum of the specified MaxT and the T grids -##------------------------------------------------------------------------- - def calcMaxT(self, T, MaxT): - if MaxT is None: - return T - return maximum(MaxT, T) - -##------------------------------------------------------------------------- -## Returns the minimum of the specified MinT and T grids -##------------------------------------------------------------------------- - def calcMinT(self, T, MinT): - if MinT is None: - return T - return minimum(MinT, T) - -##------------------------------------------------------------------------- -## Calculates dew point from the specified pressure, temp and rh -## fields. -##------------------------------------------------------------------------- - def calcTd(self, gh_c, T, t_BL030, stopo, topo, rh_BL030): - p_SFC = self.getSFCP(gh_c, stopo) - 15 * 100 - t_FHAG2 = t_BL030 - rh_FHAG2 = rh_BL030 - # at the model surface - sfce = rh_FHAG2 / 100 * self.esat(t_FHAG2) # partial pres of H2O - w = (0.622 * sfce) / ((p_SFC + 0.0001) / 100 - sfce)# meters / millibar - # at the true surface - tsfce = self.esat(self.FtoK(T)) # saturation vap.pres. at sfc - dpdz = 287.04 * t_FHAG2 / (p_SFC / 100 * 9.8) # meters / millibar - newp = p_SFC / 100 + (stopo - topo) / dpdz # adj. sfc press. - ws = (0.622 * tsfce) / (newp - tsfce) # sat. mixing ratio - rh = w / ws # calc relative humidity - # Finally, calculate the dew point - tsfcesat = rh * tsfce - tsfcesat = clip(tsfcesat, 0.00001, tsfcesat) - b = 26.66082 - log(tsfcesat) - td = (b - sqrt(b * b - 223.1986)) / 0.0182758048 - td = self.KtoF(td) - td = where(w > ws, T, td) - return td - -##------------------------------------------------------------------------- -## Calculates RH from the T and Td grids -##------------------------------------------------------------------------- - def calcRH(self, T, Td): - Tc = .556 * (T - 32.0) - Tdc = .556 * (Td - 32.0) - Vt = 6.11 * pow(10, (Tc * 7.5 / (Tc + 237.3))) - Vd = 6.11 * pow(10, (Tdc * 7.5 / (Tdc + 237.3))) - RH = (Vd / Vt) * 100.0 - # Return the new value - return RH - -##------------------------------------------------------------------------- -## Returns the maximum of the specified MaxRH and the RH grids -##-------------------------------------------------------------------------- - def calcMaxRH(self, RH, MaxRH): - if MaxRH is None: - return RH - return maximum(MaxRH, RH) - -##------------------------------------------------------------------------- -## Returns the minimum of the specified MinRH and RH grids -##-------------------------------------------------------------------------- - def calcMinRH(self, RH, MinRH): - if MinRH is None: - return RH - return minimum(MinRH, RH) - -##------------------------------------------------------------------------- -## Internal function that returns the surface temperature based on -## the specified geoPot. height and temperature cube. This function -## interpolates the temperature at elevation specified by the topo -## grid. -##------------------------------------------------------------------------- - def getSFCt(self, gh_c, t_c, topo): - sp = self.newGrid(-1) - for i in xrange(1, gh_c.shape[0]): - mask = logical_and(equal(sp, -1), greater_equal(gh_c[i], topo)) - sp[mask] = self.linear(gh_c[i], gh_c[i - 1], - t_c[i], t_c[i - 1], topo) - return sp - -##------------------------------------------------------------------------- -## Calculates the temperature at the elevation indicated in the topo -## grid. This tool simply interpolates the temperature value from -## model's isobaric temperature cube. -##------------------------------------------------------------------------- - def calcT(self, gh_c, t_c, topo): - tmb = self.newGrid(-1) - # calc sfc_temp at topo - for i in xrange(1, gh_c.shape[0]): - # interp temp in this layer - tval1 = self.linear(gh_c[i], gh_c[i - 1], t_c[i], t_c[i - 1], topo) - # assign temp to points in this layer - tmb = where(logical_and(equal(tmb, -1), greater(gh_c[i], topo)), - tval1, tmb) - ## convert from kelvin to fahrenheit - return self.KtoF(tmb) - -##------------------------------------------------------------------------- -## Calculates QPF from the total precip field out of the model -##------------------------------------------------------------------------- - def calcQPF(self, tp_SFC): - qpf = tp_SFC / 25.4 # convert from millimeters to inches - return qpf - - def calcSky(self, rh_c, gh_c, topo, pmsl_MSL): - return self.skyFromRH(rh_c, gh_c, topo, pmsl_MSL) - -##------------------------------------------------------------------------- -## Calculates Prob. of Precip. based on QPF and RH cube. Where there -## is QPF > 0 ramp the PoP from (0.01, 35%) to 100%. Then in areas -## of QPF < 0.2 raise the PoP if it's very humid. -##------------------------------------------------------------------------- - def calcPoP(self, gh_c, rh_c, QPF, topo): - rhavg = where(less(gh_c, topo), float32(-1), rh_c) - rhavg[greater(gh_c, topo + 5000 * 0.3048)] = -1 - count = not_equal(rhavg, -1) - rhavg[equal(rhavg, -1)] = 0 - count = add.reduce(count, 0, dtype=float32) - rhavg = add.reduce(rhavg, 0) - ## add this much based on humidity only - dpop = where(count, rhavg / (count + .001), 0) - 70.0 - dpop[less(dpop, -30)] = -30 - ## calculate the base PoP - pop = where(less(QPF, 0.02), QPF * 1000, QPF * 350 + 13) - pop += dpop # add the adjustment based on humidity - pop = clip(pop, 0, 100) # clip to 100% - return pop - -##------------------------------------------------------------------------- -## Calculates the Freezing level based on height and temperature -## cubes. Finds the height at which freezing occurs. -##------------------------------------------------------------------------- - def calcFzLevel(self, gh_c, t_c, topo): - fzl = self.newGrid(-1) - # for each level in the height cube, find the freezing level - for i in xrange(gh_c.shape[0]): - try: - val = gh_c[i - 1] + (gh_c[i] - gh_c[i - 1]) / (t_c[i] - t_c[i - 1])\ - * (273.15 - t_c[i - 1]) - except: - val = gh_c[i] - ## save the height value in fzl - fzl = where(logical_and(equal(fzl, -1), - less_equal(t_c[i], 273.15)), val, fzl) - - return fzl * 3.28 # convert to feet - -##------------------------------------------------------------------------- -## Calculates the Snow level based on wet-bulb zero height. -##------------------------------------------------------------------------- - def calcSnowLevel(self, gh_c, t_c, rh_c): - # Only use the levels that are >= freezind (plus one level) - # This is a performance and memory optimization - clipindex = 2 - for i in xrange(t_c.shape[0] - 1, -1, -1): - if maximum.reduce(maximum.reduce(t_c[i])) >= 273.15: - clipindex = i + 1 - break - gh_c = gh_c[:clipindex, :, :] - t_c = t_c[:clipindex, :, :] - rh_c = rh_c[:clipindex, :, :] - - snow = self.newGrid(-1) - # - # make pressure cube - # - pmb = ones_like(gh_c) - for i in xrange(gh_c.shape[0]): - pmb[i] = self.pres[i] - pmb = clip(pmb, 1, 1050) - # - # convert temps to C and limit to reasonable values - # - tc = t_c - 273.15 - tc = clip(tc, -120, 60) - # - # limit RH to reasonable values - # - rh = clip(rh_c, 0.5, 99.5) - # - # calculate the wetbulb temperatures - # (this is expensive - even in numeric python - and somewhat - # wasteful, since you do not need to calculate the wetbulb - # temp for all levels when it may cross zero way down toward - # the bottom. Nevertheless - all the gridpoints will cross - # zero at different levels - so you cannot know ahead of time - # how high up to calculate them. In the end - this was the - # most expedient way to code it - and it works - so I stuck - # with it. - # - wetb = self.Wetbulb(tc, rh, pmb) - tc = rh = pmb = None - # - # find the zero level - # - for i in xrange(1, gh_c.shape[0]): - try: - val = gh_c[i - 1] + (gh_c[i] - gh_c[i - 1]) / (wetb[i] - wetb[i - 1])\ - * (-wetb[i - 1]) - except: - val = gh_c[i] - snow = where(logical_and(equal(snow, -1), less_equal(wetb[i], 0)), - val, snow) - - # - # convert to feet - # - snow = snow * 3.28 - - return snow - -##------------------------------------------------------------------------- -## Calculates Snow amount based on the Temp, Freezing level, QPF, -## topo and Weather grid -##------------------------------------------------------------------------- - def calcSnowAmt(self, T, FzLevel, QPF, topo, Wx): - # figure out the snow to liquid ratio - snowr = T * -0.5 + 22.5 - snowr[less(T, 9)] = 20 - snowr[greater_equal(T, 30)] = 0 - # calc. snow amount based on the QPF and the ratio - snowamt = where(less_equal(FzLevel - 1000, topo * 3.28), - snowr * QPF, float32(0)) - # Only make snow at points where the weather is snow - snowmask = logical_or(equal(Wx[0], 1), equal(Wx[0], 3)) - snowmask = logical_or(snowmask, logical_or(equal(Wx[0], 7), - equal(Wx[0], 9))) - snowamt[logical_not(snowmask)] = 0 - - return snowamt - -##-------------------------------------------------------------------------- -## Calculate the Haines index based on the temp and RH cubes -## Define self.whichHainesIndex to be "HIGH", "MEDIUM", or "LOW". -## Default is "HIGH". -##-------------------------------------------------------------------------- - def calcHaines(self, t_c, rh_c): - return self.hainesIndex(self.whichHainesIndex, t_c, rh_c) - - -##------------------------------------------------------------------------- -## Internal function that returns a pressure from the geopotential -## height cube at an elevation specified by the topo grid. -##------------------------------------------------------------------------- - def getSFCP(self, gh_c, topo): - pc = [] - for i in self.pres: - pc = pc + [self.newGrid(i)] - pc = log(array(pc)) - sp = self.newGrid(-1) - for i in xrange(1, gh_c.shape[0]): - mask = logical_and(equal(sp, -1), greater_equal(gh_c[i], topo)) - sp = where(mask, self.linear(gh_c[i], gh_c[i - 1], - pc[i], pc[i - 1], topo), sp) - - sp = exp(sp) - return sp * 100 - -##------------------------------------------------------------------------- -## Calculates the mixing height for the given sfc temperature, -## temperature cube, height cube and topo -##------------------------------------------------------------------------- - def calcMixHgt(self, T, topo, t_c, gh_c): - mask = greater_equal(gh_c, topo) # points where height > topo - pt = [] - for i in xrange(len(self.pres)): # for each pres. level - p = self.newGrid(self.pres[i]) # get the pres. value in mb - tmp = self.ptemp(t_c[i], p) # calculate the pot. temp - pt = pt + [tmp] # add to the list - pt = array(pt) - pt[logical_not(mask)] = 0 - avg = add.accumulate(pt, 0) - count = add.accumulate(mask, 0) - mh = self.newGrid(-1) - # for each pres. level, calculate a running avg. of pot temp. - # As soon as the next point deviates from the running avg by - # more than 3 deg. C, interpolate to get the mixing height. - for i in xrange(1, avg.shape[0]): - runavg = avg[i] / (count[i] + .0001) # calc. running avg - diffpt = pt[i] - runavg - # calc. the interpolated mixing height - tmh = self.linear(pt[i], pt[i - 1], gh_c[i], gh_c[i - 1], runavg) - # assign new values if the difference is greater than 3 - mh = where(logical_and(logical_and(mask[i], equal(mh, -1)), - greater(diffpt, 3)), tmh, mh) - return (mh - topo) * 3.28 # convert to feet - -##------------------------------------------------------------------------- -## Converts the lowest available wind level from m/s to knots -##------------------------------------------------------------------------- - def calcWind(self, wind_BL030): - mag = wind_BL030[0] * 1.94 # get the wind speed and convert - dir = wind_BL030[1] # get wind dir - return (mag, dir) # assemble speed and dir into a tuple - -##------------------------------------------------------------------------- -## Calculates the wind at 3000 feet AGL. -##------------------------------------------------------------------------- - def calcFreeWind(self, gh_c, wind_c, topo): - wm = wind_c[0] - wd = wind_c[1] - # Make a grid that's topo + 3000 feet (914 meters) - fatopo = topo + 914.4 - mask = greater_equal(gh_c, fatopo) - # initialize the grids into which the value are stored - famag = self.newGrid(-1) - fadir = self.newGrid(-1) - # start at the bottom and store the first point we find that's - # above the topo + 3000 feet level. - for i in xrange(wind_c[0].shape[0]): - famag = where(logical_and(equal(famag, -1), mask[i]), wm[i], famag) - fadir = where(logical_and(equal(fadir, -1), mask[i]), wd[i], fadir) - fadir = clip(fadir, 0, 359.5) # clip the value to 0, 360 - famag = famag * 1.94 # convert to knots - return (famag, fadir) # return the tuple of grids - -##------------------------------------------------------------------------- -## Calculates the average wind vector in the mixed layer as defined -## by the mixing height. This function creates a mask that identifies -## all grid points between the ground and the mixing height and calculates -## a vector average of the wind field in that layer. -##------------------------------------------------------------------------- - def calcTransWind(self, MixHgt, wind_c, gh_c, topo): - nmh = MixHgt * 0.3048 # convert MixHt from feet -> meters - u, v = self._getUV(wind_c[0], wind_c[1]) # get the wind grids - # set a mask at points between the topo and topo + MixHt - mask = logical_and(greater_equal(gh_c, topo), - less_equal(gh_c, nmh + topo)) - # set the points outside the layer to zero - u[logical_not(mask)] = 0 - v[logical_not(mask)] = 0 - - mask = add.reduce(mask).astype(float32) # add up the number of set points vert. - mmask = mask + 0.0001 - # calculate the average value in the mixed layerlayer - u = where(mask, add.reduce(u) / mmask, float32(0)) - v = where(mask, add.reduce(v) / mmask, float32(0)) - # convert u, v to mag, dir - tmag, tdir = self._getMD(u, v) - tdir = clip(tdir, 0, 359.5) - tmag *= 1.94 # convert to knots - tmag.clip(0, 125, tmag) # clip speed to 125 knots - return (tmag, tdir) - -##------------------------------------------------------------------------- -## Uses a derivation of the Bourgouin allgorithm to calculate precipitation -## type, and other algorithms to determine the coverage and intensity. -## The Bourgoin technique figures out precip type from calculating how -## long a hydrometer is exposed to alternating layers of above zero (C) and -## below zero temperature layers. This tool calculates at each grid point -## which of the four Bourgouin cases apply. Then the appropriate algorithm -## is applied to that case that further refines the precip. type. Once the -## type is determined, other algorithms are used to determine the coverage -## and intensity. See the Weather and Forecasting Journal article Oct. 2000, -## "A Method to Determine Precipitation Types", by Pierre Bourgouin -##------------------------------------------------------------------------- - def calcWx(self, QPF, T, t_c, gh_c, stopo, topo, tp_SFC, cp_SFC): - p_SFC = self.getSFCP(gh_c, stopo) - gh_c = gh_c[:13, :, :] - t_c = t_c[:13, :, :] - T = self.FtoK(T) - p_SFC = p_SFC / 100 # sfc pres. in mb - pres = self.pres - a1 = self.empty() - a2 = self.empty() - a3 = self.empty() - aindex = self.empty() - # Go through the levels to identify each case type 0-3 - for i in xrange(1, gh_c.shape[0] - 1): - # get the sfc pres. and temp. - pbot = where(greater(gh_c[i - 1], topo), pres[i - 1], p_SFC) - tbot = where(greater(gh_c[i - 1], topo), t_c[i - 1], T) - # Calculate the area of this layer in Temp/pres coordinates - a11, a22, cross = self.getAreas(pbot, tbot, pres[i], t_c[i]) - topomask = greater(gh_c[i], topo) - a1 = where(logical_and(equal(aindex, 0), topomask), - a1 + a11, a1) - a2 = where(logical_and(equal(aindex, 1), topomask), - a2 + a11, a2) - a3 = where(logical_and(equal(aindex, 2), topomask), - a3 + a11, a3) - topomask = logical_and(topomask, cross) - aindex = where(topomask, aindex + 1, aindex) - a1 = where(logical_and(equal(aindex, 0), topomask), - a1 + a22, a1) - a2 = where(logical_and(equal(aindex, 1), topomask), - a2 + a22, a2) - a3 = where(logical_and(equal(aindex, 2), topomask), - a3 + a22, a3) - - # Now apply a different algorithm for each type - key = ['::::', - "Wide:S:-::", "Wide:R:-::", - "Wide:S:-::^Wide:R:-::", - 'Wide:ZR:-::', 'Wide:IP:-::', - 'Wide:ZR:-::^Wide:IP:-::', - "Sct:SW:-::", "Sct:RW:-::", - "Sct:SW:-::^Sct:RW:-::", - "Chc:ZR:-::", 'Chc:IP:-::', - 'Chc:ZR:-::^Chc:IP:-::'] - - # Case d (snow) - wx = self.empty(int8) - snowmask = equal(aindex, 0) - wx[logical_and(snowmask, greater(a1, 0))] = 2 - wx[logical_and(snowmask, less_equal(a1, 0))] = 1 - - # Case c (rain / snow / rainSnowMix) - srmask = equal(aindex, 1) - wx[logical_and(srmask, less(a1, 5.6))] = 1 - wx[logical_and(srmask, greater(a1, 13.2))] = 2 - wx[logical_and(srmask, - logical_and(greater_equal(a1, 5.6), - less(a1, 13.2)))] = 3 - - # Case a (Freezing Rain / Ice Pellets) - ipmask = equal(aindex, 2) - ipm = greater(a1, a2 * 0.66 + 66) - wx[logical_and(ipmask, ipm)] = 5 - zrm = less(a1, a2 * 0.66 + 46) - wx[logical_and(ipmask, zrm)] = 4 - zrm = logical_not(zrm) - ipm = logical_not(ipm) - wx[logical_and(ipmask, logical_and(zrm, ipm))] = 6 - - # Case b (Ice pellets / rain) - cmask = greater_equal(aindex, 3) - ipmask = logical_and(less(a3, 2), cmask) - wx[logical_and(ipmask, less(a1, 5.6))] = 1 - wx[logical_and(ipmask, greater(a1, 13.2))] = 2 - wx[logical_and(ipmask, logical_and(greater_equal(a1, 5.6), - less_equal(a1, 13.2)))] = 3 - - ipmask = logical_and(greater_equal(a3, 2), cmask) - wx[logical_and(ipmask, greater(a1, 66 + 0.66 * a2))] = 5 - wx[logical_and(ipmask, less(a1, 46 + 0.66 * a2))] = 4 - wx[logical_and(ipmask, logical_and(greater_equal(a1, 46 + 0.66 * a2), - less_equal(a1, 66 + 0.66 * a2)))] = 6 - - # Make showers (scattered/Chc) - convecMask = greater(cp_SFC / (tp_SFC + .001), 0.5) - wx[logical_and(not_equal(wx, 0), convecMask)] += 6 - - # Thunder - for i in xrange(len(key)): - tcov = string.split(key[i], ":")[0] - if tcov == "Chc" or tcov == "": - tcov = "Sct" - key.append(key[i] + "^" + tcov - + ":T:::") -# wx = where(less_equal(bli_BL0180, -3), wx + 13, wx) - - # No wx where no qpf - wx[less(QPF, 0.01)] = 0 - return(wx, key) - -##------------------------------------------------------------------------- -## Calculates chance of wetting rain based on QPF. -##------------------------------------------------------------------------- - def calcCWR(self, QPF): - m1 = less(QPF, 0.01) # all the places that are dry - m2 = greater_equal(QPF, 0.3) # all the places that are wet - # all the places that are 0.01 to 0.10 - m3 = logical_and(greater_equal(QPF, 0.01), less_equal(QPF, 0.1)) - # all the places that are 0.1 to 0.3 - m4 = logical_and(greater(QPF, 0.1), less(QPF, 0.3)) - # assign 0 to the dry grid point, 100 to the wet grid points, - # and a ramping function to all point in between - cwr = where(m1, float32(0), where(m2, float32(100), - where(m3, 444.4 * (QPF - 0.01) + 10, - where(m4, 250 * (QPF - 0.1) + 50, - QPF)))) - return cwr - -##------------------------------------------------------------------------- -## Calculates Lightning Activity Level based on total precip. -## convenctivePrecip, and 3-D relative humidity. -##------------------------------------------------------------------------- - def calcLAL(self, tp_SFC, cp_SFC, rh_c, rh_BL030): - cp_SFC = where(equal(cp_SFC, 0), float32(0.00001), cp_SFC) - lal = self.newGrid(1) - # Add one to lal if QPF > 0.5 - lal[logical_and(greater(cp_SFC, 0), greater(tp_SFC / cp_SFC, 0.5))] += 1 - # make an average rh field - midrh = add.reduce(rh_c[6:9], 0) / 3 - lal[logical_and(greater(midrh, 70), less(rh_BL030, 30))] += 1 - - # Add on to lal if lifted index is <-3 and another if <-5 - lal[greater(cp_SFC, 2.0)] += 1 - lal[greater(cp_SFC, 8.0)] += 1 - - return lal - - -def main(): - gfsLRForecaster().run() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1.py deleted file mode 100644 index 3b22c23490..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1.py +++ /dev/null @@ -1,108 +0,0 @@ -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## -# -# nwpsCG1.py - Joe Maloney 2016-07-08 -# -# Init module for all nwpsCG1 domains. Can also be used for nwpsCG2-5. -# -# SOFTWARE HISTORY -# Date Ticket# Engineer Description -# ------------ ---------- ----------- -------------------------- -# 07/08/2016 jmaloney Initial creation -# 12/06/2017 DCS20267 psantos Add rip current guidance: rip current -# prob, dune erosion prob and overwash prob. -# -## - -from Init import * -import os - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsCG1 model -## output. -## -##-------------------------------------------------------------------------- -class nwpsCG1Forecaster(Forecaster): - def __init__(self, srcdb, destdb): - Forecaster.__init__(self, srcdb, destdb) - -##-------------------------------------------------------------------------- -## Calculates wave height from the nwpsCG1 model. Converts to feet from meters -##-------------------------------------------------------------------------- - def calcWaveHeight(self, htsgw_SFC): - # Convert meters to feet - grid = htsgw_SFC * 3.281 - # Return the new value - return grid - -##-------------------------------------------------------------------------- -## Calculates sig wave height vector from the nwpsCG1 model. Converts to feet from meters -##-------------------------------------------------------------------------- - def calcPeakWaveDir(self, dirpw_SFC): - # use constant speed for display purpose only - mag = where(logical_and(less(dirpw_SFC, 360), greater(dirpw_SFC, 0)), float32(10.0), float32(-9999.0)) - dir = clip(dirpw_SFC, 0, 360) - return (mag,dir) - -##-------------------------------------------------------------------------- -## Calculates Swan Swell from nwpsCG1 model. Convert from meters to feet -##-------------------------------------------------------------------------- - def calcSwanSwell(self, swell_SFC): - grid = swell_SFC * 3.281 - return grid - -##-------------------------------------------------------------------------- -## Calculates Period from nwpsCG1 model. -##-------------------------------------------------------------------------- - def calcPeriod(self, perpw_SFC): - period = clip(perpw_SFC, 0, 25) - return period - -##-------------------------------------------------------------------------- -## Calculates Rip Current Probability from nwpsCG1 model. -##-------------------------------------------------------------------------- - def calcRipProb(self, ripcop_SFC): - grid = clip(ripcop_SFC, 0, 100) - return grid - -##-------------------------------------------------------------------------- -## Calculates Dune Erosion Probability from nwpsCG1 model. -##-------------------------------------------------------------------------- - def calcErosionProb(self, erosnp_SFC): - grid = clip(erosnp_SFC, 0, 100) - return grid - -##-------------------------------------------------------------------------- -## Calculates Dune Overwash Probability from nwpsCG1 model. -##-------------------------------------------------------------------------- - def calcOverwashProb(self, owashp_SFC): - grid = clip(owashp_SFC, 0, 100) - return grid - -##-------------------------------------------------------------------------- -## Notify user of receipt of nwpsCG1 data. -##-------------------------------------------------------------------------- - def notifyGFE(self, siteId): - chkfile = "/tmp/nwps/CG1" - chkfiledir = "/tmp/nwps" - try: - os.makedirs(chkfiledir) - except OSError: - pass - if not os.path.isfile(chkfile): - open(chkfile, 'a').close() - os.system('/awips2/GFESuite/bin/sendGfeMessage -s -m "WCOSS ' + siteId + ' SWAN WAVE GRIDS ARE NOW IN GFE"') - filemodtime = os.stat(chkfile).st_mtime - twominutesago = time.time() - 120 - if (twominutesago - filemodtime) > 0: - os.utime(chkfile, None) - os.system('/awips2/GFESuite/bin/sendGfeMessage -s -m "WCOSS ' + siteId + ' SWAN WAVE GRIDS ARE NOW IN GFE"') - -def main(): - nwpsCG1Forecaster().run() - diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1AER.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1AER.py deleted file mode 100644 index 34f437dd18..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1AER.py +++ /dev/null @@ -1,54 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsCG1AER - Joe Maloney 2016-07-18 -# -# Smart Init for nwpsCG1AER model. -# -## - -from Init import * -from nwpsCG1 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsCG1 model -## output. -##-------------------------------------------------------------------------- -class nwpsCG1AERForecaster(nwpsCG1Forecaster): - def __init__(self): - nwpsCG1Forecaster.__init__(self, "nwpsCG1AER", "nwpsCG1AER") - -def main(): - forecaster = nwpsCG1AERForecaster() - forecaster.run() - forecaster.notifyGFE('AER') - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1AFG.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1AFG.py deleted file mode 100644 index 4a07d515cb..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1AFG.py +++ /dev/null @@ -1,54 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsCG1AFG - Joe Maloney 2016-07-18 -# -# Smart Init for nwpsCG1AFG model. -# -## - -from Init import * -from nwpsCG1 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsCG1 model -## output. -##-------------------------------------------------------------------------- -class nwpsCG1AFGForecaster(nwpsCG1Forecaster): - def __init__(self): - nwpsCG1Forecaster.__init__(self, "nwpsCG1AFG", "nwpsCG1AFG") - -def main(): - forecaster = nwpsCG1AFGForecaster() - forecaster.run() - forecaster.notifyGFE('AFG') - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1AJK.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1AJK.py deleted file mode 100644 index 4258bf160f..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1AJK.py +++ /dev/null @@ -1,54 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsCG1AJK - Joe Maloney 2016-07-18 -# -# Smart Init for nwpsCG1AJK model. -# -## - -from Init import * -from nwpsCG1 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsCG1 model -## output. -##-------------------------------------------------------------------------- -class nwpsCG1AJKForecaster(nwpsCG1Forecaster): - def __init__(self): - nwpsCG1Forecaster.__init__(self, "nwpsCG1AJK", "nwpsCG1AJK") - -def main(): - forecaster = nwpsCG1AJKForecaster() - forecaster.run() - forecaster.notifyGFE('AJK') - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1AKQ.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1AKQ.py deleted file mode 100644 index 42bf3e8da0..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1AKQ.py +++ /dev/null @@ -1,54 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsCG1AKQ - Joe Maloney 2016-07-18 -# -# Smart Init for nwpsCG1AKQ model. -# -## - -from Init import * -from nwpsCG1 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsCG1 model -## output. -##-------------------------------------------------------------------------- -class nwpsCG1AKQForecaster(nwpsCG1Forecaster): - def __init__(self): - nwpsCG1Forecaster.__init__(self, "nwpsCG1AKQ", "nwpsCG1AKQ") - -def main(): - forecaster = nwpsCG1AKQForecaster() - forecaster.run() - forecaster.notifyGFE('AKQ') - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1ALU.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1ALU.py deleted file mode 100644 index 0d8fa24c99..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1ALU.py +++ /dev/null @@ -1,54 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsCG1ALU - Joe Maloney 2016-07-18 -# -# Smart Init for nwpsCG1ALU model. -# -## - -from Init import * -from nwpsCG1 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsCG1 model -## output. -##-------------------------------------------------------------------------- -class nwpsCG1ALUForecaster(nwpsCG1Forecaster): - def __init__(self): - nwpsCG1Forecaster.__init__(self, "nwpsCG1ALU", "nwpsCG1ALU") - -def main(): - forecaster = nwpsCG1ALUForecaster() - forecaster.run() - forecaster.notifyGFE('ALU') - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1BOX.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1BOX.py deleted file mode 100644 index 38078cbbe9..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1BOX.py +++ /dev/null @@ -1,54 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsCG1BOX - Joe Maloney 2016-07-18 -# -# Smart Init for nwpsCG1BOX model. -# -## - -from Init import * -from nwpsCG1 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsCG1 model -## output. -##-------------------------------------------------------------------------- -class nwpsCG1BOXForecaster(nwpsCG1Forecaster): - def __init__(self): - nwpsCG1Forecaster.__init__(self, "nwpsCG1BOX", "nwpsCG1BOX") - -def main(): - forecaster = nwpsCG1BOXForecaster() - forecaster.run() - forecaster.notifyGFE('BOX') - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1BRO.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1BRO.py deleted file mode 100644 index c5bec72912..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1BRO.py +++ /dev/null @@ -1,54 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsCG1BRO - Joe Maloney 2016-07-18 -# -# Smart Init for nwpsCG1BRO model. -# -## - -from Init import * -from nwpsCG1 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsCG1 model -## output. -##-------------------------------------------------------------------------- -class nwpsCG1BROForecaster(nwpsCG1Forecaster): - def __init__(self): - nwpsCG1Forecaster.__init__(self, "nwpsCG1BRO", "nwpsCG1BRO") - -def main(): - forecaster = nwpsCG1BROForecaster() - forecaster.run() - forecaster.notifyGFE('BRO') - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1CAR.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1CAR.py deleted file mode 100644 index 1d06a68d5c..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1CAR.py +++ /dev/null @@ -1,54 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsCG1CAR - Joe Maloney 2016-07-18 -# -# Smart Init for nwpsCG1CAR model. -# -## - -from Init import * -from nwpsCG1 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsCG1 model -## output. -##-------------------------------------------------------------------------- -class nwpsCG1CARForecaster(nwpsCG1Forecaster): - def __init__(self): - nwpsCG1Forecaster.__init__(self, "nwpsCG1CAR", "nwpsCG1CAR") - -def main(): - forecaster = nwpsCG1CARForecaster() - forecaster.run() - forecaster.notifyGFE('CAR') - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1CHS.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1CHS.py deleted file mode 100644 index 9031c6bdeb..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1CHS.py +++ /dev/null @@ -1,54 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsCG1CHS - Joe Maloney 2016-07-18 -# -# Smart Init for nwpsCG1CHS model. -# -## - -from Init import * -from nwpsCG1 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsCG1 model -## output. -##-------------------------------------------------------------------------- -class nwpsCG1CHSForecaster(nwpsCG1Forecaster): - def __init__(self): - nwpsCG1Forecaster.__init__(self, "nwpsCG1CHS", "nwpsCG1CHS") - -def main(): - forecaster = nwpsCG1CHSForecaster() - forecaster.run() - forecaster.notifyGFE('CHS') - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1CRP.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1CRP.py deleted file mode 100644 index 7abe54dfd5..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1CRP.py +++ /dev/null @@ -1,54 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsCG1CRP - Joe Maloney 2016-07-18 -# -# Smart Init for nwpsCG1CRP model. -# -## - -from Init import * -from nwpsCG1 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsCG1 model -## output. -##-------------------------------------------------------------------------- -class nwpsCG1CRPForecaster(nwpsCG1Forecaster): - def __init__(self): - nwpsCG1Forecaster.__init__(self, "nwpsCG1CRP", "nwpsCG1CRP") - -def main(): - forecaster = nwpsCG1CRPForecaster() - forecaster.run() - forecaster.notifyGFE('CRP') - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1EKA.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1EKA.py deleted file mode 100644 index 8218e1a64a..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1EKA.py +++ /dev/null @@ -1,54 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsCG1EKA - Joe Maloney 2016-07-18 -# -# Smart Init for nwpsCG1EKA model. -# -## - -from Init import * -from nwpsCG1 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsCG1 model -## output. -##-------------------------------------------------------------------------- -class nwpsCG1EKAForecaster(nwpsCG1Forecaster): - def __init__(self): - nwpsCG1Forecaster.__init__(self, "nwpsCG1EKA", "nwpsCG1EKA") - -def main(): - forecaster = nwpsCG1EKAForecaster() - forecaster.run() - forecaster.notifyGFE('EKA') - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1GUM.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1GUM.py deleted file mode 100644 index 744cfdfc5e..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1GUM.py +++ /dev/null @@ -1,54 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsCG1GUM - Joe Maloney 2016-07-18 -# -# Smart Init for nwpsCG1GUM model. -# -## - -from Init import * -from nwpsCG1 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsCG1 model -## output. -##-------------------------------------------------------------------------- -class nwpsCG1GUMForecaster(nwpsCG1Forecaster): - def __init__(self): - nwpsCG1Forecaster.__init__(self, "nwpsCG1GUM", "nwpsCG1GUM") - -def main(): - forecaster = nwpsCG1GUMForecaster() - forecaster.run() - forecaster.notifyGFE('GUM') - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1GYX.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1GYX.py deleted file mode 100644 index a69336a0f7..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1GYX.py +++ /dev/null @@ -1,54 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsCG1GYX - Joe Maloney 2016-07-18 -# -# Smart Init for nwpsCG1GYX model. -# -## - -from Init import * -from nwpsCG1 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsCG1 model -## output. -##-------------------------------------------------------------------------- -class nwpsCG1GYXForecaster(nwpsCG1Forecaster): - def __init__(self): - nwpsCG1Forecaster.__init__(self, "nwpsCG1GYX", "nwpsCG1GYX") - -def main(): - forecaster = nwpsCG1GYXForecaster() - forecaster.run() - forecaster.notifyGFE('GYX') - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1HFO.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1HFO.py deleted file mode 100644 index d78c68e629..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1HFO.py +++ /dev/null @@ -1,54 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsCG1HFO - Joe Maloney 2016-07-18 -# -# Smart Init for nwpsCG1HFO model. -# -## - -from Init import * -from nwpsCG1 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsCG1 model -## output. -##-------------------------------------------------------------------------- -class nwpsCG1HFOForecaster(nwpsCG1Forecaster): - def __init__(self): - nwpsCG1Forecaster.__init__(self, "nwpsCG1HFO", "nwpsCG1HFO") - -def main(): - forecaster = nwpsCG1HFOForecaster() - forecaster.run() - forecaster.notifyGFE('HFO') - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1HGX.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1HGX.py deleted file mode 100644 index 7764987402..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1HGX.py +++ /dev/null @@ -1,54 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsCG1HGX - Joe Maloney 2016-07-18 -# -# Smart Init for nwpsCG1HGX model. -# -## - -from Init import * -from nwpsCG1 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsCG1 model -## output. -##-------------------------------------------------------------------------- -class nwpsCG1HGXForecaster(nwpsCG1Forecaster): - def __init__(self): - nwpsCG1Forecaster.__init__(self, "nwpsCG1HGX", "nwpsCG1HGX") - -def main(): - forecaster = nwpsCG1HGXForecaster() - forecaster.run() - forecaster.notifyGFE('HGX') - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1ILM.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1ILM.py deleted file mode 100644 index e732f84f91..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1ILM.py +++ /dev/null @@ -1,54 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsCG1ILM - Joe Maloney 2016-07-18 -# -# Smart Init for nwpsCG1ILM model. -# -## - -from Init import * -from nwpsCG1 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsCG1 model -## output. -##-------------------------------------------------------------------------- -class nwpsCG1ILMForecaster(nwpsCG1Forecaster): - def __init__(self): - nwpsCG1Forecaster.__init__(self, "nwpsCG1ILM", "nwpsCG1ILM") - -def main(): - forecaster = nwpsCG1ILMForecaster() - forecaster.run() - forecaster.notifyGFE('ILM') - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1JAX.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1JAX.py deleted file mode 100644 index 14c34be65a..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1JAX.py +++ /dev/null @@ -1,54 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsCG1JAX - Joe Maloney 2016-07-18 -# -# Smart Init for nwpsCG1JAX model. -# -## - -from Init import * -from nwpsCG1 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsCG1 model -## output. -##-------------------------------------------------------------------------- -class nwpsCG1JAXForecaster(nwpsCG1Forecaster): - def __init__(self): - nwpsCG1Forecaster.__init__(self, "nwpsCG1JAX", "nwpsCG1JAX") - -def main(): - forecaster = nwpsCG1JAXForecaster() - forecaster.run() - forecaster.notifyGFE('JAX') - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1KEY.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1KEY.py deleted file mode 100644 index 051bd41cbb..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1KEY.py +++ /dev/null @@ -1,54 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsCG1KEY - Joe Maloney 2016-07-18 -# -# Smart Init for nwpsCG1KEY model. -# -## - -from Init import * -from nwpsCG1 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsCG1 model -## output. -##-------------------------------------------------------------------------- -class nwpsCG1KEYForecaster(nwpsCG1Forecaster): - def __init__(self): - nwpsCG1Forecaster.__init__(self, "nwpsCG1KEY", "nwpsCG1KEY") - -def main(): - forecaster = nwpsCG1KEYForecaster() - forecaster.run() - forecaster.notifyGFE('KEY') - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1LCH.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1LCH.py deleted file mode 100644 index a99e255ba9..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1LCH.py +++ /dev/null @@ -1,54 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsCG1LCH - Joe Maloney 2016-07-18 -# -# Smart Init for nwpsCG1LCH model. -# -## - -from Init import * -from nwpsCG1 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsCG1 model -## output. -##-------------------------------------------------------------------------- -class nwpsCG1LCHForecaster(nwpsCG1Forecaster): - def __init__(self): - nwpsCG1Forecaster.__init__(self, "nwpsCG1LCH", "nwpsCG1LCH") - -def main(): - forecaster = nwpsCG1LCHForecaster() - forecaster.run() - forecaster.notifyGFE('LCH') - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1LIX.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1LIX.py deleted file mode 100644 index 4b171cd176..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1LIX.py +++ /dev/null @@ -1,54 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsCG1LIX - Joe Maloney 2016-07-18 -# -# Smart Init for nwpsCG1LIX model. -# -## - -from Init import * -from nwpsCG1 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsCG1 model -## output. -##-------------------------------------------------------------------------- -class nwpsCG1LIXForecaster(nwpsCG1Forecaster): - def __init__(self): - nwpsCG1Forecaster.__init__(self, "nwpsCG1LIX", "nwpsCG1LIX") - -def main(): - forecaster = nwpsCG1LIXForecaster() - forecaster.run() - forecaster.notifyGFE('LIX') - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1LOX.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1LOX.py deleted file mode 100644 index 445f15e36d..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1LOX.py +++ /dev/null @@ -1,54 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsCG1LOX - Joe Maloney 2016-07-18 -# -# Smart Init for nwpsCG1LOX model. -# -## - -from Init import * -from nwpsCG1 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsCG1 model -## output. -##-------------------------------------------------------------------------- -class nwpsCG1LOXForecaster(nwpsCG1Forecaster): - def __init__(self): - nwpsCG1Forecaster.__init__(self, "nwpsCG1LOX", "nwpsCG1LOX") - -def main(): - forecaster = nwpsCG1LOXForecaster() - forecaster.run() - forecaster.notifyGFE('LOX') - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1LWX.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1LWX.py deleted file mode 100644 index df153612c3..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1LWX.py +++ /dev/null @@ -1,54 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsCG1LWX - Joe Maloney 2016-07-18 -# -# Smart Init for nwpsCG1LWX model. -# -## - -from Init import * -from nwpsCG1 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsCG1 model -## output. -##-------------------------------------------------------------------------- -class nwpsCG1LWXForecaster(nwpsCG1Forecaster): - def __init__(self): - nwpsCG1Forecaster.__init__(self, "nwpsCG1LWX", "nwpsCG1LWX") - -def main(): - forecaster = nwpsCG1LWXForecaster() - forecaster.run() - forecaster.notifyGFE('LWX') - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1MFL.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1MFL.py deleted file mode 100644 index 813df586fb..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1MFL.py +++ /dev/null @@ -1,54 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsCG1MFL - Joe Maloney 2016-07-18 -# -# Smart Init for nwpsCG1MFL model. -# -## - -from Init import * -from nwpsCG1 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsCG1 model -## output. -##-------------------------------------------------------------------------- -class nwpsCG1MFLForecaster(nwpsCG1Forecaster): - def __init__(self): - nwpsCG1Forecaster.__init__(self, "nwpsCG1MFL", "nwpsCG1MFL") - -def main(): - forecaster = nwpsCG1MFLForecaster() - forecaster.run() - forecaster.notifyGFE('MFL') - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1MFR.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1MFR.py deleted file mode 100644 index 8f017a9d8f..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1MFR.py +++ /dev/null @@ -1,54 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsCG1MFR - Joe Maloney 2016-07-18 -# -# Smart Init for nwpsCG1MFR model. -# -## - -from Init import * -from nwpsCG1 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsCG1 model -## output. -##-------------------------------------------------------------------------- -class nwpsCG1MFRForecaster(nwpsCG1Forecaster): - def __init__(self): - nwpsCG1Forecaster.__init__(self, "nwpsCG1MFR", "nwpsCG1MFR") - -def main(): - forecaster = nwpsCG1MFRForecaster() - forecaster.run() - forecaster.notifyGFE('MFR') - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1MHX.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1MHX.py deleted file mode 100644 index 5e5d9ad6cc..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1MHX.py +++ /dev/null @@ -1,54 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsCG1MHX - Joe Maloney 2016-07-18 -# -# Smart Init for nwpsCG1MHX model. -# -## - -from Init import * -from nwpsCG1 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsCG1 model -## output. -##-------------------------------------------------------------------------- -class nwpsCG1MHXForecaster(nwpsCG1Forecaster): - def __init__(self): - nwpsCG1Forecaster.__init__(self, "nwpsCG1MHX", "nwpsCG1MHX") - -def main(): - forecaster = nwpsCG1MHXForecaster() - forecaster.run() - forecaster.notifyGFE('MHX') - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1MLB.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1MLB.py deleted file mode 100644 index d4829bc608..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1MLB.py +++ /dev/null @@ -1,54 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsCG1MLB - Joe Maloney 2016-07-18 -# -# Smart Init for nwpsCG1MLB model. -# -## - -from Init import * -from nwpsCG1 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsCG1 model -## output. -##-------------------------------------------------------------------------- -class nwpsCG1MLBForecaster(nwpsCG1Forecaster): - def __init__(self): - nwpsCG1Forecaster.__init__(self, "nwpsCG1MLB", "nwpsCG1MLB") - -def main(): - forecaster = nwpsCG1MLBForecaster() - forecaster.run() - forecaster.notifyGFE('MLB') - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1MOB.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1MOB.py deleted file mode 100644 index c9fecaaa50..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1MOB.py +++ /dev/null @@ -1,54 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsCG1MOB - Joe Maloney 2016-07-18 -# -# Smart Init for nwpsCG1MOB model. -# -## - -from Init import * -from nwpsCG1 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsCG1 model -## output. -##-------------------------------------------------------------------------- -class nwpsCG1MOBForecaster(nwpsCG1Forecaster): - def __init__(self): - nwpsCG1Forecaster.__init__(self, "nwpsCG1MOB", "nwpsCG1MOB") - -def main(): - forecaster = nwpsCG1MOBForecaster() - forecaster.run() - forecaster.notifyGFE('MOB') - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1MTR.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1MTR.py deleted file mode 100644 index dd116f8578..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1MTR.py +++ /dev/null @@ -1,54 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsCG1MTR - Joe Maloney 2016-07-18 -# -# Smart Init for nwpsCG1MTR model. -# -## - -from Init import * -from nwpsCG1 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsCG1 model -## output. -##-------------------------------------------------------------------------- -class nwpsCG1MTRForecaster(nwpsCG1Forecaster): - def __init__(self): - nwpsCG1Forecaster.__init__(self, "nwpsCG1MTR", "nwpsCG1MTR") - -def main(): - forecaster = nwpsCG1MTRForecaster() - forecaster.run() - forecaster.notifyGFE('MTR') - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1OKX.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1OKX.py deleted file mode 100644 index b6880306c5..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1OKX.py +++ /dev/null @@ -1,54 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsCG1OKX - Joe Maloney 2016-07-18 -# -# Smart Init for nwpsCG1OKX model. -# -## - -from Init import * -from nwpsCG1 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsCG1 model -## output. -##-------------------------------------------------------------------------- -class nwpsCG1OKXForecaster(nwpsCG1Forecaster): - def __init__(self): - nwpsCG1Forecaster.__init__(self, "nwpsCG1OKX", "nwpsCG1OKX") - -def main(): - forecaster = nwpsCG1OKXForecaster() - forecaster.run() - forecaster.notifyGFE('OKX') - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1PHI.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1PHI.py deleted file mode 100644 index bcc0f5e2b2..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1PHI.py +++ /dev/null @@ -1,54 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsCG1PHI - Joe Maloney 2016-07-18 -# -# Smart Init for nwpsCG1PHI model. -# -## - -from Init import * -from nwpsCG1 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsCG1 model -## output. -##-------------------------------------------------------------------------- -class nwpsCG1PHIForecaster(nwpsCG1Forecaster): - def __init__(self): - nwpsCG1Forecaster.__init__(self, "nwpsCG1PHI", "nwpsCG1PHI") - -def main(): - forecaster = nwpsCG1PHIForecaster() - forecaster.run() - forecaster.notifyGFE('PHI') - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1PQR.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1PQR.py deleted file mode 100644 index cfaf335be0..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1PQR.py +++ /dev/null @@ -1,54 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsCG1PQR - Joe Maloney 2016-07-18 -# -# Smart Init for nwpsCG1PQR model. -# -## - -from Init import * -from nwpsCG1 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsCG1 model -## output. -##-------------------------------------------------------------------------- -class nwpsCG1PQRForecaster(nwpsCG1Forecaster): - def __init__(self): - nwpsCG1Forecaster.__init__(self, "nwpsCG1PQR", "nwpsCG1PQR") - -def main(): - forecaster = nwpsCG1PQRForecaster() - forecaster.run() - forecaster.notifyGFE('PQR') - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1SEW.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1SEW.py deleted file mode 100644 index e285755903..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1SEW.py +++ /dev/null @@ -1,54 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsCG1SEW - Joe Maloney 2016-07-18 -# -# Smart Init for nwpsCG1SEW model. -# -## - -from Init import * -from nwpsCG1 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsCG1 model -## output. -##-------------------------------------------------------------------------- -class nwpsCG1SEWForecaster(nwpsCG1Forecaster): - def __init__(self): - nwpsCG1Forecaster.__init__(self, "nwpsCG1SEW", "nwpsCG1SEW") - -def main(): - forecaster = nwpsCG1SEWForecaster() - forecaster.run() - forecaster.notifyGFE('SEW') - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1SGX.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1SGX.py deleted file mode 100644 index f0422591ce..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1SGX.py +++ /dev/null @@ -1,54 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsCG1SGX - Joe Maloney 2016-07-18 -# -# Smart Init for nwpsCG1SGX model. -# -## - -from Init import * -from nwpsCG1 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsCG1 model -## output. -##-------------------------------------------------------------------------- -class nwpsCG1SGXForecaster(nwpsCG1Forecaster): - def __init__(self): - nwpsCG1Forecaster.__init__(self, "nwpsCG1SGX", "nwpsCG1SGX") - -def main(): - forecaster = nwpsCG1SGXForecaster() - forecaster.run() - forecaster.notifyGFE('SGX') - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1SJU.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1SJU.py deleted file mode 100644 index a8fa78db5c..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1SJU.py +++ /dev/null @@ -1,54 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsCG1SJU - Joe Maloney 2016-07-18 -# -# Smart Init for nwpsCG1SJU model. -# -## - -from Init import * -from nwpsCG1 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsCG1 model -## output. -##-------------------------------------------------------------------------- -class nwpsCG1SJUForecaster(nwpsCG1Forecaster): - def __init__(self): - nwpsCG1Forecaster.__init__(self, "nwpsCG1SJU", "nwpsCG1SJU") - -def main(): - forecaster = nwpsCG1SJUForecaster() - forecaster.run() - forecaster.notifyGFE('SJU') - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1TAE.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1TAE.py deleted file mode 100644 index 4afcdf3830..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1TAE.py +++ /dev/null @@ -1,54 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsCG1TAE - Joe Maloney 2016-07-18 -# -# Smart Init for nwpsCG1TAE model. -# -## - -from Init import * -from nwpsCG1 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsCG1 model -## output. -##-------------------------------------------------------------------------- -class nwpsCG1TAEForecaster(nwpsCG1Forecaster): - def __init__(self): - nwpsCG1Forecaster.__init__(self, "nwpsCG1TAE", "nwpsCG1TAE") - -def main(): - forecaster = nwpsCG1TAEForecaster() - forecaster.run() - forecaster.notifyGFE('TAE') - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1TBW.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1TBW.py deleted file mode 100644 index 20c91b7a83..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsCG1TBW.py +++ /dev/null @@ -1,54 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsCG1TBW - Joe Maloney 2016-07-18 -# -# Smart Init for nwpsCG1TBW model. -# -## - -from Init import * -from nwpsCG1 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsCG1 model -## output. -##-------------------------------------------------------------------------- -class nwpsCG1TBWForecaster(nwpsCG1Forecaster): - def __init__(self): - nwpsCG1Forecaster.__init__(self, "nwpsCG1TBW", "nwpsCG1TBW") - -def main(): - forecaster = nwpsCG1TBWForecaster() - forecaster.run() - forecaster.notifyGFE('TBW') - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0.py deleted file mode 100644 index ea2c7712aa..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0.py +++ /dev/null @@ -1,122 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsTrkngCG0.py - Joe Maloney 2016-07-08 -# -# Init module for all nwpsTrkngCG0 domains. -# - -from Init import * -import os - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsCG1 model -## output. -## -##-------------------------------------------------------------------------- -class nwpsTrkngCG0Forecaster(Forecaster): - def __init__(self, srcdb, destdb): - Forecaster.__init__(self, srcdb, destdb) - -##-------------------------------------------------------------------------- -## Generic calc function for Period -##-------------------------------------------------------------------------- - def _calcPeriodN(self, swper): - return swper - -##-------------------------------------------------------------------------- -## Generic calc function for Wave. Convert magnitude from meters to feet -##-------------------------------------------------------------------------- - def _calcWaveN(self, swell, swdir): - mag = swell * 3.281 - dir = clip(swdir, 0, 359.5) - return (mag, dir) - -##-------------------------------------------------------------------------- -## Initialize Period1-9 -##-------------------------------------------------------------------------- - def calcPeriod1(self, swper_OSEQD1): - return self._calcPeriodN(swper_OSEQD1) - def calcPeriod2(self, swper_OSEQD2): - return self._calcPeriodN(swper_OSEQD2) - def calcPeriod3(self, swper_OSEQD3): - return self._calcPeriodN(swper_OSEQD3) - def calcPeriod4(self, swper_OSEQD4): - return self._calcPeriodN(swper_OSEQD4) - def calcPeriod5(self, swper_OSEQD5): - return self._calcPeriodN(swper_OSEQD5) - def calcPeriod6(self, swper_OSEQD6): - return self._calcPeriodN(swper_OSEQD6) - def calcPeriod7(self, swper_OSEQD7): - return self._calcPeriodN(swper_OSEQD7) - def calcPeriod8(self, swper_OSEQD8): - return self._calcPeriodN(swper_OSEQD8) - def calcPeriod9(self, swper_OSEQD9): - return self._calcPeriodN(swper_OSEQD9) - -##-------------------------------------------------------------------------- -## Initialize Wave1-9 -##-------------------------------------------------------------------------- - def calcWave1(self, swell_OSEQD1, swdir_OSEQD1): - return self._calcWaveN(swell_OSEQD1, swdir_OSEQD1) - def calcWave2(self, swell_OSEQD2, swdir_OSEQD2): - return self._calcWaveN(swell_OSEQD2, swdir_OSEQD2) - def calcWave3(self, swell_OSEQD3, swdir_OSEQD3): - return self._calcWaveN(swell_OSEQD3, swdir_OSEQD3) - def calcWave4(self, swell_OSEQD4, swdir_OSEQD4): - return self._calcWaveN(swell_OSEQD4, swdir_OSEQD4) - def calcWave5(self, swell_OSEQD5, swdir_OSEQD5): - return self._calcWaveN(swell_OSEQD5, swdir_OSEQD5) - def calcWave6(self, swell_OSEQD6, swdir_OSEQD6): - return self._calcWaveN(swell_OSEQD6, swdir_OSEQD6) - def calcWave7(self, swell_OSEQD7, swdir_OSEQD7): - return self._calcWaveN(swell_OSEQD7, swdir_OSEQD7) - def calcWave8(self, swell_OSEQD8, swdir_OSEQD8): - return self._calcWaveN(swell_OSEQD8, swdir_OSEQD8) - def calcWave9(self, swell_OSEQD9, swdir_OSEQD9): - return self._calcWaveN(swell_OSEQD9, swdir_OSEQD9) - - def notifyGFE(self, siteId): - chkfile = "/tmp/nwps/CGTrack" - chkfiledir = "/tmp/nwps" - try: - os.makedirs(chkfiledir) - except OSError: - pass - if not os.path.isfile(chkfile): - open(chkfile, 'a').close() - os.system('/awips2/GFESuite/bin/sendGfeMessage -s -m "WCOSS ' + siteId + ' TRACKING WAVE GRIDS ARE NOW IN GFE"') - filemodtime = os.stat(chkfile).st_mtime - twominutesago = time.time() - 120 - if (twominutesago - filemodtime) > 0: - os.utime(chkfile, None) - os.system('/awips2/GFESuite/bin/sendGfeMessage -s -m "WCOSS ' + siteId + ' TRACKING WAVE GRIDS ARE NOW IN GFE"') - - diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0AER.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0AER.py deleted file mode 100644 index dcce90fcad..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0AER.py +++ /dev/null @@ -1,55 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsTrkngCG0AER - Joe Maloney 2016-07-08 -# -# Smart Init for nwpsTrkngCG0AER model. -# -## - -from Init import * -from nwpsTrkngCG0 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsTrkngCG0 model -## output. -##-------------------------------------------------------------------------- -class nwpsTrkngCG0AERForecaster(nwpsTrkngCG0Forecaster): - def __init__(self): - nwpsTrkngCG0Forecaster.__init__(self, "nwpsTrkngCG0AER", "nwpsTrkngCG0AER") - -def main(): - forecaster = nwpsTrkngCG0AERForecaster() - forecaster.run() - forecaster.notifyGFE('AER') - - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0AFG.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0AFG.py deleted file mode 100644 index cc946293a2..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0AFG.py +++ /dev/null @@ -1,55 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsTrkngCG0AFG - Joe Maloney 2016-07-08 -# -# Smart Init for nwpsTrkngCG0AFG model. -# -## - -from Init import * -from nwpsTrkngCG0 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsTrkngCG0 model -## output. -##-------------------------------------------------------------------------- -class nwpsTrkngCG0AFGForecaster(nwpsTrkngCG0Forecaster): - def __init__(self): - nwpsTrkngCG0Forecaster.__init__(self, "nwpsTrkngCG0AFG", "nwpsTrkngCG0AFG") - -def main(): - forecaster = nwpsTrkngCG0AFGForecaster() - forecaster.run() - forecaster.notifyGFE('AFG') - - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0AJK.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0AJK.py deleted file mode 100644 index 9a08da61e9..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0AJK.py +++ /dev/null @@ -1,55 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsTrkngCG0AJK - Joe Maloney 2016-07-08 -# -# Smart Init for nwpsTrkngCG0AJK model. -# -## - -from Init import * -from nwpsTrkngCG0 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsTrkngCG0 model -## output. -##-------------------------------------------------------------------------- -class nwpsTrkngCG0AJKForecaster(nwpsTrkngCG0Forecaster): - def __init__(self): - nwpsTrkngCG0Forecaster.__init__(self, "nwpsTrkngCG0AJK", "nwpsTrkngCG0AJK") - -def main(): - forecaster = nwpsTrkngCG0AJKForecaster() - forecaster.run() - forecaster.notifyGFE('AJK') - - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0AKQ.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0AKQ.py deleted file mode 100644 index fc0a91015a..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0AKQ.py +++ /dev/null @@ -1,55 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsTrkngCG0AKQ - Joe Maloney 2016-07-08 -# -# Smart Init for nwpsTrkngCG0AKQ model. -# -## - -from Init import * -from nwpsTrkngCG0 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsTrkngCG0 model -## output. -##-------------------------------------------------------------------------- -class nwpsTrkngCG0AKQForecaster(nwpsTrkngCG0Forecaster): - def __init__(self): - nwpsTrkngCG0Forecaster.__init__(self, "nwpsTrkngCG0AKQ", "nwpsTrkngCG0AKQ") - -def main(): - forecaster = nwpsTrkngCG0AKQForecaster() - forecaster.run() - forecaster.notifyGFE('AKQ') - - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0ALU.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0ALU.py deleted file mode 100644 index bc65588153..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0ALU.py +++ /dev/null @@ -1,55 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsTrkngCG0ALU - Joe Maloney 2016-07-08 -# -# Smart Init for nwpsTrkngCG0ALU model. -# -## - -from Init import * -from nwpsTrkngCG0 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsTrkngCG0 model -## output. -##-------------------------------------------------------------------------- -class nwpsTrkngCG0ALUForecaster(nwpsTrkngCG0Forecaster): - def __init__(self): - nwpsTrkngCG0Forecaster.__init__(self, "nwpsTrkngCG0ALU", "nwpsTrkngCG0ALU") - -def main(): - forecaster = nwpsTrkngCG0ALUForecaster() - forecaster.run() - forecaster.notifyGFE('ALU') - - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0BOX.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0BOX.py deleted file mode 100644 index 1a5dfd0de6..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0BOX.py +++ /dev/null @@ -1,55 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsTrkngCG0BOX - Joe Maloney 2016-07-08 -# -# Smart Init for nwpsTrkngCG0BOX model. -# -## - -from Init import * -from nwpsTrkngCG0 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsTrkngCG0 model -## output. -##-------------------------------------------------------------------------- -class nwpsTrkngCG0BOXForecaster(nwpsTrkngCG0Forecaster): - def __init__(self): - nwpsTrkngCG0Forecaster.__init__(self, "nwpsTrkngCG0BOX", "nwpsTrkngCG0BOX") - -def main(): - forecaster = nwpsTrkngCG0BOXForecaster() - forecaster.run() - forecaster.notifyGFE('BOX') - - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0BRO.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0BRO.py deleted file mode 100644 index f454453c26..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0BRO.py +++ /dev/null @@ -1,55 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsTrkngCG0BRO - Joe Maloney 2016-07-08 -# -# Smart Init for nwpsTrkngCG0BRO model. -# -## - -from Init import * -from nwpsTrkngCG0 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsTrkngCG0 model -## output. -##-------------------------------------------------------------------------- -class nwpsTrkngCG0BROForecaster(nwpsTrkngCG0Forecaster): - def __init__(self): - nwpsTrkngCG0Forecaster.__init__(self, "nwpsTrkngCG0BRO", "nwpsTrkngCG0BRO") - -def main(): - forecaster = nwpsTrkngCG0BROForecaster() - forecaster.run() - forecaster.notifyGFE('BRO') - - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0CAR.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0CAR.py deleted file mode 100644 index f23012851d..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0CAR.py +++ /dev/null @@ -1,55 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsTrkngCG0CAR - Joe Maloney 2016-07-08 -# -# Smart Init for nwpsTrkngCG0CAR model. -# -## - -from Init import * -from nwpsTrkngCG0 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsTrkngCG0 model -## output. -##-------------------------------------------------------------------------- -class nwpsTrkngCG0CARForecaster(nwpsTrkngCG0Forecaster): - def __init__(self): - nwpsTrkngCG0Forecaster.__init__(self, "nwpsTrkngCG0CAR", "nwpsTrkngCG0CAR") - -def main(): - forecaster = nwpsTrkngCG0CARForecaster() - forecaster.run() - forecaster.notifyGFE('CAR') - - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0CHS.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0CHS.py deleted file mode 100644 index 26963676ca..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0CHS.py +++ /dev/null @@ -1,55 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsTrkngCG0CHS - Joe Maloney 2016-07-08 -# -# Smart Init for nwpsTrkngCG0CHS model. -# -## - -from Init import * -from nwpsTrkngCG0 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsTrkngCG0 model -## output. -##-------------------------------------------------------------------------- -class nwpsTrkngCG0CHSForecaster(nwpsTrkngCG0Forecaster): - def __init__(self): - nwpsTrkngCG0Forecaster.__init__(self, "nwpsTrkngCG0CHS", "nwpsTrkngCG0CHS") - -def main(): - forecaster = nwpsTrkngCG0CHSForecaster() - forecaster.run() - forecaster.notifyGFE('CHS') - - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0CRP.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0CRP.py deleted file mode 100644 index 94004eda9e..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0CRP.py +++ /dev/null @@ -1,55 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsTrkngCG0CRP - Joe Maloney 2016-07-08 -# -# Smart Init for nwpsTrkngCG0CRP model. -# -## - -from Init import * -from nwpsTrkngCG0 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsTrkngCG0 model -## output. -##-------------------------------------------------------------------------- -class nwpsTrkngCG0CRPForecaster(nwpsTrkngCG0Forecaster): - def __init__(self): - nwpsTrkngCG0Forecaster.__init__(self, "nwpsTrkngCG0CRP", "nwpsTrkngCG0CRP") - -def main(): - forecaster = nwpsTrkngCG0CRPForecaster() - forecaster.run() - forecaster.notifyGFE('CRP') - - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0EKA.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0EKA.py deleted file mode 100644 index e352f3f836..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0EKA.py +++ /dev/null @@ -1,55 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsTrkngCG0EKA - Joe Maloney 2016-07-08 -# -# Smart Init for nwpsTrkngCG0EKA model. -# -## - -from Init import * -from nwpsTrkngCG0 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsTrkngCG0 model -## output. -##-------------------------------------------------------------------------- -class nwpsTrkngCG0EKAForecaster(nwpsTrkngCG0Forecaster): - def __init__(self): - nwpsTrkngCG0Forecaster.__init__(self, "nwpsTrkngCG0EKA", "nwpsTrkngCG0EKA") - -def main(): - forecaster = nwpsTrkngCG0EKAForecaster() - forecaster.run() - forecaster.notifyGFE('EKA') - - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0GUM.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0GUM.py deleted file mode 100644 index e77aa46153..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0GUM.py +++ /dev/null @@ -1,55 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsTrkngCG0GUM - Joe Maloney 2016-07-08 -# -# Smart Init for nwpsTrkngCG0GUM model. -# -## - -from Init import * -from nwpsTrkngCG0 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsTrkngCG0 model -## output. -##-------------------------------------------------------------------------- -class nwpsTrkngCG0GUMForecaster(nwpsTrkngCG0Forecaster): - def __init__(self): - nwpsTrkngCG0Forecaster.__init__(self, "nwpsTrkngCG0GUM", "nwpsTrkngCG0GUM") - -def main(): - forecaster = nwpsTrkngCG0GUMForecaster() - forecaster.run() - forecaster.notifyGFE('GUM') - - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0GYX.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0GYX.py deleted file mode 100644 index 0c9a5f1c51..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0GYX.py +++ /dev/null @@ -1,55 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsTrkngCG0GYX - Joe Maloney 2016-07-08 -# -# Smart Init for nwpsTrkngCG0GYX model. -# -## - -from Init import * -from nwpsTrkngCG0 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsTrkngCG0 model -## output. -##-------------------------------------------------------------------------- -class nwpsTrkngCG0GYXForecaster(nwpsTrkngCG0Forecaster): - def __init__(self): - nwpsTrkngCG0Forecaster.__init__(self, "nwpsTrkngCG0GYX", "nwpsTrkngCG0GYX") - -def main(): - forecaster = nwpsTrkngCG0GYXForecaster() - forecaster.run() - forecaster.notifyGFE('GYX') - - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0HFO.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0HFO.py deleted file mode 100644 index 3539f23eb9..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0HFO.py +++ /dev/null @@ -1,55 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsTrkngCG0HFO - Joe Maloney 2016-07-08 -# -# Smart Init for nwpsTrkngCG0HFO model. -# -## - -from Init import * -from nwpsTrkngCG0 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsTrkngCG0 model -## output. -##-------------------------------------------------------------------------- -class nwpsTrkngCG0HFOForecaster(nwpsTrkngCG0Forecaster): - def __init__(self): - nwpsTrkngCG0Forecaster.__init__(self, "nwpsTrkngCG0HFO", "nwpsTrkngCG0HFO") - -def main(): - forecaster = nwpsTrkngCG0HFOForecaster() - forecaster.run() - forecaster.notifyGFE('HFO') - - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0HGX.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0HGX.py deleted file mode 100644 index f74eee97f5..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0HGX.py +++ /dev/null @@ -1,55 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsTrkngCG0HGX - Joe Maloney 2016-07-08 -# -# Smart Init for nwpsTrkngCG0HGX model. -# -## - -from Init import * -from nwpsTrkngCG0 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsTrkngCG0 model -## output. -##-------------------------------------------------------------------------- -class nwpsTrkngCG0HGXForecaster(nwpsTrkngCG0Forecaster): - def __init__(self): - nwpsTrkngCG0Forecaster.__init__(self, "nwpsTrkngCG0HGX", "nwpsTrkngCG0HGX") - -def main(): - forecaster = nwpsTrkngCG0HGXForecaster() - forecaster.run() - forecaster.notifyGFE('HGX') - - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0ILM.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0ILM.py deleted file mode 100644 index dacf4f61b8..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0ILM.py +++ /dev/null @@ -1,55 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsTrkngCG0ILM - Joe Maloney 2016-07-08 -# -# Smart Init for nwpsTrkngCG0ILM model. -# -## - -from Init import * -from nwpsTrkngCG0 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsTrkngCG0 model -## output. -##-------------------------------------------------------------------------- -class nwpsTrkngCG0ILMForecaster(nwpsTrkngCG0Forecaster): - def __init__(self): - nwpsTrkngCG0Forecaster.__init__(self, "nwpsTrkngCG0ILM", "nwpsTrkngCG0ILM") - -def main(): - forecaster = nwpsTrkngCG0ILMForecaster() - forecaster.run() - forecaster.notifyGFE('ILM') - - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0JAX.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0JAX.py deleted file mode 100644 index 13c5bd92b8..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0JAX.py +++ /dev/null @@ -1,55 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsTrkngCG0JAX - Joe Maloney 2016-07-08 -# -# Smart Init for nwpsTrkngCG0JAX model. -# -## - -from Init import * -from nwpsTrkngCG0 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsTrkngCG0 model -## output. -##-------------------------------------------------------------------------- -class nwpsTrkngCG0JAXForecaster(nwpsTrkngCG0Forecaster): - def __init__(self): - nwpsTrkngCG0Forecaster.__init__(self, "nwpsTrkngCG0JAX", "nwpsTrkngCG0JAX") - -def main(): - forecaster = nwpsTrkngCG0JAXForecaster() - forecaster.run() - forecaster.notifyGFE('JAX') - - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0KEY.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0KEY.py deleted file mode 100644 index 21dad678ee..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0KEY.py +++ /dev/null @@ -1,55 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsTrkngCG0KEY - Joe Maloney 2016-07-08 -# -# Smart Init for nwpsTrkngCG0KEY model. -# -## - -from Init import * -from nwpsTrkngCG0 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsTrkngCG0 model -## output. -##-------------------------------------------------------------------------- -class nwpsTrkngCG0KEYForecaster(nwpsTrkngCG0Forecaster): - def __init__(self): - nwpsTrkngCG0Forecaster.__init__(self, "nwpsTrkngCG0KEY", "nwpsTrkngCG0KEY") - -def main(): - forecaster = nwpsTrkngCG0KEYForecaster() - forecaster.run() - forecaster.notifyGFE('KEY') - - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0LCH.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0LCH.py deleted file mode 100644 index 6b6a04274d..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0LCH.py +++ /dev/null @@ -1,55 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsTrkngCG0LCH - Joe Maloney 2016-07-08 -# -# Smart Init for nwpsTrkngCG0LCH model. -# -## - -from Init import * -from nwpsTrkngCG0 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsTrkngCG0 model -## output. -##-------------------------------------------------------------------------- -class nwpsTrkngCG0LCHForecaster(nwpsTrkngCG0Forecaster): - def __init__(self): - nwpsTrkngCG0Forecaster.__init__(self, "nwpsTrkngCG0LCH", "nwpsTrkngCG0LCH") - -def main(): - forecaster = nwpsTrkngCG0LCHForecaster() - forecaster.run() - forecaster.notifyGFE('LCH') - - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0LIX.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0LIX.py deleted file mode 100644 index c54785c017..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0LIX.py +++ /dev/null @@ -1,55 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsTrkngCG0LIX - Joe Maloney 2016-07-08 -# -# Smart Init for nwpsTrkngCG0LIX model. -# -## - -from Init import * -from nwpsTrkngCG0 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsTrkngCG0 model -## output. -##-------------------------------------------------------------------------- -class nwpsTrkngCG0LIXForecaster(nwpsTrkngCG0Forecaster): - def __init__(self): - nwpsTrkngCG0Forecaster.__init__(self, "nwpsTrkngCG0LIX", "nwpsTrkngCG0LIX") - -def main(): - forecaster = nwpsTrkngCG0LIXForecaster() - forecaster.run() - forecaster.notifyGFE('LIX') - - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0LOX.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0LOX.py deleted file mode 100644 index 983b26b6d3..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0LOX.py +++ /dev/null @@ -1,55 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsTrkngCG0LOX - Joe Maloney 2016-07-08 -# -# Smart Init for nwpsTrkngCG0LOX model. -# -## - -from Init import * -from nwpsTrkngCG0 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsTrkngCG0 model -## output. -##-------------------------------------------------------------------------- -class nwpsTrkngCG0LOXForecaster(nwpsTrkngCG0Forecaster): - def __init__(self): - nwpsTrkngCG0Forecaster.__init__(self, "nwpsTrkngCG0LOX", "nwpsTrkngCG0LOX") - -def main(): - forecaster = nwpsTrkngCG0LOXForecaster() - forecaster.run() - forecaster.notifyGFE('LOX') - - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0MFL.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0MFL.py deleted file mode 100644 index 52be278ade..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0MFL.py +++ /dev/null @@ -1,55 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsTrkngCG0MFL - Joe Maloney 2016-07-08 -# -# Smart Init for nwpsTrkngCG0MFL model. -# -## - -from Init import * -from nwpsTrkngCG0 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsTrkngCG0 model -## output. -##-------------------------------------------------------------------------- -class nwpsTrkngCG0MFLForecaster(nwpsTrkngCG0Forecaster): - def __init__(self): - nwpsTrkngCG0Forecaster.__init__(self, "nwpsTrkngCG0MFL", "nwpsTrkngCG0MFL") - -def main(): - forecaster = nwpsTrkngCG0MFLForecaster() - forecaster.run() - forecaster.notifyGFE('MFL') - - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0MFR.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0MFR.py deleted file mode 100644 index e1f49f983c..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0MFR.py +++ /dev/null @@ -1,55 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsTrkngCG0MFR - Joe Maloney 2016-07-08 -# -# Smart Init for nwpsTrkngCG0MFR model. -# -## - -from Init import * -from nwpsTrkngCG0 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsTrkngCG0 model -## output. -##-------------------------------------------------------------------------- -class nwpsTrkngCG0MFRForecaster(nwpsTrkngCG0Forecaster): - def __init__(self): - nwpsTrkngCG0Forecaster.__init__(self, "nwpsTrkngCG0MFR", "nwpsTrkngCG0MFR") - -def main(): - forecaster = nwpsTrkngCG0MFRForecaster() - forecaster.run() - forecaster.notifyGFE('MFR') - - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0MHX.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0MHX.py deleted file mode 100644 index 3728dc5b7c..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0MHX.py +++ /dev/null @@ -1,55 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsTrkngCG0MHX - Joe Maloney 2016-07-08 -# -# Smart Init for nwpsTrkngCG0MHX model. -# -## - -from Init import * -from nwpsTrkngCG0 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsTrkngCG0 model -## output. -##-------------------------------------------------------------------------- -class nwpsTrkngCG0MHXForecaster(nwpsTrkngCG0Forecaster): - def __init__(self): - nwpsTrkngCG0Forecaster.__init__(self, "nwpsTrkngCG0MHX", "nwpsTrkngCG0MHX") - -def main(): - forecaster = nwpsTrkngCG0MHXForecaster() - forecaster.run() - forecaster.notifyGFE('MHX') - - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0MLB.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0MLB.py deleted file mode 100644 index 6cff19fc6e..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0MLB.py +++ /dev/null @@ -1,55 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsTrkngCG0MLB - Joe Maloney 2016-07-08 -# -# Smart Init for nwpsTrkngCG0MLB model. -# -## - -from Init import * -from nwpsTrkngCG0 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsTrkngCG0 model -## output. -##-------------------------------------------------------------------------- -class nwpsTrkngCG0MLBForecaster(nwpsTrkngCG0Forecaster): - def __init__(self): - nwpsTrkngCG0Forecaster.__init__(self, "nwpsTrkngCG0MLB", "nwpsTrkngCG0MLB") - -def main(): - forecaster = nwpsTrkngCG0MLBForecaster() - forecaster.run() - forecaster.notifyGFE('MLB') - - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0MOB.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0MOB.py deleted file mode 100644 index b21729bfe6..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0MOB.py +++ /dev/null @@ -1,55 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsTrkngCG0MOB - Joe Maloney 2016-07-08 -# -# Smart Init for nwpsTrkngCG0MOB model. -# -## - -from Init import * -from nwpsTrkngCG0 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsTrkngCG0 model -## output. -##-------------------------------------------------------------------------- -class nwpsTrkngCG0MOBForecaster(nwpsTrkngCG0Forecaster): - def __init__(self): - nwpsTrkngCG0Forecaster.__init__(self, "nwpsTrkngCG0MOB", "nwpsTrkngCG0MOB") - -def main(): - forecaster = nwpsTrkngCG0MOBForecaster() - forecaster.run() - forecaster.notifyGFE('MOB') - - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0MTR.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0MTR.py deleted file mode 100644 index cf13c60e24..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0MTR.py +++ /dev/null @@ -1,55 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsTrkngCG0MTR - Joe Maloney 2016-07-08 -# -# Smart Init for nwpsTrkngCG0MTR model. -# -## - -from Init import * -from nwpsTrkngCG0 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsTrkngCG0 model -## output. -##-------------------------------------------------------------------------- -class nwpsTrkngCG0MTRForecaster(nwpsTrkngCG0Forecaster): - def __init__(self): - nwpsTrkngCG0Forecaster.__init__(self, "nwpsTrkngCG0MTR", "nwpsTrkngCG0MTR") - -def main(): - forecaster = nwpsTrkngCG0MTRForecaster() - forecaster.run() - forecaster.notifyGFE('MTR') - - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0OKX.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0OKX.py deleted file mode 100644 index 69fad2f675..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0OKX.py +++ /dev/null @@ -1,55 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsTrkngCG0OKX - Joe Maloney 2016-07-08 -# -# Smart Init for nwpsTrkngCG0OKX model. -# -## - -from Init import * -from nwpsTrkngCG0 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsTrkngCG0 model -## output. -##-------------------------------------------------------------------------- -class nwpsTrkngCG0OKXForecaster(nwpsTrkngCG0Forecaster): - def __init__(self): - nwpsTrkngCG0Forecaster.__init__(self, "nwpsTrkngCG0OKX", "nwpsTrkngCG0OKX") - -def main(): - forecaster = nwpsTrkngCG0OKXForecaster() - forecaster.run() - forecaster.notifyGFE('OKX') - - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0PHI.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0PHI.py deleted file mode 100644 index 050ad8475b..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0PHI.py +++ /dev/null @@ -1,55 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsTrkngCG0PHI - Joe Maloney 2016-07-08 -# -# Smart Init for nwpsTrkngCG0PHI model. -# -## - -from Init import * -from nwpsTrkngCG0 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsTrkngCG0 model -## output. -##-------------------------------------------------------------------------- -class nwpsTrkngCG0PHIForecaster(nwpsTrkngCG0Forecaster): - def __init__(self): - nwpsTrkngCG0Forecaster.__init__(self, "nwpsTrkngCG0PHI", "nwpsTrkngCG0PHI") - -def main(): - forecaster = nwpsTrkngCG0PHIForecaster() - forecaster.run() - forecaster.notifyGFE('PHI') - - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0PQR.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0PQR.py deleted file mode 100644 index 1edca509c6..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0PQR.py +++ /dev/null @@ -1,55 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsTrkngCG0PQR - Joe Maloney 2016-07-08 -# -# Smart Init for nwpsTrkngCG0PQR model. -# -## - -from Init import * -from nwpsTrkngCG0 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsTrkngCG0 model -## output. -##-------------------------------------------------------------------------- -class nwpsTrkngCG0PQRForecaster(nwpsTrkngCG0Forecaster): - def __init__(self): - nwpsTrkngCG0Forecaster.__init__(self, "nwpsTrkngCG0PQR", "nwpsTrkngCG0PQR") - -def main(): - forecaster = nwpsTrkngCG0PQRForecaster() - forecaster.run() - forecaster.notifyGFE('PQR') - - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0SEW.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0SEW.py deleted file mode 100644 index fec8286771..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0SEW.py +++ /dev/null @@ -1,55 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsTrkngCG0SEW - Joe Maloney 2016-07-08 -# -# Smart Init for nwpsTrkngCG0SEW model. -# -## - -from Init import * -from nwpsTrkngCG0 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsTrkngCG0 model -## output. -##-------------------------------------------------------------------------- -class nwpsTrkngCG0SEWForecaster(nwpsTrkngCG0Forecaster): - def __init__(self): - nwpsTrkngCG0Forecaster.__init__(self, "nwpsTrkngCG0SEW", "nwpsTrkngCG0SEW") - -def main(): - forecaster = nwpsTrkngCG0SEWForecaster() - forecaster.run() - forecaster.notifyGFE('SEW') - - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0SGX.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0SGX.py deleted file mode 100644 index e6df6e7bca..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0SGX.py +++ /dev/null @@ -1,55 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsTrkngCG0SGX - Joe Maloney 2016-07-08 -# -# Smart Init for nwpsTrkngCG0SGX model. -# -## - -from Init import * -from nwpsTrkngCG0 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsTrkngCG0 model -## output. -##-------------------------------------------------------------------------- -class nwpsTrkngCG0SGXForecaster(nwpsTrkngCG0Forecaster): - def __init__(self): - nwpsTrkngCG0Forecaster.__init__(self, "nwpsTrkngCG0SGX", "nwpsTrkngCG0SGX") - -def main(): - forecaster = nwpsTrkngCG0SGXForecaster() - forecaster.run() - forecaster.notifyGFE('SGX') - - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0SJU.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0SJU.py deleted file mode 100644 index eae35f2efa..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0SJU.py +++ /dev/null @@ -1,55 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsTrkngCG0SJU - Joe Maloney 2016-07-08 -# -# Smart Init for nwpsTrkngCG0SJU model. -# -## - -from Init import * -from nwpsTrkngCG0 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsTrkngCG0 model -## output. -##-------------------------------------------------------------------------- -class nwpsTrkngCG0SJUForecaster(nwpsTrkngCG0Forecaster): - def __init__(self): - nwpsTrkngCG0Forecaster.__init__(self, "nwpsTrkngCG0SJU", "nwpsTrkngCG0SJU") - -def main(): - forecaster = nwpsTrkngCG0SJUForecaster() - forecaster.run() - forecaster.notifyGFE('SJU') - - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0TAE.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0TAE.py deleted file mode 100644 index 342589157a..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0TAE.py +++ /dev/null @@ -1,55 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsTrkngCG0TAE - Joe Maloney 2016-07-08 -# -# Smart Init for nwpsTrkngCG0TAE model. -# -## - -from Init import * -from nwpsTrkngCG0 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsTrkngCG0 model -## output. -##-------------------------------------------------------------------------- -class nwpsTrkngCG0TAEForecaster(nwpsTrkngCG0Forecaster): - def __init__(self): - nwpsTrkngCG0Forecaster.__init__(self, "nwpsTrkngCG0TAE", "nwpsTrkngCG0TAE") - -def main(): - forecaster = nwpsTrkngCG0TAEForecaster() - forecaster.run() - forecaster.notifyGFE('TAE') - - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0TBW.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0TBW.py deleted file mode 100644 index 1416f73926..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/smartinit/nwpsTrkngCG0TBW.py +++ /dev/null @@ -1,55 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -# -# This file can be subclassed to override behavior. Please see the -# Configuration Guides->Smart Initialization Configuration section of the GFE -# Online Help for guidance on creating a new smart init -## - -## -# -# nwpsTrkngCG0TBW - Joe Maloney 2016-07-08 -# -# Smart Init for nwpsTrkngCG0TBW model. -# -## - -from Init import * -from nwpsTrkngCG0 import * - -##-------------------------------------------------------------------------- -## Module that calculates surface weather elements from nwpsTrkngCG0 model -## output. -##-------------------------------------------------------------------------- -class nwpsTrkngCG0TBWForecaster(nwpsTrkngCG0Forecaster): - def __init__(self): - nwpsTrkngCG0Forecaster.__init__(self, "nwpsTrkngCG0TBW", "nwpsTrkngCG0TBW") - -def main(): - forecaster = nwpsTrkngCG0TBWForecaster() - forecaster.run() - forecaster.notifyGFE('TBW') - - -if __name__ == "__main__": - main() diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/textproducts/templates/product/AFD.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/textproducts/templates/product/AFD.py deleted file mode 100644 index 8d7bf6f979..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/textproducts/templates/product/AFD.py +++ /dev/null @@ -1,1113 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## -# -# SOFTWARE HISTORY -# Date Ticket# Engineer Description -# ------------ ---------- ----------- -------------------------- -# Oct 20, 2014 #3685 randerso Changed to support mixed case -# -## - -## -# This is a base file that is not intended to be overridden. -## - -#------------------------------------------------------------------------- -# File Name: AFD.py -# Description: This product creates a Area Forecast Discussion product. -# Contributed by Eastern Region (Jim Noel, Rob Radzanowski) and -# Southern Region (Brian Curran) -#------------------------------------------------------------------------- -# Copying: -# This software is in the public domain, furnished "as is", without technical -# support, and with no warranty, express or implied, as to its usefulness for -# any purpose. -#------------------------------------------------------------------------- -# Standard and Local file names and Locations: -# AFD, AFD___Definition, AFD__Overrides -#------------------------------------------------------------------------- -# Weather Elements Needed: MinT, MaxT, PoP -#------------------------------------------------------------------------- -# Edit Areas Needed: Individual edit areas are required, one for each -# preliminary temp/PoP forecast point. -#------------------------------------------------------------------------- -# Associated Utilities Files e.g. Combinations file: None -#------------------------------------------------------------------------- -# Component Products: None -#------------------------------------------------------------------------- -# User Configurable Variables: -# Definition Section: -# displayName If not None, defines how product appears in GFE GUI -# -# defaultEditAreas defines edit area names and station IDs for edit areas -# expected in the form of (editAreaName, 3letterStationID) -# editAreaSuffix default None. Allows for generating the body of the product for -# an edit area that is a subset (e.g. population areas) of the -# edit areas specified in the defaultEditAreas. So given the edit area, -# "COZ035" and the editAreaSuffix is "_pt", then the edit area that -# will be sampled and reported for the body of the product will be -# "COZ035_pt". If no such edit area exists, the system will simply -# use the original edit area. -# Note that Hazards will always be generated for the entire edit area. -# productName defines name of product e.g. "Zone Forecast Product" -# fullStationID full station identifier (4letter, KSLC) -# -# wmoID WMO ID for product header, such as FOUS45 -# -# pil Product pil, such as CCFBOX -# -# debug If on, debug_print statements will appear. -# database Source database for product. Can be "Official", -# "Fcst" or "ISC" -# outputFile Defines the output location of the finished product -# when saved from FormatterLauncher. -# textdbPil Defines the awips product identifier -# (e.g., DENCCFDEN) that is used to store the product -# in the AWIPS text database. -# This value is also used for the default GUI entry for -# storage. -# awipsWANPil Defines the awips product identifier -# (e.g., KBOUCCFDEN) that is used to transmit the -# product to the AWIPS WAN. -# This value is also used for the default GUI -# entry for storage. - -# topicDividers List of tuples describing the various topic dividers: -# (topicName, topicDivider, alwaysInclude, includeInGUI) where -# --topicName is "Synopsis", "Update", etc. -# --topicDivider will appear in the product ".SYNOPSIS..." -# --alwaysInclude: if 1, the topic divider will always -# appear in the product. -# Otherwise, the user can choose at run-time whether -# to include the topic divider. -# --If 1, and alwaysInclude == 0, this item will appear -# in the GUI to be selected at run time. -# Some options, like PrevDisc should not appear in the -# GUI since they are tied to other user input e.g. -# getPreviousAFD. -# state_IDs The state_ID definitions below are for the W/W/A portion of -# your AFD. Multiple state IDs (including MARINE) are separated -# by commas. -# tieUpdateToPreviousAFD If 1, then when "Include Previous AFD" is chosen in the GUI, -# the UPDATE topic divider will automatically be included. -# fcstrNumberFormat The fcstrNumberFormat can take three values: -# Brief - short term forecaster and long term forecaster -# numbers separated by a slash. -# Verbose - "SHORT TERM...xx" and "LONG TERM...yy". -# None - no forecaster numbers added to the end of the AFD. -# NOTE: names or numbers may be used. -# shortTermForecasters : List of identifiers (number strings or names) for the -# short term forecasters -# longTerm Forecasters : List of identifiers (number strings or names) for the -# long term forecasters -# aviationForecasters : List of identifiers (number strings or names) for the -# aviation forecasters -# pointEditAreas If non-empty list, a point temp/pop table will be produced. -# popStartZ_AM start time for PoP for AM issuance in Zulu, (12 for 12z) -# Usually changed only for OCONUS sites. -# useZoneNames If 1, will use zone names instead of ugc codes in the W/W/A portion. -# abbreviateUGCs If 1, will abbreviate ugc string. Instead of: FLZ042-FLZ043-FLZ044 -# produce: FLZ042>FLZ044 -# WWA_Nil The WWA_Nil definition will be used for nil watches, warnings, -# or advisories. -# hazardSamplingThreshold Defines the percentage coverage or number of -# grid points in a zone that must contain the hazard -# in order for it to be considered. Tuple (percent, points) -#------------------------------------------------------------------------- -# Development tasks that are identified and in progress: -# None -# -# To look up additional tasks and their status, see the Text Product User Guide -# Section on "Tkgnats: Task Reporting System". -#------------------------------------------------------------------------- -# Additional Information: -# The grids are sampled according to the following rules: -# MaxT/MinT: Four periods, 12 hours apart, daily, set up to take the -# MaxT grid overlapping noon LT and MinT grid overlapping midnight LT -# PoP: Four periods, 12 hours apart, 12z-00z, and 00z-12z. Periods can -# be overridden using the popStartZ_AM field for OCONUS sites. -# -# Missing data will be shown with MMM for temperatures and PoPs. -#------------------------------------------------------------------------- -# Example Output: -# -## -##FXUS64 KMAF 041309 -##AFDMAF -## -##AREA FORECAST DISCUSSION -##NATIONAL WEATHER SERVICE MIDLAND/ODESSA TX -##809 AM CDT SAT OCT 4 2003 -## -##.SHORT TERM... -## -## -##&& -## -##.LONG TERM... -## -## -##&& -## -##.PRELIMINARY POINT TEMPS/POPS... -##MAF 84 60 84 60 / 100 30 20 10 -##CNM 83 56 85 57 / 100 20 10 0 -##MRF 79 53 79 53 / 100 30 10 0 -##FST 86 62 87 62 / 100 30 10 10 -## -##&& -## -##.MAF WATCHES/WARNINGS/ADVISORIES... -##TX...NONE. -##NM...NONE. -## -##&& -## -##$$ -## -##99/99 -######################################################################## - -import TextRules -import SampleAnalysis -import string, time, types, os, re, copy -import ModuleAccessor, ProcessVariableList -import AbsTime - -class TextProduct(TextRules.TextRules, SampleAnalysis.SampleAnalysis): - - Definition = { - "type": "smart", - - "displayName": "None", # for Product Generation Menu - "database" : "Official", # Source database. "Official", "Fcst", or "ISC" - - "defaultEditAreas" : "EditAreas_PublicMarineFireWx__", - "editAreaSuffix": None, - - # Edit Areas for creating the optional Preliminary Point Temp/PoPs - "pointEditAreas": [], - "outputFile": "{prddir}/TEXT/AFD_.txt", - "debug": 0, - - "productName": "Area Forecast Discussion", - "fullStationID" : "", # 4 letter station ID - "wmoID" : "", # WMO code - "wfoCityState" : "", # Location of WFO - "pil" : "", # product pil - "textdbPil" : "", # Product ID for storing to AWIPS text database. - "awipsWANPil" : "", # Product ID for transmitting to AWIPS WAN. - "wfoSiteID": "", - - # Area Dictionary -- Descriptive information about zones - "areaDictionary": "AreaDictionary", - # Language - "language": "english", - "lineLength": 66, #Maximum line length - - "state_IDs": ["ST"], - "tieUpdateToPreviousAFD": 0, - "fcstrNumberFormat" : "Brief", # Brief, Verbose, or None - "shortTermForecasters": ["99","01","02","03"], - "longTermForecasters": ["99","01","02","03"], - "aviationForecasters": ["99","01","02","03"], - "useZoneNames": 0, - "abbreviateUGCs": 1, - - "topicDividers" : [ - # topicName, topicDivider, alwaysInclude, includeInGUI - - ("Update", ".UPDATE...", 0, 1), - ("Synopsis", ".SYNOPSIS...", 0, 1), - - # EITHER Discussion OR ShortTerm/LongTerm should always be included. - ("Discussion", ".DISCUSSION...", 0, 0), - ("ShortTerm", ".SHORT TERM...", 1, 0), - ("LongTerm", ".LONG TERM...", 1, 0), - - # Optional dividers - ("Aviation", ".AVIATION...", 0, 1), - ("Marine", ".MARINE...", 0, 1), - ("FireWeather",".FIRE WEATHER...", 0, 1), - ("Hydro", ".HYDROLOGY...", 0, 1), - ("Climate", ".CLIMATE...", 0, 1), - - # Controlled by "includePreviousAFD" - ("PrevDisc", ".PREV DISCUSSION...", 0, 0), - - # Controlled by "pointEditAreas" - ("Prelim", ".PRELIMINARY POINT TEMPS/POPS...", 0, 0), - ], - - "popStartZ_AM": 12, #hour UTC - "WWA_Nil" : "None.", - - "hazardSamplingThreshold": (10, None), #(%cov, #points) - } - - - def __init__(self): - TextRules.TextRules.__init__(self) - SampleAnalysis.SampleAnalysis.__init__(self) - -#################################################################### -# generateForecast: -# AFD formatter engine. -#################################################################### - def generateForecast(self, argDict): - - # Get variables from varDict and Definition: - error = self._getVariables(argDict) - if error is not None: - return error - - # Get the segments - hazardsC = argDict['hazards'] - self._segmentList = self.organizeHazards(hazardsC.rawAnalyzedTable()) - - # Determine time ranges: - error = self._determineTimeRanges(argDict) - if error is not None: - return error - - # Initialize the output string: - fcst = "" - fcst = self._preProcessProduct(fcst, argDict) - - fcst = self._makeProduct(fcst, argDict) - - # Append the $$ delimiter and the forecaster numbers: - fcst = self._postProcessProduct(fcst, argDict) - return fcst - -#################################################################### -# _processVariableList -# Displays user dialog. -#################################################################### - - def _processVariableList(self, definition): - # Get Definition variables - for key in definition.keys(): - exec "self._" + key + "= definition[key]" - - # Create the list of optional topic dividers to appear in GUI - self._options = [] - for topicName, topicDivider, alwaysInclude, includeInGUI in self._topicDividers: - if topicName == "Update" and self._tieUpdateToPreviousAFD: - continue - if alwaysInclude: - continue - if includeInGUI: - self._options.append(topicDivider) - - varList = [] - varList.append((("Product Issuance", "productIssuance"), "Morning", "radio", - ["Morning","Afternoon"])) - varList.append((("Optional\nTopics", "optionalTopics"), [], "check", - self._options)) - varList.append((("Include\nPrevious AFD?", "includePreviousAFD"), "NO", "radio", - ["NO", "YES"])) - varList.append((("Short Term\nForecaster", "shortTermFcstrNumber") , "99", "radio", - self._shortTermForecasters)) - varList.append((("Long Term\nForecaster", "longTermFcstrNumber"), "99", "radio", - self._longTermForecasters)) - varList.append((("Aviation\nForecaster","aviationFcstrNumber"), "", "radio", - self._aviationForecasters)) - return self._callProcessVariableList("AFD Values", varList, varDict={}) - - def _callProcessVariableList(self, title, varList, varDict): - processVarList = ProcessVariableList.ProcessVariableList( - title, varList, varDict={}) - self._selectionStatus = processVarList.status() - if not self._selectionStatus == "OK": - return None # User Cancelled - return processVarList.varDict() - -#################################################################### -# _getVariables: -# Retrieves variables and definitions. -#################################################################### - def _getVariables(self, argDict): - # Make variable assignments - varDict = argDict["varDict"] - for key in varDict.keys(): - if type(key) is types.TupleType: - label, variable = key - exec "self._" + variable + "= varDict[key]" - self._longTermFcstrNumber = self._getForecasterNumber(self._longTermFcstrNumber) - self._shortTermFcstrNumber = self._getForecasterNumber(self._shortTermFcstrNumber) - self._aviationFcstrNumber = self._getForecasterNumber(self._aviationFcstrNumber) - - # Make argDict accessible - self.__argDict = argDict - - # Get Definition variables - self._definition = argDict["forecastDef"] - for key in self._definition.keys(): - exec "self._" + key + "= self._definition[key]" - - # Set up information for Hazards product - # TODO uncomment following line? - self._hazards = argDict['hazards'] - self._combinations = argDict["combinations"] - - # Check for state id: ST indicating that the user needs to - # set up the list of state id's - if len(self._state_IDs) == 1 and self._state_IDs[0] == "ST": - return "WARNING:You must set up 'state_IDs' in Definition section before running the AFD." - return - -#################################################################### -# _determineTimeRanges: -# Determine time ranges for product. Returns popPeriods and -# tempPeriods which are a list of tuples (timeRange, label). -# Also determines the timeLabel string for the MND header. -# Adapted from previous _determineTimeRanges found in CCF -# formatter. -#################################################################### - def _determineTimeRanges(self, argDict): - - # Calculate ddhhmm string value: - self._timeRange = self.createTimeRange(0, 240) - self._currentTime = argDict['creationTime'] #ZULU - self._ddhhmmTime = time.strftime("%d%H%M",time.gmtime( - self._currentTime)) - self._timeLabel = self.getCurrentTime( - argDict, "%l%M %p %Z %a %b %e %Y", stripLeading=1) - self._issueTime = AbsTime.current() - - # If generating temp/pop table, determine time ranges - if len(self._pointEditAreas) > 0: - # numPeriods is the number of forecast periods used for the - # preliminary temp/PoP block: - numPeriods = 4 - - # PoP Time ranges: four periods - # If AM, begin at 12z of issue day (default), may be overridden - # by the popStartZ_AM flag. - # If PM, begin at 00z of next day (default), may be overridden - # by the popStartZ_AM flag. - if self._productIssuance == "Morning": - startT = self._popStartZ_AM - else: - startT = self._popStartZ_AM + 12 # account for PM start later - - # rollover - different days from gmtime and local time - # so we need to sample the PoP from "yesterday" - # for MDT, rollover occurs from 5pm-midnight LST - if time.gmtime(self._currentTime)[2] != \ - time.localtime(self._currentTime)[2]: - startT = startT - 24 - - popStartTR = self.createTimeRange(startT, startT + 1, mode="Zulu") - timePeriod = 12 - timeSpan = 12 - self._popPeriods = self.getPeriods(popStartTR, timePeriod, - timeSpan, numPeriods) - - # Temp Time ranges: four periods, 12 hours apart, 5 hour span - # This is to catch the correct Max/Min temp grid - # If AM, begin with noon LT of issue day to catch MaxT - # If PM, begin with midnight LT of issue day to get MinT - if self._productIssuance == "Morning": - tempStartTR = self.createTimeRange(10, 15) - else: - tempStartTR = self.createTimeRange(22, 27) - timePeriod = 12 - timeSpan = 5 - self._tempPeriods = self.getPeriods(tempStartTR, timePeriod, timeSpan, - numPeriods) - return - -#################################################################### -# _addTopicDividers: -# Puts in the required and optional topic dividers per NWSI 10-503. -# Check for Update tied to getPreviousAFD. -# Get the previous discussion if requested. -#################################################################### - - def _addTopicDividers(self, fcst, argDict): - # Flag for adding the aviation forecaster number later - self._addedAviation = 0 - pad = "\n\n\n&&\n\n" - #print "\naddTopicDividers: user options", self._optionalTopics - - for topicName, topicDivider, alwaysInclude, includeInGUI in self._topicDividers: - - # Handle PrevDisc and Prelim in the order specified in the topicDividers list. - if topicName == "PrevDisc" and self._includePreviousAFD == "YES": - fcst = self._getPreviousAFD(fcst, argDict, divider=1) + "&&\n\n" - continue - if topicName == "Prelim": - fcst = self._makePrelimNumberBlock(fcst, argDict) - continue - - # See if we need to add this divider - addDivider = 0 - # If alwaysInclude OR the user chose this divider from the GUI - # add the topic divider - if alwaysInclude or topicDivider in self._optionalTopics: - addDivider = 1 - # Handle Update if it's tied to previous AFD and the - # user chose to include the previous AFD - if topicName == "Update" and self._tieUpdateToPreviousAFD \ - and self._includePreviousAFD == "YES": - addDivider = 1 - if not addDivider: - continue - - # Add padding - #print "Adding divider", topicName, topicDivider - # Check for Aviation so we can later add the aviationFcstrNumber - if topicName == "Aviation": - self._addedAviation = 1 - if topicDivider == "": - continue - if topicName == "ShortTerm": - fcst += topicDivider + "\n\n" - else: - fcst += topicDivider + pad - return fcst - - def _getTopicDivider(self, topic): - for topicName, topicDivider, alwaysInclude, includeInGUI in self._topicDividers: - if topicName == topic: - return topicDivider - return "" - -#################################################################### -# _getPreviousAFD: -# Gets the previous AFD. Strips the leading MND header and the -# trailing W/W/A block. Also lops off the prelim number block if -# present.. -#################################################################### - def _getPreviousAFD(self, fcst, argDict, divider=0): - # Initialize strings and lists: - WWABlockString = "." + self._wfoSiteID + " WATCHES/W" - newAFD = [] - - # Retrieve the previous AFD and store the list in AFD_old: - prevAFD = self.getPreviousProduct(self._textdbPil) - prevAFD = string.split(prevAFD, "\n") # ADDED newline delimeter 12/7/04 bc - - # Initialize starting and ending indices: - start_index = 0 - end_index = len(prevAFD) - if end_index == 0: - print "WARNING -- Previous AFD has zero length." - - # Place newlines back at the end of each element in list prevAFD: - # ADDED 12/7/04 bc - for index in xrange(start_index, end_index): - prevAFD[index] = prevAFD[index] + "\n" - - # Make a copy of prevAFD to modify - oldAFD = prevAFD - # Loop through the list to find the first dot delimeter. Once - # found, then set start_index to the index in AFDlist. This will - # effectively strip off the MND header. Will also handle headlines - # too! - body_start_index = start_index - for index in xrange(start_index, end_index): - if oldAFD[index][:1] == ".": # first dot - body_start_index = index - break - - # Loop through the list to find the beginning of the W/W/A block. - # Once found, then set end_index to the index in AFDlist. This will - # strip off everything below the W/W/A block including this block: - body_end_index = end_index - for index in xrange(body_start_index, end_index): - if re.match(WWABlockString, oldAFD[index]) != None: - body_end_index = index - break - - # Make another pass to lop off the preliminary number block if it - # is present and reset end_index. - prelim_divider = self._getTopicDivider("Prelim") - if prelim_divider: - for index in xrange(body_start_index, body_end_index): - if re.match(prelim_divider, oldAFD[index]) != None: - body_end_index = index - break - - # Suggested by Rob R. @ CTP and from ER supplement to 10-503... - # Strip out the ampersands and the leading dot on the - # topic divider and place in newAFD. - for index in xrange(body_start_index, body_end_index): - if (oldAFD[index][:1] == "."): - newAFD.append(oldAFD[index][1:]) - elif (oldAFD[index][:2] == "&&"): - index = index + 1 - else: - newAFD.append(oldAFD[index]) - - if divider: - # If previous issuance time is desired, append it to the - # _PrevDisc_Divider string: - issuance_dateTime = "" - # Loop through the list to find the issuance time string. - for index in xrange(start_index, end_index-1): - if prevAFD[index][:8] == "National": # next line has date time stamp - issuance_dateTime = str(prevAFD[index+1]) - break - # Build issuance_DateTime string: - # Strip off trailing newline... - issuance_dateTime = " /issued " + issuance_dateTime[:-1] + "/ \n" - # Eliminate double whitespace characters if present: - issuance_dateTime = re.sub(r" ", r" ", issuance_dateTime) # PATCH 12/7/04 bc - fcst = fcst + self._getTopicDivider("PrevDisc") + issuance_dateTime + "\n" # PATCH 12/7/04 bc - - # Now test for multiple newlines. If this isn't a newline, write to fcst. - # If it is a newline, test the next one down. If it's also a newline, - # write the first newline and skip to the next line. - for index in xrange(0, len(newAFD)-1): - if newAFD[index] != "\n": - fcst = fcst + newAFD[index] - else: - if newAFD[index+1] != "\n": - fcst = fcst + newAFD[index] - index = index + 1 - fcst = fcst + "\n" - return fcst - -#################################################################### -# _makePrelimNumberBlock: -# Creates the prelim number block for the AFD. -#################################################################### - def _makePrelimNumberBlock(self, fcst, argDict): - # Get the areaList: - if len(self._pointEditAreas) == 0: - return fcst - - # Convert (lat, lon, dim) entries to editAreas - self._areaList = [] - for editArea, areaLabel in self._pointEditAreas: - if type(editArea) is types.TupleType: - lat, lon, dim = editArea - editArea = self.createLatLonArea(lat, lon, dim) - self._areaList.append((editArea, areaLabel)) - - # Append the prelim numbers divider: - fcst = fcst + self._getTopicDivider("Prelim") + "\n" - - # Sample the temps and PoPs: - self._sampleData(argDict) - - # Generate the preliminary numbers: - for editArea, areaLabel in self._areaList: - fcst = fcst + areaLabel + " " - fcst = self._makeFirstGuess(fcst, editArea, areaLabel, argDict) - fcst = fcst + "\n&&\n\n" - return fcst - -#################################################################### -# _preProcessProduct: -# Creates the MND header for the AFD. Checks to see if this is -# a routine, corrected, or updated issuance and appends this -# to the MND. -#################################################################### - def _preProcessProduct(self, fcst, argDict): - # Add product heading to fcst string - s = self._wmoID + " " + self._fullStationID + " " + \ - self._ddhhmmTime + "\n" + \ - self._pil + "\n\n" - - fcst = fcst + s.upper(); - - issuedByString = self.getIssuedByString() - - productName = self.checkTestMode(argDict, self._productName) - - s = productName + "\n" + \ - "National Weather Service " + \ - self._wfoCityState +"\n" + \ - issuedByString + \ - self._timeLabel + "\n\n" - fcst = fcst + s - return fcst - -#################################################################### -# _makeProduct: -# Formats the product -#################################################################### - def _makeProduct(self, fcst, argDict): - - # Insert topic dividers: - fcst = self._addTopicDividers(fcst, argDict) - - # Make the Hazard block: - fcst = self._makeHazardBlock(fcst,argDict) - return fcst - -#################################################################### -# _makeFirstGuess: -# Creates the "first guess" temp and PoP forecasts for each edit -# area. Note the format is not strictly NWSI 10-503 compliant -# as the directive makes no allowances for temperatures above 100 -# or below zero, nor does it allow for 100% PoPs. But I got -# permission to do it this way from SRH, so... -#################################################################### - def _makeFirstGuess(self, fcst, editArea, areaLabel, argDict): - # Produce temp forecast substring: - separators = [" ", " ", " ", " / ",] - for index in xrange(0, 4): - timeRange, label = self._tempPeriods[index] - fcst = fcst + self._getMinOrMax(self._analysisListTemp(), - editArea, timeRange) + separators[index] - - # Produce PoP forecast substring - separators = [" ", " ", " ", " "] - for index in xrange(0, 4): - timeRange, label = self._popPeriods[index] - fcst = fcst + self._getPoP(self._analysisListPoP(), editArea, - timeRange) + separators[index] - fcst = fcst + "\n" - return fcst - - -#################################################################### -# marineNameDict -# Used in the makeHazardBlock to determine the defined names -# for the marine zones. This function can be overridden to change -# the names of the marine areas. -#################################################################### - def marineNameDict(self): - # dictionary for marine zone identifiers - return {} #use the two-letter ids for the marine areas - - # if you want descriptive names for the marine areas - #return {'AM': 'Atlantic coastal Waters', 'GM': 'Gulf of Mexico', - # 'LE': 'Lake Erie', 'LO': 'Lake Ontario', 'LH': 'Lake Huron', - # 'LC': 'Lake St Clair', 'LM': 'Lake Michigan', 'LS': 'Lake Superior', - # 'PZ': 'Pacific coastal waters', 'PK': 'Alaskan coastal waters', - # 'PH': 'Hawaiian coastal waters', 'PM': 'Marianas waters', - # 'AN': 'Atlantic coastal waters', - # 'PS': 'American Samoa coastal waters', 'SL': 'St Lawrence River'} - -#################################################################### -# _makeHazardBlock: -# Cycles through the list of segments and reports the Hazards -#################################################################### - - def _makeHazardBlock(self, fcst, argDict): - - fcst = fcst + "." + self._wfoSiteID + \ - " WATCHES/WARNINGS/ADVISORIES...\n" - - accessor = ModuleAccessor.ModuleAccessor() - areaDict = accessor.variable(self._areaDictionary, "AreaDictionary") - - # get combinations file used, which contains extra info which will - # tell us which zones are marine, firewx and public - combo = self._defaultEditAreas - fireWxPhenSig = [("FW","W"), ("FW","A")] - fireWxZones = [] - otherZones = [] - if type(combo) is types.StringType: - try: - m = __import__(combo) - for map in m.EASourceMap.keys(): - if map.find("FireWx") != -1: - fireWxZones = m.EASourceMap[map] - else: - for idz in m.EASourceMap[map]: - if idz not in otherZones: - otherZones.append(idz) - except: - otherZones = None - - - marine = self.marineNameDict() - # - # Get every hazard and hazard combination in effect, separate them - # into records by state - # - hazardsRaw = argDict['hazards'].rawAnalyzedTable() - hazards = self._combineHazardRecords(hazardsRaw, argDict) - - stateDict = {} - for h in hazards: - #determine the states in this record - sd = {} - ids = h['id'] - for id in ids: - stateid = id[0:2] - if sd.has_key(stateid): - locs = sd[stateid] - locs.append(id) - sd[stateid] = locs - else: - sd[stateid] = [id] - #add the record to the appropriate "state" in stateDict - for state in sd.keys(): - hcopy = copy.deepcopy(h) - if stateDict.has_key(state): - recs = stateDict[state] - hcopy['id'] = sd[state] - recs.append(hcopy) - stateDict[state] = recs - else: - hcopy['id'] = sd[state] - stateDict[state] = [hcopy] - - - - # - # For every state we are responsible for, check for hazards - # - - for eachState in self._state_IDs: - if stateDict.has_key(eachState): - stateHazardList = stateDict[eachState] - else: - stateHazardList = [] - - # add the state identifier (only if multiple states) - if len(self._state_IDs) > 1: - #marine zone - if eachState in marine.keys(): - fcst = fcst + marine[eachState] + "..." - else: - fcst = fcst + eachState + "..." - - # If no hazards are found, append the null phrase - - if len(stateHazardList) == 0: - fcst = fcst + self._WWA_Nil + "\n" - continue - - # If hazards are found, then build the hazard phrases - for i in xrange(len(stateHazardList)): - eachHazard = stateHazardList[i] - - # special check code for firewx - if (eachHazard['phen'],eachHazard['sig']) in fireWxPhenSig: - firezones = [] - for id in eachHazard['id']: - if id in fireWxZones and id not in firezones: - firezones.append(id) - eachHazard['id'] = firezones #eliminated public - stateHazardList[i] = eachHazard - else: - otherzones = [] - for id in eachHazard['id']: - if (otherZones is None or id in otherZones) and id not in otherzones: - otherzones.append(id) - eachHazard['id'] = otherzones #eliminated firewx - stateHazardList[i] = eachHazard - - - - # hazard name - hazName = self.hazardName(eachHazard['hdln'], argDict, False) - - # timing phrase - timing = self.getTimingPhrase(eachHazard, argDict['creationTime']) - - # ids - ids = eachHazard['id'] - if len(ids) == 0: - continue #skip hazard string if no zones - if self._useZoneNames == 1: - zoneNames = [] - for id in ids: - zoneNames.append(areaDict[id]['ugcName']) - ids = zoneNames - ids.sort() - idString = "-".join(ids) - if self._useZoneNames == 0 and self._abbreviateUGCs == 1: - idString = self.makeUGCString(ids) - - # hazard phrase - phrase = hazName + ' ' + timing + ' for ' + idString + '.' - - # Indent if there is a state list associated - if len(self._state_IDs) > 1: - phrase = self.indentText(phrase, indentFirstString = '', - indentNextString = ' ', - maxWidth=self._lineLength, - breakStrings=[" ", "-"]) - else: - phrase = self.indentText(phrase, indentFirstString = '', - indentNextString = '', - maxWidth=self._lineLength, - breakStrings=[" ", "-"]) - - # Apply the hazard phrases - if len(self._state_IDs) > 1: - #don't indent 1st one - if i == 0: - fcst = fcst + phrase + '\n' - #ident the remainder - else: - fcst = fcst + " " + phrase + '\n' - else: - fcst = fcst + phrase + '\n' #never ident - only 1 state - - fcst = fcst + "&&\n\n" - return fcst - -#################################################################### -# _combineHazardRecords -# Consolidate the hazard records for the hazard block. Combines -# "like" records by "id". Like records are those with the -# same phen, sig, start, and ending times. -# by the fcstrNumberFormat variable. -#################################################################### - def _combineHazardRecords(self, hazrecs, argDict): - ptable = copy.deepcopy(hazrecs) - import VTECTableUtil - vtu = VTECTableUtil.VTECTableUtil(activeTableFileName = None) - compare = ['phen','sig','startTime','endTime'] - acts = ['NEW','CON','EXT','EXB','EXA'] #live event - ctable = [] - for a in ptable: - if a['act'] not in acts: - continue #ignore non-live events - #ensure we combine records currently active, but may have diff - #start times - if a['startTime'] < argDict['creationTime']: - a['startTime'] = argDict['creationTime'] - found = 0 - for c in ctable: - if vtu.hazardCompare(a, c, compare): - found = 1 - zones = [a['id']] - - allzones = c['id'] - for z in zones: - allzones.append(z) - c['id'] = allzones - break - if found == 0: - newc = copy.deepcopy(a) - if newc['id'] is not list: - newc['id'] = [newc['id']] - ctable.append(newc) - - return ctable - - -#################################################################### -# _postProcessProduct: -# Appends the $$ delimeter followed by the short and long term -# forecaster numbers. Display of forecaster numbers is governed -# by the fcstrNumberFormat variable. -#################################################################### - def _postProcessProduct(self, fcst, argDict): - # Put in the $$ delimeter: - fcst = fcst + "$$\n\n" - # Add the forecaster numbers to the fcst string: - if self._fcstrNumberFormat == "Brief": - fcst = fcst + self._shortTermFcstrNumber - if self._longTermFcstrNumber != "": - fcst = fcst + "/" + self._longTermFcstrNumber - if self._addedAviation: - fcst = fcst + "/" +self._aviationFcstrNumber - - elif self._fcstrNumberFormat == "Verbose": - fcst = fcst + "SHORT TERM..." + self._shortTermFcstrNumber - if self._longTermFcstrNumber != "": - fcst = fcst + "\nLONG TERM...." + self._longTermFcstrNumber - if self._addedAviation: - fcst = fcst + "\nAVIATION..." + self._aviationFcstrNumber - - return fcst - -##################################################################### -# _sampleData, _analysisListPop, _analysisListTemp: -# Sample the temp and PoP grids. Returns the samplers for temp and -# PoP. -##################################################################### - def _sampleData(self, argDict): - # Sample the data. Returns the samplers for pop and temp - sampleList = [] - sampleList.append((self._analysisListPoP(), self._popPeriods)) - sampleList.append((self._analysisListTemp(), self._tempPeriods)) - sampleInfo = [] - for analList, periods in sampleList: - sampleInfo.append((analList, periods, self._areaList)) - - self._sampler = self.getSampler(argDict, sampleInfo) - return - - def _analysisListPoP(self): - return [ - ("PoP", self.stdDevMaxAvg), - ] - - def _analysisListTemp(self): - return [ - ("MinT", self.avg), - ("MaxT", self.avg), - ] - -#################################################################### -# _getMinOrMax: -# Returns a Max or Min value depending on availability. -#################################################################### - def _getMinOrMax(self, analysisList, area, timeRange): - - statDict = self.getStatDict(self._sampler, analysisList, - timeRange, area) - dayNight = self.getPeriod(timeRange,shiftToLocal=1) - if dayNight == self.DAYTIME(): - maxV = self.getStats(statDict, "MaxT") - return self._getTemp(maxV) - else: - minV = self.getStats(statDict, "MinT") - return self._getTemp(minV) - -#################################################################### -# _getTemp: -# Returns a three character string containing the temperature. -# For positive values less than 100, the leading 0 is replaced by -# a space. If no grid is found, "MMM" is returned. -#################################################################### - def _getTemp(self, value): - if value is None: - return "MMM" #for missing - value = int(round(value)) - valStr = string.rjust(`value`, 3) - return valStr - -#################################################################### -# _getPoP: -# Returns a three character string containing the PoP to the -# nearest 10 percent. -#################################################################### - def _getPoP(self,analysisList,area,timeRange): - statDict = self.getStatDict( - self._sampler, analysisList, timeRange, area) - pop = self.getStats(statDict, "PoP") - if pop is None: - return "MMM" - value = int(self.round(pop,"Nearest",10)) - valStr = string.rjust(`value`, 3) - return valStr - -#################################################################### -# _getForecasterNumber: -# Takes a number string or name and returns a string. -# Removes leading zeros from numbers. -#################################################################### - def _getForecasterNumber(self, numberString): - try: - result = "" # set result to null - num = int(numberString) # convert numberString to integer - if num > 99 or num < 0: # if outside [0,99] assign 99 string - result = `99` - elif num < 10: # if less than 10 pad leading 0: - result = string.zfill(`num`, 2) - else: # convert back to string - result = `num` - return result - except: - return numberString - -#################################################################### - -### Removed inland tropical hazards in OB9.3 - def allowedHazards(self): - allActions = ["NEW", "EXA", "EXB", "EXT", "CAN", "CON", "EXP"] - tropicalActions = ["NEW", "EXA", "EXB", "EXT", "UPG", "CAN", - "CON", "EXP"] - marineActions = ["NEW", "EXA", "EXB", "EXT", "CON"] - return [ - ('HU.W', tropicalActions, 'Tropical'), # HURRICANE WARNING - ('TY.W', tropicalActions, 'Tropical1'), # TYPHOON WARNING - ('TR.W', tropicalActions, 'Tropical2'), # TROPICAL STORM WARNING - ('HU.A', tropicalActions, 'Tropical3'), # HURRICANE WATCH - ('TY.A', tropicalActions, 'Tropical4'), # TYPHOON WATCH - ('TR.A', tropicalActions, 'Tropical5'), # TROPICAL STORM WATCH - ('HF.A', allActions, 'Marine'), # HURRICANE FORCE WIND WATCH - ('HF.W', allActions, 'Marine1'), # HURRICANE FORCE WIND WARNING - ('SR.A', allActions, 'Marine2'), # STORM WATCH - ('SR.W', allActions, 'Marine3'), # STORM WARNING - ('GL.A', allActions, 'Marine4'), # GALE WATCH - ('GL.W', allActions, 'Marine5'), # GALE WARNING - ('SE.A', allActions, 'Marine6'), # HAZARDOUS SEAS WATCH - ('SE.W', allActions, 'Marine7'), # HAZARDOUS SEAS WARNING - ('UP.A', allActions, 'IceAccr'), # HEAVY FREEZING SPRAY WATCH - ('UP.W', allActions, 'IceAccr1'), # HEAVY FREEZING SPRAY WARNING - ('UP.Y', allActions, 'IceAccr2'), # FREEZING SPRAY ADVISORY - ('SC.Y', allActions, 'Marine8'), # SMALL CRAFT ADVISORY - ('SW.Y', allActions, 'Marine9'), # SMALL CRAFT ADVISORY - ('RB.Y', allActions, 'Marine10'), # SMALL CRAFT ADVISORY - ('SI.Y', allActions, 'Marine11'), # SMALL CRAFT ADVISORY - ('BW.Y', allActions, 'Marine12'), # BRISK WIND ADVISORY - ('MH.W', allActions, 'Marine16'), # VOLCANIC ASHFALL WARNING - ('MF.Y', allActions, 'Marine13'), # DENSE FOG ADVISORY - ('MS.Y', allActions, 'Marine14'), # DENSE SMOKE ADVISORY - ('MH.Y', allActions, 'Marine15'), # VOLCANIC ASHFALL ADVISORY - ('BZ.W', allActions, 'WinterWx'), # BLIZZARD WARNING - ('IS.W', allActions, 'WinterWx1'), # ICE STORM WARNING - ('LE.W', allActions, 'WinterWx2'), # LAKE EFFECT SNOW WARNING - ('WS.W', allActions, 'WinterWx3'), # WINTER STORM WARNING - ('WW.Y', allActions, 'WinterWx4'), # WINTER WEATHER ADVISORY - ('WS.A', allActions, 'WinterWx5'), # WINTER STORM WATCH - ('WC.W', allActions, 'WindChill'), # WIND CHILL WARNING - ('WC.Y', allActions, 'WindChill1'), # WIND CHILL ADVISORY - ('WC.A', allActions, 'WindChill2'), # WIND CHILL WATCH - ('DU.W', allActions, 'Dust'), # BLOWING DUST WARNING - ('DU.Y', allActions, 'Dust1'), # BLOWING DUST ADVISORY - ('EC.W', allActions, 'Cold'), # EXTREME COLD WARNING - ('EC.A', allActions, 'Cold2'), # EXTREME COLD WATCH - ('EH.W', allActions, 'Heat'), # EXCESSIVE HEAT WARNING - ('EH.A', allActions, 'Heat1'), # EXCESSIVE HEAT WATCH - ('HT.Y', allActions, 'Heat2'), # HEAT ADVISORY - ('FG.Y', allActions, 'Fog'), # DENSE FOG ADVISORY - ('ZF.Y', allActions, 'Fog2'), # FREEZING FOG ADVISORY - ('HZ.W', allActions, 'FrostFreeze'), # HARD FREEZE WARNING - ('FZ.W', allActions, 'FrostFreeze1'), # FREEZE WARNING - ('FR.Y', allActions, 'FrostFreeze2'), # FROST ADVISORY - ('HZ.A', allActions, 'FrostFreeze3'), # HARD FREEZE WATCH - ('FZ.A', allActions, 'FrostFreeze4'), # FREEZE WATCH - ('HW.W', allActions, 'Wind'), # HIGH WIND WARNING - ('WI.Y', allActions, 'Wind1'), # WIND ADVISORY - ('LW.Y', allActions, 'Wind2'), # LAKE WIND ADVISORY - ('HW.A', allActions, 'Wind3'), # HIGH WIND WATCH - ('SM.Y', allActions, 'Smoke'), # DENSE SMOKE ADVISORY - ('FF.A', allActions, 'Flood'), # FLASH FLOOD WATCH - ('FA.A', allActions, 'Flood1'), # FLOOD WATCH - ('CF.W', allActions, 'CoastalFlood'), # COASTAL FLOOD WARNING - ('CF.Y', allActions, 'CoastalFlood3'), # COASTAL FLOOD ADVISORY - ('CF.A', allActions, 'CoastalFlood1'), # COASTAL FLOOD WATCH - ('LS.W', allActions, 'CoastalFlood5'), # LAKESHORE FLOOD WARNING - ('LS.A', allActions, 'CoastalFlood2'), # LAKESHORE FLOOD WATCH - ('LS.Y', allActions, 'CoastalFlood4'), # LAKESHORE FLOOD ADVISORY - ('AS.Y', allActions, 'AirStag'), # AIR STAGNATION ADVISORY - ('AS.O', allActions, 'AirStag1'), # AIR STAGNATION OUTLOOK - ('SU.W', allActions, 'HighSurf'), # HIGH SURF WARNING - ('SU.Y', allActions, 'HighSurf1'), # HIGH SURF ADVISORY - ('RP.S', allActions, 'Rip'), # HIGH RIP CURRENT RISK - ('BH.S', allActions, 'BeachHaz'), # BEACH HAZARDS STATEMENT - ('AF.W', allActions, 'Ashfall2'), # VOLCANIC ASHFALL WARNING - ('AF.Y', allActions, 'Ashfall'), # VOLCANIC ASHFALL ADVISORY - ('TS.W', allActions, 'Tsunami'), # TSUNAMI WARNING - ('TS.A', allActions, 'Tsunami1'), # TSUNAMI WATCH - ('FW.W', allActions, 'FireWx'), # RED FLAG WARNING - ('FW.A', allActions, 'FireWx1'), # FIRE WEATHER WATCH - ('LO.Y', marineActions, 'LowWater'), # LOW WATER ADVISORY - ('TS.W', allActions, 'Tsunami'), # TSUNAMI WARNING - ('TS.Y', allActions, 'Tsunami'), # TSUNAMI ADVISORY - ('TS.A', allActions, 'Tsunami'), # TSUNAMI WATCH - ] diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/textproducts/templates/product/CivilEmerg.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/textproducts/templates/product/CivilEmerg.py deleted file mode 100644 index b6381f8274..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/textproducts/templates/product/CivilEmerg.py +++ /dev/null @@ -1,202 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -## - -# ---------------------------------------------------------------------------- -# This software is in the public domain, furnished "as is", without technical -# support, and with no warranty, express or implied, as to its usefulness for -# any purpose. -# -# CivilEmerg.py -# Standard File for Civil Emergencies -# -# Author: Matt Davis -# ---------------------------------------------------------------------------- -#------------------------------------------------------------------------- -# Example Output: -# Refer to the NWS 10-518 Directive for further information. -#------------------------------------------------------------------------- - -import GenericReport -import TextRules -import string, time, re, os, types, copy - - -class TextProduct(GenericReport.TextProduct): - - VariableList = [ - - # - # Local Agency configuration - # - - (("Source", "source") , - " EMERGENCY MANAGEMENT AGENCY ", - "alphaNumeric"), - - # - # Do not change these - # - - (("EAS Level", "eas") , "NONE", "radio", - ["NONE", - "URGENT - IMMEDIATE BROADCAST REQUESTED", - "BULLETIN - IMMEDIATE BROADCAST REQUESTED", - "BULLETIN - EAS ACTIVATION REQUESTED" - ]) - ] - - - Definition = { - "type": "smart", - "displayName": None, # for Product Generation Menu - "database" : "Official", # Source database. "Official", "Fcst", or "ISC" - - "outputFile": "{prddir}/TEXT/ADR_.txt", - "debug": 0, - - # Name of map background for creating Combinations - "mapNameForCombinations": "FIPS_", - - ## Edit Areas: Create Combinations file with edit area combinations. - "showZoneCombiner" : 1, # 1 to cause zone combiner to display - "defaultEditAreas" : "Combinations_ADR_", - - # product identifiers - "productName": "Administrative Message", # product name - "fullStationID" : "", # 4 letter station ID - "wmoID" : "", # WMO code - "wfoCityState" : "", # Location of WFO - "pil" : "", # product pil - "textdbPil" : "", # Product ID for storing to AWIPS text database. - "awipsWANPil" : "", # Product ID for transmitting to AWIPS WAN. - "wfoSiteID": "", - - # Area Dictionary -- Descriptive information about zones - "areaDictionary": "AreaDictionary", - # Language - "language": "english", - "lineLength": 66, #Maximum line length - "includeCities" : 0, # Cities included in area header - "cityDescriptor" : "Including the cities of", - "includeZoneNames" : 0, # Zone names will be included in the area header - "includeIssueTime" : 0, # This should be set to zero - "singleComboOnly" : 1, # Used for non-segmented products - "purgeTime" : 3, # Expiration in hours - "callToAction" : 0, # disable call to action markers - } - - #Use Zone codes for PR and AR regions - if "" in ['PR','AR']: - Definition["mapNameForCombinations"] = "Zones_" - - def __init__(self): - GenericReport.TextProduct.__init__(self) - - def _preProcessProduct(self, fcst, argDict): - varDict = argDict["varDict"] - for key in varDict.keys(): - if type(key) is types.TupleType: - label, variable = key - exec "self._" + variable + "= varDict[key]" - return fcst - - def _preProcessArea(self, fcst, editArea, areaLabel, argDict): - - # - # First, generate WMO lines - # - - fcst = self._wmoID + " " + self._fullStationID + " " + \ - self._ddhhmmTime + "\n" + self._pil + "\n" - - # - # Next, add the non-segmented UGC data - # - - areaHeader = self.makeAreaHeader( - argDict, areaLabel, self._issueTime, self._expireTime, - self._areaDictionary, self._defaultEditAreas, cityDescriptor=self._cityDescriptor, - includeCities=self._includeCities, includeZoneNames = self._includeZoneNames, - includeIssueTime = self._includeIssueTime) - - fcst = fcst + areaHeader + "\n" - - # - # Last, add the product name/time lines - # - - try: - if self._eas == "None": - self._eas = "" - else: - self._eas = self._eas + "\n" - except: - self._eas = "" - - try: - source = self._source + '\n' - except: - source = "" - - issuedByString = self.getIssuedByString() - productName = self.checkTestMode(argDict, self._productName) - fcst = fcst + self._eas + productName + "\n" +\ - source +\ - "Relayed by National Weather Service " + self._wfoCityState + \ - "\n" + issuedByString + self._timeLabel + "\n\n" - return fcst - - def _makeProduct(self, fcst, editArea, areaLabel, argDict): - fcst = fcst + "...Administrative Message...\n\n" - fcst = fcst + "The following message is transmitted" + \ - " at the request of the " + self._source + "." - - if self._callToAction: - fcst = self._makeCallToAction(fcst, editArea, areaLabel, argDict) - - return fcst - - def _makeCallToAction(self, fcst, editArea, areaLabel, argDict): - ctaBodyPhrase = "" - if self._callToAction: - ctaBodyPhrase = "\n\nPRECAUTIONARY/PREPAREDNESS ACTIONS...\n\n" + \ - ctaBodyPhrase + \ - "|* Call to action goes here *|\n\n" + \ - "\n\n&&\n\n" - fcst = fcst + ctaBodyPhrase - return fcst - - def _postProcessProduct(self, fcst, argDict): - # - # Clean up multiple line feeds - # - - fixMultiLF = re.compile(r'(\n\n)\n*', re.DOTALL) - fcst = fixMultiLF.sub(r'\1', fcst) - - - fcst = self.endline(fcst, linelength=self._lineLength, breakStr=[" ", "...", "-"]) - self.setProgressPercentage(100) - self.progressMessage(0, 100, self._displayName + " Complete") - return fcst diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/textproducts/templates/product/CivilEmerg_ADR_MultiPil_Local.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/textproducts/templates/product/CivilEmerg_ADR_MultiPil_Local.py deleted file mode 100644 index a1ed5d9b89..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/textproducts/templates/product/CivilEmerg_ADR_MultiPil_Local.py +++ /dev/null @@ -1,66 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -## - -# ---------------------------------------------------------------------------- -# This software is in the public domain, furnished "as is", without technical -# support, and with no warranty, express or implied, as to its usefulness for -# any purpose. -# -# CivilEmerg_ADR__Local -# This product produces a Administrative Message -# -# Author: Matt Davis -# ---------------------------------------------------------------------------- -#------------------------------------------------------------------------- -# Example Output: -# Refer to the NWS 10-518 Directive for further information. -#------------------------------------------------------------------------- - -import CivilEmerg -import TextRules -import string, time, re, os, types, copy - -class TextProduct(CivilEmerg.TextProduct): - Definition = copy.deepcopy(CivilEmerg.TextProduct.Definition) - Definition["displayName"] = "CivilEmergency_ADR_ (Administative Message)" - # for Product Generation Menu - Definition["outputFile"] = "{prddir}/TEXT/ADR_.txt" - ## Edit Areas: Create Combinations file with edit area combinations. - Definition["showZoneCombiner"] = 1 # 1 to cause zone combiner to display - Definition["defaultEditAreas"] = "Combinations_ADR_" - Definition["productName"] = "Administrative Message" # product name - Definition["wmoID"] = "" # WMO code - Definition["pil"] = "" # product pil - Definition["textdbPil"] = "" # Product ID for storing to AWIPS text database. - Definition["awipsWANPil"] = "" # Product ID for transmitting to AWIPS WAN. - - def __init__(self): - CivilEmerg.TextProduct.__init__(self) - - def _makeProduct(self, fcst, editArea, areaLabel, argDict): - fcst = fcst + "The following message is transmitted" + \ - " at the request of the " + self._source + "." - return fcst - - diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/textproducts/templates/product/CivilEmerg_AVA_MultiPil_Local.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/textproducts/templates/product/CivilEmerg_AVA_MultiPil_Local.py deleted file mode 100644 index 2b06cda2f4..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/textproducts/templates/product/CivilEmerg_AVA_MultiPil_Local.py +++ /dev/null @@ -1,66 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -## - -# ---------------------------------------------------------------------------- -# This software is in the public domain, furnished "as is", without technical -# support, and with no warranty, express or implied, as to its usefulness for -# any purpose. -# -# CivilEmerg_AVA__Local -# This product produces a Avalanche Watch -# -# Author: Matt Davis -# ---------------------------------------------------------------------------- -#------------------------------------------------------------------------- -# Example Output: -# Refer to the NWS 10-518 Directive for further information. -#------------------------------------------------------------------------- - -import CivilEmerg -import TextRules -import string, time, re, os, types, copy - -class TextProduct(CivilEmerg.TextProduct): - Definition = copy.deepcopy(CivilEmerg.TextProduct.Definition) - Definition["displayName"] = "CivilEmergency_AVA_ (Avalanche Watch)" - # for Product Generation Menu - Definition["outputFile"] = "{prddir}/TEXT/AVA_.txt" - ## Edit Areas: Create Combinations file with edit area combinations. - Definition["showZoneCombiner"] = 1 # 1 to cause zone combiner to display - Definition["defaultEditAreas"] = "Combinations_AVA_" - Definition["productName"] = "Avalanche Watch" # product name - Definition["wmoID"] = "" # WMO code - Definition["pil"] = "" # product pil - Definition["textdbPil"] = "" # Product ID for storing to AWIPS text database. - Definition["awipsWANPil"] = "" # Product ID for transmitting to AWIPS WAN. - - def __init__(self): - CivilEmerg.TextProduct.__init__(self) - - def _makeProduct(self, fcst, editArea, areaLabel, argDict): - fcst = fcst + "The following message is transmitted" + \ - " at the request of the " + self._source + "." - return fcst - - diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/textproducts/templates/product/CivilEmerg_AVW_MultiPil_Local.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/textproducts/templates/product/CivilEmerg_AVW_MultiPil_Local.py deleted file mode 100644 index 076b659796..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/textproducts/templates/product/CivilEmerg_AVW_MultiPil_Local.py +++ /dev/null @@ -1,65 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -## - -# ---------------------------------------------------------------------------- -# This software is in the public domain, furnished "as is", without technical -# support, and with no warranty, express or implied, as to its usefulness for -# any purpose. -# -# CivilEmerg_AVW__Local -# This product produces a Avalanche Warning -# -# Author: Matt Davis -# ---------------------------------------------------------------------------- -#------------------------------------------------------------------------- -# Example Output: -# Refer to the NWS 10-518 Directive for further information. -#------------------------------------------------------------------------- - -import CivilEmerg -import TextRules -import string, time, re, os, types, copy - -class TextProduct(CivilEmerg.TextProduct): - Definition = copy.deepcopy(CivilEmerg.TextProduct.Definition) - Definition["displayName"] = "CivilEmergency_AVW_ (Avalanche Warning)" - # for Product Generation Menu - Definition["outputFile"] = "{prddir}/TEXT/AVW_.txt" - ## Edit Areas: Create Combinations file with edit area combinations. - Definition["showZoneCombiner"] = 1 # 1 to cause zone combiner to display - Definition["defaultEditAreas"] = "Combinations_AVW_" - Definition["productName"] = "Avalanche Warning" # product name - Definition["wmoID"] = "" # WMO code - Definition["pil"] = "" # product pil - Definition["textdbPil"] = "" # Product ID for storing to AWIPS text database. - Definition["awipsWANPil"] = "" # Product ID for transmitting to AWIPS WAN. - - def __init__(self): - CivilEmerg.TextProduct.__init__(self) - - def _makeProduct(self, fcst, editArea, areaLabel, argDict): - fcst = fcst + "The following message is transmitted" + \ - " at the request of the " + self._source + "." - return fcst - diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/textproducts/templates/product/CivilEmerg_CAE_MultiPil_Local.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/textproducts/templates/product/CivilEmerg_CAE_MultiPil_Local.py deleted file mode 100644 index 90f9976ae2..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/textproducts/templates/product/CivilEmerg_CAE_MultiPil_Local.py +++ /dev/null @@ -1,65 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -## - -# ---------------------------------------------------------------------------- -# This software is in the public domain, furnished "as is", without technical -# support, and with no warranty, express or implied, as to its usefulness for -# any purpose. -# -# CivilEmerg_CAE__Local -# This product produces a Child Abduction Emergency -# -# Author: Matt Davis -# ---------------------------------------------------------------------------- -#------------------------------------------------------------------------- -# Example Output: -# Refer to the NWS 10-518 Directive for further information. -#------------------------------------------------------------------------- - -import CivilEmerg -import TextRules -import string, time, re, os, types, copy - -class TextProduct(CivilEmerg.TextProduct): - Definition = copy.deepcopy(CivilEmerg.TextProduct.Definition) - Definition["displayName"] = "CivilEmergency_CAE_ (Child Abduction Emergency)" - # for Product Generation Menu - Definition["outputFile"] = "{prddir}/TEXT/CAE_.txt" - ## Edit Areas: Create Combinations file with edit area combinations. - Definition["showZoneCombiner"] = 1 # 1 to cause zone combiner to display - Definition["defaultEditAreas"] = "Combinations_CAE_" - Definition["productName"] = "Child Abduction Emergency" # product name - Definition["wmoID"] = "" # WMO code - Definition["pil"] = "" # product pil - Definition["textdbPil"] = "" # Product ID for storing to AWIPS text database. - Definition["awipsWANPil"] = "" # Product ID for transmitting to AWIPS WAN. - - def __init__(self): - CivilEmerg.TextProduct.__init__(self) - - def _makeProduct(self, fcst, editArea, areaLabel, argDict): - fcst = fcst + "The following message is transmitted" + \ - " at the request of the " + self._source + "." - return fcst - diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/textproducts/templates/product/CivilEmerg_CDW_MultiPil_Local.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/textproducts/templates/product/CivilEmerg_CDW_MultiPil_Local.py deleted file mode 100644 index f77c60265c..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/textproducts/templates/product/CivilEmerg_CDW_MultiPil_Local.py +++ /dev/null @@ -1,65 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -## - -# ---------------------------------------------------------------------------- -# This software is in the public domain, furnished "as is", without technical -# support, and with no warranty, express or implied, as to its usefulness for -# any purpose. -# -# CivilEmerg_CDW__Local -# This product produces a Civil Danger Warning -# -# Author: Matt Davis -# ---------------------------------------------------------------------------- -#------------------------------------------------------------------------- -# Example Output: -# Refer to the NWS 10-518 Directive for further information. -#------------------------------------------------------------------------- - -import CivilEmerg -import TextRules -import string, time, re, os, types, copy - -class TextProduct(CivilEmerg.TextProduct): - Definition = copy.deepcopy(CivilEmerg.TextProduct.Definition) - Definition["displayName"] = "CivilEmergency_CDW_ (Civil Danger Warning)" - # for Product Generation Menu - Definition["outputFile"] = "{prddir}/TEXT/CDW_.txt" - ## Edit Areas: Create Combinations file with edit area combinations. - Definition["showZoneCombiner"] = 1 # 1 to cause zone combiner to display - Definition["defaultEditAreas"] = "Combinations_CDW_" - Definition["productName"] = "Civil Danger Warning" # product name - Definition["wmoID"] = "" # WMO code - Definition["pil"] = "" # product pil - Definition["textdbPil"] = "" # Product ID for storing to AWIPS text database. - Definition["awipsWANPil"] = "" # Product ID for transmitting to AWIPS WAN. - - def __init__(self): - CivilEmerg.TextProduct.__init__(self) - - def _makeProduct(self, fcst, editArea, areaLabel, argDict): - fcst = fcst + "The following message is transmitted" + \ - " at the request of the " + self._source + "." - return fcst - diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/textproducts/templates/product/CivilEmerg_CEM_MultiPil_Local.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/textproducts/templates/product/CivilEmerg_CEM_MultiPil_Local.py deleted file mode 100644 index ff7e58f744..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/textproducts/templates/product/CivilEmerg_CEM_MultiPil_Local.py +++ /dev/null @@ -1,65 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -## - -# ---------------------------------------------------------------------------- -# This software is in the public domain, furnished "as is", without technical -# support, and with no warranty, express or implied, as to its usefulness for -# any purpose. -# -# CivilEmerg_CEM__Local -# This product produces a Civil Emergency Message -# -# Author: Matt Davis -# ---------------------------------------------------------------------------- -#------------------------------------------------------------------------- -# Example Output: -# Refer to the NWS 10-518 Directive for further information. -#------------------------------------------------------------------------- - -import CivilEmerg -import TextRules -import string, time, re, os, types, copy - -class TextProduct(CivilEmerg.TextProduct): - Definition = copy.deepcopy(CivilEmerg.TextProduct.Definition) - Definition["displayName"] = "CivilEmergency_CEM_ (Civil Emergency Message)" - # for Product Generation Menu - Definition["outputFile"] = "{prddir}/TEXT/CEM_.txt" - ## Edit Areas: Create Combinations file with edit area combinations. - Definition["showZoneCombiner"] = 1 # 1 to cause zone combiner to display - Definition["defaultEditAreas"] = "Combinations_CEM_" - Definition["productName"] = "Civil Emergency Message" # product name - Definition["wmoID"] = "" # WMO code - Definition["pil"] = "" # product pil - Definition["textdbPil"] = "" # Product ID for storing to AWIPS text database. - Definition["awipsWANPil"] = "" # Product ID for transmitting to AWIPS WAN. - - def __init__(self): - CivilEmerg.TextProduct.__init__(self) - - def _makeProduct(self, fcst, editArea, areaLabel, argDict): - fcst = fcst + "The following message is transmitted" + \ - " at the request of the " + self._source + "." - return fcst - diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/textproducts/templates/product/CivilEmerg_EQR_MultiPil_Local.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/textproducts/templates/product/CivilEmerg_EQR_MultiPil_Local.py deleted file mode 100644 index 7f582cd024..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/textproducts/templates/product/CivilEmerg_EQR_MultiPil_Local.py +++ /dev/null @@ -1,129 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -## - -# ---------------------------------------------------------------------------- -# This software is in the public domain, furnished "as is", without technical -# support, and with no warranty, express or implied, as to its usefulness for -# any purpose. -# -# CivilEmerg_EQR_Local -# This product produces an earthquake report. -# -# Author: davis -# ---------------------------------------------------------------------------- -## -# -# SOFTWARE HISTORY -# Date Ticket# Engineer Description -# ------------ ---------- ----------- -------------------------- -# Oct 20, 2014 #3685 randerso Changed to support mixed case -# Oct 10, 2016 #5749 randerso Converted ellipses to commas -# -## - -#------------------------------------------------------------------------- -# Example Output: -# Refer to the NWS 10-518 Directive for further information. -#------------------------------------------------------------------------- - -import CivilEmerg -import TextRules -import string, time, re, os, types, copy - -class TextProduct(CivilEmerg.TextProduct): - Definition = copy.deepcopy(CivilEmerg.TextProduct.Definition) - Definition["displayName"] = "CivilEmergency_EQR_ (Earthquake Report)" - # for Product Generation Menu - Definition["outputFile"] = "{prddir}/TEXT/EQR_.txt" - ## Edit Areas: Create Combinations file with edit area combinations. - Definition["showZoneCombiner"] = 1 # 1 to cause zone combiner to display - Definition["defaultEditAreas"] = "Combinations_EQR_" - Definition["productName"] = "Earthquake Report" # product name - Definition["wmoID"] = "" # WMO code - Definition["pil"] = "" # product pil - Definition["textdbPil"] = "" # Product ID for storing to AWIPS text database. - Definition["awipsWANPil"] = "" # Product ID for transmitting to AWIPS WAN. - - Definition["mapNameForCombinations"] = "Zones_" - - VariableList = [ - (("Issuance Type", "issuanceType") , "Preliminary", "radio", - ["Preliminary", "Update"]), - (("Official Earthquake Info Source:", "eqInfo") , "Golden", "radio", - ["Golden", "WC/ATWC", "PTWC"]), - (("Felt:", "felt") , "weakly", "radio", - ["weakly", "moderately", "strongly", "very strongly"]), - (("How Many Reports:", "extent") , "a single person", "radio", - ["a single person", "a few people", "many people", "numerous persons"]), - (("Damage", "damage") , "No", "radio", - ["No", "Slight", "Moderate", "Considerable", "Extensive"]), - (("Damage Type", "damageType") , [], "check", - ["objects falling from shelves", "dishes rattled or broken", - "cracked chimneys", "communications towers fallen", - "collapsed bridges", "collapsed overpasses", "train rails bent", - "fissures have opened in the ground", "gas mains broken", - "complete destruction of structures", "some casualties"]), - ] - - def __init__(self): - CivilEmerg.TextProduct.__init__(self) - - def _makeProduct(self, fcst, editArea, areaLabel, argDict): - varDict = argDict["varDict"] - for key in varDict.keys(): - if type(key) is types.TupleType: - label, variable = key - exec "self._" + variable + "= varDict[key]" - - fcst = fcst + "An earthquake has been felt " + self._felt + " by " +\ - self._extent + " " + "in the |*enter area*| area. " + \ - self._damage + " damage has been reported. " - - if self._damage != "No": - fcst = fcst + " Damage reports so far: " - fcst = fcst + self.punctuateList(self._damageType) - fcst = fcst + "." - - fcst = fcst + "\n\n" - - if self._eqInfo == "Golden": - eqOffice = "National Earthquake Information Center in Golden Colorado" - elif self._eqInfo == "WC/ATWC": - eqOffice = "West Coast/Alaska Tsunami Warning Center" - else: - eqOffice = "Pacific Tsunami Warning Center" - - - if self._issuanceType == "Preliminary": - fcst = fcst + "Information released in this statement is preliminary. Updates, including Richter scale magnitude, will be provided as more information becomes available from the " + eqOffice + "." - else: - fcst = fcst + "The " + eqOffice + " has indicated that an earthquake magnitude *mag* on the Richter scale was centered at *lat*/*lon* or about *miles* *direction* of *city*, *state*.\n\nAny further information will be made available when it is received from the " + eqOffice + "." - - return fcst - - def _postProcessProduct(self, fcst, argDict): - fcst = self.endline(fcst, linelength=self._lineLength, breakStr=[" ", "...", "-"]) - self.setProgressPercentage(100) - self.progressMessage(0, 100, self._displayName + " Complete") - return fcst diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/textproducts/templates/product/CivilEmerg_EQW_MultiPil_Local.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/textproducts/templates/product/CivilEmerg_EQW_MultiPil_Local.py deleted file mode 100644 index cd184338b8..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/textproducts/templates/product/CivilEmerg_EQW_MultiPil_Local.py +++ /dev/null @@ -1,65 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -## - -# ---------------------------------------------------------------------------- -# This software is in the public domain, furnished "as is", without technical -# support, and with no warranty, express or implied, as to its usefulness for -# any purpose. -# -# CivilEmerg_EQW__Local -# This product produces a Earthquake Warning -# -# Author: Matt Davis -# ---------------------------------------------------------------------------- -#------------------------------------------------------------------------- -# Example Output: -# Refer to the NWS 10-518 Directive for further information. -#------------------------------------------------------------------------- - -import CivilEmerg -import TextRules -import string, time, re, os, types, copy - -class TextProduct(CivilEmerg.TextProduct): - Definition = copy.deepcopy(CivilEmerg.TextProduct.Definition) - Definition["displayName"] = "CivilEmergency_EQW_ (Earthquake Warning)" - # for Product Generation Menu - Definition["outputFile"] = "{prddir}/TEXT/EQW_.txt" - ## Edit Areas: Create Combinations file with edit area combinations. - Definition["showZoneCombiner"] = 1 # 1 to cause zone combiner to display - Definition["defaultEditAreas"] = "Combinations_EQW_" - Definition["productName"] = "Earthquake Warning" # product name - Definition["wmoID"] = "" # WMO code - Definition["pil"] = "" # product pil - Definition["textdbPil"] = "" # Product ID for storing to AWIPS text database. - Definition["awipsWANPil"] = "" # Product ID for transmitting to AWIPS WAN. - - def __init__(self): - CivilEmerg.TextProduct.__init__(self) - - def _makeProduct(self, fcst, editArea, areaLabel, argDict): - fcst = fcst + "The following message is transmitted" + \ - " at the request of the " + self._source + "." - return fcst - diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/textproducts/templates/product/CivilEmerg_EVI_MultiPil_Local.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/textproducts/templates/product/CivilEmerg_EVI_MultiPil_Local.py deleted file mode 100644 index df4a5938cd..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/textproducts/templates/product/CivilEmerg_EVI_MultiPil_Local.py +++ /dev/null @@ -1,65 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -## - -# ---------------------------------------------------------------------------- -# This software is in the public domain, furnished "as is", without technical -# support, and with no warranty, express or implied, as to its usefulness for -# any purpose. -# -# CivilEmerg_EVI__Local -# This product produces a Evacuation Immediate -# -# Author: Matt Davis -# ---------------------------------------------------------------------------- -#------------------------------------------------------------------------- -# Example Output: -# Refer to the NWS 10-518 Directive for further information. -#------------------------------------------------------------------------- - -import CivilEmerg -import TextRules -import string, time, re, os, types, copy - -class TextProduct(CivilEmerg.TextProduct): - Definition = copy.deepcopy(CivilEmerg.TextProduct.Definition) - Definition["displayName"] = "CivilEmergency_EVI_ (Evacuation Immediate)" - # for Product Generation Menu - Definition["outputFile"] = "{prddir}/TEXT/EVI_.txt" - ## Edit Areas: Create Combinations file with edit area combinations. - Definition["showZoneCombiner"] = 1 # 1 to cause zone combiner to display - Definition["defaultEditAreas"] = "Combinations_EVI_" - Definition["productName"] = "Evacuation Immediate" # product name - Definition["wmoID"] = "" # WMO code - Definition["pil"] = "" # product pil - Definition["textdbPil"] = "" # Product ID for storing to AWIPS text database. - Definition["awipsWANPil"] = "" # Product ID for transmitting to AWIPS WAN. - - def __init__(self): - CivilEmerg.TextProduct.__init__(self) - - - def _makeProduct(self, fcst, editArea, areaLabel, argDict): - fcst = fcst + "The following message is transmitted" + \ - " at the request of the " + self._source + "." - return fcst diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/textproducts/templates/product/CivilEmerg_FRW_MultiPil_Local.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/textproducts/templates/product/CivilEmerg_FRW_MultiPil_Local.py deleted file mode 100644 index 1606d747f4..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/textproducts/templates/product/CivilEmerg_FRW_MultiPil_Local.py +++ /dev/null @@ -1,65 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -## - -# ---------------------------------------------------------------------------- -# This software is in the public domain, furnished "as is", without technical -# support, and with no warranty, express or implied, as to its usefulness for -# any purpose. -# -# CivilEmerg_FRW__Local -# This product produces a Fire Warning -# -# Author: Matt Davis -# ---------------------------------------------------------------------------- -#------------------------------------------------------------------------- -# Example Output: -# Refer to the NWS 10-518 Directive for further information. -#------------------------------------------------------------------------- - -import CivilEmerg -import TextRules -import string, time, re, os, types, copy - -class TextProduct(CivilEmerg.TextProduct): - Definition = copy.deepcopy(CivilEmerg.TextProduct.Definition) - Definition["displayName"] = "CivilEmergency_FRW_ (Fire Warning)" - # for Product Generation Menu - Definition["outputFile"] = "{prddir}/TEXT/FRW_.txt" - ## Edit Areas: Create Combinations file with edit area combinations. - Definition["showZoneCombiner"] = 1 # 1 to cause zone combiner to display - Definition["defaultEditAreas"] = "Combinations_FRW_" - Definition["productName"] = "Fire Warning" # product name - Definition["wmoID"] = "" # WMO code - Definition["pil"] = "" # product pil - Definition["textdbPil"] = "" # Product ID for storing to AWIPS text database. - Definition["awipsWANPil"] = "" # Product ID for transmitting to AWIPS WAN. - - def __init__(self): - CivilEmerg.TextProduct.__init__(self) - - def _makeProduct(self, fcst, editArea, areaLabel, argDict): - fcst = fcst + "The following message is transmitted" + \ - " at the request of the " + self._source + "." - return fcst - diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/textproducts/templates/product/CivilEmerg_HMW_MultiPil_Local.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/textproducts/templates/product/CivilEmerg_HMW_MultiPil_Local.py deleted file mode 100644 index 530d8c1035..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/textproducts/templates/product/CivilEmerg_HMW_MultiPil_Local.py +++ /dev/null @@ -1,66 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -## - -# ---------------------------------------------------------------------------- -# This software is in the public domain, furnished "as is", without technical -# support, and with no warranty, express or implied, as to its usefulness for -# any purpose. -# -# CivilEmerg_HMW__Local -# This product produces a Hazardous Material Warning -# -# Author: Matt Davis -# ---------------------------------------------------------------------------- -#------------------------------------------------------------------------- -# Example Output: -# Refer to the NWS 10-518 Directive for further information. -#------------------------------------------------------------------------- - -import CivilEmerg -import TextRules -import string, time, re, os, types, copy - -class TextProduct(CivilEmerg.TextProduct): - Definition = copy.deepcopy(CivilEmerg.TextProduct.Definition) - Definition["displayName"] = "CivilEmergency_HMW_ (Hazardous Material Warning)" - # for Product Generation Menu - Definition["outputFile"] = "{prddir}/TEXT/HMW_.txt" - ## Edit Areas: Create Combinations file with edit area combinations. - Definition["showZoneCombiner"] = 1 # 1 to cause zone combiner to display - Definition["defaultEditAreas"] = "Combinations_HMW_" - Definition["productName"] = "Hazardous Material Warning" # product name - Definition["wmoID"] = "" # WMO code - Definition["pil"] = "" # product pil - Definition["textdbPil"] = "" # Product ID for storing to AWIPS text database. - Definition["awipsWANPil"] = "" # Product ID for transmitting to AWIPS WAN. - - def __init__(self): - CivilEmerg.TextProduct.__init__(self) - - def _makeProduct(self, fcst, editArea, areaLabel, argDict): - fcst = fcst + "The following message is transmitted" + \ - " at the request of the " + self._source + "." - return fcst - - diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/textproducts/templates/product/CivilEmerg_LAE_MultiPil_Local.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/textproducts/templates/product/CivilEmerg_LAE_MultiPil_Local.py deleted file mode 100644 index 1d19e14d09..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/textproducts/templates/product/CivilEmerg_LAE_MultiPil_Local.py +++ /dev/null @@ -1,65 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -## - -# ---------------------------------------------------------------------------- -# This software is in the public domain, furnished "as is", without technical -# support, and with no warranty, express or implied, as to its usefulness for -# any purpose. -# -# CivilEmerg_LAE__Local -# This product produces a Local Area Emergency -# -# Author: Matt Davis -# ---------------------------------------------------------------------------- -#------------------------------------------------------------------------- -# Example Output: -# Refer to the NWS 10-518 Directive for further information. -#------------------------------------------------------------------------- - -import CivilEmerg -import TextRules -import string, time, re, os, types, copy - -class TextProduct(CivilEmerg.TextProduct): - Definition = copy.deepcopy(CivilEmerg.TextProduct.Definition) - Definition["displayName"] = "CivilEmergency_LAE_ (Local Area Emergency)" - # for Product Generation Menu - Definition["outputFile"] = "{prddir}/TEXT/LAE_.txt" - ## Edit Areas: Create Combinations file with edit area combinations. - Definition["showZoneCombiner"] = 1 # 1 to cause zone combiner to display - Definition["defaultEditAreas"] = "Combinations_LAE_" - Definition["productName"] = "Local Area Emergency" # product name - Definition["wmoID"] = "" # WMO code - Definition["pil"] = "" # product pil - Definition["textdbPil"] = "" # Product ID for storing to AWIPS text database. - Definition["awipsWANPil"] = "" # Product ID for transmitting to AWIPS WAN. - - def __init__(self): - CivilEmerg.TextProduct.__init__(self) - - def _makeProduct(self, fcst, editArea, areaLabel, argDict): - fcst = fcst + "The following message is transmitted" + \ - " at the request of the " + self._source + "." - return fcst - diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/textproducts/templates/product/CivilEmerg_LEW_MultiPil_Local.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/textproducts/templates/product/CivilEmerg_LEW_MultiPil_Local.py deleted file mode 100644 index 7e9fa28fd2..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/textproducts/templates/product/CivilEmerg_LEW_MultiPil_Local.py +++ /dev/null @@ -1,66 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -## - -# ---------------------------------------------------------------------------- -# This software is in the public domain, furnished "as is", without technical -# support, and with no warranty, express or implied, as to its usefulness for -# any purpose. -# -# CivilEmerg_LEW__Local -# This product produces a Law Enforcement Warning -# -# Author: Matt Davis -# ---------------------------------------------------------------------------- -#------------------------------------------------------------------------- -# Example Output: -# Refer to the NWS 10-518 Directive for further information. -#------------------------------------------------------------------------- - -import CivilEmerg -import TextRules -import string, time, re, os, types, copy - -class TextProduct(CivilEmerg.TextProduct): - Definition = copy.deepcopy(CivilEmerg.TextProduct.Definition) - Definition["displayName"] = "CivilEmergency_LEW_ (Law Enforcement Warning)" - # for Product Generation Menu - Definition["outputFile"] = "{prddir}/TEXT/LEW_.txt" - ## Edit Areas: Create Combinations file with edit area combinations. - Definition["showZoneCombiner"] = 1 # 1 to cause zone combiner to display - Definition["defaultEditAreas"] = "Combinations_LEW_" - Definition["productName"] = "Law Enforcement Warning" # product name - Definition["wmoID"] = "" # WMO code - Definition["pil"] = "" # product pil - Definition["textdbPil"] = "" # Product ID for storing to AWIPS text database. - Definition["awipsWANPil"] = "" # Product ID for transmitting to AWIPS WAN. - - def __init__(self): - CivilEmerg.TextProduct.__init__(self) - - - def _makeProduct(self, fcst, editArea, areaLabel, argDict): - fcst = fcst + "The following message is transmitted" + \ - " at the request of the " + self._source + "." - return fcst - diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/textproducts/templates/product/CivilEmerg_NUW_MultiPil_Local.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/textproducts/templates/product/CivilEmerg_NUW_MultiPil_Local.py deleted file mode 100644 index ad473a82ea..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/textproducts/templates/product/CivilEmerg_NUW_MultiPil_Local.py +++ /dev/null @@ -1,65 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -## - -# ---------------------------------------------------------------------------- -# This software is in the public domain, furnished "as is", without technical -# support, and with no warranty, express or implied, as to its usefulness for -# any purpose. -# -# CivilEmerg_NUW__Local -# This product produces a Nuclear Power Plant Warning -# -# Author: Matt Davis -# ---------------------------------------------------------------------------- -#------------------------------------------------------------------------- -# Example Output: -# Refer to the NWS 10-518 Directive for further information. -#------------------------------------------------------------------------- - -import CivilEmerg -import TextRules -import string, time, re, os, types, copy - -class TextProduct(CivilEmerg.TextProduct): - Definition = copy.deepcopy(CivilEmerg.TextProduct.Definition) - Definition["displayName"] = "CivilEmergency_NUW_ (Nuclear Power Plant Warning)" - # for Product Generation Menu - Definition["outputFile"] = "{prddir}/TEXT/NUW_.txt" - ## Edit Areas: Create Combinations file with edit area combinations. - Definition["showZoneCombiner"] = 1 # 1 to cause zone combiner to display - Definition["defaultEditAreas"] = "Combinations_NUW_" - Definition["productName"] = "Nuclear Power Plant Warning" # product name - Definition["wmoID"] = "" # WMO code - Definition["pil"] = "" # product pil - Definition["textdbPil"] = "" # Product ID for storing to AWIPS text database. - Definition["awipsWANPil"] = "" # Product ID for transmitting to AWIPS WAN. - - def __init__(self): - CivilEmerg.TextProduct.__init__(self) - - def _makeProduct(self, fcst, editArea, areaLabel, argDict): - fcst = fcst + "The following message is transmitted" + \ - " at the request of the " + self._source + "." - return fcst - diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/textproducts/templates/product/CivilEmerg_RHW_MultiPil_Local.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/textproducts/templates/product/CivilEmerg_RHW_MultiPil_Local.py deleted file mode 100644 index 92078c4629..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/textproducts/templates/product/CivilEmerg_RHW_MultiPil_Local.py +++ /dev/null @@ -1,65 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -## - -# ---------------------------------------------------------------------------- -# This software is in the public domain, furnished "as is", without technical -# support, and with no warranty, express or implied, as to its usefulness for -# any purpose. -# -# CivilEmerg_RHW__Local -# This product produces a Radiological Hazard Warning -# -# Author: Matt Davis -# ---------------------------------------------------------------------------- -#------------------------------------------------------------------------- -# Example Output: -# Refer to the NWS 10-518 Directive for further information. -#------------------------------------------------------------------------- - -import CivilEmerg -import TextRules -import string, time, re, os, types, copy - -class TextProduct(CivilEmerg.TextProduct): - Definition = copy.deepcopy(CivilEmerg.TextProduct.Definition) - Definition["displayName"] = "CivilEmergency_RHW_ (Radiological Hazard Warning)" - # for Product Generation Menu - Definition["outputFile"] = "{prddir}/TEXT/RHW_.txt" - ## Edit Areas: Create Combinations file with edit area combinations. - Definition["showZoneCombiner"] = 1 # 1 to cause zone combiner to display - Definition["defaultEditAreas"] = "Combinations_RHW_" - Definition["productName"] = "Radiological Hazard Warning" # product name - Definition["wmoID"] = "" # WMO code - Definition["pil"] = "" # product pil - Definition["textdbPil"] = "" # Product ID for storing to AWIPS text database. - Definition["awipsWANPil"] = "" # Product ID for transmitting to AWIPS WAN. - - def __init__(self): - CivilEmerg.TextProduct.__init__(self) - - def _makeProduct(self, fcst, editArea, areaLabel, argDict): - fcst = fcst + "The following message is transmitted" + \ - " at the request of the " + self._source + "." - return fcst - diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/textproducts/templates/product/CivilEmerg_SPW_MultiPil_Local.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/textproducts/templates/product/CivilEmerg_SPW_MultiPil_Local.py deleted file mode 100644 index d1caa6b904..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/textproducts/templates/product/CivilEmerg_SPW_MultiPil_Local.py +++ /dev/null @@ -1,65 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -## - -# ---------------------------------------------------------------------------- -# This software is in the public domain, furnished "as is", without technical -# support, and with no warranty, express or implied, as to its usefulness for -# any purpose. -# -# CivilEmerg_SPW__Local -# This product produces a Shelter In Place Warning -# -# Author: Matt Davis -# ---------------------------------------------------------------------------- -#------------------------------------------------------------------------- -# Example Output: -# Refer to the NWS 10-518 Directive for further information. -#------------------------------------------------------------------------- - -import CivilEmerg -import TextRules -import string, time, re, os, types, copy - -class TextProduct(CivilEmerg.TextProduct): - Definition = copy.deepcopy(CivilEmerg.TextProduct.Definition) - Definition["displayName"] = "CivilEmergency_SPW_ (Shelter In Place Warning)" - # for Product Generation Menu - Definition["outputFile"] = "{prddir}/TEXT/SPW_.txt" - ## Edit Areas: Create Combinations file with edit area combinations. - Definition["showZoneCombiner"] = 1 # 1 to cause zone combiner to display - Definition["defaultEditAreas"] = "Combinations_SPW_" - Definition["productName"] = "Shelter in Place Warning" # product name - Definition["wmoID"] = "" # WMO code - Definition["pil"] = "" # product pil - Definition["textdbPil"] = "" # Product ID for storing to AWIPS text database. - Definition["awipsWANPil"] = "" # Product ID for transmitting to AWIPS WAN. - - def __init__(self): - CivilEmerg.TextProduct.__init__(self) - - def _makeProduct(self, fcst, editArea, areaLabel, argDict): - fcst = fcst + "The following message is transmitted" + \ - " at the request of the " + self._source + "." - return fcst - diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/textproducts/templates/product/CivilEmerg_TOE_MultiPil_Local.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/textproducts/templates/product/CivilEmerg_TOE_MultiPil_Local.py deleted file mode 100644 index 21aeaaf1b0..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/textproducts/templates/product/CivilEmerg_TOE_MultiPil_Local.py +++ /dev/null @@ -1,66 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -## - -# ---------------------------------------------------------------------------- -# This software is in the public domain, furnished "as is", without technical -# support, and with no warranty, express or implied, as to its usefulness for -# any purpose. -# -# CivilEmerg_TOE__Local -# This product produces a 911 Telephone Outage Emergency -# -# Author: Matt Davis -# ---------------------------------------------------------------------------- -#------------------------------------------------------------------------- -# Example Output: -# Refer to the NWS 10-518 Directive for further information. -#------------------------------------------------------------------------- - -import CivilEmerg -import TextRules -import string, time, re, os, types, copy - -class TextProduct(CivilEmerg.TextProduct): - Definition = copy.deepcopy(CivilEmerg.TextProduct.Definition) - Definition["displayName"] = "CivilEmergency_TOE_ (911 Telephone Outage Emergency)" - # for Product Generation Menu - Definition["outputFile"] = "{prddir}/TEXT/TOE_.txt" - ## Edit Areas: Create Combinations file with edit area combinations. - Definition["showZoneCombiner"] = 1 # 1 to cause zone combiner to display - Definition["defaultEditAreas"] = "Combinations_TOE_" - Definition["productName"] = "911 Telephone Outage Emergency" # product name - Definition["wmoID"] = "" # WMO code - Definition["pil"] = "" # product pil - Definition["textdbPil"] = "" # Product ID for storing to AWIPS text database. - Definition["awipsWANPil"] = "" # Product ID for transmitting to AWIPS WAN. - - def __init__(self): - CivilEmerg.TextProduct.__init__(self) - - - def _makeProduct(self, fcst, editArea, areaLabel, argDict): - fcst = fcst + "The following message is transmitted" + \ - " at the request of the " + self._source + "." - return fcst - diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/textproducts/templates/product/CivilEmerg_VOW_MultiPil_Local.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/textproducts/templates/product/CivilEmerg_VOW_MultiPil_Local.py deleted file mode 100644 index 8defb3490a..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/textproducts/templates/product/CivilEmerg_VOW_MultiPil_Local.py +++ /dev/null @@ -1,65 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -## - -# ---------------------------------------------------------------------------- -# This software is in the public domain, furnished "as is", without technical -# support, and with no warranty, express or implied, as to its usefulness for -# any purpose. -# -# CivilEmerg_VOW__Local -# This product produces a Volcano Warning -# -# Author: Matt Davis -# ---------------------------------------------------------------------------- -#------------------------------------------------------------------------- -# Example Output: -# Refer to the NWS 10-518 Directive for further information. -#------------------------------------------------------------------------- - -import CivilEmerg -import TextRules -import string, time, re, os, types, copy - -class TextProduct(CivilEmerg.TextProduct): - Definition = copy.deepcopy(CivilEmerg.TextProduct.Definition) - Definition["displayName"] = "CivilEmergency_VOW_ (Volcano Warning)" - # for Product Generation Menu - Definition["outputFile"] = "{prddir}/TEXT/VOW_.txt" - ## Edit Areas: Create Combinations file with edit area combinations. - Definition["showZoneCombiner"] = 1 # 1 to cause zone combiner to display - Definition["defaultEditAreas"] = "Combinations_VOW_" - Definition["productName"] = "Volcano Warning" # product name - Definition["wmoID"] = "" # WMO code - Definition["pil"] = "" # product pil - Definition["textdbPil"] = "" # Product ID for storing to AWIPS text database. - Definition["awipsWANPil"] = "" # Product ID for transmitting to AWIPS WAN. - - def __init__(self): - CivilEmerg.TextProduct.__init__(self) - - def _makeProduct(self, fcst, editArea, areaLabel, argDict): - fcst = fcst + "The following message is transmitted" + \ - " at the request of the " + self._source + "." - return fcst - diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/textproducts/templates/product/FWS_Site_MultiPil.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/textproducts/templates/product/FWS_Site_MultiPil.py deleted file mode 100644 index a6b36ffe6e..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/textproducts/templates/product/FWS_Site_MultiPil.py +++ /dev/null @@ -1,137 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -## -# This is a base file that is not intended to be overridden. -## - -# --------------------------------------------------------------------- -# This software is in the public domain, furnished "as is", without -# technical support, and with no warranty, express or implied, as to -# its usefulness for any purpose. -# --------------------------------------------------------------------- -# -# FWS__ -# -# This file should not be edited by the site. -# Site changes should go in FWS__Overrides for methods and -# FWS___Definition to set up Product Definition Settings -# -# -# --------------------------------------------------------------------- - -import FWF -import sys, copy, types - - -# Construct the names of the definition and override TextUtilities -siteDefinition = "FWS___Definition" -siteOverrides = "FWS__Overrides" -regionOverrides = "FWS__Overrides" -FWF_siteOverrides = "FWF__Overrides" -FWF_regionOverrides = "FWF__Overrides" - -# Import the local site's Product Definition specifications -exec "import "+siteDefinition - -# Import the local site's Overrides -exec "import "+siteOverrides -exec "import "+FWF_siteOverrides - -# Import Regional Overrides -exec "import "+regionOverrides -exec "import "+FWF_regionOverrides - -# Patches -import Patch_Overrides -# Special FWS overrides -import FWS_Overrides - -# These statements get the class object for the region and site overrides class -# The class and the module name (the file name) must be the same! -regionOverrides_object=sys.modules[regionOverrides].__dict__[regionOverrides] -siteOverrides_object=sys.modules[siteOverrides].__dict__[siteOverrides] -FWF_regionOverrides_object=sys.modules[FWF_regionOverrides].__dict__[FWF_regionOverrides] -FWF_siteOverrides_object=sys.modules[FWF_siteOverrides].__dict__[FWF_siteOverrides] - -# Get the region and site definitions into a known variable name -exec "localDefinition = " + siteDefinition + ".Definition" -exec "regionDefinition = " + regionOverrides + ".Definition" -exec "FWF_regionDefinition = " + FWF_regionOverrides + ".Definition" -exec "FWS_Definition = FWS_Overrides.Definition" - -class TextProduct( - siteOverrides_object, - regionOverrides_object, - FWS_Overrides.FWS_Overrides, - FWF_siteOverrides_object, - FWF_regionOverrides_object, - Patch_Overrides.Patch_Overrides, - FWF.TextProduct - ): - Definition = copy.deepcopy(FWF.TextProduct.Definition) - - # Get FWF Regional Definition settings - for key in FWF_regionDefinition.keys(): - Definition[key] = FWF_regionDefinition[key] - - # Get FWS Definition settings - for key in FWS_Definition.keys(): - Definition[key] = FWS_Definition[key] - - # Get Regional Definition settings - for key in regionDefinition.keys(): - Definition[key] = regionDefinition[key] - - # Get the Site Definition Settings - for key in localDefinition.keys(): - Definition[key] = localDefinition[key] - - # Get the VariableList if overridden in FWF Region - try: - exec "VariableList = "+FWF_regionOverrides+".VariableList" - except: - pass - - # Get the VariableList if overridden in FWF Region - try: - exec "VariableList = "+FWS_Overrides+".VariableList" - except: - pass - - # Get the VariableList if overridden in Region - try: - exec "VariableList = "+regionOverrides+".VariableList" - except: - pass - - # Get the VariableList if overridden in Site - try: - exec "VariableList = "+siteDefinition+".VariableList" - except: - pass - - # Definition overrides should really go in FWS___Definition - # but may be put here for testing. - # Most common would be need to set unique display name - ##Definition["displayName"] = "Test_FWS_" - - def __init__(self): - FWF.TextProduct.__init__(self) diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/vcmodule/utility/VCModuleInterface.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/vcmodule/utility/VCModuleInterface.py index fb2b343179..5c6ab85914 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/vcmodule/utility/VCModuleInterface.py +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/gfe/vcmodule/utility/VCModuleInterface.py @@ -1,23 +1,4 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - +#!/usr/bin/env python # # Globally import and sets up instances of the smart tool scripts. # Designed to be used as a master controller for inspecting and running @@ -34,12 +15,6 @@ # # -## -# This is a base file that is not intended to be overridden. -## - - - import numpy import sys @@ -62,4 +37,4 @@ class VCModuleInterface(MasterInterface.MasterInterface): return argList def getMethodArgs(self, moduleName, className, methodName): - return MasterInterface.MasterInterface.getMethodArgs(self, moduleName, className, methodName)[1:] \ No newline at end of file + return MasterInterface.MasterInterface.getMethodArgs(self, moduleName, className, methodName)[1:] diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/grid/dataset/alias/gfeParamInfo.xml b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/grid/dataset/alias/gfeParamInfo.xml index 1870c4331f..797b59817d 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/grid/dataset/alias/gfeParamInfo.xml +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/common_static/base/grid/dataset/alias/gfeParamInfo.xml @@ -6,7 +6,6 @@ be added to the directory instead of overriding a specific file. --> - mosGuideNDFD gfs20km gfs20km gfs20km @@ -84,9 +83,6 @@ avn225 akWave239 wnaWave238 - AK-NAM45 - AK-NAM22 - eta218 eta242 enpWave253 TPCtcm226 @@ -165,8 +161,6 @@ tpcWind231 tpcWind231 opcWave182 - mosGuideNDFD - mosGuideNDFD_AK lampNDFD TPCSurgeProb TPCSurgeProb diff --git a/edexOsgi/com.raytheon.edex.plugin.grib/resources/grib.properties b/edexOsgi/com.raytheon.edex.plugin.grib/resources/grib.properties index 52665ae024..fae38d96dc 100644 --- a/edexOsgi/com.raytheon.edex.plugin.grib/resources/grib.properties +++ b/edexOsgi/com.raytheon.edex.plugin.grib/resources/grib.properties @@ -1,36 +1,11 @@ -# Override the below settings in a local site file to fine -# tune the grib decoder. Default values are dynamic based -# on the number of cores in the system. They are defined -# in /awips2/edex/etc/ingestGrib.sh - -# the number of grib split threads, this value -# is not dynamically updated based on core count -GRIB_SPLIT_THREADS=2 - -# Minimum coverage of a defined subgrid for the -# grid to be accepted, this value is not dynamically -# updated based on core count -SUB_GRID_COVERAGE_PERCENT=20 - -# the number of grid records allowed in a bulk persist, -# this value is not dynamically updated based on core count -GRID_MAX_GRIDS_PER_PERSIST=100 - -# the max amount of memory for grids in a bulk persist, -# this value is not dynamically updated based on core count -GRID_MAX_MEMORY_IN_MB_PER_PERSIST=10 - -# the number of grib decode threads. -#GRIB_DECODE_THREADS=4 - -# the number of grib persist threads. -#GRIB_PERSIST_THREADS=2 - -# Maximum number of grid points to decode at one time for all threads. Large -# grib files may cause the decoder to reach this limit and then some threads -# will have to wait. This can be used to control the amount of memory used by -# the decoder. -#GRIB_MAX_GRID_POINTS=8000000 +# Minimum coverage of a defined subgrid for the grid to be accepted +#GRIB_DECODE_THREADS=8 +#GRIB_SPLIT_THREADS=4 +#GRIB_PERSIST_THREADS=4 +#SUB_GRID_COVERAGE_PERCENT=20 +#GRID_MAX_GRIDS_PER_PERSIST=100 +#GRID_MAX_MEMORY_IN_MB_PER_PERSIST=10 +#GRIB_MAX_GRID_POINTS=15000000 # Maximum number of grids in MB that are allowed to be in memory waiting to be persisted. #grib-persister.count.mb=100 diff --git a/edexOsgi/com.raytheon.edex.plugin.grib/src/com/raytheon/edex/plugin/grib/decoderpostprocessors/GribPostProcessor.java b/edexOsgi/com.raytheon.edex.plugin.grib/src/com/raytheon/edex/plugin/grib/decoderpostprocessors/GribPostProcessor.java index f5feac3fd0..4df450421a 100644 --- a/edexOsgi/com.raytheon.edex.plugin.grib/src/com/raytheon/edex/plugin/grib/decoderpostprocessors/GribPostProcessor.java +++ b/edexOsgi/com.raytheon.edex.plugin.grib/src/com/raytheon/edex/plugin/grib/decoderpostprocessors/GribPostProcessor.java @@ -317,8 +317,8 @@ public class GribPostProcessor { private synchronized void initProcessorMap() { IPathManager pathMgr = PathManagerFactory.getPathManager(); LocalizationLevel[] levels = new LocalizationLevel[] { - LocalizationLevel.BASE, LocalizationLevel.REGION, - LocalizationLevel.CONFIGURED, LocalizationLevel.SITE }; + LocalizationLevel.BASE, LocalizationLevel.CONFIGURED, + LocalizationLevel.SITE }; Map files = pathMgr .getTieredLocalizationFile(LocalizationType.COMMON_STATIC, diff --git a/edexOsgi/com.raytheon.edex.plugin.grib/src/com/raytheon/edex/plugin/grib/decoderpostprocessors/precipitation/PrecipAccumPostProcessor.java b/edexOsgi/com.raytheon.edex.plugin.grib/src/com/raytheon/edex/plugin/grib/decoderpostprocessors/precipitation/PrecipAccumPostProcessor.java index 25d3141cef..80266981ff 100644 --- a/edexOsgi/com.raytheon.edex.plugin.grib/src/com/raytheon/edex/plugin/grib/decoderpostprocessors/precipitation/PrecipAccumPostProcessor.java +++ b/edexOsgi/com.raytheon.edex.plugin.grib/src/com/raytheon/edex/plugin/grib/decoderpostprocessors/precipitation/PrecipAccumPostProcessor.java @@ -438,8 +438,8 @@ public class PrecipAccumPostProcessor extends DecoderPostProcessor { IPathManager pathMgr = PathManagerFactory.getPathManager(); LocalizationLevel[] levels = new LocalizationLevel[] { - LocalizationLevel.BASE, LocalizationLevel.REGION, - LocalizationLevel.CONFIGURED, LocalizationLevel.SITE }; + LocalizationLevel.BASE, LocalizationLevel.CONFIGURED, + LocalizationLevel.SITE }; Map files = pathMgr .getTieredLocalizationFile(LocalizationType.COMMON_STATIC, diff --git a/edexOsgi/com.raytheon.edex.plugin.grib/utility/common_static/base/grid/master_grib2_lookup.txt b/edexOsgi/com.raytheon.edex.plugin.grib/utility/common_static/base/grid/master_grib2_lookup.txt index d83e9fc9e4..d19b47e350 100644 --- a/edexOsgi/com.raytheon.edex.plugin.grib/utility/common_static/base/grid/master_grib2_lookup.txt +++ b/edexOsgi/com.raytheon.edex.plugin.grib/utility/common_static/base/grid/master_grib2_lookup.txt @@ -221,7 +221,7 @@ SnD_NMM-NCEP_21600-0 snowd6hr // Catchall that always maps probability of precip over 0.245mm(1/100 in) to POP. TP0.254mm POP -// Throw 1-hr and 2-hr precip on the floor for RUC13 +// Throw 1-hr and 2-hr precip on the floor for RAP13 CP_RUC2-NCEP_165x165_7200-0 PWS64 CP_RUC2-NCEP_165x165_10800-0 PWS64 LgSP_RUC2-NCEP_165x165_7200-0 PWS64 diff --git a/edexOsgi/com.raytheon.edex.plugin.warning/WarningDecoder.py b/edexOsgi/com.raytheon.edex.plugin.warning/WarningDecoder.py index 4f10567a44..0cb0d49e58 100644 --- a/edexOsgi/com.raytheon.edex.plugin.warning/WarningDecoder.py +++ b/edexOsgi/com.raytheon.edex.plugin.warning/WarningDecoder.py @@ -1,26 +1,4 @@ -#!/usr/local/python/bin/python - -# This program decodes a product's UGC and VTEC strings - -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## +#!/usr/bin/env python ## # This program decodes a product's UGC and VTEC strings # diff --git a/edexOsgi/com.raytheon.uf.common.aviation/utility/common_static/base/aviation/python/TafDecoderTestsA2.py b/edexOsgi/com.raytheon.uf.common.aviation/utility/common_static/base/aviation/python/TafDecoderTestsA2.py index 82d7886fae..a134d81941 100644 --- a/edexOsgi/com.raytheon.uf.common.aviation/utility/common_static/base/aviation/python/TafDecoderTestsA2.py +++ b/edexOsgi/com.raytheon.uf.common.aviation/utility/common_static/base/aviation/python/TafDecoderTestsA2.py @@ -1,4 +1,4 @@ -#!/usr/local/viz/python/bin/python +#!/usr/bin/env python # # Author: M. Oberfield # Date: 31 March 2009 diff --git a/edexOsgi/com.raytheon.uf.common.damagepath/.classpath b/edexOsgi/com.raytheon.uf.common.damagepath/.classpath deleted file mode 100644 index eca7bdba8f..0000000000 --- a/edexOsgi/com.raytheon.uf.common.damagepath/.classpath +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/edexOsgi/com.raytheon.uf.common.damagepath/.project b/edexOsgi/com.raytheon.uf.common.damagepath/.project deleted file mode 100644 index ce796c1ae8..0000000000 --- a/edexOsgi/com.raytheon.uf.common.damagepath/.project +++ /dev/null @@ -1,28 +0,0 @@ - - - com.raytheon.uf.common.damagepath - - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.eclipse.pde.ManifestBuilder - - - - - org.eclipse.pde.SchemaBuilder - - - - - - org.eclipse.pde.PluginNature - org.eclipse.jdt.core.javanature - - diff --git a/edexOsgi/com.raytheon.uf.common.damagepath/META-INF/MANIFEST.MF b/edexOsgi/com.raytheon.uf.common.damagepath/META-INF/MANIFEST.MF deleted file mode 100644 index 68c40aa32c..0000000000 --- a/edexOsgi/com.raytheon.uf.common.damagepath/META-INF/MANIFEST.MF +++ /dev/null @@ -1,10 +0,0 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: Damage Path Common plugin -Bundle-SymbolicName: com.raytheon.uf.common.damagepath -Bundle-Version: 1.15.0.qualifier -Bundle-Vendor: RAYTHEON -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 -Require-Bundle: com.raytheon.uf.common.serialization.comm;bundle-version="1.14.0", - com.raytheon.uf.common.serialization;bundle-version="1.15.0" -Export-Package: com.raytheon.uf.common.damagepath.request diff --git a/edexOsgi/com.raytheon.uf.common.damagepath/build.properties b/edexOsgi/com.raytheon.uf.common.damagepath/build.properties deleted file mode 100644 index 34d2e4d2da..0000000000 --- a/edexOsgi/com.raytheon.uf.common.damagepath/build.properties +++ /dev/null @@ -1,4 +0,0 @@ -source.. = src/ -output.. = bin/ -bin.includes = META-INF/,\ - . diff --git a/edexOsgi/com.raytheon.uf.common.damagepath/src/com/raytheon/uf/common/damagepath/request/ExportToLdadRequest.java b/edexOsgi/com.raytheon.uf.common.damagepath/src/com/raytheon/uf/common/damagepath/request/ExportToLdadRequest.java deleted file mode 100644 index 720de2dddf..0000000000 --- a/edexOsgi/com.raytheon.uf.common.damagepath/src/com/raytheon/uf/common/damagepath/request/ExportToLdadRequest.java +++ /dev/null @@ -1,91 +0,0 @@ -/** - * This software was developed and / or modified by Raytheon Company, - * pursuant to Contract DG133W-05-CQ-1067 with the US Government. - * - * U.S. EXPORT CONTROLLED TECHNICAL DATA - * This software product contains export-restricted data whose - * export/transfer/disclosure is restricted by U.S. law. Dissemination - * to non-U.S. persons whether in the United States or abroad requires - * an export license or other authorization. - * - * Contractor Name: Raytheon Company - * Contractor Address: 6825 Pine Street, Suite 340 - * Mail Stop B8 - * Omaha, NE 68106 - * 402.291.0100 - * - * See the AWIPS II Master Rights File ("Master Rights File.pdf") for - * further licensing information. - **/ -package com.raytheon.uf.common.damagepath.request; - -import com.raytheon.uf.common.serialization.annotations.DynamicSerialize; -import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement; -import com.raytheon.uf.common.serialization.comm.IServerRequest; - -/** - * Request to send the given Damage Path Tool data (in GeoJSON format) to LDAD. - * - *
    - * 
    - * SOFTWARE HISTORY
    - * 
    - * Date         Ticket#    Engineer    Description
    - * ------------ ---------- ----------- --------------------------
    - * Jun 08, 2015  #4355     dgilling    Initial creation
    - * 
    - * 
    - * - * @author dgilling - * @version 1.0 - */ -@DynamicSerialize -public class ExportToLdadRequest implements IServerRequest { - - @DynamicSerializeElement - private String siteId; - - @DynamicSerializeElement - private byte[] data; - - /** - * Default constructor--should only be used by DynamicSerialize. - */ - public ExportToLdadRequest() { - } - - /** - * Construct a new request for the given site identifier with the given - * damage path data. - * - * @param siteId - * 3-character site identifier for the site making the request. - * @param data - * GeoJSON data for the damage path stored as bytes. - */ - public ExportToLdadRequest(String siteId, byte[] data) { - this.siteId = siteId; - this.data = data; - } - - @Override - public String toString() { - return "ExportToLdadRequest [siteId=" + siteId + "]"; - } - - public String getSiteId() { - return siteId; - } - - public void setSiteId(String siteId) { - this.siteId = siteId; - } - - public byte[] getData() { - return data; - } - - public void setData(byte[] data) { - this.data = data; - } -} diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.gfe/META-INF/MANIFEST.MF b/edexOsgi/com.raytheon.uf.common.dataplugin.gfe/META-INF/MANIFEST.MF index 062166b9fe..126c9bd011 100644 --- a/edexOsgi/com.raytheon.uf.common.dataplugin.gfe/META-INF/MANIFEST.MF +++ b/edexOsgi/com.raytheon.uf.common.dataplugin.gfe/META-INF/MANIFEST.MF @@ -49,7 +49,6 @@ Import-Package: com.raytheon.uf.common.activetable, com.raytheon.uf.common.gridcoverage, com.raytheon.uf.common.localization, com.raytheon.uf.common.localization.exception, - com.raytheon.uf.common.localization.region, com.raytheon.uf.common.message, com.raytheon.uf.common.pointdata, com.raytheon.uf.common.python, diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.gfe/src/com/raytheon/uf/common/dataplugin/gfe/python/GfePyIncludeUtil.java b/edexOsgi/com.raytheon.uf.common.dataplugin.gfe/src/com/raytheon/uf/common/dataplugin/gfe/python/GfePyIncludeUtil.java index 50e1ca347a..ddd592047e 100644 --- a/edexOsgi/com.raytheon.uf.common.dataplugin.gfe/src/com/raytheon/uf/common/dataplugin/gfe/python/GfePyIncludeUtil.java +++ b/edexOsgi/com.raytheon.uf.common.dataplugin.gfe/src/com/raytheon/uf/common/dataplugin/gfe/python/GfePyIncludeUtil.java @@ -353,7 +353,6 @@ public class GfePyIncludeUtil extends PythonIncludePathUtil { } public static String getVCModUtilsIncludePath() { - return getPath(PATH_MANAGER.getContext(LocalizationType.COMMON_STATIC, - LocalizationLevel.BASE), VCMOD_UTILS); + return buildIncludePath(LocalizationType.COMMON_STATIC, VCMOD_UTILS, true); } } diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.gfe/src/com/raytheon/uf/common/dataplugin/gfe/reference/ReferenceMgr.java b/edexOsgi/com.raytheon.uf.common.dataplugin.gfe/src/com/raytheon/uf/common/dataplugin/gfe/reference/ReferenceMgr.java index 787933e502..6e2041851c 100644 --- a/edexOsgi/com.raytheon.uf.common.dataplugin.gfe/src/com/raytheon/uf/common/dataplugin/gfe/reference/ReferenceMgr.java +++ b/edexOsgi/com.raytheon.uf.common.dataplugin.gfe/src/com/raytheon/uf/common/dataplugin/gfe/reference/ReferenceMgr.java @@ -42,7 +42,6 @@ import com.raytheon.uf.common.localization.LocalizationUtil; import com.raytheon.uf.common.localization.PathManagerFactory; import com.raytheon.uf.common.localization.SaveableOutputStream; import com.raytheon.uf.common.localization.exception.LocalizationException; -import com.raytheon.uf.common.localization.region.RegionLookup; import com.raytheon.uf.common.protectedfiles.ProtectedFileLookup; import com.raytheon.uf.common.serialization.SerializationException; import com.raytheon.uf.common.serialization.SingleTypeJAXBManager; @@ -433,8 +432,6 @@ public class ReferenceMgr { private LocalizationContext[] getSiteSearchContexts() { String siteId = dbGridLocation.getSiteId(); - String regionName = RegionLookup.getWfoRegion(siteId); - IPathManager pm = PathManagerFactory.getPathManager(); LocalizationContext[] searchContexts = pm .getLocalSearchHierarchy(LocalizationType.COMMON_STATIC); @@ -444,16 +441,8 @@ public class ReferenceMgr { // Set context names on appropriate localization levels for (LocalizationContext ctx : searchContexts) { LocalizationLevel level = ctx.getLocalizationLevel(); - if (((level.equals(LocalizationLevel.SITE)) - || (level.equals(LocalizationLevel.CONFIGURED)))) { + if (((level.equals(LocalizationLevel.SITE)) || (level.equals(LocalizationLevel.CONFIGURED)))) { ctx.setContextName(siteId); - } else if (level.equals(LocalizationLevel.REGION)) { - if (regionName == null) { - // Don't include REGION context if no regionName - continue; - } else { - ctx.setContextName(regionName); - } } fixedContexts.add(ctx); diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.gfe/src/com/raytheon/uf/common/dataplugin/gfe/request/SendWFOMessageRequest.java b/edexOsgi/com.raytheon.uf.common.dataplugin.gfe/src/com/raytheon/uf/common/dataplugin/gfe/request/SendWFOMessageRequest.java deleted file mode 100644 index 91f991461c..0000000000 --- a/edexOsgi/com.raytheon.uf.common.dataplugin.gfe/src/com/raytheon/uf/common/dataplugin/gfe/request/SendWFOMessageRequest.java +++ /dev/null @@ -1,108 +0,0 @@ -/** - * This software was developed and / or modified by Raytheon Company, - * pursuant to Contract DG133W-05-CQ-1067 with the US Government. - * - * U.S. EXPORT CONTROLLED TECHNICAL DATA - * This software product contains export-restricted data whose - * export/transfer/disclosure is restricted by U.S. law. Dissemination - * to non-U.S. persons whether in the United States or abroad requires - * an export license or other authorization. - * - * Contractor Name: Raytheon Company - * Contractor Address: 6825 Pine Street, Suite 340 - * Mail Stop B8 - * Omaha, NE 68106 - * 402.291.0100 - * - * See the AWIPS II Master Rights File ("Master Rights File.pdf") for - * further licensing information. - **/ -package com.raytheon.uf.common.dataplugin.gfe.request; - -import java.util.List; - -import com.raytheon.uf.common.serialization.annotations.DynamicSerialize; -import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement; - -/** - * Send WFO Message Request - * - *
    - * 
    - * SOFTWARE HISTORY
    - * 
    - * Date         Ticket#    Engineer    Description
    - * ------------ ---------- ----------- --------------------------
    - * Feb 22, 2016  #5374     randerso     Initial creation
    - * 
    - * 
    - * - * @author randerso - * @version 1.0 - */ -@DynamicSerialize -public class SendWFOMessageRequest extends AbstractGfeRequest { - /** - * List destination WFOs - */ - @DynamicSerializeElement - private List wfos; - - /** - * The message to send - */ - @DynamicSerializeElement - private String message; - - /** - * Default constructor for serialization - */ - public SendWFOMessageRequest() { - super(); - } - - /** - * Consructor - * - * @param wfos - * list of destination wfos - * @param message - * the message to be sent - */ - public SendWFOMessageRequest(List wfos, String message) { - super(); - this.wfos = wfos; - this.message = message; - } - - /** - * @return the wfos - */ - public List getWfos() { - return wfos; - } - - /** - * @param wfos - * the wfos to set - */ - public void setWfos(List wfos) { - this.wfos = wfos; - } - - /** - * @return the message - */ - public String getMessage() { - return message; - } - - /** - * @param message - * the message to set - */ - public void setMessage(String message) { - this.message = message; - } - -} diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.radar/res/scripts/radarSpatial.sql b/edexOsgi/com.raytheon.uf.common.dataplugin.radar/res/scripts/radarSpatial.sql index d08e4baf01..5a20c90f83 100644 --- a/edexOsgi/com.raytheon.uf.common.dataplugin.radar/res/scripts/radarSpatial.sql +++ b/edexOsgi/com.raytheon.uf.common.dataplugin.radar/res/scripts/radarSpatial.sql @@ -207,6 +207,7 @@ INSERT INTO "awips"."radar_spatial" ("rda_id","rpg_id_dec","immutablex","wfo_id" INSERT INTO "awips"."radar_spatial" ("rda_id","rpg_id_dec","immutablex","wfo_id","eqp_elv","name","lon","lat","elevmeter",the_geom) VALUES ('TTPA','3044','3044.0000','TBW','92.5200','Tampa International Airport','-82.51800','27.86000','28.20010',ST_GeometryFromText('POINT(-82.518 27.86)',4326) ); INSERT INTO "awips"."radar_spatial" ("rda_id","rpg_id_dec","immutablex","wfo_id","eqp_elv","name","lon","lat","elevmeter",the_geom) VALUES ('TTUL','3045','3045.0000','TSA','823.2000','Tulsa International Airport','-95.82700','36.07100','250.91136',ST_GeometryFromText('POINT(-95.827 36.071)',4326) ); INSERT INTO "awips"."radar_spatial" ("rda_id","rpg_id_dec","immutablex","wfo_id","eqp_elv","name","lon","lat","elevmeter",the_geom) VALUES ('TPSF','3046','3046.0000','OSF','1392.0604','Program Support Facility','-97.62800','35.39300','424.30000',ST_GeometryFromText('POINT(-97.628 35.393)',4326) ); +INSERT INTO "awips"."radar_spatial" ("rda_id","rpg_id_dec","immutablex","wfo_id","eqp_elv","name","lon","lat","elevmeter",the_geom) VALUES ('KNAW','4014','4014.0000','SJU','450.0','Guantanamo Bay','-75.159505','19.899916','450.0',ST_GeometryFromText('POINT(-75.159505 19.899916)',4326) ); INSERT INTO "awips"."radar_spatial" ("rda_id","rpg_id_dec","immutablex","wfo_id","eqp_elv","name","lon","lat","elevmeter",the_geom) VALUES ('EERI','4105','4105.0000','CLE','1173.0000','Erie','-80.15700','42.01800','357.53040',ST_GeometryFromText('POINT(-80.157 42.018)',4326) ); INSERT INTO "awips"."radar_spatial" ("rda_id","rpg_id_dec","immutablex","wfo_id","eqp_elv","name","lon","lat","elevmeter",the_geom) VALUES ('FQKW','4020','4020.0000','SEW','1513.0000','Makah','-124.67600','48.37200','461.16240',ST_GeometryFromText('POINT(-124.676 48.372)',4326) ); INSERT INTO "awips"."radar_spatial" ("rda_id","rpg_id_dec","immutablex","wfo_id","eqp_elv","name","lon","lat","elevmeter",the_geom) VALUES ('FQWA','4043','4043.0000','BIS','2575.0000','Watford City','-103.78100','47.67900','784.86000',ST_GeometryFromText('POINT(-103.781 47.679)',4326) ); diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.text.subscription/.classpath b/edexOsgi/com.raytheon.uf.common.dataplugin.text.subscription/.classpath deleted file mode 100644 index eca7bdba8f..0000000000 --- a/edexOsgi/com.raytheon.uf.common.dataplugin.text.subscription/.classpath +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.text.subscription/.project b/edexOsgi/com.raytheon.uf.common.dataplugin.text.subscription/.project deleted file mode 100644 index 48aa171007..0000000000 --- a/edexOsgi/com.raytheon.uf.common.dataplugin.text.subscription/.project +++ /dev/null @@ -1,28 +0,0 @@ - - - com.raytheon.uf.common.dataplugin.text.subscription - - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.eclipse.pde.ManifestBuilder - - - - - org.eclipse.pde.SchemaBuilder - - - - - - org.eclipse.pde.PluginNature - org.eclipse.jdt.core.javanature - - diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.text.subscription/META-INF/MANIFEST.MF b/edexOsgi/com.raytheon.uf.common.dataplugin.text.subscription/META-INF/MANIFEST.MF deleted file mode 100644 index 0e95cca3be..0000000000 --- a/edexOsgi/com.raytheon.uf.common.dataplugin.text.subscription/META-INF/MANIFEST.MF +++ /dev/null @@ -1,19 +0,0 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: Subscription -Bundle-SymbolicName: com.raytheon.uf.common.dataplugin.text.subscription -Bundle-Version: 1.16.0.qualifier -Bundle-Vendor: RAYTHEON -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 -Require-Bundle: com.raytheon.uf.common.serialization, - org.hibernate, - com.raytheon.uf.common.localization, - org.apache.commons.lang3;bundle-version="3.4.0" -Import-Package: - com.raytheon.uf.common.dataplugin.persist, - com.raytheon.uf.common.message, - com.raytheon.uf.common.serialization.comm, - javax.persistence -Export-Package: com.raytheon.uf.common.dataplugin.text.subscription.db, - com.raytheon.uf.common.dataplugin.text.subscription.request - diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.text.subscription/build.properties b/edexOsgi/com.raytheon.uf.common.dataplugin.text.subscription/build.properties deleted file mode 100644 index 34d2e4d2da..0000000000 --- a/edexOsgi/com.raytheon.uf.common.dataplugin.text.subscription/build.properties +++ /dev/null @@ -1,4 +0,0 @@ -source.. = src/ -output.. = bin/ -bin.includes = META-INF/,\ - . diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.text.subscription/src/com/raytheon/uf/common/dataplugin/text/subscription/db/ReplacementRecord.java b/edexOsgi/com.raytheon.uf.common.dataplugin.text.subscription/src/com/raytheon/uf/common/dataplugin/text/subscription/db/ReplacementRecord.java deleted file mode 100644 index 4da90d9176..0000000000 --- a/edexOsgi/com.raytheon.uf.common.dataplugin.text.subscription/src/com/raytheon/uf/common/dataplugin/text/subscription/db/ReplacementRecord.java +++ /dev/null @@ -1,214 +0,0 @@ -/** - * This software was developed and / or modified by Raytheon Company, - * pursuant to Contract DG133W-05-CQ-1067 with the US Government. - * - * U.S. EXPORT CONTROLLED TECHNICAL DATA - * This software product contains export-restricted data whose - * export/transfer/disclosure is restricted by U.S. law. Dissemination - * to non-U.S. persons whether in the United States or abroad requires - * an export license or other authorization. - * - * Contractor Name: Raytheon Company - * Contractor Address: 6825 Pine Street, Suite 340 - * Mail Stop B8 - * Omaha, NE 68106 - * 402.291.0100 - * - * See the AWIPS II Master Rights File ("Master Rights File.pdf") for - * further licensing information. - **/ -package com.raytheon.uf.common.dataplugin.text.subscription.db; - -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.SequenceGenerator; -import javax.persistence.Table; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlRootElement; - -import com.raytheon.uf.common.dataplugin.persist.PersistableDataObject; -import com.raytheon.uf.common.serialization.annotations.DynamicSerialize; -import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement; - -/** - * Data object for subscription record substitution attribute - * - *
    - * 
    - * SOFTWARE HISTORY
    - * 
    - * Date         Ticket#    Engineer    Description
    - * ------------ ---------- ----------- --------------------------
    - * May 22, 2014 2536       bclement    moved from autobldsrv to common.dataplugin.text
    - * 
    - * 
    - * - * @author mfegan - * @version 1.0 - */ - -@Entity -@SequenceGenerator(initialValue = 1, name = ReplacementRecord.SEQ_GEN_NAME, sequenceName = "replacementseq") -@Table(name = "replacements") -@XmlRootElement -@XmlAccessorType(XmlAccessType.NONE) -@DynamicSerialize -public class ReplacementRecord extends PersistableDataObject { - - private static final long serialVersionUID = 1L; - - public static final String SEQ_GEN_NAME = "REPLACEMENT_GENERATOR"; - - @XmlAttribute - @DynamicSerializeElement - @Id - @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = SEQ_GEN_NAME) - private long id; - - @ManyToOne - @JoinColumn(name = "subscription", nullable = false) - private SubscriptionRecord subscription; - - @XmlAttribute - @DynamicSerializeElement - @Column(length = 50) - private String key; - - @XmlAttribute - @DynamicSerializeElement - @Column(length = 2048) - private String value; - - /** - * Constructor. - */ - public ReplacementRecord() { - super(); - } - - /** - * Constructor. Creates a replacement record bound to the specified - * subscription record. - * - * @param parent - * the subscription record - * @param key - * the replacement key - * @param value - * the replacement value - */ - public ReplacementRecord(SubscriptionRecord parent, String key, String value) { - this.subscription = parent; - this.key = key; - this.value = value; - } - - /** - * @return the id - */ - public long getId() { - return id; - } - - /** - * @param id - * the id to set - */ - public void setId(long id) { - this.id = id; - } - - /** - * @return the subscription - */ - public SubscriptionRecord getSubscription() { - return subscription; - } - - /** - * @param subscription - * the subscription to set - */ - public void setSubscription(SubscriptionRecord subscription) { - this.subscription = subscription; - } - - /** - * @return the key - */ - public String getKey() { - return key; - } - - /** - * @param key - * the key to set - */ - public void setKey(String key) { - this.key = key; - } - - /** - * @return the value - */ - public String getValue() { - return value; - } - - /** - * @param value - * the value to set - */ - public void setValue(String value) { - this.value = value; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - ReplacementRecord other = (ReplacementRecord) obj; - if (this.key == null) { - if (other.key != null) { - return false; - } - } else if (!this.key.equals(other.key)) { - return false; - } - if (this.value == null) { - if (other.value != null) { - return false; - } - } else if (!this.key.equals(other.key)) { - return false; - } - return true; - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append(this.getClass().getSimpleName()).append("["); - sb.append("id=").append(this.id).append(","); - sb.append("subscription="); - try { - sb.append(this.subscription.getId()).append(","); - } catch (Exception e) { - sb.append("N/A").append(","); - } - sb.append("key='").append(this.key).append("',"); - sb.append("value='").append(this.value).append("'"); - return sb.toString(); - } -} diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.text.subscription/src/com/raytheon/uf/common/dataplugin/text/subscription/db/SubscriptionRecord.java b/edexOsgi/com.raytheon.uf.common.dataplugin.text.subscription/src/com/raytheon/uf/common/dataplugin/text/subscription/db/SubscriptionRecord.java deleted file mode 100644 index 90cc9dba7f..0000000000 --- a/edexOsgi/com.raytheon.uf.common.dataplugin.text.subscription/src/com/raytheon/uf/common/dataplugin/text/subscription/db/SubscriptionRecord.java +++ /dev/null @@ -1,398 +0,0 @@ -/** - * This software was developed and / or modified by Raytheon Company, - * pursuant to Contract DG133W-05-CQ-1067 with the US Government. - * - * U.S. EXPORT CONTROLLED TECHNICAL DATA - * This software product contains export-restricted data whose - * export/transfer/disclosure is restricted by U.S. law. Dissemination - * to non-U.S. persons whether in the United States or abroad requires - * an export license or other authorization. - * - * Contractor Name: Raytheon Company - * Contractor Address: 6825 Pine Street, Suite 340 - * Mail Stop B8 - * Omaha, NE 68106 - * 402.291.0100 - * - * See the AWIPS II Master Rights File ("Master Rights File.pdf") for - * further licensing information. - **/ -package com.raytheon.uf.common.dataplugin.text.subscription.db; - -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - -import javax.persistence.CascadeType; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.OneToMany; -import javax.persistence.SequenceGenerator; -import javax.persistence.Table; -import javax.persistence.UniqueConstraint; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; - -import com.raytheon.uf.common.dataplugin.persist.IPersistableDataObject; -import com.raytheon.uf.common.dataplugin.persist.PersistableDataObject; -import com.raytheon.uf.common.serialization.annotations.DynamicSerialize; -import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement; - -/** - * Class representing the subscriptions table in the subscription database - * schema. - * - *
    - * 
    - * SOFTWARE HISTORY
    - * 
    - * Date         Ticket#    Engineer    Description
    - * ------------ ---------- ----------- --------------------------
    - * 18Nov2008    1709       MW Fegan    Initial creation
    - * May 22, 2014 2536       bclement    moved from autobldsrv to common.dataplugin.text
    - *                                      moved matchesTrigger() to TriggerMatcher class
    - * 
    - * 
    - * - * @author mfegan - * @version 1.0 - */ -@Entity -@SequenceGenerator(initialValue = 1, name = SubscriptionRecord.SEQ_GEN_NAME, sequenceName = "subscriptionseq") -@Table(name = "subscriptions", uniqueConstraints = @UniqueConstraint(columnNames = { - "type", "trigger", "runner", "script", "filepath", "arguments" })) -@XmlRootElement -@XmlAccessorType(XmlAccessType.NONE) -@DynamicSerialize -public class SubscriptionRecord extends PersistableDataObject implements - IPersistableDataObject { - - private static final long serialVersionUID = 1L; - - public static final String SEQ_GEN_NAME = "SUBSCRIPTION_GENERATOR"; - - @XmlAttribute - @DynamicSerializeElement - @Id - @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = SEQ_GEN_NAME) - private long id; - - @XmlAttribute - @DynamicSerializeElement - @Column - private boolean active; - - @XmlAttribute - @DynamicSerializeElement - @Column(length = 10) - private String type = ""; - - @XmlAttribute - @DynamicSerializeElement - @Column(length = 512) - private String trigger = ""; - - @XmlAttribute - @DynamicSerializeElement - @Column(length = 10) - private String runner = ""; - - @XmlAttribute - @DynamicSerializeElement - @Column(length = 4048) - private String script = ""; - - @XmlAttribute - @DynamicSerializeElement - @Column(length = 512) - private String filepath = ""; - - @XmlAttribute - @DynamicSerializeElement - @Column(length = 512) - private String arguments = ""; - - /* the replacement values */ - @DynamicSerializeElement - @XmlElement - @OneToMany(cascade = CascadeType.ALL, mappedBy = "subscription", fetch = FetchType.EAGER) - private Set replacements = new HashSet(); - - /** - * - */ - public SubscriptionRecord() { - super(); - } - - /** - * @return the id - */ - public long getId() { - return id; - } - - /** - * @param id - * the id to set - */ - public void setId(long id) { - this.id = id; - } - - /** - * @return the active - */ - public boolean isActive() { - return active; - } - - /** - * @param active - * the active to set - */ - public void setActive(boolean active) { - this.active = active; - } - - /** - * @return the type - */ - public String getType() { - return type; - } - - /** - * @param type - * the type to set - */ - public void setType(String type) { - if (type == null) { - this.type = ""; - } else { - this.type = type; - } - } - - /** - * @return the trigger - */ - public String getTrigger() { - return trigger; - } - - /** - * @param trigger - * the trigger to set - */ - public void setTrigger(String trigger) { - if (trigger == null) { - this.trigger = ""; - } else { - this.trigger = trigger; - } - } - - /** - * @return the runner - */ - public String getRunner() { - return runner; - } - - /** - * @param runner - * the runner to set - */ - public void setRunner(String runner) { - if (runner == null) { - this.runner = ""; - } else { - this.runner = runner; - } - } - - /** - * @return the script - */ - public String getScript() { - return script; - } - - /** - * @param script - * the script to set - */ - public void setScript(String script) { - if (script == null) { - this.script = ""; - } else { - this.script = script; - } - } - - /** - * @return the filepath - */ - public String getFilepath() { - return filepath; - } - - /** - * @param filepath - * the filepath to set - */ - public void setFilepath(String filepath) { - if (filepath == null) { - this.filepath = ""; - } else { - this.filepath = filepath; - } - } - - /** - * @return the arguments - */ - public String getArguments() { - return arguments; - } - - /** - * @param arguments - * the arguments to set - */ - public void setArguments(String arguments) { - if (arguments == null) { - this.arguments = ""; - } else { - this.arguments = arguments; - } - } - - /** - * - * @param name - * @param value - */ - public void setAttribute(String name, String value) { - switch (Settable.getSettable(name)) { - case TRIGGER: - this.trigger = value; - break; - case RUNNER: - this.runner = value; - break; - case TYPE: - this.type = value; - break; - case COMMAND: - this.arguments = value; - break; - case FILE: - this.filepath = value; - break; - case SCRIPT: - this.script = value; - break; - case ACTIVE: - this.active = Boolean.parseBoolean(value); - break; - case ARGUMENTS: - this.arguments = value; - break; - case SUBSTITUTION: - String[] parts = value.split(":"); - ReplacementRecord rec = new ReplacementRecord(this, parts[0], - parts[1]); - this.replacements.add(rec); - break; - case DEFAULT: - // nothing to do here... - } - } - - /** - * @return the replacements - */ - public Set getReplacements() { - return replacements; - } - - /** - * @param replacements - * the replacements to set - */ - public void setReplacements(Set replacements) { - this.replacements = replacements; - } - - /** - * - * @param replacement - */ - public void addReplacement(ReplacementRecord replacement) { - this.replacements.add(replacement); - replacement.setSubscription(this); - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append(this.getClass().getSimpleName()).append("["); - sb.append("ID=").append(this.id).append(","); - sb.append("active='").append(this.active).append("',"); - sb.append("type='").append(this.type).append("',"); - sb.append("trigger='").append(this.trigger).append("',"); - sb.append("runner='").append(this.runner).append("'"); - if (this.script != null) { - sb.append(",script='").append(this.script).append("'"); - } - if (this.filepath != null) { - sb.append(",filepath='").append(this.filepath).append("'"); - } - if (this.arguments != null) { - sb.append(",arguments=").append(this.arguments); - } - if (this.replacements.size() > 0) { - sb.append(",replacements=[").append(this.replacements); - } - sb.append("]"); - return sb.toString(); - } - - /** - * - * @author mfegan - * @version 1.0 - */ - private enum Settable { - DEFAULT, RUNNER, TRIGGER, TYPE, COMMAND, FILE, SCRIPT, SUBSTITUTION, ACTIVE, ARGUMENTS; - private static final Map mappings = new HashMap() { - private static final long serialVersionUID = 1L; - { - put("runner", RUNNER); - put("type", TYPE); - put("trigger", TRIGGER); - put("command", COMMAND); - put("file", FILE); - put("filepath", FILE); - put("script", SCRIPT); - put("substitution", SUBSTITUTION); - put("active", ACTIVE); - put("arguments", ARGUMENTS); - } - }; - - public static final Settable getSettable(String key) { - return mappings.containsKey(key) ? mappings.get(key) : DEFAULT; - } - } -} diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.text.subscription/src/com/raytheon/uf/common/dataplugin/text/subscription/request/SubscriptionRequest.java b/edexOsgi/com.raytheon.uf.common.dataplugin.text.subscription/src/com/raytheon/uf/common/dataplugin/text/subscription/request/SubscriptionRequest.java deleted file mode 100644 index 7d51218824..0000000000 --- a/edexOsgi/com.raytheon.uf.common.dataplugin.text.subscription/src/com/raytheon/uf/common/dataplugin/text/subscription/request/SubscriptionRequest.java +++ /dev/null @@ -1,77 +0,0 @@ -/** - * This software was developed and / or modified by Raytheon Company, - * pursuant to Contract DG133W-05-CQ-1067 with the US Government. - * - * U.S. EXPORT CONTROLLED TECHNICAL DATA - * This software product contains export-restricted data whose - * export/transfer/disclosure is restricted by U.S. law. Dissemination - * to non-U.S. persons whether in the United States or abroad requires - * an export license or other authorization. - * - * Contractor Name: Raytheon Company - * Contractor Address: 6825 Pine Street, Suite 340 - * Mail Stop B8 - * Omaha, NE 68106 - * 402.291.0100 - * - * See the AWIPS II Master Rights File ("Master Rights File.pdf") for - * further licensing information. - **/ -package com.raytheon.uf.common.dataplugin.text.subscription.request; - -import com.raytheon.uf.common.message.Message; -import com.raytheon.uf.common.serialization.annotations.DynamicSerialize; -import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement; -import com.raytheon.uf.common.serialization.comm.IServerRequest; - -/** - * Object used by thrift clients to make subscription requests - * - *
    - * 
    - * SOFTWARE HISTORY
    - * 
    - * Date         Ticket#    Engineer    Description
    - * ------------ ---------- ----------- --------------------------
    - * Sep 5, 2014  2926   bclement     Initial creation
    - * 
    - * 
    - * - * @author bclement - * @version 1.0 - */ -@DynamicSerialize -public class SubscriptionRequest implements IServerRequest { - - @DynamicSerializeElement - private Message message; - - /** - * - */ - public SubscriptionRequest() { - } - - /** - * @param message - */ - public SubscriptionRequest(Message message) { - this.message = message; - } - - /** - * @return the message - */ - public Message getMessage() { - return message; - } - - /** - * @param message - * the message to set - */ - public void setMessage(Message message) { - this.message = message; - } - -} diff --git a/edexOsgi/com.raytheon.uf.common.gfe.ifpclient/src/com/raytheon/uf/common/gfe/ifpclient/IFPClient.java b/edexOsgi/com.raytheon.uf.common.gfe.ifpclient/src/com/raytheon/uf/common/gfe/ifpclient/IFPClient.java index bec6bfee25..231dbfd9a7 100644 --- a/edexOsgi/com.raytheon.uf.common.gfe.ifpclient/src/com/raytheon/uf/common/gfe/ifpclient/IFPClient.java +++ b/edexOsgi/com.raytheon.uf.common.gfe.ifpclient/src/com/raytheon/uf/common/gfe/ifpclient/IFPClient.java @@ -68,7 +68,6 @@ import com.raytheon.uf.common.dataplugin.gfe.request.IscRequestQueryRequest.IscQ import com.raytheon.uf.common.dataplugin.gfe.request.LockChangeRequest; import com.raytheon.uf.common.dataplugin.gfe.request.SaveGfeGridRequest; import com.raytheon.uf.common.dataplugin.gfe.request.SendIscGridRequest; -import com.raytheon.uf.common.dataplugin.gfe.request.SendWFOMessageRequest; import com.raytheon.uf.common.dataplugin.gfe.sample.SampleData; import com.raytheon.uf.common.dataplugin.gfe.sample.SampleId; import com.raytheon.uf.common.dataplugin.gfe.server.lock.LockTable; @@ -1138,10 +1137,6 @@ public class IFPClient { return (ServerResponse) makeRequest(request); } - public ServerResponse sendWFOMessage(List wfos, String message) { - SendWFOMessageRequest request = new SendWFOMessageRequest(wfos, message); - return makeRequest(request); - } /** * To get a "legacy-style" (prior to A2 release 16.2.2) IFPClient diff --git a/edexOsgi/com.raytheon.uf.common.localization.python/utility/common_static/base/python/PythonOverriderPure.py b/edexOsgi/com.raytheon.uf.common.localization.python/utility/common_static/base/python/PythonOverriderPure.py index 0744125610..746f61a101 100644 --- a/edexOsgi/com.raytheon.uf.common.localization.python/utility/common_static/base/python/PythonOverriderPure.py +++ b/edexOsgi/com.raytheon.uf.common.localization.python/utility/common_static/base/python/PythonOverriderPure.py @@ -1,23 +1,3 @@ -# # -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -# # - # # The pure python module override solution. Merges multiple python modules retrieved # from localization. @@ -31,10 +11,7 @@ # 03/12/13 bkowal Initial Creation. # 02/17/14 2712 bkowal Provide a default value for localization site. # 03/19/14 2929 bkowal 'REGION' is now recognized as a valid localization level. -# -# -# - +# 02/04/19 mjames@ucar Removed REGION. # # TODO: Update to use the HTTP Rest Service to retrieve localization files instead # of thrift. @@ -53,7 +30,7 @@ from dynamicserialize.dstypes.com.raytheon.uf.common.localization import Localiz from dynamicserialize.dstypes.com.raytheon.uf.common.localization.stream import LocalizationStreamGetRequest BUFFER_SIZE = 512 * 1024 -availableLevels = ['BASE', 'REGION', 'CONFIGURED', 'SITE', 'USER'] +availableLevels = ['BASE', 'CONFIGURED', 'SITE', 'USER'] def importModule(name, localizationHost, localizationPort, localizedSite=None, localizationUser=None, loctype='COMMON_STATIC', level=None): @@ -258,4 +235,4 @@ def _retrieveFileFromServer(localizationContext, filename, thrift): request.setOffset(request.getOffset() + len(bytes)) finished = serverResponse.getEnd() - return bytes \ No newline at end of file + return bytes diff --git a/edexOsgi/com.raytheon.uf.common.ohd/utility/common_static/base/hydro/Apps_defaults b/edexOsgi/com.raytheon.uf.common.ohd/utility/common_static/base/hydro/Apps_defaults index 74f5c025d4..0432a6ec56 100644 --- a/edexOsgi/com.raytheon.uf.common.ohd/utility/common_static/base/hydro/Apps_defaults +++ b/edexOsgi/com.raytheon.uf.common.ohd/utility/common_static/base/hydro/Apps_defaults @@ -228,8 +228,6 @@ alarm_report_mode : NEAREST # Executable directory tokens. sys_java_dir : /awips2/java # Location of Java COTS software hydro_publicbin : $(apps_dir)/public/bin -sqlcmd_bin_dir : /usr/local/sqlcmd/bin # location of sqlcmd executable on both HP and - # Linux beginning in OB3 ################################################################################# # Default Display Maps - comma separated list of maps with no spaces diff --git a/edexOsgi/com.raytheon.uf.common.registry.schemas.iso19115/src/net/opengis/gml/_3/GridType.java b/edexOsgi/com.raytheon.uf.common.registry.schemas.iso19115/src/net/opengis/gml/_3/GridType.java index 8be6995e89..8b10a6b14b 100644 --- a/edexOsgi/com.raytheon.uf.common.registry.schemas.iso19115/src/net/opengis/gml/_3/GridType.java +++ b/edexOsgi/com.raytheon.uf.common.registry.schemas.iso19115/src/net/opengis/gml/_3/GridType.java @@ -73,8 +73,8 @@ public class GridType *

    * You are getting this "catch-all" property because of the following reason: * The field name "AxisLabels" is used by two different parts of a schema. See: - * line 28 of file:/common/bphillip/DataDelivery_FILES/standards/schemas/gml/grids.xsd - * line 46 of file:/common/bphillip/DataDelivery_FILES/standards/schemas/gml/geometryBasic0d1d.xsd + * line 28 of DataDelivery_FILES/standards/schemas/gml/grids.xsd + * line 46 of DataDelivery_FILES/standards/schemas/gml/geometryBasic0d1d.xsd *

    * To get rid of this property, apply a property customization to one * of both of the following declarations to change their names: diff --git a/edexOsgi/com.raytheon.uf.edex.activetable/utility/common_static/base/vtec/sendAT.py b/edexOsgi/com.raytheon.uf.edex.activetable/utility/common_static/base/vtec/sendAT.py index 35f0a16567..aa8049326d 100644 --- a/edexOsgi/com.raytheon.uf.edex.activetable/utility/common_static/base/vtec/sendAT.py +++ b/edexOsgi/com.raytheon.uf.edex.activetable/utility/common_static/base/vtec/sendAT.py @@ -1,23 +1,3 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - # # Port of sendAT code from AWIPS1 # @@ -201,13 +181,13 @@ def execute_send_at(myServerHost, myServerPort, myServerProtocol, else: servers = [] for mhss in mhsSites: - for port in xrange(98000000, 98000002): - for site in sites: - for host in ['dx4f','px3']: - destServer = {'mhsid': mhss, 'host': host, - 'port': port, 'protocol': "20070723", - 'site': site} - destServers.append(destServer) + port = 98000000 + for site in sites: + for host in ['localhost']: + destServer = {'mhsid': mhss, 'host': host, + 'port': port, 'protocol': "20070723", + 'site': site} + destServers.append(destServer) irt.addDestinationXML(iscOut, destServers) #add the dest server xml diff --git a/edexOsgi/com.raytheon.uf.edex.activetable/utility/common_static/base/vtec/sendTCV.py b/edexOsgi/com.raytheon.uf.edex.activetable/utility/common_static/base/vtec/sendTCV.py index 7d8ee4cc16..8b93cabf66 100644 --- a/edexOsgi/com.raytheon.uf.edex.activetable/utility/common_static/base/vtec/sendTCV.py +++ b/edexOsgi/com.raytheon.uf.edex.activetable/utility/common_static/base/vtec/sendTCV.py @@ -1,22 +1,4 @@ ## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## # # Send TCV Advisory Files to VTEC partners # @@ -30,12 +12,6 @@ # ## -## -# This is a base file that is not intended to be overridden. -## - - - import os, errno, tempfile import xml diff --git a/edexOsgi/com.raytheon.uf.edex.common.core.feature/feature.xml b/edexOsgi/com.raytheon.uf.edex.common.core.feature/feature.xml index f06419f235..1602ddd4f6 100644 --- a/edexOsgi/com.raytheon.uf.edex.common.core.feature/feature.xml +++ b/edexOsgi/com.raytheon.uf.edex.common.core.feature/feature.xml @@ -84,13 +84,6 @@ version="0.0.0" unpack="false"/> - - - - + + com.raytheon.uf.edex.hydro.feature + + + + + + org.eclipse.pde.FeatureBuilder + + + + + + org.eclipse.pde.FeatureNature + + diff --git a/edexOsgi/com.raytheon.uf.edex.hydro.feature/build.properties b/edexOsgi/com.raytheon.uf.edex.hydro.feature/build.properties new file mode 100644 index 0000000000..64f93a9f0b --- /dev/null +++ b/edexOsgi/com.raytheon.uf.edex.hydro.feature/build.properties @@ -0,0 +1 @@ +bin.includes = feature.xml diff --git a/cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes80.txt b/edexOsgi/com.raytheon.uf.edex.hydro.feature/com.raytheon.uf.edex.hydro.feature.ecl similarity index 100% rename from cave/com.raytheon.viz.gfe/help/TextProductUserGuide/notes80.txt rename to edexOsgi/com.raytheon.uf.edex.hydro.feature/com.raytheon.uf.edex.hydro.feature.ecl diff --git a/edexOsgi/com.raytheon.uf.edex.hydro.feature/feature.xml b/edexOsgi/com.raytheon.uf.edex.hydro.feature/feature.xml new file mode 100644 index 0000000000..e813cf2bc0 --- /dev/null +++ b/edexOsgi/com.raytheon.uf.edex.hydro.feature/feature.xml @@ -0,0 +1,111 @@ + + + + + [Enter Feature Description here.] + + + + [Enter Copyright Description here.] + + + + [Enter License Description here.] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.grid/esb/etc/ingestGrib.sh b/edexOsgi/com.raytheon.uf.edex.plugin.grid/esb/etc/ingestGrib.sh index a7ac968fe2..7a889698bf 100644 --- a/edexOsgi/com.raytheon.uf.edex.plugin.grid/esb/etc/ingestGrib.sh +++ b/edexOsgi/com.raytheon.uf.edex.plugin.grid/esb/etc/ingestGrib.sh @@ -1,24 +1,4 @@ #!/bin/bash -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - ## # The ingestGrib mode was designed to handle decoding and storage of all GRIB # (both GRIB1 and GRIB2) data. It was originally necessary due to instability @@ -27,32 +7,33 @@ # the data flow of other datatypes. ## -numCores=`grep -c ^processor /proc/cpuinfo` - -let "GRIB_DECODE_THREADS=numCores / 2" - -if [ $GRIB_DECODE_THREADS -gt 12 ]; then - GRIB_DECODE_THREADS=12 -elif [ $GRIB_DECODE_THREADS -lt 4 ]; then +numCores=`grep -c ^processor /proc/cpuinfo` # e.g. = 48 +let "GRIB_DECODE_THREADS = numCores / 4" # = 12 +let "GRIB_SPLIT_THREADS = GRIB_DECODE_THREADS / 2" # = 6 +if [ $GRIB_DECODE_THREADS -lt 4 ]; then GRIB_DECODE_THREADS=4 fi +if [ $GRIB_SPLIT_THREADS -lt 2 ]; then + GRIB_SPLIT_THREADS=2 +fi +let "MAX_MEM = GRIB_DECODE_THREADS * 400" # = 12 * 400 = 4800MB +let "GRIB_MAX_GRID_POINTS = GRIB_DECODE_THREADS * 25000000" # = 12 * 25,000,000 = 300,000,000 +let "GRID_PERSIST_THREADS = GRIB_DECODE_THREADS / 2" # = 6 +let "GRID_MAX_PERSIST_MEMORY_IN_MB = GRID_PERSIST_THREADS * 50" # = 6 * 50 = 300 +let "METADATA_POOL_MAX = GRIB_DECODE_THREADS * 2" # = 24 -# sets bounds based on # of threads available -let "MAX_MEM = GRIB_DECODE_THREADS * 196" # in Meg -let "GRIB_MAX_GRID_POINTS = GRIB_DECODE_THREADS * 25000000" -let "GRID_PERSIST_THREADS = GRIB_DECODE_THREADS / 2" -let "GRID_POSTPROCESS_THREADS = 1" -let "GRID_MAX_PERSIST_MEMORY_IN_MB = GRID_PERSIST_THREADS * 50" -let "METADATA_POOL_MAX = GRIB_DECODE_THREADS * 2" - -export INIT_MEM=128 # in Meg +export INIT_MEM=128 # MB export MAX_MEM export GRIB_DECODE_THREADS +export GRIB_SPLIT_THREADS export GRIB_MAX_GRID_POINTS export GRID_PERSIST_THREADS -export GRID_POSTPROCESS_THREADS +export GRID_POSTPROCESS_THREADS=1 export GRID_MAX_PERSIST_MEMORY_IN_MB export METADATA_POOL_MAX +# Minimum coverage of a defined subgrid for the grid to be accepted +export SUB_GRID_COVERAGE_PERCENT=20 +export GRID_MAX_GRIDS_PER_PERSIST=100 +export GRID_MAX_MEMORY_IN_MB_PER_PERSIST=10 export EDEX_DEBUG_PORT=5007 - diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/.classpath b/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/.classpath deleted file mode 100644 index eca7bdba8f..0000000000 --- a/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/.classpath +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/.project b/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/.project deleted file mode 100644 index c7edfedad8..0000000000 --- a/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/.project +++ /dev/null @@ -1,28 +0,0 @@ - - - com.raytheon.uf.edex.plugin.text.subscription - - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.eclipse.pde.ManifestBuilder - - - - - org.eclipse.pde.SchemaBuilder - - - - - - org.eclipse.pde.PluginNature - org.eclipse.jdt.core.javanature - - diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/META-INF/MANIFEST.MF b/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/META-INF/MANIFEST.MF deleted file mode 100644 index c2ba7d4ccd..0000000000 --- a/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/META-INF/MANIFEST.MF +++ /dev/null @@ -1,23 +0,0 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: Subscription -Bundle-SymbolicName: com.raytheon.uf.edex.plugin.text.subscription -Bundle-Version: 1.16.0.qualifier -Bundle-Vendor: RAYTHEON -Require-Bundle: org.apache.commons.lang3;bundle-version="3.4.0", - org.slf4j;bundle-version="1.7.21", - com.raytheon.edex.common, - javax.persistence, - com.raytheon.uf.common.serialization.comm, - com.raytheon.uf.common.status, - com.raytheon.uf.common.site, - com.raytheon.uf.edex.archive, - com.raytheon.uf.common.localization;bundle-version="1.14.0", - com.raytheon.uf.edex.plugin.text, - com.raytheon.uf.edex.plugin.text.dbsrv, - com.raytheon.uf.common.dataplugin, - com.raytheon.uf.common.dataplugin.text, - com.raytheon.uf.common.dataplugin.text.subscription -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 -Import-Package: com.raytheon.uf.common.message, - org.quartz diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/build.properties b/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/build.properties deleted file mode 100644 index 73974cda80..0000000000 --- a/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/build.properties +++ /dev/null @@ -1,6 +0,0 @@ -source.. = src/ -output.. = bin/ -bin.includes = META-INF/,\ - .,\ - res/,\ - utility/ diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/res/spring/text-subscription-common.xml b/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/res/spring/text-subscription-common.xml deleted file mode 100644 index 7027296657..0000000000 --- a/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/res/spring/text-subscription-common.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - - - - - - - - java.lang.Throwable - - - - - - - - - - - java.lang.Throwable - - - - - - - diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/res/spring/text-subscription-ingest.xml b/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/res/spring/text-subscription-ingest.xml deleted file mode 100644 index f130958f49..0000000000 --- a/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/res/spring/text-subscription-ingest.xml +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - - - - - - - - - - java.lang.Throwable - - - - - - - - - - - - - - - - - - java.lang.Throwable - - - - - - - diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/res/spring/text-subscription-request.xml b/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/res/spring/text-subscription-request.xml deleted file mode 100644 index aa008a2835..0000000000 --- a/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/res/spring/text-subscription-request.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/src/com/raytheon/uf/edex/plugin/text/subscription/dao/SubscriptionDAO.java b/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/src/com/raytheon/uf/edex/plugin/text/subscription/dao/SubscriptionDAO.java deleted file mode 100644 index 4380b4efa9..0000000000 --- a/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/src/com/raytheon/uf/edex/plugin/text/subscription/dao/SubscriptionDAO.java +++ /dev/null @@ -1,266 +0,0 @@ -/** - * This software was developed and / or modified by Raytheon Company, - * pursuant to Contract DG133W-05-CQ-1067 with the US Government. - * - * U.S. EXPORT CONTROLLED TECHNICAL DATA - * This software product contains export-restricted data whose - * export/transfer/disclosure is restricted by U.S. law. Dissemination - * to non-U.S. persons whether in the United States or abroad requires - * an export license or other authorization. - * - * Contractor Name: Raytheon Company - * Contractor Address: 6825 Pine Street, Suite 340 - * Mail Stop B8 - * Omaha, NE 68106 - * 402.291.0100 - * - * See the AWIPS II Master Rights File ("Master Rights File.pdf") for - * further licensing information. - **/ -package com.raytheon.uf.edex.plugin.text.subscription.dao; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.hibernate.Criteria; -import org.hibernate.Query; -import org.hibernate.Session; -import org.springframework.transaction.TransactionStatus; -import org.springframework.transaction.support.TransactionCallback; - -import com.raytheon.uf.common.dataplugin.persist.PersistableDataObject; -import com.raytheon.uf.common.dataplugin.text.subscription.db.SubscriptionRecord; -import com.raytheon.uf.common.dataquery.db.QueryParam; -import com.raytheon.uf.common.message.Property; -import com.raytheon.uf.common.status.IUFStatusHandler; -import com.raytheon.uf.common.status.UFStatus; -import com.raytheon.uf.common.status.UFStatus.Priority; -import com.raytheon.uf.edex.core.EDEXUtil; -import com.raytheon.uf.edex.database.DataAccessLayerException; -import com.raytheon.uf.edex.database.dao.CoreDao; -import com.raytheon.uf.edex.database.dao.DaoConfig; -import com.raytheon.uf.edex.database.query.DatabaseQuery; - -/** - * DAO for interaction with the subscription database. - * - *

    - * 
    - * SOFTWARE HISTORY
    - * Date         Ticket#    Engineer    Description
    - * ------------ ---------- ----------- --------------------------
    - * 14Nov2008    1709       MW Fegan    Initial creation.
    - * 14Apr2011	5163	   cjeanbap	   NWRWAVES Setting AFOS text triggers in AWIPS II
    - * 04/24/13     1949       rjpeter     Removed @Override on delete.
    - * Nov 08, 2013 2361       njensen     Chaged method signature of saveOrUpdate(Object)
    - * May 22, 2014 2536       bclement    moved from autobldsrv to edex.plugin.text
    - * 10/16/2014   3454       bphillip    Upgrading to Hibernate 4
    - * 10/28/2014   3454       bphillip    Fix usage of getSession()
    - * Jan 18, 2016 4562       tjensen     Moved from edex.plugin.text to 
    - *                                     edex.plugin.text.subscription
    - * 
    - * - * @author mfegan - * @version 1.0 - */ - -public class SubscriptionDAO extends CoreDao { - private static final transient IUFStatusHandler statusHandler = UFStatus - .getHandler(SubscriptionDAO.class); - - /** - * Route to put a subscription notify message. - */ - private static String subscriptionNotifyURI; - - /** - * List of all cached subscription records - */ - private static List cachedRecords = null; - - /** - * Maps properties to subscription records - */ - private static Map> recordsMap = new HashMap>(); - - private static boolean dirtyRecords = true; - - private static boolean dirtyMap = true; - - public SubscriptionDAO() { - this(DaoConfig.forClass("fxa", SubscriptionRecord.class)); - } - - /** - * @param config - */ - public SubscriptionDAO(DaoConfig config) { - super(config); - } - - public void delete(PersistableDataObject obj) { - super.delete(obj); - sendSubscriptionNotifyMessage(String.valueOf(obj.getIdentifier())); - } - - /** - * Write record but do not attempt to update if already exists - * - * @param record - * @return - */ - public boolean write(SubscriptionRecord record) { - // query - Session session = this.getSession(); - try { - Query query = session - .createQuery("from SubscriptionRecord where type = :type and trigger = :trigger and runner = :runner and script = :script and filepath = :filepath and arguments = :arguments"); - query.setParameter("type", record.getType()); - query.setParameter("trigger", record.getTrigger()); - query.setParameter("runner", record.getRunner()); - query.setParameter("script", record.getScript()); - query.setParameter("filepath", record.getFilepath()); - query.setParameter("arguments", record.getArguments()); - List results = query.list(); - - if (results.size() > 0) { - return false; - } else { - create(record); - sendSubscriptionNotifyMessage(String.valueOf(record - .getIdentifier())); - return true; - } - } finally { - if (session != null) { - session.close(); - } - } - } - - @Override - public void saveOrUpdate(Object obj) { - super.saveOrUpdate(obj); - sendSubscriptionNotifyMessage(String - .valueOf(((PersistableDataObject) obj).getIdentifier())); - } - - @Override - public void update(PersistableDataObject obj) { - super.update(obj); - sendSubscriptionNotifyMessage(String.valueOf(obj.getIdentifier())); - } - - /** - * Returns a list containing all subscriptions currently in the database. - * - * @return the list of subscriptions - */ - public List getSubscriptions() { - if ((cachedRecords == null) || dirtyRecords) { - List retVal = loadAll(); - if (retVal == null) { - logger.info("Unable to perform query, 'null' result returned"); - cachedRecords = new ArrayList(); - } else { - cachedRecords = (List) retVal; - dirtyRecords = false; - } - } - - return cachedRecords; - } - - @SuppressWarnings("unchecked") - private List loadAll() { - return (List) txTemplate - .execute(new TransactionCallback>() { - @Override - public List doInTransaction( - TransactionStatus status) { - Criteria criteria = getCurrentSession().createCriteria( - daoClass); - return criteria.list(); - } - }); - } - - /** - * - * @param props - * @return - */ - @SuppressWarnings("unchecked") - public List getSubscriptions(Collection props) { - StringBuilder sb = new StringBuilder(); - for (Property p : props) { - sb.append(p.getName()).append('=').append(p.getValue()).append(' '); - } - String key = sb.toString().trim(); - if (dirtyMap) { - synchronized (recordsMap) { - recordsMap.clear(); - } - dirtyMap = false; - } - - List rval = null; - synchronized (recordsMap) { - rval = recordsMap.get(key); - } - if ((rval == null) || rval.isEmpty()) { - List retVal = null; - List params = new ArrayList(); - for (Property prop : props) { - QueryParam param = new QueryParam(prop.getName(), - prop.getValue()); - param.setClassName(this.daoClass.getName()); - params.add(param); - } - DatabaseQuery query = new DatabaseQuery(this.daoClass, params); - logger.debug("Executing query" + query.createHQLQuery()); - try { - retVal = queryByCriteria(query); - logger.debug("Query result: " + retVal); - if (retVal == null) { - logger.info("Unable to perform query, 'null' result returned"); - return new ArrayList(); - } - } catch (DataAccessLayerException e) { - logger.error("Unable to perform query, ", e); - return new ArrayList(); - } - rval = (List) retVal; - synchronized (recordsMap) { - recordsMap.put(key, rval); - } - } - return rval; - } - - public void updateCache(Object obj) { - dirtyRecords = true; - dirtyMap = true; - } - - public void setSubscriptionNotifyURI(String uri) { - subscriptionNotifyURI = uri; - } - - private void sendSubscriptionNotifyMessage(String id) { - dirtyMap = true; - dirtyRecords = true; - if (subscriptionNotifyURI != null) { - try { - EDEXUtil.getMessageProducer().sendAsyncUri( - subscriptionNotifyURI, id); - } catch (Exception e) { - statusHandler.handle(Priority.SIGNIFICANT, - "Failed to send subscription notify message", e); - } - } - } -} diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/src/com/raytheon/uf/edex/plugin/text/subscription/runners/ASubscribeRunner.java b/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/src/com/raytheon/uf/edex/plugin/text/subscription/runners/ASubscribeRunner.java deleted file mode 100644 index fcad3bdd83..0000000000 --- a/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/src/com/raytheon/uf/edex/plugin/text/subscription/runners/ASubscribeRunner.java +++ /dev/null @@ -1,123 +0,0 @@ -/** - * This software was developed and / or modified by Raytheon Company, - * pursuant to Contract DG133W-05-CQ-1067 with the US Government. - * - * U.S. EXPORT CONTROLLED TECHNICAL DATA - * This software product contains export-restricted data whose - * export/transfer/disclosure is restricted by U.S. law. Dissemination - * to non-U.S. persons whether in the United States or abroad requires - * an export license or other authorization. - * - * Contractor Name: Raytheon Company - * Contractor Address: 6825 Pine Street, Suite 340 - * Mail Stop B8 - * Omaha, NE 68106 - * 402.291.0100 - * - * See the AWIPS II Master Rights File ("Master Rights File.pdf") for - * further licensing information. - **/ -package com.raytheon.uf.edex.plugin.text.subscription.runners; - -import java.util.ArrayList; -import java.util.List; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.raytheon.uf.common.message.Message; -import com.raytheon.uf.common.message.Property; - -/** - * Abstract base class for all subscription runners. Extending classes must - * implement the {@link #execute()} method. Default implementations of other - * methods specified in {@link ISubscribeRunner} are provided. - *

    - * Also provided are two factory methods ( - * {@link ASubscribeRunner#getInstance(String)} and - * {@link ASubscribeRunner#getInstance(String, Message)}) may be used to - * instantiate the known concrete implementations. - *

    - * Expected usage: - * - *

    - * 
    - *     String type = "...";  // name of an appropriate runner action
    - *     Message message = null;  // initialized later...
    - *     
    - *     List results = null;
    - *     SubscribeAction action = SubscribeAction.translate(type);
    - *     try {
    - *        ISubscribeRunner runner = ASubscribeRunner.getInstance(type);
    - *        runner.initialize(message);
    - *        runner.execute();
    - *        results = runner.getResults();
    - *     } catch (EdexException e) {
    - *        // handle the exception
    - *     }
    - * 
    - * 
    - * - *
    - * 
    - * SOFTWARE HISTORY
    - * 
    - * Date         Ticket#    Engineer    Description
    - * ------------ ---------- ----------- --------------------------
    - * 14Nov2008    1709       MW Fegan    Initial creation
    - * May 22, 2014 2536       bclement    moved from autobldsrv to edex.plugin.text
    - * Dec 09, 2015 5166       kbisanz     Update logging to use SLF4J.
    - * Jan 18, 2016 4562       tjensen     Moved from edex.plugin.text to 
    - *                                     edex.plugin.text.subscription
    - * 
    - * 
    - * - * @author mfegan - * @version 1.0 - */ - -public abstract class ASubscribeRunner implements ISubscribeRunner { - /** - * the logger - */ - protected final Logger logger = LoggerFactory.getLogger(getClass()); - - protected Message message = null; - - protected List results = null; - - /** - * Constructor. Does not initialize the message to process. Must be followed - * by a call to {@link #initialize(message)}. - */ - protected ASubscribeRunner() { - this(null); - } - - /** - * Constructor. This version combines object construction and - * initialization. - * - * @param message - * the message object to process - */ - protected ASubscribeRunner(Message message) { - super(); - this.initialize(message); - } - - @Override - public abstract boolean execute(); - - @Override - public void initialize(Message message) { - this.results = new ArrayList(); - this.message = message; - } - - @Override - public List getResults() { - return this.results; - } - -} diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/src/com/raytheon/uf/edex/plugin/text/subscription/runners/ISubscribeRunner.java b/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/src/com/raytheon/uf/edex/plugin/text/subscription/runners/ISubscribeRunner.java deleted file mode 100644 index bfd294bdf3..0000000000 --- a/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/src/com/raytheon/uf/edex/plugin/text/subscription/runners/ISubscribeRunner.java +++ /dev/null @@ -1,78 +0,0 @@ -/** - * This software was developed and / or modified by Raytheon Company, - * pursuant to Contract DG133W-05-CQ-1067 with the US Government. - * - * U.S. EXPORT CONTROLLED TECHNICAL DATA - * This software product contains export-restricted data whose - * export/transfer/disclosure is restricted by U.S. law. Dissemination - * to non-U.S. persons whether in the United States or abroad requires - * an export license or other authorization. - * - * Contractor Name: Raytheon Company - * Contractor Address: 6825 Pine Street, Suite 340 - * Mail Stop B8 - * Omaha, NE 68106 - * 402.291.0100 - * - * See the AWIPS II Master Rights File ("Master Rights File.pdf") for - * further licensing information. - **/ -package com.raytheon.uf.edex.plugin.text.subscription.runners; - -import java.util.List; - -import com.raytheon.uf.common.message.Message; -import com.raytheon.uf.common.message.Property; - -/** - * Defines the interface for the Subscription Runners. Implementations of this - * interface define three methods {@link #initialize(Message)}, - * {@link #execute()} and {@link #getResults()}. Implementations must define a - * no-arg constructor; they should also define a constructor that takes a - * {@link Message} instance as its sole argument. - *

    - * Each implementation of this class should ensure the {@link #getResults()} - * returns a valid, though possibly empty, List. - * - *

    - * 
    - * SOFTWARE HISTORY
    - * 
    - * Date         Ticket#    Engineer    Description
    - * ------------ ---------- ----------- --------------------------
    - * 14Nov2008    1709       MW Fegan    Initial creation.
    - * May 22, 2014 2536       bclement    moved from autobldsrv to edex.plugin.text
    - * Jan 18, 2016 4562       tjensen     Moved from edex.plugin.text to 
    - *                                     edex.plugin.text.subscription
    - * 
    - * 
    - * - * @author mfegan - * @version 1.0 - */ - -public interface ISubscribeRunner { - public static final String RESPONSE_NORMAL = "STDOUT"; - - public static final String RESPONSE_ERROR = "STRERR"; - - /** - * Initializes the runner. - * - * @param message - * the message to process - */ - public void initialize(Message message); - - /** - * Executes the work as specified in the previously set message. - * - * @return true if execution was successful, false otherwise - */ - public boolean execute(); - - /** - * Returns the results as previously computed by the execute() method. - */ - public List getResults(); -} diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/src/com/raytheon/uf/edex/plugin/text/subscription/runners/SubscribeAddRunner.java b/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/src/com/raytheon/uf/edex/plugin/text/subscription/runners/SubscribeAddRunner.java deleted file mode 100644 index fd79489868..0000000000 --- a/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/src/com/raytheon/uf/edex/plugin/text/subscription/runners/SubscribeAddRunner.java +++ /dev/null @@ -1,119 +0,0 @@ -/** - * This software was developed and / or modified by Raytheon Company, - * pursuant to Contract DG133W-05-CQ-1067 with the US Government. - * - * U.S. EXPORT CONTROLLED TECHNICAL DATA - * This software product contains export-restricted data whose - * export/transfer/disclosure is restricted by U.S. law. Dissemination - * to non-U.S. persons whether in the United States or abroad requires - * an export license or other authorization. - * - * Contractor Name: Raytheon Company - * Contractor Address: 6825 Pine Street, Suite 340 - * Mail Stop B8 - * Omaha, NE 68106 - * 402.291.0100 - * - * See the AWIPS II Master Rights File ("Master Rights File.pdf") for - * further licensing information. - **/ -package com.raytheon.uf.edex.plugin.text.subscription.runners; - -import java.util.List; - -import com.raytheon.uf.common.dataplugin.text.subscription.db.SubscriptionRecord; -import com.raytheon.uf.common.message.Message; -import com.raytheon.uf.common.message.Property; -import com.raytheon.uf.edex.plugin.text.subscription.dao.SubscriptionDAO; -import com.raytheon.uf.edex.plugin.text.subscription.util.Tools; - -/** - * Implements a subscription request runner that performs an insert into the - * subscription database tables. It expects an Message object containing the - * subscription insert request. - * - *
    - * 
    - * SOFTWARE HISTORY
    - * 
    - * Date         Ticket#    Engineer    Description
    - * ------------ ---------- ----------- --------------------------
    - * 14Nov2008    1709       MW Fegan    Initial creation.
    - * 14Sep2010    3944       cjeanbap    Trim property values.
    - * 25May2011    8686       cjeanbap    Updated if-statement to check for filepath
    - * 26May2011    8686       cjeanbap    fixed a punctuation bug    
    - * May 22, 2014 2536       bclement    moved from autobldsrv to edex.plugin.text
    - * Jan 18, 2016 4562       tjensen     Moved from edex.plugin.text to 
    - *                                     edex.plugin.text.subscription
    - * 
    - * - * @author mfegan - * @version 1.0 - */ - -public class SubscribeAddRunner extends ASubscribeRunner { - - private static final String TRIGGER = "trigger"; - - private static final String FILEPATH = "filepath"; - - /** - * Constructor. - */ - public SubscribeAddRunner() { - super(); - } - - /** - * Constructor. The resulting object has the subscription message set. - * - * @param message - * the subscription message to process - */ - public SubscribeAddRunner(Message message) { - super(message); - } - - @Override - public boolean execute() { - SubscriptionRecord rec = new SubscriptionRecord(); - Property[] properties = this.message.getHeader().getProperties(); - List props = Tools.adjustMessageProperties(properties); - - for (Property prop : props) { - if (TRIGGER.equalsIgnoreCase(prop.getName()) - || FILEPATH.equalsIgnoreCase(prop.getName())) { - if (prop.getValue().startsWith("[") - && prop.getValue().endsWith("]")) { - int len = prop.getValue().length(); - prop.setValue(prop.getValue().substring(1, len - 1)); - } - prop.setValue(prop.getValue().replace(",", " ")); - prop.setValue(prop.getValue().replace("'", "")); - } - rec.setAttribute(prop.getName(), prop.getValue().trim()); - } - rec.setActive(true); - SubscriptionDAO dao = new SubscriptionDAO(); - boolean success = false; - try { - success = dao.write(rec); - } catch (Exception e) { - String msg = "Unable to perform database insert"; - logger.error(msg, e); - msg += " due to " + e.toString(); - this.results.add(new Property(RESPONSE_ERROR, msg)); - return false; - } - if (success) { - this.results.add(new Property(RESPONSE_NORMAL, - "Database insert was successful.")); - } else { - this.results - .add(new Property(RESPONSE_NORMAL, - "Insert not performed: Subscription record already exists.")); - } - return success; - } - -} diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/src/com/raytheon/uf/edex/plugin/text/subscription/runners/SubscribeDeleteRunner.java b/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/src/com/raytheon/uf/edex/plugin/text/subscription/runners/SubscribeDeleteRunner.java deleted file mode 100644 index ecf7fc6e7a..0000000000 --- a/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/src/com/raytheon/uf/edex/plugin/text/subscription/runners/SubscribeDeleteRunner.java +++ /dev/null @@ -1,129 +0,0 @@ -/** - * This software was developed and / or modified by Raytheon Company, - * pursuant to Contract DG133W-05-CQ-1067 with the US Government. - * - * U.S. EXPORT CONTROLLED TECHNICAL DATA - * This software product contains export-restricted data whose - * export/transfer/disclosure is restricted by U.S. law. Dissemination - * to non-U.S. persons whether in the United States or abroad requires - * an export license or other authorization. - * - * Contractor Name: Raytheon Company - * Contractor Address: 6825 Pine Street, Suite 340 - * Mail Stop B8 - * Omaha, NE 68106 - * 402.291.0100 - * - * See the AWIPS II Master Rights File ("Master Rights File.pdf") for - * further licensing information. - **/ -package com.raytheon.uf.edex.plugin.text.subscription.runners; - -import java.util.ArrayList; -import java.util.List; - -import com.raytheon.uf.common.dataplugin.text.subscription.db.SubscriptionRecord; -import com.raytheon.uf.common.message.Message; -import com.raytheon.uf.common.message.Property; -import com.raytheon.uf.edex.plugin.text.subscription.dao.SubscriptionDAO; -import com.raytheon.uf.edex.plugin.text.subscription.util.Tools; - -/** - * Implements a subscription request runner that performs a delete operation in - * the subscription database. - * - *
    - * 
    - * SOFTWARE HISTORY
    - * 
    - * Date         Ticket#    Engineer    Description
    - * ------------ ---------- ----------- --------------------------
    - * 14Nov2008    1709       MW Fegan    Initial creation.
    - * May 22, 2014 2536       bclement    moved from autobldsrv to edex.plugin.text
    - * Jan 18, 2016 4562       tjensen     Moved from edex.plugin.text to 
    - *                                     edex.plugin.text.subscription
    - * 
    - * 
    - * - * @author mfegan - * @version 1.0 - */ - -public class SubscribeDeleteRunner extends ASubscribeRunner { - - /** - * - */ - public SubscribeDeleteRunner() { - super(); - } - - /** - * @param message - */ - public SubscribeDeleteRunner(Message message) { - super(message); - } - - /* - * (non-Javadoc) - * - * @see - * com.raytheon.uf.edex.plugin.text.subscription.runners.ASubscribeRunner - * #execute() - */ - @Override - public boolean execute() { - // get a list of matching subscriptions - Property[] props = this.message.getHeader().getProperties(); - List attribs = Tools.adjustMessageProperties(props); - SubscriptionDAO dao = new SubscriptionDAO(); - List retVal = null; - if (attribs.size() > 0) { - retVal = dao.getSubscriptions(attribs); - } else { - retVal = dao.getSubscriptions(); - } - if (retVal.size() == 0) { - this.results = prepareNullResponse(); - } else { - int count = 0; - for (SubscriptionRecord rec : retVal) { - dao.delete(rec); - count++; - } - this.results = prepareDeleteResponse(count); - } - return true; - } - - /** - * Creates a results list for a "no matching records" response. - * - * @return the response list - */ - private List prepareNullResponse() { - String msg = "There are no subscriptions matching the criteria"; - Property resp = new Property(RESPONSE_NORMAL, msg); - List retVal = new ArrayList(); - retVal.add(resp); - return retVal; - } - - /** - * Creates a response list providing the number of records deleted. - * - * @param count - * the number of records that were deleted - * @return the response list - */ - private List prepareDeleteResponse(int count) { - String msg = String.format( - "Successfully deleted %d subscriptions matching the criteria", - count); - Property resp = new Property(RESPONSE_NORMAL, msg); - List retVal = new ArrayList(); - retVal.add(resp); - return retVal; - } -} diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/src/com/raytheon/uf/edex/plugin/text/subscription/runners/SubscribeQueryRunner.java b/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/src/com/raytheon/uf/edex/plugin/text/subscription/runners/SubscribeQueryRunner.java deleted file mode 100644 index d0144c25db..0000000000 --- a/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/src/com/raytheon/uf/edex/plugin/text/subscription/runners/SubscribeQueryRunner.java +++ /dev/null @@ -1,221 +0,0 @@ -/** - * This software was developed and / or modified by Raytheon Company, - * pursuant to Contract DG133W-05-CQ-1067 with the US Government. - * - * U.S. EXPORT CONTROLLED TECHNICAL DATA - * This software product contains export-restricted data whose - * export/transfer/disclosure is restricted by U.S. law. Dissemination - * to non-U.S. persons whether in the United States or abroad requires - * an export license or other authorization. - * - * Contractor Name: Raytheon Company - * Contractor Address: 6825 Pine Street, Suite 340 - * Mail Stop B8 - * Omaha, NE 68106 - * 402.291.0100 - * - * See the AWIPS II Master Rights File ("Master Rights File.pdf") for - * further licensing information. - **/ -package com.raytheon.uf.edex.plugin.text.subscription.runners; - -import java.util.ArrayList; -import java.util.List; - -import com.raytheon.uf.common.dataplugin.text.subscription.db.SubscriptionRecord; -import com.raytheon.uf.common.message.Message; -import com.raytheon.uf.common.message.Property; -import com.raytheon.uf.common.serialization.SerializationUtil; -import com.raytheon.uf.edex.plugin.text.subscription.dao.SubscriptionDAO; -import com.raytheon.uf.edex.plugin.text.subscription.util.Tools; -import com.raytheon.uf.edex.plugin.text.subscription.util.TriggerMatcher; - -/** - * Implements a subscription request runner that performs a query to determine - * if there are currently any subscriptions for a specific trigger value. If - * there are subscriptions, they are placed into the response list. - *

    - * This runner expects a message similar to - * - *

    - * 
    - *     
    - *        
    - * - * - * - *
    - *
    - *
    - *
    - * - * The response following execution is a list of Property objects that can be - * used to form a Message similar to - * - *
    - * 
    - *     
    - *        
    - * - * - * - *
    - *
    - *
    - *
    - * - * In the response, the value of each subscription property is the XML - * serialization of the subscription from the database. - * - *
    - * 
    - * SOFTWARE HISTORY
    - * 
    - * Date         Ticket#    Engineer    Description
    - * ------------ ---------- ----------- --------------------------
    - * 14Nov2008    1709       MW Fegan    Initial creation.
    - * May 22, 2014 2536       bclement    moved from autobldsrv to edex.plugin.text
    - * Sep 05, 2014 2926       bclement    added getDirectResults() to avoid marshaling
    - * Jan 18, 2016 4562       tjensen     Moved from edex.plugin.text to 
    - *                                     edex.plugin.text.subscription
    - * 
    - * 
    - * - * @author mfegan - * @version 1.0 - */ - -public class SubscribeQueryRunner extends ASubscribeRunner { - - private List results; - - private String trigger = null; - - /** - * Constructor. - */ - public SubscribeQueryRunner() { - super(); - } - - /** - * Constructor. - * - * @param message - * the message to process - */ - public SubscribeQueryRunner(Message message) { - super(message); - } - - /* - * (non-Javadoc) - * - * @see - * com.raytheon.uf.edex.plugin.text.subscription.runners.ASubscribeRunner - * #execute() - */ - @Override - public boolean execute() { - Property[] properties = this.message.getHeader().getProperties(); - List attribs = Tools.adjustMessageProperties(properties); - attribs = modifyTriggerProperty(attribs); - SubscriptionDAO dao = new SubscriptionDAO(); - List retVal = null; - if (attribs.size() > 0) { - retVal = dao.getSubscriptions(attribs); - } else { - retVal = dao.getSubscriptions(); - } - results = filterRecords(retVal); - return false; - } - - /** - * Filters the list of records received, limiting to those that match the - * trigger condition. - * - * @param records - * the list of records to filter - * - * @return the filtered records - */ - private List filterRecords( - List records) { - List retVal = new ArrayList(); - for (SubscriptionRecord record : records) { - if (TriggerMatcher.matches(record, this.trigger)) { - retVal.add(record); - } - } - return retVal; - } - - /** - * Packages the subscriptions for return to the client. Each record is - * bundled within the value of a {@link Property} object with a name of - * subscription. - * - * @param records - * the list of records to bundle - * - * @return the list of bundled records - */ - private List packageSubscriptions(List records) { - List retVal = new ArrayList(); - if (records.size() == 0) { - retVal.add(new Property("count", "0")); - } else { - retVal.add(new Property("count", String.valueOf(records.size()))); - for (SubscriptionRecord record : records) { - try { - String xml = SerializationUtil.marshalToXml(record); - retVal.add(new Property("subscription", xml)); - } catch (Exception e) { - logger.warn("Unable to serialize subscription record " - + record.toString() + " - skipping", e); - } - } - } - return retVal; - } - - /** - * Modifies the list of {@link Property} objects by removing the - * trigger property and adding a active property with a - * value of TRUE. - * - * @param properties - * the list of properties to modify - * - * @return the modified property list - */ - private List modifyTriggerProperty(List properties) { - List retVal = new ArrayList(); - for (Property prop : properties) { - if ("trigger".equalsIgnoreCase(prop.getName())) { - this.trigger = prop.getValue(); - } else { - retVal.add(prop); - } - } - retVal.add(new Property("active", "TRUE")); - return retVal; - } - - /* - * (non-Javadoc) - * - * @see - * com.raytheon.uf.edex.plugin.text.subscription.runners.ASubscribeRunner - * #getResults() - */ - @Override - public List getResults() { - return packageSubscriptions(results); - } - - public List getDirectResults() { - return results; - } -} diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/src/com/raytheon/uf/edex/plugin/text/subscription/runners/SubscribeReadRunner.java b/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/src/com/raytheon/uf/edex/plugin/text/subscription/runners/SubscribeReadRunner.java deleted file mode 100644 index 67a9e96908..0000000000 --- a/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/src/com/raytheon/uf/edex/plugin/text/subscription/runners/SubscribeReadRunner.java +++ /dev/null @@ -1,183 +0,0 @@ -/** - * This software was developed and / or modified by Raytheon Company, - * pursuant to Contract DG133W-05-CQ-1067 with the US Government. - * - * U.S. EXPORT CONTROLLED TECHNICAL DATA - * This software product contains export-restricted data whose - * export/transfer/disclosure is restricted by U.S. law. Dissemination - * to non-U.S. persons whether in the United States or abroad requires - * an export license or other authorization. - * - * Contractor Name: Raytheon Company - * Contractor Address: 6825 Pine Street, Suite 340 - * Mail Stop B8 - * Omaha, NE 68106 - * 402.291.0100 - * - * See the AWIPS II Master Rights File ("Master Rights File.pdf") for - * further licensing information. - **/ -package com.raytheon.uf.edex.plugin.text.subscription.runners; - -import java.util.ArrayList; -import java.util.List; - -import com.raytheon.uf.common.dataplugin.text.subscription.db.SubscriptionRecord; -import com.raytheon.uf.common.message.Header; -import com.raytheon.uf.common.message.Message; -import com.raytheon.uf.common.message.Property; -import com.raytheon.uf.edex.plugin.text.subscription.dao.SubscriptionDAO; -import com.raytheon.uf.edex.plugin.text.subscription.util.Tools; - -/** - * Implements a subscription request runner that performs a read operation in - * the subscription database tables. Following the read, data is formatted for - * return based on the type of request; subscription or LDAD. (The LDAD request - * supports the legacy textdb interface.) Following execution, query results are - * obtained via {@link #getResults()}; the results are a List of - * {@link Property} objects. - *

    - * Typical Usage: - * - *

    - * 
    - *     List results = null;
    - *     SubscribeAction action = SubscribeAction.ACTION_READ;
    - *     ISubscribeRunner runner = RunnerFactory.getInstance().getWorker(action);
    - *     if (runner != null) {
    - *        runner.initialize(message);
    - *        runner.execute();
    - *        results = runner.getResults();
    - *     }
    - * 
    - * 
    - * - * Typical results: - * - *
    - * LDAD:
    - *     PRODUCTID SCRIPT
    - *     --------- ------
    - *     OMASVROAX /awips/edex/opt/scripts/dissemprod.pl
    - *     
    - * Subscription:
    - *     ID     ACTIVE TYPE  RUNNER TRIGGER   SCRIPT
    - *     ------ ------ ----- ------ --------- ------
    - *     1      True   timer system 0 0/2 * * * ? /bin/ps aux
    - *     2      True   timer system 0 0/5 * * * ? /bin/pwd
    - * 
    - * - *
    - * 
    - * SOFTWARE HISTORY
    - * Date         Ticket#    Engineer    Description
    - * ------------ ---------- ----------- --------------------------
    - * 14Nov2008    1709       MW Fegan    Initial creation.
    - * May 22, 2014 2536       bclement    moved from autobldsrv to edex.plugin.text
    - * Jan 18, 2016 4562       tjensen     Moved from edex.plugin.text to 
    - *                                     edex.plugin.text.subscription
    - * 
    - * 
    - * - * @author mfegan - * @version 1.0 - */ - -public class SubscribeReadRunner extends ASubscribeRunner { - /** - * Constructor. Creates an empty Runner object. This is the constructor - * called by the {@link RunnerFactory}'s - * {@link RunnerFactory#getWorker(com.raytheon.uf.edex.plugin.text.subscription.util.SubscribeAction) - * getWorker(...)} method. The {@link #initialize(Message)} method must be - * called prior to using the worker. - */ - public SubscribeReadRunner() { - super(); - } - - /** - * Constructor. Creates a runner object for the specified message. - * - * @param message - * the message to execute - */ - public SubscribeReadRunner(Message message) { - super(message); - } - - /* - * (non-Javadoc) - * - * @see - * com.raytheon.uf.edex.plugin.text.subscription.runners.ASubscribeRunner - * #execute() - */ - @Override - public boolean execute() { - Header header = this.message.getHeader(); - Property[] props = header.getProperties(); - String type = header.getProperty("type"); - boolean ldad = ("ldad".equalsIgnoreCase(type)); - - List attribs = Tools.adjustMessageProperties(props); - - SubscriptionDAO dao = new SubscriptionDAO(); - List retVal = null; - if (attribs.size() > 0) { - retVal = dao.getSubscriptions(attribs); - } else { - retVal = dao.getSubscriptions(); - } - this.results = generateResponse(ldad, retVal); - return true; - } - - /** - * Converts the data returned by the database query into a list of Property - * objects. - * - * @param ldad - * flag to indicate if this is a textdb (LDAD) request - * @param responses - * list of responses from the database query - * - * @return list of property objects containing the query results - */ - private List generateResponse(boolean ldad, - List responses) { - List props = new ArrayList(); - if (ldad) { - props.add(new Property(RESPONSE_NORMAL, "PRODUCTID SCRIPT")); - props.add(new Property(RESPONSE_NORMAL, "--------- ------")); - for (SubscriptionRecord spr : responses) { - String trigger = spr.getTrigger(); - String script = spr.getFilepath(); - String line = String.format("%s %s", trigger, script); - props.add(new Property(RESPONSE_NORMAL, line)); - } - } else { - props.add(new Property(RESPONSE_NORMAL, - "ID ACTIVE TYPE RUNNER TRIGGER SCRIPT")); - props.add(new Property(RESPONSE_NORMAL, - "------ ------ ----- ------ --------- ------")); - for (SubscriptionRecord spr : responses) { - String script; - if ("system".equalsIgnoreCase(spr.getRunner())) { - script = spr.getFilepath(); - if (spr.getArguments() != null - && !spr.getArguments().equals("")) { - script += " " + spr.getArguments(); - } - } else { - script = spr.getScript(); - } - String line = String.format("%6d %-6s %5s %6s %8s %s", - spr.getId(), spr.isActive() ? "True" : "False", - spr.getType(), spr.getRunner(), spr.getTrigger(), - script); - props.add(new Property(RESPONSE_NORMAL, line)); - } - } - return props; - } -} diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/src/com/raytheon/uf/edex/plugin/text/subscription/runners/SubscribeRunner.java b/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/src/com/raytheon/uf/edex/plugin/text/subscription/runners/SubscribeRunner.java deleted file mode 100644 index aa97ac440a..0000000000 --- a/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/src/com/raytheon/uf/edex/plugin/text/subscription/runners/SubscribeRunner.java +++ /dev/null @@ -1,174 +0,0 @@ -/** - * This software was developed and / or modified by Raytheon Company, - * pursuant to Contract DG133W-05-CQ-1067 with the US Government. - * - * U.S. EXPORT CONTROLLED TECHNICAL DATA - * This software product contains export-restricted data whose - * export/transfer/disclosure is restricted by U.S. law. Dissemination - * to non-U.S. persons whether in the United States or abroad requires - * an export license or other authorization. - * - * Contractor Name: Raytheon Company - * Contractor Address: 6825 Pine Street, Suite 340 - * Mail Stop B8 - * Omaha, NE 68106 - * 402.291.0100 - * - * See the AWIPS II Master Rights File ("Master Rights File.pdf") for - * further licensing information. - **/ -package com.raytheon.uf.edex.plugin.text.subscription.runners; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.raytheon.uf.common.message.Message; -import com.raytheon.uf.common.util.StringUtil; -import com.raytheon.uf.edex.core.EdexException; -import com.raytheon.uf.edex.plugin.text.subscription.util.SubscribeAction; - -/** - * Factory class for creating Subscription Runner objects. - *

    - * Two factory methods ({@link ASubscribeRunner#getInstance(String)} and - * {@link ASubscribeRunner#getInstance(String, Message)}) are used to - * instantiate the known concrete implementations. - *

    - * Expected usage: - * - *

    - * 
    - *     String type = "...";  // name of an appropriate runner action
    - *     Message message = null;  // initialized later...
    - *     
    - *     List results = null;
    - *     try {
    - *        ISubscribeRunner runner = SubscribeRunner.getInstance(type);
    - *        runner.initialize(message);
    - *        runner.execute();
    - *        results = runner.getResults();
    - *     } catch (EdexException e) {
    - *        // handle the exception
    - *     }
    - * 
    - * 
    - * - *
    - * 
    - * SOFTWARE HISTORY
    - * 
    - * Date         Ticket#    Engineer    Description
    - * ------------ ---------- ----------- --------------------------
    - * 18Nov2008    1709       MW Fegan    Initial creation
    - * May 22, 2014 2536       bclement    moved from autobldsrv to edex.plugin.text
    - *                                      removed duplicate SubscribeAction enum
    - * Aug 22, 2014 2926       bclement    improved error handling for unknown operation
    - * Sep 05, 2014 2926       bclement    removed Class.forName() call
    - * Dec 09, 2015 5166       kbisanz     Update logging to use SLF4J.
    - * Jan 18, 2016 4562       tjensen     Moved from edex.plugin.text to 
    - *                                     edex.plugin.text.subscription
    - * 
    - * 
    - * - * @author mfegan - * @version 1.0 - */ - -public class SubscribeRunner { - /** - * the logger - */ - @SuppressWarnings("unused") - private final Logger logger = LoggerFactory.getLogger(getClass()); - - /* - * The factory instance. - */ - private static SubscribeRunner instance = null; - - /** - * Constructor. - */ - private SubscribeRunner() { - super(); - } - - /** - * - * @return - */ - public static synchronized SubscribeRunner getInstance() { - if (null == instance) { - instance = new SubscribeRunner(); - } - return instance; - } - - /** - * Factory method for obtaining an {@link ISubscribeRunner} instance for the - * specified operation. The {@link ISubscribeRunner} instance must be - * initialized via the {@link ISubscribeRunner#initialize(Message) - * initialize(Message)} method. - * - * @param oper - * the operation for the instance to execute - * - * @return the requested class instance - * - * @throws EdexException - * if any error occurs in creating the class instance - */ - public static ISubscribeRunner getInstance(String oper) - throws EdexException { - return getInstance(oper, null); - } - - /** - * Factory method for obtaining an {@link ISubscribeRunner} instance for the - * specified operation to process the specified message. If - * message is null, the {@link ISubscribeRunner} - * instance must be initialized via the - * {@link ISubscribeRunner#initialize(Message) initialize(Message)} method. - * - * @param message - * the message to process - * - * @return the requested class instance - * - * @throws EdexException - * if any error occurs in creating the class instance - */ - public static ISubscribeRunner getInstance(String oper, Message message) - throws EdexException { - ISubscribeRunner retVal = null; - if (StringUtil.isEmptyString(oper)) { - throw new EdexException( - "Unable to initialize ISubscribeRunner instance; null or empty operation specified - unable to continue"); - } - SubscribeAction action = SubscribeAction.translate(oper); - if (action == null) { - throw new EdexException( - "Unable to initialize ISubscriberunner instance; unable to find action for operation [" - + oper + "]"); - } - Class aClass = action.getRunner(); - if (aClass == null) { - throw new EdexException( - "Unable to initialize ISubscribeRunner instance; invalid operation [" - + oper + "] specified - unable to continue"); - } - - try { - retVal = (ISubscribeRunner) aClass.newInstance(); - if (message != null) { - retVal.initialize(message); - } - } catch (Exception e) { - throw new EdexException( - "Unable to initialize ISubscribeRunner instance; invalid operation [" - + oper + "] specified - unable to continue", e); - } - return retVal; - } - -} diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/src/com/raytheon/uf/edex/plugin/text/subscription/runners/SubscribeUpdateRunner.java b/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/src/com/raytheon/uf/edex/plugin/text/subscription/runners/SubscribeUpdateRunner.java deleted file mode 100644 index c053d884c3..0000000000 --- a/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/src/com/raytheon/uf/edex/plugin/text/subscription/runners/SubscribeUpdateRunner.java +++ /dev/null @@ -1,151 +0,0 @@ -/** - * This software was developed and / or modified by Raytheon Company, - * pursuant to Contract DG133W-05-CQ-1067 with the US Government. - * - * U.S. EXPORT CONTROLLED TECHNICAL DATA - * This software product contains export-restricted data whose - * export/transfer/disclosure is restricted by U.S. law. Dissemination - * to non-U.S. persons whether in the United States or abroad requires - * an export license or other authorization. - * - * Contractor Name: Raytheon Company - * Contractor Address: 6825 Pine Street, Suite 340 - * Mail Stop B8 - * Omaha, NE 68106 - * 402.291.0100 - * - * See the AWIPS II Master Rights File ("Master Rights File.pdf") for - * further licensing information. - **/ -package com.raytheon.uf.edex.plugin.text.subscription.runners; - -import java.util.ArrayList; -import java.util.List; - -import com.raytheon.uf.common.dataplugin.text.subscription.db.SubscriptionRecord; -import com.raytheon.uf.common.message.Header; -import com.raytheon.uf.common.message.Message; -import com.raytheon.uf.common.message.Property; -import com.raytheon.uf.edex.plugin.text.subscription.dao.SubscriptionDAO; -import com.raytheon.uf.edex.plugin.text.subscription.util.Tools; - -/** - * Implements a subscription request runner that performs an update of the data - * in the subscription table. - *

    - * Typical Usage: - * - *

    - * 
    - *     List results = null;
    - *     SubscribeAction action = SubscribeAction.ACTION_UPDATE;
    - *     ISubscribeRunner runner = RunnerFactory.getInstance().getWorker(action);
    - *     if (runner != null) {
    - *        runner.initialize(message);
    - *        runner.execute();
    - *        results = runner.getResults();
    - *     }
    - * 
    - * 
    - * - *
    - * 
    - * SOFTWARE HISTORY
    - * 
    - * Date         Ticket#    Engineer    Description
    - * ------------ ---------- ----------- --------------------------
    - * 05Dec2008    1709       MW Fegan    Initial creation.
    - * May 22, 2014 2536       bclement    moved from autobldsrv to edex.plugin.text
    - * Jan 18, 2016 4562       tjensen     Moved from edex.plugin.text to 
    - *                                     edex.plugin.text.subscription
    - * 
    - * 
    - * - * @author mfegan - * @version 1.0 - */ - -public class SubscribeUpdateRunner extends ASubscribeRunner { - - /** - * - */ - public SubscribeUpdateRunner() { - super(); - } - - /** - * @param message - */ - public SubscribeUpdateRunner(Message message) { - super(message); - } - - /* - * (non-Javadoc) - * - * @see - * com.raytheon.uf.edex.plugin.text.subscription.runners.ASubscribeRunner - * #execute() - */ - @Override - public boolean execute() { - String msg = ""; - Header header = this.message.getHeader(); - Property[] props = header.getProperties(); - List attribs = Tools.adjustMessageProperties(props); - - List index = new ArrayList(); - String indx = ""; - for (Property prop : attribs) { - if ("id".equalsIgnoreCase(prop.getName())) { - indx = prop.getValue(); - index.add(prop); - attribs.remove(prop); - break; - } - } - List records = null; - SubscriptionDAO dao = new SubscriptionDAO(); - if (index.size() == 0) { - msg = "Unable to perform update - no record ID specified"; - logger.warn(msg); - this.results.add(new Property(RESPONSE_ERROR, msg)); - return false; - } else { - records = dao.getSubscriptions(index); - } - // get the appropriate record - if (records.size() == 0) { - // this indicates the record wasn't located - need to do something. - msg = String - .format("Unable to perform update - no subscriptions with ID [%s] available", - indx); - logger.warn(msg); - this.results.add(new Property(RESPONSE_NORMAL, msg)); - return true; - } - // update the record - boolean upd = false; - for (SubscriptionRecord record : records) { - for (Property prop : attribs) { - if ("update".equalsIgnoreCase(prop.getName())) { - String[] parts = prop.getValue().split(":", 2); - record.setAttribute(parts[0], parts[1]); - upd = true; - } - } - } - // update the database - if (upd) { - for (SubscriptionRecord record : records) { - dao.update(record); - } - } - msg = String.format("Updated %d subscription records.", records.size()); - logger.info(msg); - this.results.add(new Property(RESPONSE_NORMAL, msg)); - return true; - } - -} diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/src/com/raytheon/uf/edex/plugin/text/subscription/services/ScriptRunner.java b/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/src/com/raytheon/uf/edex/plugin/text/subscription/services/ScriptRunner.java deleted file mode 100644 index f2d51bd853..0000000000 --- a/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/src/com/raytheon/uf/edex/plugin/text/subscription/services/ScriptRunner.java +++ /dev/null @@ -1,392 +0,0 @@ -/** - * This software was developed and / or modified by Raytheon Company, - * pursuant to Contract DG133W-05-CQ-1067 with the US Government. - * - * U.S. EXPORT CONTROLLED TECHNICAL DATA - * This software product contains export-restricted data whose - * export/transfer/disclosure is restricted by U.S. law. Dissemination - * to non-U.S. persons whether in the United States or abroad requires - * an export license or other authorization. - * - * Contractor Name: Raytheon Company - * Contractor Address: 6825 Pine Street, Suite 340 - * Mail Stop B8 - * Omaha, NE 68106 - * 402.291.0100 - * - * See the AWIPS II Master Rights File ("Master Rights File.pdf") for - * further licensing information. - **/ -package com.raytheon.uf.edex.plugin.text.subscription.services; - -import java.io.File; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.raytheon.uf.common.dataplugin.PluginDataObject; -import com.raytheon.uf.common.dataplugin.message.DataURINotificationMessage; -import com.raytheon.uf.common.dataplugin.text.subscription.db.ReplacementRecord; -import com.raytheon.uf.common.dataplugin.text.subscription.db.SubscriptionRecord; -import com.raytheon.uf.common.message.Header; -import com.raytheon.uf.common.message.Message; -import com.raytheon.uf.common.message.Property; -import com.raytheon.uf.common.util.ReflectionUtil; -import com.raytheon.uf.common.util.StringUtil; -import com.raytheon.uf.edex.plugin.text.subscription.runners.SubscribeQueryRunner; - -/** - * Main class of the EDEX Script Runner. - *

    - * The intent is to have an end-point that will interact with the subscription - * service to determine if a script should be executed. Generally, an instance - * will receive a message containing a trigger condition. It will then create a - * message to send to the subscription manager and will receive a list of - * scripts in reply. If the list of scripts is empty, it will loop through the - * scripts and execute them. - * - *

    - * 
    - * SOFTWARE HISTORY
    - * Date         Ticket#    Engineer    Description
    - * ------------ ---------- ----------- --------------------------
    - * 15Dec2008    1709       MW Fegan    Initial creation. Replaces ScriptRunnerSrv.
    - * 14Apr2009    2045       MW Fegan    Added support for AFOS PIL (LDAD) triggers.
    - * 30Sep2009    3076       MW Fegan    Allow LDAD triggers to be simple strings.
    - * 06Jan2010    4166       MW Fegan    Log error when script execution fails.
    - * 24May2011    5163       cjeanbap    Log error when script execution fails to 
    - *                                     separate log file.
    - * 30Aug2011    10581      rferrel     executeScript now sending proper trigger 
    - *                                     argument to the engine.
    - * Feb 15, 2013 1638       mschenke    Moved DataURINotificationMessage to uf.common.dataplugin
    - * May 22, 2014 2536       bclement    moved from autobldsrv to edex.plugin.text
    - * Sep 05, 2014 2926       bclement    get query results directly, removed decodeResponse()
    - * Dec 09, 2015 5166       kbisanz     Update logging to use SLF4J.
    - * Jan 04, 2016 5203       tjensen     Removed dependency on uEngine. Replaced with calls to 
    - *                                     TextTriggerHandler.
    - * Jan 18, 2016 4562       tjensen     Moved from edex.plugin.text to 
    - *                                     edex.plugin.text.subscription
    - * 
    - * 
    - * - * @author mfegan - * @version 1.0 - */ - -public class ScriptRunner { - private transient Logger logger = LoggerFactory - .getLogger("FailedTriggerLog"); - - private String type = null; - - private static final String SUBSCRIBE_OPERATION = "query"; - - private static final String TRIGGER_KEY = "%TRIGGER%"; - - /** - * Constructor. - */ - public ScriptRunner() { - super(); - } - - /** - * This is the main method of the ScriptRunner class. It accepts a Trigger - * event Object from the framework, decodes the event, obtains any - * subscriptions matching the triggering event and executes the script for - * each subscription. - * - * @param event - * the Trigger event - * - * @throws TriggerException - * if an error occurs - */ - public void runScripts(Object event) throws TriggerException { - List triggers = decodeTrigger(event); - for (String trigger : triggers) { - Message query = prepareQueryMessage(trigger); - List subscriptions = querySubscriptions(query); - for (SubscriptionRecord record : subscriptions) { - if (record.getTrigger().indexOf(" ") > 0) { - trigger = record.getTrigger(); - } - executeScript(record, trigger); - } - } - } - - /** - * Decodes the Trigger event. - * - * @param event - * the Trigger event. - * - * @return the decoded trigger event - * - * @throws TriggerException - * if an error occurs - */ - private List decodeTrigger(Object event) throws TriggerException { - List trigger = new ArrayList(); - switch (ScriptRunnerType.translate(this.type)) { - case TIMER: - Date now = new Date(); - trigger.add(String.valueOf(now.getTime())); - break; - case DATA: - if (event != null) { - DataURINotificationMessage msg = null; - if (event instanceof DataURINotificationMessage) { - msg = (DataURINotificationMessage) event; - String[] uris = msg.getDataURIs(); - if (uris != null) { - for (String uri : uris) { - trigger.add(uri); - } - } else { - logger.warn("notification contained null uri array"); - } - } else if (event instanceof String[]) { - String[] uris = (String[]) event; - if (uris != null) { - for (String uri : uris) { - trigger.add(uri); - } - } - } else if (event instanceof String) { - trigger.add((String) event); - } else { - logger.warn("notification contained invalid message, type was " - + event.getClass().getSimpleName()); - } - } - break; - case LDAD: - if (event != null) { - if (event instanceof String) { - if (logger.isDebugEnabled()) { - logger.debug("Processing trigger: " + event); - } - trigger.add(event.toString()); - } else if (event instanceof String[]) { - String[] prodIds = (String[]) event; - for (String prodId : prodIds) { - trigger.add(prodId); - } - } else if (event instanceof PluginDataObject[]) { - PluginDataObject[] pdos = (PluginDataObject[]) event; - for (PluginDataObject pdo : pdos) { - try { - String prodID = ReflectionUtil.getter(String.class, - pdo, "productId"); - if (logger.isDebugEnabled()) { - logger.debug("Processing trigger: " + prodID - + ", class = " - + pdo.getClass().getSimpleName()); - } - trigger.add(prodID); - } catch (Exception e) { - logger.warn("Unable to extract product information from [" - + pdo.toString() + "] skipping..."); - } - } - } else if (event instanceof PluginDataObject) { - PluginDataObject pdo = (PluginDataObject) event; - try { - String prodID = ReflectionUtil.getter(String.class, - pdo, "productId"); - if (logger.isDebugEnabled()) { - logger.debug("Processing trigger: " + prodID - + ", class = " - + pdo.getClass().getSimpleName()); - } - trigger.add(prodID); - } catch (Exception e) { - logger.warn("Unable to extract product information from [" - + pdo.toString() + "] skipping..."); - } - } else if (event instanceof byte[]) { - String value = new String((byte[]) event); - logger.warn("notification contained invalid message, type was " - + event.getClass().getSimpleName() - + " value: " - + value); - } else { - logger.warn("notification contained invalid message, type was " - + event.getClass().getSimpleName()); - } - } - break; - default: - throw new TriggerException("Invalid scriptrunner type [" - + this.type + "] configured"); - } - if (logger.isDebugEnabled()) { - logger.debug("script runner fired: type= " + this.type - + ", trigger= " + trigger); - } - return trigger; - } - - /** - * Executes the subscription script. - * - * @param record - * the record containing the script to execute - * @param triggerObj - * the trigger - */ - private void executeScript(SubscriptionRecord record, String trigger) { - String runner = record.getRunner(); - String script = record.getScript(); - // check for empty string and set to null so checks will work - if (script.equals("")) { - script = null; - } - if (script != null) { - for (ReplacementRecord replacement : record.getReplacements()) { - String token = replacement.getKey(); - String value = replacement.getValue(); - script = script.replaceAll("%" + token + "%", value); - } - script = script.replaceAll(TRIGGER_KEY, trigger); - } else { - String path = record.getFilepath(); - String args = record.getArguments(); - if (StringUtil.isEmptyString(path) - && StringUtil.isEmptyString(args)) { - logger.warn("Unable to execute script for " + record.toString()); - return; - } - if (!StringUtil.isEmptyString(args)) { - args = args.replaceAll(TRIGGER_KEY, trigger); - } - script = (StringUtil.isEmptyString(path) ? "" : path) + " " - + (StringUtil.isEmptyString(args) ? "" : args); - } - - if (runner.toLowerCase().equals("ldad") - || runner.toLowerCase().equals("pil")) { - TextTriggerHandler exHandler = new TextTriggerHandler(); - try { - exHandler.execute(script, trigger); - logger.info("Executed script: runner= " + runner + ", script= " - + script.replaceAll("\\n", "")); - } catch (Exception e) { - logger.error(generateErrorMsg(runner, script), e); - } - } else { - logger.error("Unable to execute script '" + script - + "' due to unexpected script runner type: " + runner); - } - } - - /** - * Creates the Subscription message used to query for subscriptions. - * - * @param type - * type of subscription (timer, data, etc) - * @param triggerObj - * the trigger event value - * - * @return message to perform the query - */ - private Message prepareQueryMessage(String trigger) { - Message retVal = new Message(); - Header header = new Header(); - List properties = new ArrayList(); - properties.add(new Property("operation", SUBSCRIBE_OPERATION)); - properties.add(new Property("type", this.type)); - properties.add(new Property("trigger", trigger)); - header.setProperties(properties.toArray(new Property[] {})); - retVal.setHeader(header); - return retVal; - } - - /** - * Performs a query of the database to determine if there are any - * subscriptions that match the trigger criteria. - * - * @param message - * message containing the desired query information - * - * @return subscription record list containing the results of the query - * - * @throws TriggerException - * if an error occurs - */ - private List querySubscriptions(Message message) - throws TriggerException { - SubscribeQueryRunner runner = new SubscribeQueryRunner(message); - runner.execute(); - return runner.getDirectResults(); - } - - /** - * @return the type - */ - public String getType() { - return type; - } - - /** - * @param type - * the type to set - */ - public void setType(String type) { - this.type = type; - } - - /** - * Enumeration providing a of script runner types. - * - * @author mfegan - * @version 1.0 - */ - private enum ScriptRunnerType { - TIMER, DATA, LDAD; - private static final Map types = new HashMap() { - private static final long serialVersionUID = 1L; - { - put("timer", TIMER); - put("data", DATA); - put("pil", LDAD); - put("ldad", LDAD); - } - }; - - public static final ScriptRunnerType translate(String type) { - return types.get(type); - } - } - - private String generateErrorMsg(String runner, String script) { - StringBuilder sb = new StringBuilder(); - try { - File file = new File(script); - if (!file.exists()) { - sb.append("Directory/File does not exist!"); - } else if (!file.canExecute()) { - sb.append("File is not an executable!"); - } else { - sb.append("Unknown error occured!"); - } - } catch (Exception e) { - // logger.error("Unexpected error occured!", e); - sb.append("Unexpected error occured! "); - sb.append(e.getCause()); - } - sb.append("\n"); - sb.append("Encountered errors executing script: runner= "); - sb.append(runner).append(", script= "); - sb.append(script.replaceAll("\\n", "")); - sb.append(" "); - return sb.toString(); - } -} diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/src/com/raytheon/uf/edex/plugin/text/subscription/services/SubscriptionRequestHandler.java b/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/src/com/raytheon/uf/edex/plugin/text/subscription/services/SubscriptionRequestHandler.java deleted file mode 100644 index 5f4f0aca7e..0000000000 --- a/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/src/com/raytheon/uf/edex/plugin/text/subscription/services/SubscriptionRequestHandler.java +++ /dev/null @@ -1,111 +0,0 @@ -/** - * This software was developed and / or modified by Raytheon Company, - * pursuant to Contract DG133W-05-CQ-1067 with the US Government. - * - * U.S. EXPORT CONTROLLED TECHNICAL DATA - * This software product contains export-restricted data whose - * export/transfer/disclosure is restricted by U.S. law. Dissemination - * to non-U.S. persons whether in the United States or abroad requires - * an export license or other authorization. - * - * Contractor Name: Raytheon Company - * Contractor Address: 6825 Pine Street, Suite 340 - * Mail Stop B8 - * Omaha, NE 68106 - * 402.291.0100 - * - * See the AWIPS II Master Rights File ("Master Rights File.pdf") for - * further licensing information. - **/ -package com.raytheon.uf.edex.plugin.text.subscription.services; - -import java.util.ArrayList; -import java.util.List; - -import com.raytheon.uf.common.dataplugin.text.subscription.request.SubscriptionRequest; -import com.raytheon.uf.common.message.Header; -import com.raytheon.uf.common.message.Message; -import com.raytheon.uf.common.message.Property; -import com.raytheon.uf.common.serialization.comm.IRequestHandler; -import com.raytheon.uf.common.status.IUFStatusHandler; -import com.raytheon.uf.common.status.UFStatus; -import com.raytheon.uf.edex.plugin.text.subscription.runners.ISubscribeRunner; -import com.raytheon.uf.edex.plugin.text.subscription.runners.SubscribeRunner; - -/** - * Thrift handler for text subscription requests - * - *
    - * 
    - * SOFTWARE HISTORY
    - * 
    - * Date         Ticket#    Engineer    Description
    - * ------------ ---------- ----------- --------------------------
    - * Sep 5, 2014  2926      bclement     Initial creation, replaced SubscribeManager
    - * Jan 18, 2016 4562      tjensen      Moved from edex.plugin.text to 
    - *                                     edex.plugin.text.subscription
    - * 
    - * 
    - * - * @author bclement - * @version 1.0 - */ -public class SubscriptionRequestHandler implements - IRequestHandler { - - private static final IUFStatusHandler logger = UFStatus - .getHandler(SubscriptionRequestHandler.class); - - /** - * - */ - public SubscriptionRequestHandler() { - } - - @Override - public Object handleRequest(SubscriptionRequest request) throws Exception { - String msg = ""; - List results = null; - try { - Message requestMsg = request.getMessage(); - String oper = requestMsg.getHeader().getProperty("operation"); - ISubscribeRunner runner = SubscribeRunner.getInstance(oper); - if (null == runner) { - msg = "Unable to get subscription runner for " + oper; - logger.warn(msg); - results = new ArrayList(); - results.add(new Property("STDERR", msg)); - } else { - runner.initialize(requestMsg); - runner.execute(); - results = runner.getResults(); - } - } catch (Exception e) { - msg = "Unable to process message. " + e.toString(); - logger.error(msg, e); - results = new ArrayList(); - results.add(new Property("STDERR", msg)); - } - Message xmlMsg = createMessage(results); - return xmlMsg; - } - - /** - * Creates a Message object containing the results of the the execution. - * - * @param result - * the result to convert to a message - * - * @return message object containing the result - */ - private final Message createMessage(List result) { - Message msg = new Message(); - Header h = new Header(); - h.setProperties(result.toArray(new Property[] {})); - - msg.setHeader(h); - - return msg; - } - -} diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/src/com/raytheon/uf/edex/plugin/text/subscription/services/TextTriggerHandler.java b/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/src/com/raytheon/uf/edex/plugin/text/subscription/services/TextTriggerHandler.java deleted file mode 100644 index 09c637f32a..0000000000 --- a/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/src/com/raytheon/uf/edex/plugin/text/subscription/services/TextTriggerHandler.java +++ /dev/null @@ -1,257 +0,0 @@ -/** - * This software was developed and / or modified by Raytheon Company, - * pursuant to Contract DG133W-05-CQ-1067 with the US Government. - * - * U.S. EXPORT CONTROLLED TECHNICAL DATA - * This software product contains export-restricted data whose - * export/transfer/disclosure is restricted by U.S. law. Dissemination - * to non-U.S. persons whether in the United States or abroad requires - * an export license or other authorization. - * - * Contractor Name: Raytheon Company - * Contractor Address: 6825 Pine Street, Suite 340 - * Mail Stop B8 - * Omaha, NE 68106 - * 402.291.0100 - * - * See the AWIPS II Master Rights File ("Master Rights File.pdf") for - * further licensing information. - **/ -package com.raytheon.uf.edex.plugin.text.subscription.services; - -import java.io.File; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.nio.file.attribute.FileAttribute; -import java.nio.file.attribute.PosixFilePermission; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.raytheon.uf.common.message.Header; -import com.raytheon.uf.common.message.Message; -import com.raytheon.uf.common.message.Property; -import com.raytheon.uf.common.util.RunProcess; -import com.raytheon.uf.common.util.file.IOPermissionsHelper; -import com.raytheon.uf.edex.core.EDEXUtil; -import com.raytheon.uf.edex.plugin.text.dbsrv.TextDBSrv; - -/** - * - * A script runner for Text Trigger execution scripts. - * - *
    - *
    - * SOFTWARE HISTORY
    - *
    - * Date         Ticket#    Engineer    Description
    - * ------------ ---------- ----------- --------------------------
    - * Jan 4, 2016  5203       tjensen     Initial creation
    - * Jan 18, 2016 4562       tjensen     Moved from edex.plugin.text to
    - *                                     edex.plugin.text.subscription
    - * Mar 4, 2016  4716       rferrel     {@link #createProductRequestMessage(String)} determines if AWIPS or AFOS command.
    - * Jul 24, 2017 6333       tgurney     Set file permissions on write
    - * Aug 17, 2017 6392       tgurney     Move scriptLauncher to edex bin
    - *
    - * 
    - * - * @author tjensen - */ - -public class TextTriggerHandler { - - private static final PosixFilePermission[] POSIX_DIRECTORY_PERMISSIONS = new PosixFilePermission[] { - PosixFilePermission.OWNER_READ, PosixFilePermission.OWNER_WRITE, - PosixFilePermission.OWNER_EXECUTE, PosixFilePermission.GROUP_READ, - PosixFilePermission.GROUP_WRITE, - PosixFilePermission.GROUP_EXECUTE }; - - private static final FileAttribute> POSIX_DIRECTORY_ATTRIBUTES = IOPermissionsHelper - .getPermissionsAsAttributes(POSIX_DIRECTORY_PERMISSIONS); - - private static final PosixFilePermission[] POSIX_FILE_PERMISSIONS = new PosixFilePermission[] { - PosixFilePermission.OWNER_READ, PosixFilePermission.OWNER_WRITE, - PosixFilePermission.GROUP_READ, PosixFilePermission.GROUP_WRITE }; - - private static final Set POSIX_FILE_SET = IOPermissionsHelper - .getPermissionsAsSet(POSIX_FILE_PERMISSIONS); - - private static final String SCRIPT_LAUNCHER_PATH = Paths - .get(EDEXUtil.getEdexBin(), "scriptLauncher").toString(); - - /** - * Logger instance for system logging. - */ - protected transient Logger logger = LoggerFactory.getLogger(getClass()); - - /** - * Triggering AWIPS commands have length of 10 while the AFOS is 9. - */ - private static final int AWIPS_CMD_LEN = 10; - - public TextTriggerHandler() { - super(); - } - - public void execute(String script, String trigger) throws TriggerException { - /* - *
     For script running, the script has format /script_name
    -         * 
    -         *
    -         * This will need to basically replicate the script running capability.
    -         * Initially, 1) retrieve the text product from the database (using the
    -         * pid) 2) write the text product to a file using the standard file name
    -         * env("FXA_DATA")/trigger/pid 3) execute the script 
    - */ - if (trigger == null || "".equals(trigger.trim())) { - throw new TriggerException( - "Invalid trigger, unable to execute script: " + script); - } - - String prodID = null; - try { - prodID = trigger.split(" ")[0]; - } catch (Exception e) { - throw new TriggerException( - "Unable to extract product ID, unable to execute script: " - + script, - e); - } - - /* retrieve text product from textDB */ - try { - String contents = retrieveTextProduct(prodID); - writeProductToFile(prodID, contents); - executeTriggerScript(script); - logger.info("Trigger: " + script); - } catch (Exception e) { - throw new TriggerException("unable to execute script " + script, e); - } - } - - /** - * Retrieves the product from the text database. The retrieval is performed - * via the Text Database Service. - * - * @param prodID - * AWIPS or AFOS PIL of the product to retrieve - * - * @return the latest product for the AWIPS or AFOS PIL - */ - private String retrieveTextProduct(String prodID) { - Message message = createProductRequestMessage(prodID); - TextDBSrv server = new TextDBSrv(); - Message response = server.processMessage(message); - return extractProductFromResponse(response); - } - - /** - * Generates the Text Database Server product request message. The message - * created will be similar to
    - * - *
    -     *    {@literal }
    -     *       {@literal 
    } - * {@literal } - * {@literal } - * {@literal } - * {@literal } - * {@literal
    } - * {@literal
    } - *
    - * - * @param prodID - * AWIPS or AFOS PIL of the product to retrieve - * - * @return the product request message - * - */ - private Message createProductRequestMessage(String prodID) { - Message message = new Message(); - Header header = new Header(); - List properties = new ArrayList<>(); - properties.add(new Property("VIEW", "text")); - properties.add(new Property("OP", "GET")); - properties.add(new Property("SUBOP", "PROD")); - properties.add(new Property( - prodID.length() == AWIPS_CMD_LEN ? "AWIPSCMD" : "AFOSCMD", - prodID)); - header.setProperties(properties.toArray(new Property[] {})); - message.setHeader(header); - return message; - } - - /** - * Extracts the product from the response. The response message will be - * similar to
    - * - *
    -     *    {@literal }
    -     *       {@literal 
    } - * {@literal } - * {@literal
    } - * {@literal
    } - *
    - * - * @param response - * the response from the server - * - * @return the product text - */ - private String extractProductFromResponse(Message reply) { - StringBuilder retVal = new StringBuilder(); - Header header = reply.getHeader(); - if (header != null && header.getProperties() != null) { - for (Property property : header.getProperties()) { - if ("stdout".equalsIgnoreCase(property.getName())) { - retVal.append(property.getValue()).append("\n"); - } - } - } - - return retVal.toString(); - } - - /** - * Writes the product to the file system. The product is written to - * $FXA_DATA/trigger/{prodID} -- $FXA_DATA is obtained from the environment - * and {prodID} is the AWIPS or AFOS PIL of the product. - * - * @param prodID - * AWIPS or AFOS PIL of the product - * @param product - * the product to export - */ - private void writeProductToFile(String prodID, String product) - throws Exception { - String fxaData = System.getenv("FXA_DATA"); - Path p = new File(fxaData, "trigger/" + prodID).toPath(); - com.raytheon.uf.common.util.file.Files.createDirectories(p.getParent(), - POSIX_DIRECTORY_ATTRIBUTES); - Files.write(p, product.getBytes()); - IOPermissionsHelper.applyFilePermissions(p, POSIX_FILE_SET); - } - - private void executeTriggerScript(String script) throws Exception { - logger.info("Executing script: script= " + script); - Map env = System.getenv(); - List strEnv = new ArrayList<>(); - for (Entry entry : env.entrySet()) { - strEnv.add(entry.getKey() + "=" + entry.getValue()); - } - - File f = new File(SCRIPT_LAUNCHER_PATH); - f.setExecutable(true); - script = f.getAbsolutePath() + ' ' + script; - RunProcess.getRunProcess().exec(script, - strEnv.toArray(new String[] {})); - } - -} diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/src/com/raytheon/uf/edex/plugin/text/subscription/services/TriggerException.java b/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/src/com/raytheon/uf/edex/plugin/text/subscription/services/TriggerException.java deleted file mode 100644 index 84ecfb1f4d..0000000000 --- a/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/src/com/raytheon/uf/edex/plugin/text/subscription/services/TriggerException.java +++ /dev/null @@ -1,66 +0,0 @@ -/** - * This software was developed and / or modified by Raytheon Company, - * pursuant to Contract DG133W-05-CQ-1067 with the US Government. - * - * U.S. EXPORT CONTROLLED TECHNICAL DATA - * This software product contains export-restricted data whose - * export/transfer/disclosure is restricted by U.S. law. Dissemination - * to non-U.S. persons whether in the United States or abroad requires - * an export license or other authorization. - * - * Contractor Name: Raytheon Company - * Contractor Address: 6825 Pine Street, Suite 340 - * Mail Stop B8 - * Omaha, NE 68106 - * 402.291.0100 - * - * See the AWIPS II Master Rights File ("Master Rights File.pdf") for - * further licensing information. - **/ -package com.raytheon.uf.edex.plugin.text.subscription.services; - -/** - * - * Trigger Exception class - * - *
    - * 
    - * SOFTWARE HISTORY
    - * 
    - * Date         Ticket#    Engineer    Description
    - * ------------ ---------- ----------- --------------------------
    - * Jan 5, 2016  5203       tjensen     Initial creation
    - * Jan 18, 2016 4562       tjensen     Moved from edex.plugin.text to 
    - *                                     edex.plugin.text.subscription
    - * 
    - * 
    - * - * @author tjensen - * @version 1.0 - */ -public class TriggerException extends Exception { - - /** - * Default serial version UID - */ - private static final long serialVersionUID = 1L; - - /** - * Create a Trigger Exception instance from only a message - * - * @param message - */ - public TriggerException(String message) { - super(message); - } - - /** - * Create a Trigger Exception instance from both a message and a cause - * - * @param message - * @param cause - */ - public TriggerException(String message, Throwable cause) { - super(message, cause); - } -} \ No newline at end of file diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/src/com/raytheon/uf/edex/plugin/text/subscription/util/SubscribeAction.java b/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/src/com/raytheon/uf/edex/plugin/text/subscription/util/SubscribeAction.java deleted file mode 100644 index 1666990b8c..0000000000 --- a/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/src/com/raytheon/uf/edex/plugin/text/subscription/util/SubscribeAction.java +++ /dev/null @@ -1,113 +0,0 @@ -/** - * This software was developed and / or modified by Raytheon Company, - * pursuant to Contract DG133W-05-CQ-1067 with the US Government. - * - * U.S. EXPORT CONTROLLED TECHNICAL DATA - * This software product contains export-restricted data whose - * export/transfer/disclosure is restricted by U.S. law. Dissemination - * to non-U.S. persons whether in the United States or abroad requires - * an export license or other authorization. - * - * Contractor Name: Raytheon Company - * Contractor Address: 6825 Pine Street, Suite 340 - * Mail Stop B8 - * Omaha, NE 68106 - * 402.291.0100 - * - * See the AWIPS II Master Rights File ("Master Rights File.pdf") for - * further licensing information. - **/ -package com.raytheon.uf.edex.plugin.text.subscription.util; - -import java.util.HashMap; -import java.util.Map; - -import com.raytheon.uf.common.message.Message; -import com.raytheon.uf.edex.plugin.text.subscription.runners.ASubscribeRunner; -import com.raytheon.uf.edex.plugin.text.subscription.runners.ISubscribeRunner; -import com.raytheon.uf.edex.plugin.text.subscription.runners.SubscribeAddRunner; -import com.raytheon.uf.edex.plugin.text.subscription.runners.SubscribeDeleteRunner; -import com.raytheon.uf.edex.plugin.text.subscription.runners.SubscribeQueryRunner; -import com.raytheon.uf.edex.plugin.text.subscription.runners.SubscribeReadRunner; -import com.raytheon.uf.edex.plugin.text.subscription.runners.SubscribeUpdateRunner; - -/** - * An enumeration of Subscription Actions. This enumeration is used by the - * factory methods ({@link ASubscribeRunner#getInstance(String, Message)} and - * {@link ASubscribeRunner#getInstance(String)}) to determine the correct class - * to instantiate to create a worker. - * - *
    - * 
    - * SOFTWARE HISTORY
    - * 
    - * Date         Ticket#    Engineer    Description
    - * ------------ ---------- ----------- --------------------------
    - * 14Nov2008    1709       MW Fegan    Initial creation.
    - * May 22, 2014 2536       bclement    moved from autobldsrv to edex.plugin.text
    - *                                      removed hard coded class names
    - * Sep 05, 2014 2926       bclement    switched map from class names to class objects
    - * Jan 18, 2016 4562       tjensen     Moved from edex.plugin.text to 
    - *                                     edex.plugin.text.subscription
    - * 
    - * 
    - * - * @author mfegan - * @version 1.0 - */ - -public enum SubscribeAction { - ACTION_ADD, ACTION_READ, ACTION_DELETE, ACTION_UPDATE, ACTION_QUERY; - /** - * A mapping of action names to SubscribeAction objects. - */ - private static final Map actions = new HashMap() { - private static final long serialVersionUID = 1L; - { - put("add", ACTION_ADD); - put("read", ACTION_READ); - put("delete", ACTION_DELETE); - put("update", ACTION_UPDATE); - put("query", ACTION_QUERY); - } - }; - - /** - * A mapping of SubscribeAction objects to implementation class - */ - private static final Map> runners = new HashMap>() { - private static final long serialVersionUID = 1L; - { - put(ACTION_ADD, SubscribeAddRunner.class); - put(ACTION_READ, SubscribeReadRunner.class); - put(ACTION_DELETE, SubscribeDeleteRunner.class); - put(ACTION_UPDATE, SubscribeUpdateRunner.class); - put(ACTION_QUERY, SubscribeQueryRunner.class); - } - }; - - /** - * Constructor. - */ - private SubscribeAction() { - } - - /** - * Factory method that gets the SubscribeAction object for an action name. - * - * @param action - * name of the requested action - * - * @return the corresponding action - */ - public static final SubscribeAction translate(String action) { - return actions.get(action.toLowerCase()); - } - - /** - * Returns the class name of the runner associated with the action. - */ - public final Class getRunner() { - return runners.get(this); - } -} diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/src/com/raytheon/uf/edex/plugin/text/subscription/util/Tools.java b/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/src/com/raytheon/uf/edex/plugin/text/subscription/util/Tools.java deleted file mode 100644 index 47408a3ee9..0000000000 --- a/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/src/com/raytheon/uf/edex/plugin/text/subscription/util/Tools.java +++ /dev/null @@ -1,84 +0,0 @@ -/** - * This software was developed and / or modified by Raytheon Company, - * pursuant to Contract DG133W-05-CQ-1067 with the US Government. - * - * U.S. EXPORT CONTROLLED TECHNICAL DATA - * This software product contains export-restricted data whose - * export/transfer/disclosure is restricted by U.S. law. Dissemination - * to non-U.S. persons whether in the United States or abroad requires - * an export license or other authorization. - * - * Contractor Name: Raytheon Company - * Contractor Address: 6825 Pine Street, Suite 340 - * Mail Stop B8 - * Omaha, NE 68106 - * 402.291.0100 - * - * See the AWIPS II Master Rights File ("Master Rights File.pdf") for - * further licensing information. - **/ -package com.raytheon.uf.edex.plugin.text.subscription.util; - -import java.util.ArrayList; -import java.util.List; - -import com.raytheon.uf.common.message.Property; - -/** - * Utility class for the subscription manager. - * - *
    - * 
    - * SOFTWARE HISTORY
    - * 
    - * Date         Ticket#    Engineer    Description
    - * ------------ ---------- ----------- --------------------------
    - * 14Nov2008    1709       MW Fegan    Initial creation.
    - * 14Sep2010    3944       cjeanbap    Trim the newline char from value.
    - * May 22, 2014 2536       bclement    moved from autobldsrv to edex.plugin.text
    - * Sep 05, 2014 2926       bclement    removed hex utilities
    - * Jan 18, 2016 4562       tjensen     Moved from edex.plugin.text to 
    - *                                     edex.plugin.text.subscription
    - * 
    - * 
    - * - * @author mfegan - * @version 1.0 - */ - -public final class Tools { - - /** - * Constructor. - */ - private Tools() { - super(); - } - - /** - * - * @param properties - * @return - */ - public static final List adjustMessageProperties( - Property[] properties) { - List retVal = new ArrayList(); - for (Property prop : properties) { - if (!"operation".equalsIgnoreCase(prop.getName())) { - if ("file".equalsIgnoreCase(prop.getName())) { - prop.setName("filepath"); - if (prop.getValue().indexOf('\n') > 0) { - int len = prop.getValue().length(); - prop.setValue(prop.getValue().substring(0, len - 1)); - } - } - if ("index".equalsIgnoreCase(prop.getName())) { - prop.setName("id"); - } - retVal.add(prop); - } - } - - return retVal; - } -} diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/src/com/raytheon/uf/edex/plugin/text/subscription/util/TriggerMatcher.java b/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/src/com/raytheon/uf/edex/plugin/text/subscription/util/TriggerMatcher.java deleted file mode 100644 index e3f4567632..0000000000 --- a/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/src/com/raytheon/uf/edex/plugin/text/subscription/util/TriggerMatcher.java +++ /dev/null @@ -1,110 +0,0 @@ -/** - * This software was developed and / or modified by Raytheon Company, - * pursuant to Contract DG133W-05-CQ-1067 with the US Government. - * - * U.S. EXPORT CONTROLLED TECHNICAL DATA - * This software product contains export-restricted data whose - * export/transfer/disclosure is restricted by U.S. law. Dissemination - * to non-U.S. persons whether in the United States or abroad requires - * an export license or other authorization. - * - * Contractor Name: Raytheon Company - * Contractor Address: 6825 Pine Street, Suite 340 - * Mail Stop B8 - * Omaha, NE 68106 - * 402.291.0100 - * - * See the AWIPS II Master Rights File ("Master Rights File.pdf") for - * further licensing information. - **/ -package com.raytheon.uf.edex.plugin.text.subscription.util; - -import java.util.Date; - -import org.quartz.CronExpression; - -import com.raytheon.uf.common.dataplugin.text.subscription.db.SubscriptionRecord; - -/** - * Utility for matching stored subscriptions to query triggers - * - *
    - * 
    - * SOFTWARE HISTORY
    - * 
    - * Date         Ticket#    Engineer    Description
    - * ------------ ---------- ----------- --------------------------
    - * May 22, 2014 2536       bclement     Initial creation
    - * 12.13.14     DR 14638   dhuffman     Cut whitespace.
    - * Jan 18, 2016 4562       tjensen      Moved from edex.plugin.text to 
    - *                                      edex.plugin.text.subscription
    - * 
    - * 
    - * - * @author bclement - * @version 1.0 - */ -public class TriggerMatcher { - - /** - * Determines if the specified trigger value matches the trigger value of - * the provided SubscriptionRecord. - * - * @param record - * @param trigger - * the trigger value to compare - * - * @return true if the trigger matches, false otherwise - */ - public static boolean matches(SubscriptionRecord record, String trigger) { - String type = record.getType(); - String recordTrigger = record.getTrigger(); - boolean retVal = false; - if ("timer".equalsIgnoreCase(type)) { - try { - long date = Long.parseLong(trigger); - CronExpression cexp = new CronExpression(recordTrigger); - retVal = cexp.isSatisfiedBy(new Date(date)); - } catch (Exception e) { - retVal = false; - } - } else if ("ldad".equalsIgnoreCase(type)) { - /* - * Legacy code has these patterns: TextString patterns[] = { - * productId, productId.left(6) + "XXX", "CCC" + productId.mid(3,3) - * + "XXX", productId.left(3) + "NNNXXX", productId.left(3) + "NNN" - * + productId.right(productId.length() - 6) }; - */ - // System.out.println("matching trigger=" + trigger + - // " -- this.trigger="+ this.trigger + - // " -- trigger.substr(0,6)+\"XXX\"="+trigger.substring(0,6)+"XXX" + - // " -- \"CCC\"+trigger.substring(3,6)+\"XXX\"="+"CCC"+trigger.substring(3, - // 6)+"XXX" + - // " -- trigger.substring(0,3)+\"NNNXXX\"=" + trigger.substring(0, - // 3)+"NNNXXX" + - // " -- trigger.substring(0, 3)+\"NNN\"+trigger.substring(6)="+trigger.substring(0, - // 3)+"NNN"+trigger.substring(6)); - - // Below, "subscriptionTrigger" is data from the subscription - // database table. - String subscriptionTrigger = recordTrigger.replaceAll("\\s+$", ""); - String requestTrigger = trigger.replaceAll("\\s+$", ""); - retVal = (requestTrigger.equalsIgnoreCase(subscriptionTrigger)) - || ((requestTrigger.substring(0, 6) + "XXX") - .equalsIgnoreCase(subscriptionTrigger)) - || (("CCC" + requestTrigger.substring(3, 6) + "XXX") - .equalsIgnoreCase(subscriptionTrigger)) - || ((requestTrigger.substring(0, 3) + "NNNXXX") - .equalsIgnoreCase(subscriptionTrigger)) - || ((requestTrigger.substring(0, 3) + "NNN" + requestTrigger - .substring(6)) - .equalsIgnoreCase(subscriptionTrigger) || (subscriptionTrigger - .startsWith(requestTrigger))); - } else { - String pattern = recordTrigger.replaceAll("\\*", ".+"); - retVal = trigger.matches(pattern); - } - return retVal; - } - -} diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/utility/common_static/base/notification/text-subscription.xml b/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/utility/common_static/base/notification/text-subscription.xml deleted file mode 100644 index 921ce23f5d..0000000000 --- a/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/utility/common_static/base/notification/text-subscription.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - textToWatchWarn - PDO - DIRECTVM - - - - - - - diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/utility/common_static/base/util/scriptLauncher b/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/utility/common_static/base/util/scriptLauncher deleted file mode 100644 index 9296c2ce16..0000000000 --- a/edexOsgi/com.raytheon.uf.edex.plugin.text.subscription/utility/common_static/base/util/scriptLauncher +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh - -# This starts the desired script passing the script name and arguments as a -# single string ("$@"). It then sends stdout/stderr to the bit bucket -# (>&/dev/null). -# The stdin for the script is also the bit bucket (&/dev/null com.raytheon.uf.common.dataplugin.text - com.raytheon.uf.common.dataplugin.text.subscription com.raytheon.uf.edex.database
    diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.text/utility/common_static/base/environment/EnvWrapCfg.xml b/edexOsgi/com.raytheon.uf.edex.plugin.text/utility/common_static/base/environment/EnvWrapCfg.xml index 5eca61922f..1f2099ad92 100644 --- a/edexOsgi/com.raytheon.uf.edex.plugin.text/utility/common_static/base/environment/EnvWrapCfg.xml +++ b/edexOsgi/com.raytheon.uf.edex.plugin.text/utility/common_static/base/environment/EnvWrapCfg.xml @@ -46,10 +46,4 @@ /awips2/edex/data/fxa - - /data/ldad/public - - - /ldad - diff --git a/edexOsgi/com.raytheon.uf.edex.remote.script/res/spring/remotescript-request.xml b/edexOsgi/com.raytheon.uf.edex.remote.script/res/spring/remotescript-request.xml deleted file mode 100644 index 69f5e39d7c..0000000000 --- a/edexOsgi/com.raytheon.uf.edex.remote.script/res/spring/remotescript-request.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - diff --git a/edexOsgi/com.raytheon.uf.edex.remote.script/src/com/raytheon/uf/edex/remote/script/AbstractRemoteScriptHandler.java b/edexOsgi/com.raytheon.uf.edex.remote.script/src/com/raytheon/uf/edex/remote/script/AbstractRemoteScriptHandler.java deleted file mode 100644 index b9268d6fc5..0000000000 --- a/edexOsgi/com.raytheon.uf.edex.remote.script/src/com/raytheon/uf/edex/remote/script/AbstractRemoteScriptHandler.java +++ /dev/null @@ -1,159 +0,0 @@ -/** - * This software was developed and / or modified by Raytheon Company, - * pursuant to Contract DG133W-05-CQ-1067 with the US Government. - * - * U.S. EXPORT CONTROLLED TECHNICAL DATA - * This software product contains export-restricted data whose - * export/transfer/disclosure is restricted by U.S. law. Dissemination - * to non-U.S. persons whether in the United States or abroad requires - * an export license or other authorization. - * - * Contractor Name: Raytheon Company - * Contractor Address: 6825 Pine Street, Suite 340 - * Mail Stop B8 - * Omaha, NE 68106 - * 402.291.0100 - * - * See the AWIPS II Master Rights File ("Master Rights File.pdf") for - * further licensing information. - **/ -package com.raytheon.uf.edex.remote.script; - -import com.raytheon.uf.common.auth.exception.AuthorizationException; -import com.raytheon.uf.common.localization.IPathManager; -import com.raytheon.uf.common.remote.script.RemoteScriptConstants; -import com.raytheon.uf.common.remote.script.RemoteScriptRequest; -import com.raytheon.uf.common.status.IUFStatusHandler; -import com.raytheon.uf.common.status.UFStatus; -import com.raytheon.uf.common.status.UFStatus.Priority; -import com.raytheon.uf.common.time.util.ITimer; -import com.raytheon.uf.common.time.util.TimeUtil; -import com.raytheon.uf.common.util.FileUtil; -import com.raytheon.uf.edex.auth.AuthManagerFactory; -import com.raytheon.uf.edex.auth.IPermissionsManager; -import com.raytheon.uf.edex.auth.req.AbstractPrivilegedRequestHandler; -import com.raytheon.uf.edex.auth.resp.AuthorizationResponse; - -/** - * Abstract class for the remote script handlers. Performs authorization and - * timing of requests. - * - *
    - *
    - * SOFTWARE HISTORY
    - *
    - * Date          Ticket#  Engineer  Description
    - * ------------- -------- --------- --------------------------------------------
    - * Mar 12, 2014  2742     rferrel   Initial creation
    - * Jul 17, 2017  6288     randerso  Changed to use new Roles/Permissions
    - *                                  framework
    - *
    - * 
    - * - * @author rferrel - */ - -public abstract class AbstractRemoteScriptHandler - extends AbstractPrivilegedRequestHandler { - - /** Status handler of the handling class using this class. */ - protected final transient IUFStatusHandler statusHandler; - - /** Common static directory for scripts. */ - protected final String scriptsDirectory; - - /** The handler's roleId defined in the common remoteScriptAdminRoles.xml */ - protected final String roleId; - - /** - * Constructor. - * - * @param roleId - */ - public AbstractRemoteScriptHandler(String roleId) { - this.statusHandler = UFStatus.getHandler(this.getClass()); - this.roleId = roleId; - - String scriptsDirectory = FileUtil.edexPath( - System.getProperty(RemoteScriptConstants.scriptDirectoryKey, - RemoteScriptConstants.scriptDirectoryDefault)); - - // Strip tailing separators. - if (scriptsDirectory.endsWith(IPathManager.SEPARATOR)) { - StringBuilder sb = new StringBuilder(scriptsDirectory); - do { - sb.setLength(sb.length() - 1); - } while ((sb.length() > 0) && (sb - .lastIndexOf(IPathManager.SEPARATOR) == (sb.length() - 1))); - scriptsDirectory = sb.toString(); - } - this.scriptsDirectory = scriptsDirectory; - } - - /** - * The method a subclass must implement to perform the work for the desired - * request. - * - * @param request - * @return results - */ - protected abstract Object performRequest(RemoteScriptRequest request); - - @Override - public Object handleRequest(RemoteScriptRequest request) throws Exception { - Object result = null; - - if (statusHandler.isPriorityEnabled(Priority.INFO)) { - statusHandler.handle(Priority.INFO, String.format( - "Start for %s, do %s", request.getUserId(), getRoleId())); - } - - ITimer timer = TimeUtil.getTimer(); - timer.start(); - result = performRequest(request); - timer.stop(); - - if (statusHandler.isPriorityEnabled(Priority.INFO)) { - statusHandler.handle(Priority.INFO, - String.format("Finish for %s, do %s, took %s", - request.getUserId(), getRoleId(), TimeUtil - .prettyDuration(timer.getElapsedTime()))); - } - - return result; - } - - protected String getRoleId() { - return roleId; - } - - /** - * Performs the authorization work for the handlers. - * - * @param user - * @param request - * @return authorizationResponse - * @throws AuthorizationException - */ - @Override - public AuthorizationResponse authorized(RemoteScriptRequest request) - throws AuthorizationException { - IPermissionsManager manager = AuthManagerFactory.getInstance() - .getPermissionsManager(); - - String role = getRoleId(); - - boolean authorized = manager.isPermitted(role); - - if (authorized) { - return new AuthorizationResponse(authorized); - } else { - String message = "Not Authorized to run " + roleId; - if (statusHandler.isPriorityEnabled(Priority.INFO)) { - statusHandler.handle(Priority.INFO, String.format("%s, %s", - request.getUser().uniqueId(), message)); - } - return new AuthorizationResponse(message); - } - } -} diff --git a/edexOsgi/com.raytheon.uf.edex.remote.script/src/com/raytheon/uf/edex/remote/script/RemoteScriptListHandler.java b/edexOsgi/com.raytheon.uf.edex.remote.script/src/com/raytheon/uf/edex/remote/script/RemoteScriptListHandler.java deleted file mode 100644 index a900f56676..0000000000 --- a/edexOsgi/com.raytheon.uf.edex.remote.script/src/com/raytheon/uf/edex/remote/script/RemoteScriptListHandler.java +++ /dev/null @@ -1,103 +0,0 @@ -/** - * This software was developed and / or modified by Raytheon Company, - * pursuant to Contract DG133W-05-CQ-1067 with the US Government. - * - * U.S. EXPORT CONTROLLED TECHNICAL DATA - * This software product contains export-restricted data whose - * export/transfer/disclosure is restricted by U.S. law. Dissemination - * to non-U.S. persons whether in the United States or abroad requires - * an export license or other authorization. - * - * Contractor Name: Raytheon Company - * Contractor Address: 6825 Pine Street, Suite 340 - * Mail Stop B8 - * Omaha, NE 68106 - * 402.291.0100 - * - * See the AWIPS II Master Rights File ("Master Rights File.pdf") for - * further licensing information. - **/ -package com.raytheon.uf.edex.remote.script; - -import com.raytheon.uf.common.auth.util.PermissionUtils; -import com.raytheon.uf.common.localization.IPathManager; -import com.raytheon.uf.common.localization.LocalizationContext; -import com.raytheon.uf.common.localization.LocalizationFile; -import com.raytheon.uf.common.localization.PathManagerFactory; -import com.raytheon.uf.common.remote.script.RemoteScriptListRequest; -import com.raytheon.uf.common.remote.script.RemoteScriptListResponse; -import com.raytheon.uf.common.remote.script.RemoteScriptRequest; -import com.raytheon.uf.common.status.UFStatus.Priority; - -/** - * Handler to get the remote script list. - * - *
    - *
    - * SOFTWARE HISTORY
    - *
    - * Date          Ticket#  Engineer  Description
    - * ------------- -------- --------- --------------------------------------------
    - * Mar 14, 2014  2742     rferrel   Initial creation Exclude files with md5
    - *                                  checksum extension.
    - * Feb 15, 2017  6111     njensen   Overrode getRequestType()
    - * Jul 19, 2017  6288     randerso  Changes for new roles/permissions framework
    - *
    - * 
    - * - * @author rferrel - */ - -public class RemoteScriptListHandler extends AbstractRemoteScriptHandler { - - /** Extension for check sum files to remove from listing. */ - private static final String MD5_EXT = ".md5"; - - /** - * Constructor. - */ - public RemoteScriptListHandler() { - // The permission id in the common remoteScript.ini - super(PermissionUtils.buildPermissionString("remoteScript", "list")); - } - - @Override - public Object performRequest(RemoteScriptRequest request) { - IPathManager pm = PathManagerFactory.getPathManager(); - RemoteScriptListRequest req = (RemoteScriptListRequest) request; - - if (statusHandler.isPriorityEnabled(Priority.DEBUG)) { - statusHandler.handle(Priority.DEBUG, - String.format("Request: %s", req)); - } - - LocalizationContext[] ctxs = req.getContexts(); - - RemoteScriptListResponse result = new RemoteScriptListResponse(); - - for (LocalizationContext ctx : ctxs) { - LocalizationFile[] lFiles = pm.listFiles(ctx, scriptsDirectory, - null, false, true); - if ((lFiles != null) && (lFiles.length > 0)) { - for (LocalizationFile lFile : lFiles) { - if (!lFile.getPath().trim().endsWith(MD5_EXT)) { - result.add(lFile); - } - } - } - } - - if (statusHandler.isPriorityEnabled(Priority.DEBUG)) { - statusHandler.handle(Priority.DEBUG, - String.format("Results: %s", result)); - } - - return result; - } - - @Override - public Class getRequestType() { - return RemoteScriptListRequest.class; - } - -} diff --git a/edexOsgi/com.raytheon.uf.edex.remote.script/src/com/raytheon/uf/edex/remote/script/RemoteScriptRunHandler.java b/edexOsgi/com.raytheon.uf.edex.remote.script/src/com/raytheon/uf/edex/remote/script/RemoteScriptRunHandler.java deleted file mode 100644 index 385c7b7d2c..0000000000 --- a/edexOsgi/com.raytheon.uf.edex.remote.script/src/com/raytheon/uf/edex/remote/script/RemoteScriptRunHandler.java +++ /dev/null @@ -1,297 +0,0 @@ -/** - * This software was developed and / or modified by Raytheon Company, - * pursuant to Contract DG133W-05-CQ-1067 with the US Government. - * - * U.S. EXPORT CONTROLLED TECHNICAL DATA - * This software product contains export-restricted data whose - * export/transfer/disclosure is restricted by U.S. law. Dissemination - * to non-U.S. persons whether in the United States or abroad requires - * an export license or other authorization. - * - * Contractor Name: Raytheon Company - * Contractor Address: 6825 Pine Street, Suite 340 - * Mail Stop B8 - * Omaha, NE 68106 - * 402.291.0100 - * - * See the AWIPS II Master Rights File ("Master Rights File.pdf") for - * further licensing information. - **/ -package com.raytheon.uf.edex.remote.script; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import com.raytheon.uf.common.auth.util.PermissionUtils; -import com.raytheon.uf.common.comm.HttpClient; -import com.raytheon.uf.common.localization.IPathManager; -import com.raytheon.uf.common.localization.LocalizationContext; -import com.raytheon.uf.common.localization.LocalizationFile; -import com.raytheon.uf.common.localization.PathManagerFactory; -import com.raytheon.uf.common.remote.script.RemoteScriptConstants; -import com.raytheon.uf.common.remote.script.RemoteScriptRequest; -import com.raytheon.uf.common.remote.script.RemoteScriptRunRequest; -import com.raytheon.uf.common.remote.script.RemoteScriptRunResponse; -import com.raytheon.uf.common.status.UFStatus.Priority; -import com.raytheon.uf.common.time.util.TimeUtil; -import com.raytheon.uf.common.util.RunProcess; - -/** - * Handler to Run a remote script and return the results. - * - *
    - *
    - * SOFTWARE HISTORY
    - *
    - * Date          Ticket#  Engineer  Description
    - * ------------- -------- --------- --------------------------------------------
    - * Mar 19, 2014  2743     rferrel   Initial creation
    - * Feb 15, 2017  6111     njensen   Overrode getRequestType()
    - * Jul 19, 2017  6288     randerso  Changes for new roles/permissions framework
    - *
    - * 
    - * - * @author rferrel - */ - -public class RemoteScriptRunHandler extends AbstractRemoteScriptHandler { - - /** - * Time to back off from socket time out to allow completion of a timeout - * script. - */ - private static final int BACKOFF_MSEC = 100; - - /** - * Resource timeout. - */ - private final int defaultTimeoutSec; - - /** - * Resource flag value. - */ - private final boolean defaultUseStdErrFlag; - - /** - * Resource set up exit status. - */ - private final int defaultSetupExit; - - /** - * Constructor setup permission Id and resource property values. - */ - public RemoteScriptRunHandler() { - // The permission id in the common remoteScript.ini - super(PermissionUtils.buildPermissionString("remoteScript", "run")); - - // Set up default values. - String defaultTimeoutStr = System.getProperty( - RemoteScriptConstants.scriptTimeoutKey, - RemoteScriptConstants.scriptTimeoutDefault); - int defaultTimeoutSec = -1; - try { - defaultTimeoutSec = Integer.parseInt(defaultTimeoutStr); - } catch (NumberFormatException ex) { - defaultTimeoutSec = -1; - } finally { - if (defaultTimeoutSec <= 0) { - defaultTimeoutSec = Integer - .parseInt(RemoteScriptConstants.scriptTimeoutDefault); - } - this.defaultTimeoutSec = defaultTimeoutSec; - } - - String defaultUseStdErr = System.getProperty( - RemoteScriptConstants.scriptUseStdErrKey, - RemoteScriptConstants.scriptUseStdErrDefault); - this.defaultUseStdErrFlag = Boolean.parseBoolean(defaultUseStdErr); - - String defaultSetupErrorStr = System.getProperty( - RemoteScriptConstants.scriptSetupErrrorKey, - RemoteScriptConstants.scriptUseStdErrDefault); - int defaultSetupExit = 0; - try { - defaultSetupExit = Integer.parseInt(defaultSetupErrorStr); - - } catch (NumberFormatException ex) { - defaultSetupExit = 0; - } finally { - if (defaultSetupExit <= 0) { - defaultSetupExit = Integer.parseInt( - RemoteScriptConstants.scriptSetUpErrorDefault); - } - this.defaultSetupExit = defaultSetupExit; - } - } - - @Override - public Object handleRequest(RemoteScriptRequest request) throws Exception { - return super.handleRequest(request); - } - - @Override - public Object performRequest(RemoteScriptRequest request) { - RemoteScriptRunRequest req = (RemoteScriptRunRequest) request; - RemoteScriptRunResponse result = new RemoteScriptRunResponse(); - - Map propMap = req.getPropertyMap(); - - String timeoutValue = propMap - .get(RemoteScriptConstants.scriptTimeoutKey); - int timeoutSec = -1; - if (timeoutValue == null) { - timeoutSec = defaultTimeoutSec; - } else { - try { - timeoutSec = Integer.parseInt(timeoutValue); - if (timeoutSec <= 0) { - timeoutSec = defaultTimeoutSec; - } - } catch (NumberFormatException ex) { - statusHandler.handle(Priority.PROBLEM, - String.format("Bad timeout value %s", timeoutValue)); - timeoutSec = defaultTimeoutSec; - } finally { - if (timeoutSec <= 0) { - timeoutSec = defaultTimeoutSec; - } - } - } - - long timeout = timeoutSec * TimeUtil.MILLIS_PER_SECOND; - - String useStdErrString = propMap - .get(RemoteScriptConstants.scriptUseStdErrKey); - - boolean useStdErr = defaultUseStdErrFlag; - if (useStdErrString != null) { - useStdErr = Boolean.parseBoolean(useStdErrString); - } - - String setupExitValue = propMap - .get(RemoteScriptConstants.scriptSetupErrrorKey); - int setupExit = -1; - - if (setupExitValue == null) { - setupExit = defaultSetupExit; - } else { - - try { - setupExit = Integer.parseInt(setupExitValue); - } catch (NumberFormatException ex) { - statusHandler.handle(Priority.PROBLEM, String.format( - "Bad setup Error exit value %s", setupExitValue)); - setupExit = defaultSetupExit; - } finally { - if (setupExit <= 0) { - setupExit = defaultSetupExit; - } - } - } - - List arguments = req.getScriptArguments(); - String script = req.getScript(); - LocalizationContext context = req.getContext(); - - IPathManager pm = PathManagerFactory.getPathManager(); - String name = scriptsDirectory + IPathManager.SEPARATOR + script; - LocalizationFile lFile = pm.getLocalizationFile(context, name); - File file = lFile.getFile(); - File dir = file.getParentFile(); - - if (!file.canExecute()) { - String message = String.format("Not an executable script: \"%s\".", - lFile); - return sendMessage(result, message, useStdErr, setupExit); - } - - int maxTimeout = HttpClient.getInstance().getSocketTimeout() - - BACKOFF_MSEC; - if (maxTimeout <= 0) { - String message = String.format( - "HttpClient's socket timeout of %d msec not enough time to run a remote script.", - HttpClient.getInstance().getSocketTimeout()); - return sendMessage(result, message, useStdErr, setupExit); - } else if (timeout > maxTimeout) { - timeout = maxTimeout; - } - - List args = new ArrayList<>(); - args.add(file.getAbsolutePath()); - if (arguments != null && (!arguments.isEmpty())) { - args.addAll(arguments); - } - - ProcessBuilder pb = new ProcessBuilder(args); - pb.redirectErrorStream(!useStdErr); - pb.directory(dir); - Process p = null; - RunProcess rp = RunProcess.getRunProcess(); - String errorMessage = null; - - // TODO - The timeout/destroy should be placed in RunProcess along with - // limiting the size of stdout/stderr. - try { - p = pb.start(); - rp.setProcess(p); - synchronized (rp) { - rp.wait(timeout); - if (!rp.isExecComplete()) { - p.destroy(); - result.setTimedOut(true); - rp.notify(); - errorMessage = "Script timed out."; - } - } - } catch (Exception ex) { - errorMessage = "Problem running script: " - + ex.getLocalizedMessage().trim(); - statusHandler.handle(Priority.PROBLEM, errorMessage, ex); - - } finally { - if (p != null) { - result.setOutput(rp.getStdout()); - result.setError(rp.getStderr()); - } - result.setExitStatus(rp.waitFor()); - if (errorMessage != null) { - if (useStdErr) { - result.setError(result.getError() + "\n" + errorMessage); - } else { - result.setOutput(result.getOutput() + "\n" + errorMessage); - } - } - } - return result; - } - - /** - * Report a problem in running the script. - * - * @param result - * @param message - * @param useStdErr - * @param setupExit - * @return result - */ - private RemoteScriptRunResponse sendMessage(RemoteScriptRunResponse result, - String message, boolean useStdErr, int setupExit) { - statusHandler.handle(Priority.PROBLEM, message); - - if (useStdErr) { - result.setError(message); - } else { - result.setOutput(message); - } - - result.setExitStatus(setupExit); - return result; - } - - @Override - public Class getRequestType() { - return RemoteScriptRunRequest.class; - } -} diff --git a/edexOsgi/com.raytheon.uf.tools.cli/.project b/edexOsgi/com.raytheon.uf.tools.cli/.project new file mode 100644 index 0000000000..9f3b869228 --- /dev/null +++ b/edexOsgi/com.raytheon.uf.tools.cli/.project @@ -0,0 +1,17 @@ + + + com.raytheon.uf.tools.cli + + + + + + org.python.pydev.PyDevBuilder + + + + + + org.python.pydev.pythonNature + + diff --git a/edexOsgi/com.raytheon.uf.tools.cli/.pydevproject b/edexOsgi/com.raytheon.uf.tools.cli/.pydevproject new file mode 100644 index 0000000000..7ff1370cd2 --- /dev/null +++ b/edexOsgi/com.raytheon.uf.tools.cli/.pydevproject @@ -0,0 +1,5 @@ + + +python 2.7 +Default + diff --git a/edexOsgi/com.raytheon.uf.tools.cli/impl/capture b/edexOsgi/com.raytheon.uf.tools.cli/impl/capture index e12775bf91..cbab8931bf 100755 --- a/edexOsgi/com.raytheon.uf.tools.cli/impl/capture +++ b/edexOsgi/com.raytheon.uf.tools.cli/impl/capture @@ -1,6 +1,6 @@ #!/bin/bash # base path to save capture data to, will create subdirectory for each workstation -basePath="/data/fxa/cave" +basePath="/awips2/fxa/cave" edexGrepString="edex.run.mode=" @@ -15,9 +15,6 @@ JSTACK_ITERATIONS="15" RUN_JMAP="Y" RUN_QPID_STAT="Y" MOVE_ALL_HS_ERR_PID="Y" -# For remote top you must have ssh keys setup to allow automatic login, otherwise password prompt will get sent to log file and script will never exit -GRAB_REMOTE_TOP="Y" -GRAB_REMOTE_VMSTAT="Y" GRAB_CAVE_AND_ALERTVIZ_LOGS="Y" GRAB_SCREENSHOT="Y" GRAB_CURRENT_QUERIES="Y" @@ -72,12 +69,6 @@ usage() { echo -e "-screen {y/n}\t\tdefault [$GRAB_SCREENSHOT]" echo " Screen print the current workstation (local user must be running capture)" echo - echo -e "-t {y/n}\t\tdefault [$GRAB_REMOTE_TOP]" - echo " Captures top information from servers, auto login must be enabled" - echo - echo -e "-v {y/n}\t\tdefault [$GRAB_REMOTE_VMSTAT]" - echo " Captures vmstat information from servers, auto login must be enabled" - echo echo -e "-V {y/n}\t\tdefault [$RUN_VERSIONS]" echo " Grab version information" echo @@ -422,8 +413,6 @@ while [ ! -z "$1" ]; do -Q) GRAB_CURRENT_QUERIES="$1"; shift 1;; -s) RUN_JSTACK="$1"; shift 1;; -screen) GRAB_SCREENSHOT="$1"; shift 1;; - -t) GRAB_REMOTE_TOP="$1"; shift 1;; - -v) GRAB_REMOTE_VMSTAT="$1"; shift 1;; -V) RUN_VERSIONS="$1"; shift 1;; -z) TGZ_OUTPUT="$1"; shift 1;; -quick) RUN_JMAP="N"; JSTACK_ITERATIONS=5;; @@ -437,8 +426,6 @@ checkYes RUN_JMAP $RUN_JMAP checkYes RUN_QPID_STAT $RUN_QPID_STAT checkYes FORCE $FORCE checkYes MOVE_ALL_HS_ERR_PID $MOVE_ALL_HS_ERR_PID -checkYes GRAB_REMOTE_TOP $GRAB_REMOTE_TOP -checkYes GRAB_REMOTE_VMSTAT $GRAB_REMOTE_VMSTAT checkYes GRAB_CURRENT_QUERIES $GRAB_CURRENT_QUERIES checkYes GRAB_CAVE_AND_ALERTVIZ_LOGS $GRAB_CAVE_AND_ALERTVIZ_LOGS checkYes EDEX_MODE $EDEX_MODE @@ -463,8 +450,6 @@ if [ "$EDEX_MODE" == "y" ]; then reason="n" GRAB_CAVE_AND_ALERTVIZ_LOGS="n" MOVE_ALL_HS_ERR_PID="n" - GRAB_REMOTE_TOP="n" - GRAB_REMOTE_VMSTAT="n" GRAB_XORG_LOG="n" fi diff --git a/edexOsgi/com.raytheon.uf.tools.gfesuite/cli/sendGridsToNDFD.sh b/edexOsgi/com.raytheon.uf.tools.gfesuite/cli/sendGridsToNDFD.sh deleted file mode 100755 index 8872e91b9d..0000000000 --- a/edexOsgi/com.raytheon.uf.tools.gfesuite/cli/sendGridsToNDFD.sh +++ /dev/null @@ -1,39 +0,0 @@ -#!/bin/sh -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -# this allows you to run this script from outside of ./bin -path_to_script=`readlink -f $0` -RUN_FROM_DIR=`dirname $path_to_script` - -BASE_AWIPS_DIR=`dirname $RUN_FROM_DIR` - -# get the base environment -source ${RUN_FROM_DIR}/setup.env - -# setup the environment needed to run the the Python -export LD_LIBRARY_PATH=${BASE_AWIPS_DIR}/src/lib:${PYTHON_INSTALL}/lib -export PYTHONPATH=${RUN_FROM_DIR}/src:$PYTHONPATH - -# execute the sendGridsToNDFD Python module -_PYTHON="${PYTHON_INSTALL}/bin/python" -_MODULE="${RUN_FROM_DIR}/src/sendgridstondfd/SendGridsToNDFD.py" - -$_PYTHON $_MODULE $* ${DEFAULT_HOST} ${DEFAULT_PORT} diff --git a/edexOsgi/com.raytheon.uf.tools.gfesuite/cli/src/VTECDecoder/VTECDecoder.py b/edexOsgi/com.raytheon.uf.tools.gfesuite/cli/src/VTECDecoder/VTECDecoder.py index ebee0d5d66..9d716c45fd 100644 --- a/edexOsgi/com.raytheon.uf.tools.gfesuite/cli/src/VTECDecoder/VTECDecoder.py +++ b/edexOsgi/com.raytheon.uf.tools.gfesuite/cli/src/VTECDecoder/VTECDecoder.py @@ -1,4 +1,4 @@ -#!/awips2/python/bin/python +#!/usr/bin/env python # This program allows files containing warnings to be added to the practice VTEC table. diff --git a/edexOsgi/com.raytheon.uf.tools.gfesuite/cli/src/ifpag/ifpAG.py b/edexOsgi/com.raytheon.uf.tools.gfesuite/cli/src/ifpag/ifpAG.py index 732490bd61..78e7fde155 100644 --- a/edexOsgi/com.raytheon.uf.tools.gfesuite/cli/src/ifpag/ifpAG.py +++ b/edexOsgi/com.raytheon.uf.tools.gfesuite/cli/src/ifpag/ifpAG.py @@ -256,7 +256,7 @@ ifpAG -i inputFile -h hostname -r rpcPortNumber [-u username] metavar="inputFile") parser.add_argument("-h", action="store", dest="hostname", help="""Host name upon which the EDEX server is running. - Please specify the host name of the dx3 or dx4 server.""", + Please specify the host name of the server.""", required=True, metavar="hostname") parser.add_argument("-r", action="store", type=int, dest="portNumber", help="the port that ifpServer is serving", @@ -432,4 +432,4 @@ def __WsId() : if __name__ == '__main__': - main() \ No newline at end of file + main() diff --git a/edexOsgi/com.raytheon.uf.tools.gfesuite/cli/src/sendgridstondfd/SendGridsToNDFD.py b/edexOsgi/com.raytheon.uf.tools.gfesuite/cli/src/sendgridstondfd/SendGridsToNDFD.py deleted file mode 100644 index 1d08b80f7b..0000000000 --- a/edexOsgi/com.raytheon.uf.tools.gfesuite/cli/src/sendgridstondfd/SendGridsToNDFD.py +++ /dev/null @@ -1,88 +0,0 @@ -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## - -# -# Provides a command-line utility to a site's grids to a folder and later -# sent to NDFD. -# -# -# SOFTWARE HISTORY -# -# Date Ticket# Engineer Description -# ------------ ---------- ----------- -------------------------- -# ??/??/?? ???????? Initial Creation. -# 04/05/13 1761 dgilling Rewrite based on -# ExportGridsRequest. -# 08/27/2015 4812 randerso Changed to expect JobProgress object to be -# returned from the ExportGridsRequest -# -# - - -import argparse -import sys - -from dynamicserialize.dstypes.com.raytheon.uf.common.dataplugin.gfe.request import ExportGridsRequest - -from awips import ThriftClient -from awips import UsageArgumentParser - - -class SendGridsToNDFD: - def send(self, site, host, port): - thriftClient = ThriftClient.ThriftClient(host, port) - - ndfdRequest = ExportGridsRequest() - ndfdRequest.setSite(site) - ndfdRequest.setMode("GRIB2") - - status = str(thriftClient.sendRequest(ndfdRequest)) - if (status == "SUCCESS"): - return 0 - else: - print "sendGridsToNDFD returned status:", status,"\n See edex-request logs for details." - return 1 - - -def processArgs(): - parser = UsageArgumentParser.UsageArgumentParser( - prog="sendGridsToNDFD.sh", conflict_handler="resolve") - parser.add_argument("site", action="store", nargs=1, - help="site whose grids will be sent to NDFD") - parser.add_argument("host", action="store", nargs=1, - help="upon which the ifpServer is running") - parser.add_argument("port", action="store", type=int, nargs=1, - help="the port that ifpServer is serving") - parsed = parser.parse_args() - options = argparse.Namespace( - site = parsed.site[0], - host = parsed.host[0], - port = parsed.port[0]) - - - return options - -def main(): - options = processArgs() - sender = SendGridsToNDFD() - return sender.send(options.site, options.host, options.port) - -if __name__ == "__main__": - main() \ No newline at end of file diff --git a/edexOsgi/com.raytheon.uf.tools.gfesuite/deploy.xml b/edexOsgi/com.raytheon.uf.tools.gfesuite/deploy.xml index efec474805..4b3fdb8058 100644 --- a/edexOsgi/com.raytheon.uf.tools.gfesuite/deploy.xml +++ b/edexOsgi/com.raytheon.uf.tools.gfesuite/deploy.xml @@ -52,15 +52,10 @@ - - - - - @@ -77,7 +72,6 @@ - @@ -119,17 +113,6 @@ - - - - - - - - - - diff --git a/edexOsgi/com.raytheon.uf.tools.gfesuite/rsyncGridsToCWF/bin/convert_netcdf.pl b/edexOsgi/com.raytheon.uf.tools.gfesuite/rsyncGridsToCWF/bin/convert_netcdf.pl deleted file mode 100755 index 45e2958887..0000000000 --- a/edexOsgi/com.raytheon.uf.tools.gfesuite/rsyncGridsToCWF/bin/convert_netcdf.pl +++ /dev/null @@ -1,171 +0,0 @@ -#!/usr/bin/perl -################################################################################ -# # -# Program name: convert_netcdf.pl # -# Version: 1.1 # -# Language (Perl, C-shell, etc.): perl # -# # -# Authors: Don Britton (TFX) # -# Contributers: Virgil Middendorf, David Tomalak # -# # -# Date of last revision: 07/17/08 # -# # -# Script description: This script optimizes the netcdf file created by GFE. # -# ifpnetCDF stores most of the data as floating point # -# values. This script creates an optimized netcdf file # -# where most of the data is stored as shorts and bytes. # -# This makes the netcdf file much smaller and improves # -# performance on the web farms. # -# # -# Directory program runs from: /awips/adapt/ifps/localbin # -# # -# Revision History: # -# 12/19/07: Done created Script. vtm # -# 07/17/08: Removed VentRate and MixHgt from the short list because they are # -# too large to store in a short variable, thus a digit is being # -# truncated at the web farm. vtm # -# 07/17/08: Added my standard comment block. vtm # -# -############################################################################## -# -# SOFTWARE HISTORY -# -# Date Ticket# Engineer Description -# ------------ ---------- ----------- -------------------------- -# 10/03/17 20439 ryu use ncgen3 instaed of ncgen -# -################################################################################ - -######################## -# paths to ncdump and ncgen applications -######################## -$ncdump = "/usr/local/netcdf/bin/ncdump"; -$ncgen = "/usr/local/netcdf/bin/ncgen3"; - -######################## -# list of fields to shorts (integers) and bytes (0-255) -######################## -@shorts = qw (MaxT MinT T Td WindChill HeatIndex SnowLevel Wind_Dir Wind20ft_Dir ClearIndex FreeWind_Dir TransWind_Dir Topo Swell_Dir DiffFromOfficialMaxT DiffFromOfficialMinT ClimoPoPDiff DiffFromOfficialWind RHtrend); -@bytes = qw (MaxRH MinRH RH Pop Wind_Mag Wind20ft_Mag Sky Wind_Gust FreeWind_Mag LAL Haines TransWind_Mag WindWaveHeight WaveHeight SurfHeight Swell_Mag IceCoverage StormTotalSnow HoursOfSun DSI Period2 Wetflag); - - -######################## -# grab site id from command line -######################## -if (@ARGV) -{ - $ifile = $ARGV[0]; - $ofile = $ARGV[1]; -} -else -{ - die "requires a 3-letter site id argument\n"; -} - -######################## -# create filenames -######################## -# input -$cdlin_filename = $ifile . ".cdl"; -$cdlout_filename = $ofile . ".opt.cdl"; -# output -$cdfin_filename = $ifile; -$cdfout_filename = $ofile; - -# provide some output for log file -print "ncdump..."; -system "date"; - -######################## -# ncdump netcdf file to a plain text cdl file for parsing -######################## -system "$ncdump $cdfin_filename > $cdlin_filename"; - -# check return code of system call for success -if ($? != 0) -{ - die "ERROR: cdl file unable to be created!\n"; -} -######################## - -# provide some output for log file -print "parsing cdl file..."; -system "date"; - -######################## -# if the cdl was successfully created, -# open it and begin parsing -######################## -if (open IFILE, $cdlin_filename) -{ - ######################## - # write out optimized cdl file - ######################## - open OFILE, ">$cdlout_filename" or die "cannot open $cdlout_filename for output!\n"; - - while () - { - - ######################## - # iterate thru first 2000 lines, - # looking only for netcdf header information - ######################## - if ($counter < 2000) { - $counter++; - - ######################## - # iterate thru the list of fields - # to be converted to shorts - ######################## - for $var (@shorts) - { - # float field_name - if (/float $var/) - { - # replace "float" with "short" - s/float/short/; - } - } - - ######################## - # iterate thru the list of fields - # to be converted to bytes - ######################## - for $var (@bytes) - { - # float field_name - if (/float $var/) - { - # replace "float" with "byte" - s/float/byte/; - } - } - - } - print OFILE $_; - } - - # close both files - close IFILE; - close OFILE; - - # provide some output for a log file - printf "ncgen file...: %s\n", $cdfout_filename; - system "date"; - - - ######################## - # ncgen cdl file to create the optimized netcdf file - ######################## - system "$ncgen -o $cdfout_filename $cdlout_filename"; - - # check return code of system call for success - if ($? != 0) - { - die "ERROR: optimized netcdf file unable to be created!\n"; - } - ######################## -} - -# provide some output for log file -system "date"; diff --git a/edexOsgi/deploy.edex.awips2/esb/conf/spring/edex-db.xml b/edexOsgi/deploy.edex.awips2/esb/conf/spring/edex-db.xml index a4a219a072..620fab301c 100644 --- a/edexOsgi/deploy.edex.awips2/esb/conf/spring/edex-db.xml +++ b/edexOsgi/deploy.edex.awips2/esb/conf/spring/edex-db.xml @@ -24,7 +24,6 @@ com.raytheon.uf.common.dataplugin.text - com.raytheon.uf.common.dataplugin.text.subscription com.raytheon.uf.common.dataplugin.shef com.raytheon.edex.plugin.shef com.raytheon.uf.common.bmh diff --git a/edexOsgi/deploy.edex.awips2/esb/conf/wrapper.conf b/edexOsgi/deploy.edex.awips2/esb/conf/wrapper.conf index f568952283..797cc0c893 100644 --- a/edexOsgi/deploy.edex.awips2/esb/conf/wrapper.conf +++ b/edexOsgi/deploy.edex.awips2/esb/conf/wrapper.conf @@ -1,26 +1,6 @@ #******************************************************************** -## -# This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA -# This software product contains export-restricted data whose -# export/transfer/disclosure is restricted by U.S. law. Dissemination -# to non-U.S. persons whether in the United States or abroad requires -# an export license or other authorization. -# -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# -# See the AWIPS II Master Rights File ("Master Rights File.pdf") for -# further licensing information. -## # Wrapper Properties #******************************************************************** - wrapper.debug=false wrapper.java.debug.port=${EDEX_DEBUG_PORT} set.default.EDEX_HOME=../.. @@ -148,9 +128,6 @@ wrapper.java.additional.profile.1=${PROFILER_PARAM_1} # sets the user preferences file to be unique to this JVM wrapper.java.additional.prefs.1=-Djava.util.prefs.userRoot=${HOME}/.java/${HOSTNAME}-${EDEX_RUN_MODE}.userPrefs -# Add option to override java.security settings if needed -wrapper.java.additional.security.1=${JAVA_SECURITY_OPTION} - # Initial Java Heap Size (in MB) wrapper.java.initmemory=${INIT_MEM} @@ -169,9 +146,9 @@ wrapper.script.ABORT.timeout=120 wrapper.script.RESTART=wrapperCapture.sh wrapper.script.RESTART.timeout=120 -# jvm will be hard killed after 5 minutes of trying to shutdown +# jvm will be hard killed after 1 minute of trying to shutdown wrapper.jvm_exit.timeout=0 -wrapper.shutdown.timeout=300 +wrapper.shutdown.timeout=60 #******************************************************************** # Monitor the Application diff --git a/nativeLib/docs.ohd/ohd library dependency chart.odp b/nativeLib/docs.ohd/ohd library dependency chart.odp deleted file mode 100644 index 0437e3a242..0000000000 Binary files a/nativeLib/docs.ohd/ohd library dependency chart.odp and /dev/null differ diff --git a/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libcom_err.so.2 b/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libcom_err.so.2 deleted file mode 100755 index b38a67b6d6..0000000000 Binary files a/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libcom_err.so.2 and /dev/null differ diff --git a/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libcom_err.so.2.1 b/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libcom_err.so.2.1 deleted file mode 100755 index b38a67b6d6..0000000000 Binary files a/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libcom_err.so.2.1 and /dev/null differ diff --git a/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libcrypto.so.1.0.1e b/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libcrypto.so.1.0.1e deleted file mode 100755 index 9fd1386cd4..0000000000 Binary files a/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libcrypto.so.1.0.1e and /dev/null differ diff --git a/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libcrypto.so.10 b/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libcrypto.so.10 deleted file mode 100755 index 9fd1386cd4..0000000000 Binary files a/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libcrypto.so.10 and /dev/null differ diff --git a/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libgssapi_krb5.so.2 b/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libgssapi_krb5.so.2 deleted file mode 100755 index 04660ee110..0000000000 Binary files a/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libgssapi_krb5.so.2 and /dev/null differ diff --git a/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libgssapi_krb5.so.2.2 b/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libgssapi_krb5.so.2.2 deleted file mode 100755 index 04660ee110..0000000000 Binary files a/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libgssapi_krb5.so.2.2 and /dev/null differ diff --git a/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libgssrpc.so.4 b/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libgssrpc.so.4 deleted file mode 100755 index 01c43a7cc1..0000000000 Binary files a/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libgssrpc.so.4 and /dev/null differ diff --git a/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libgssrpc.so.4.1 b/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libgssrpc.so.4.1 deleted file mode 100755 index 01c43a7cc1..0000000000 Binary files a/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libgssrpc.so.4.1 and /dev/null differ diff --git a/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libk5crypto.so.3 b/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libk5crypto.so.3 deleted file mode 100755 index 80d7d828e1..0000000000 Binary files a/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libk5crypto.so.3 and /dev/null differ diff --git a/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libk5crypto.so.3.1 b/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libk5crypto.so.3.1 deleted file mode 100755 index 80d7d828e1..0000000000 Binary files a/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libk5crypto.so.3.1 and /dev/null differ diff --git a/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libkadm5clnt_mit.so.8 b/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libkadm5clnt_mit.so.8 deleted file mode 100755 index c968825431..0000000000 Binary files a/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libkadm5clnt_mit.so.8 and /dev/null differ diff --git a/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libkadm5clnt_mit.so.8.0 b/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libkadm5clnt_mit.so.8.0 deleted file mode 100755 index c968825431..0000000000 Binary files a/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libkadm5clnt_mit.so.8.0 and /dev/null differ diff --git a/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libkadm5srv_mit.so.8 b/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libkadm5srv_mit.so.8 deleted file mode 100755 index 0038a1cd92..0000000000 Binary files a/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libkadm5srv_mit.so.8 and /dev/null differ diff --git a/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libkadm5srv_mit.so.8.0 b/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libkadm5srv_mit.so.8.0 deleted file mode 100755 index 0038a1cd92..0000000000 Binary files a/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libkadm5srv_mit.so.8.0 and /dev/null differ diff --git a/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libkdb5.so.6 b/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libkdb5.so.6 deleted file mode 100755 index 6b9c8b48d2..0000000000 Binary files a/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libkdb5.so.6 and /dev/null differ diff --git a/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libkdb5.so.6.0 b/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libkdb5.so.6.0 deleted file mode 100755 index 6b9c8b48d2..0000000000 Binary files a/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libkdb5.so.6.0 and /dev/null differ diff --git a/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libkeyutils.so.1 b/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libkeyutils.so.1 deleted file mode 100755 index 2a914f42e1..0000000000 Binary files a/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libkeyutils.so.1 and /dev/null differ diff --git a/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libkeyutils.so.1.3 b/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libkeyutils.so.1.3 deleted file mode 100755 index 2a914f42e1..0000000000 Binary files a/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libkeyutils.so.1.3 and /dev/null differ diff --git a/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libkrb5.so.3 b/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libkrb5.so.3 deleted file mode 100755 index 466008a69d..0000000000 Binary files a/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libkrb5.so.3 and /dev/null differ diff --git a/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libkrb5.so.3.3 b/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libkrb5.so.3.3 deleted file mode 100755 index 466008a69d..0000000000 Binary files a/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libkrb5.so.3.3 and /dev/null differ diff --git a/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libkrb5support.so.0 b/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libkrb5support.so.0 deleted file mode 100755 index bfe100728a..0000000000 Binary files a/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libkrb5support.so.0 and /dev/null differ diff --git a/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libkrb5support.so.0.1 b/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libkrb5support.so.0.1 deleted file mode 100755 index bfe100728a..0000000000 Binary files a/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libkrb5support.so.0.1 and /dev/null differ diff --git a/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libselinux.so.1 b/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libselinux.so.1 deleted file mode 100755 index 4d315f88c1..0000000000 Binary files a/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libselinux.so.1 and /dev/null differ diff --git a/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libssl.so.1.0.1e b/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libssl.so.1.0.1e deleted file mode 100755 index e4e9e13a15..0000000000 Binary files a/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libssl.so.1.0.1e and /dev/null differ diff --git a/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libssl.so.10 b/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libssl.so.10 deleted file mode 100755 index e4e9e13a15..0000000000 Binary files a/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libssl.so.10 and /dev/null differ diff --git a/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libverto-k5ev.so b/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libverto-k5ev.so deleted file mode 100755 index 3b5b9704ed..0000000000 Binary files a/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libverto-k5ev.so and /dev/null differ diff --git a/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libverto-k5ev.so.0 b/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libverto-k5ev.so.0 deleted file mode 100755 index 3b5b9704ed..0000000000 Binary files a/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libverto-k5ev.so.0 and /dev/null differ diff --git a/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libverto-k5ev.so.0.0 b/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libverto-k5ev.so.0.0 deleted file mode 100755 index 3b5b9704ed..0000000000 Binary files a/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libverto-k5ev.so.0.0 and /dev/null differ diff --git a/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libverto.so b/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libverto.so deleted file mode 100755 index 3d534a3e53..0000000000 Binary files a/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libverto.so and /dev/null differ diff --git a/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libverto.so.0 b/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libverto.so.0 deleted file mode 100755 index 3d534a3e53..0000000000 Binary files a/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libverto.so.0 and /dev/null differ diff --git a/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libverto.so.0.0 b/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libverto.so.0.0 deleted file mode 100755 index 3d534a3e53..0000000000 Binary files a/nativeLib/files.native/awipsShare/hydroapps/lib/native/linux32/libverto.so.0.0 and /dev/null differ diff --git a/nativeLib/runy.runso/src/build_runso.sh b/nativeLib/runy.runso/src/build_runso.sh deleted file mode 100755 index 71b8b72978..0000000000 --- a/nativeLib/runy.runso/src/build_runso.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/bash -gcc -ldl main.c -o runso diff --git a/nativeLib/runy.runso/src/runso b/nativeLib/runy.runso/src/runso deleted file mode 100755 index c0607e2268..0000000000 Binary files a/nativeLib/runy.runso/src/runso and /dev/null differ diff --git a/rpms/awips2.core/Installer.gfesuite/component.spec b/rpms/awips2.core/Installer.gfesuite/component.spec index 801552dfee..a070024179 100644 --- a/rpms/awips2.core/Installer.gfesuite/component.spec +++ b/rpms/awips2.core/Installer.gfesuite/component.spec @@ -21,6 +21,7 @@ AutoReq: no Provides: awips2-gfesuite Requires: awips2-python-numpy Requires: awips2-java +Requires: awips2-cave Requires: xorg-x11-server-Xvfb BuildRequires: awips2-ant @@ -91,7 +92,6 @@ if [ $? -ne 0 ]; then exit 1 fi - %post SETUP_ENV="/awips2/GFESuite/bin/setup.env" SETUP_ENV_NEW="${SETUP_ENV}.rpmnew" diff --git a/rpms/awips2.upc/Installer.ldm/patch/etc/ldmd.conf b/rpms/awips2.upc/Installer.ldm/patch/etc/ldmd.conf index dcc94a8ad0..07c63b734b 100644 --- a/rpms/awips2.upc/Installer.ldm/patch/etc/ldmd.conf +++ b/rpms/awips2.upc/Installer.ldm/patch/etc/ldmd.conf @@ -89,7 +89,7 @@ EXEC "rtstats -h rtstats.unidata.ucar.edu" # DEFAULT #REQUEST LIGHTNING ".*" idd.unidata.ucar.edu # USPLN #REQUEST LIGHTNING ".*" striker.atmos.albany.edu # NLDN -REQUEST NEXRAD3 "./p(DHR|DPR|DSP|DTA|DAA|HHC|N.Q|N.S|N.U|OHA)." idd.unidata.ucar.edu +REQUEST NEXRAD3 "./p(DHR|DPR|DSP|DTA|DAA|HHC|N.P|N.Q|N.S|N.U|OHA)." idd.unidata.ucar.edu REQUEST FNEXRAD|IDS|DDPLUS ".*" idd.unidata.ucar.edu REQUEST UNIWISC|NIMAGE ".*" idd.unidata.ucar.edu # AREA/GINI REQUEST EXP "WwWind" idd.unidata.ucar.edu # ESPL/PSD Profilers diff --git a/rpms/awips2.upc/Installer.ldm/patch/init.d/edex_ldm b/rpms/awips2.upc/Installer.ldm/patch/init.d/edex_ldm index 72e1d944e6..701bdfe435 100755 --- a/rpms/awips2.upc/Installer.ldm/patch/init.d/edex_ldm +++ b/rpms/awips2.upc/Installer.ldm/patch/init.d/edex_ldm @@ -57,8 +57,12 @@ case $1 in 'restart') su ${LDM_USER} -lc "ldmadmin restart" ;; + +'clean') + su ${LDM_USER} -lc "ldmadmin clean" + ;; *) - echo "usage: $0 {start|stop|restart}" + echo "usage: $0 {start|stop|restart|clean}" RETVAL=1 ;; diff --git a/tests/runTests.sh b/tests/runTests.sh index 44bd4777d2..b8bafa4015 100644 --- a/tests/runTests.sh +++ b/tests/runTests.sh @@ -13,4 +13,4 @@ fi export ANT_OPTS="-XX:PermSize=${INITIAL_PERMGEN_SIZE} -XX:MaxPermSize=${MAX_PERMGEN_SIZE} $*" ant -sudo rsync -rugl tmp/test-reports/html/* root@awipscm:/var/www/html/junit +#sudo rsync -rugl tmp/test-reports/html/* root@awipscm:/var/www/html/junit