Omaha #4756 Multi-guidance style rules starter, sourceFamily tag, purger.

Change-Id: I38ca90cf5ec960cdb0ad78c91d20d16dac028478

Former-commit-id: 65fc4c02380237488c2a58ac6abfb4192979c57b
This commit is contained in:
Dave Hladky 2015-09-30 15:51:45 -05:00
parent 389c9ef7bf
commit 9bbc10ad41
12 changed files with 1551 additions and 49 deletions

View file

@ -32,6 +32,8 @@ import com.raytheon.uf.common.colormap.prefs.ColorMapParameters;
import com.raytheon.uf.common.dataplugin.ffmp.FFMPRecord;
import com.raytheon.uf.common.dataplugin.ffmp.FFMPRecord.FIELDS;
import com.raytheon.uf.common.localization.LocalizationFile;
import com.raytheon.uf.common.status.IUFStatusHandler;
import com.raytheon.uf.common.status.UFStatus;
import com.raytheon.uf.common.style.ParamLevelMatchCriteria;
import com.raytheon.uf.common.style.StyleException;
import com.raytheon.uf.common.style.StyleManager;
@ -55,6 +57,7 @@ import com.raytheon.uf.viz.core.exception.VizException;
* Apr 26, 2013 1954 bsteffen Minor code cleanup throughout FFMP.
* Jun 10, 2013 2075 njensen Improved init time
* Sep 5, 2013 2051 mnash Moved style rule instantiation so that we don't get NPEs
* Sep 28, 2015 4756 dhladky Multiple guidance style rules for FFMP.
* </pre>
*
* @author dhladky
@ -62,15 +65,25 @@ import com.raytheon.uf.viz.core.exception.VizException;
*/
public class FFMPColorUtils {
/** Status handler */
private final IUFStatusHandler statusHandler = UFStatus
.getHandler(FFMPColorUtils.class);
private ColorMapParameters colormapparams = null;
/** FFMP field to be drawn **/
private FIELDS field = null;
/** is this a table load instance? **/
private boolean tableLoad = false;
/** time to be drawn **/
private double time = 0.0;
/** name of FFG to be used **/
private String ffgName;
private TreeMap<Double, String> hourColorMapMap = new TreeMap<Double, String>();
// DR 14833: replacing the one in the constructor
@ -89,17 +102,26 @@ public class FFMPColorUtils {
* @param time
* @param tableLoad
*/
public FFMPColorUtils(FIELDS field, double time, boolean tableLoad) {
public FFMPColorUtils(FIELDS field, double time, String ffgName, boolean tableLoad) {
this.field = field;
this.time = time;
this.ffgName = ffgName;
this.tableLoad = tableLoad;
this.colormapparams = null;
// StyleRule sr = null;// DR 14833 replaced by a instance field
try {
sr = StyleManager.getInstance().getStyleRule(
StyleManager.StyleType.IMAGERY, getMatchCriteria());
// Different style rules for different guidance sources selected
if (sr == null && ffgName.startsWith(FFMPRecord.FIELDS.GUIDANCE.getFieldName())) {
// Could be a new source, load the default guidance map.
statusHandler.warn("No style rule matching "+ffgName+" in ffmpImageryStyleRules.xml, loading default!");
this.ffgName = ""; // append a blank
// try again
sr = StyleManager.getInstance().getStyleRule(
StyleManager.StyleType.IMAGERY, getMatchCriteria());
}
String colormapfile = ((ImagePreferences) sr.getPreferences())
.getDefaultColormap();
@ -109,7 +131,9 @@ public class FFMPColorUtils {
try {
cxml = ColorMapLoader.loadColorMap(colormapfile);
} catch (VizException e) {
e.printStackTrace();
statusHandler.error("Error loading ColorMap file: field: " + field
+ " time: " + time + " ffgName: " + ffgName
+ " TableLoad: " + tableLoad, e);
}
if (cxml == null)
@ -125,7 +149,9 @@ public class FFMPColorUtils {
colormapparams.setColorMapMin(0);
colormapparams.setColorMapMax(255);
} catch (StyleException e) {
e.printStackTrace();
statusHandler.error("Error loading ColorMap params: field: " + field
+ " time: " + time + " ffgName: " + ffgName
+ " TableLoad: " + tableLoad, e);
}
}
@ -223,7 +249,7 @@ public class FFMPColorUtils {
paramList.add(qpeName);
} else {
if (field == FIELDS.GUIDANCE) {
paramList.add(FIELDS.GUIDANCE.getFieldName());
paramList.add(FIELDS.GUIDANCE.getFieldName() + ffgName);
} else {
paramList.add(FIELDS.QPE.getFieldName());
}
@ -250,7 +276,7 @@ public class FFMPColorUtils {
return qpeHourToUse;
}
private void parseFileNames(List<String> fileArray) {
double hour = 0.0;
for (String fn : fileArray) {
@ -376,18 +402,7 @@ public class FFMPColorUtils {
}
}
/*
* if(sr == null){ //get the MatchCriteria ParamLevelMatchCriteria match
* = new ParamLevelMatchCriteria(); ArrayList<String> paramList = new
* ArrayList<String>(); paramList.add(
* FIELDS.QPE.getFieldName()+cmapHour );
* match.setParameterName(paramList);
*
* //get the StyleRule try {
* sr=StyleManager.getInstance().getStyleRule(StyleManager
* .StyleType.IMAGERY, match); } catch (StyleException e) {
* e.printStackTrace(); } }
*/
// get the colormapfile name
String colormapfile = ((ImagePreferences) sr.getPreferences())
.getDefaultColormap();

View file

@ -200,6 +200,7 @@ import com.vividsolutions.jts.geom.Point;
* Nov 10, 2014 3026 dhladky HPE BIAS displays.
* Dec 16, 2014 3026 mpduff Change location of text.
* Feb 13, 2015 4121 mpduff Change label caching.
* Sep 28, 2015 4756 dhladky Multiple guidance sources.
* </pre>
*
* @author dhladky
@ -1670,8 +1671,17 @@ public class FFMPResource extends
*/
private FFMPColorUtils getColorUtil() throws VizException {
if (colorUtil == null) {
colorUtil = new FFMPColorUtils(getField(), getTime(),
getResourceData().tableLoad);
boolean tableLoad = getResourceData().tableLoad;
String ffg = getFFGName();
if (!tableLoad) {
SourceXML source = FFMPSourceConfigurationManager.getInstance()
.getSource(ffg);
ffg = source.getDisplayName();
}
colorUtil = new FFMPColorUtils(getField(), getTime(), ffg,
tableLoad);
}
return colorUtil;
}

View file

@ -0,0 +1,42 @@
#!/bin/sh
# This script must be run on the dx box which contains the HDF5 directory and pypies mount
# DR #4756 - This script switches the HDF5 dir to use the pathKey determined by the ffmpPathKeys.xml file
# and the FFMPSourceConfig.xml.
FFMP_HDF5_DIR="/awips2/edex/data/hdf5/ffmp"
# sources listed in current FFMPSourceConfig.xml, new pathKeys more or less.
source_array=(DHR DPR DHRMOSAIC BDHRMOSAIC QPFSCAN PRTM BPRTM FFG0124hr FFG0324hr FFG0124hr MRMS MRMSQPF MRMSVGB VGBHPE VGBBIASHPE VGBDHR VGBDPR)
cd $FFMP_HDF5_DIR
files=$(ls -trh *.h5)
count=0;
# add up the files
for file in ${files}
do
count=$((count+1))
done
echo "Found ${count} files."
# decrement by 1 for processing
count=$((count-1))
for source_entry in ${source_array[@]}
do
echo "Creating directory for source: ${source_entry}"
mkdir ${source_entry}
i=0;
for file_entry in ${files}
do
echo ${file_entry}
if [ ${i} -lt ${count} ]
then
echo "Creating linked file: ./${source_entry}/${file_entry}"
ln ${file_entry} ./${source_entry}/${file_entry}
else
echo "Copying current file: ./${source_entry}/${file_entry}"
cp ${file_entry} ./${source_entry}/${file_entry}
fi
i=$((i+1))
done
done

View file

@ -91,6 +91,43 @@ be put in localization.
</imageStyle>
</styleRule>
-->
<!--
ADDING NEW Guidance styleRules:
When adding an additional Guidance source to FFMP. You should also add a custom style rule for it.
The way it works is the SourceConfigXML display name for the type is appended to the type.
So the TYpe for GUIDANCE is guidance. So, it you have a hypothetical source display name of
ARIFFG100, then the style rule parameter tag will look like this example....
<styleRule>
<paramLevelMatches>
<parameter>guidanceARIFFG100</parameter>
</paramLevelMatches>
<imageStyle>
<displayUnits>in</displayUnits>
<defaultColormap>Grid/gridded data</defaultColormap>
<dataMapping>
<entry displayValue='50.0' pixelValue='0'/>
<entry displayValue='55.0' pixelValue='17'/>
<entry displayValue='60.0' pixelValue='35'/>
<entry displayValue='65.0' pixelValue='52'/>
<entry displayValue='70.0' pixelValue='69'/>
<entry displayValue='75.0' pixelValue='86'/>
<entry displayValue='80.0' pixelValue='102'/>
<entry displayValue='85.0' pixelValue='119'/>
<entry displayValue='90.0' pixelValue='136'/>
<entry displayValue='95.0' pixelValue='153'/>
<entry displayValue='100.0' pixelValue='169'/>
<entry displayValue='105.0' pixelValue='186'/>
<entry displayValue='110.0' pixelValue='204'/>
<entry displayValue='115.0' pixelValue='220'/>
<entry displayValue='120.0' pixelValue='255'/>
</dataMapping>
</imageStyle>
</styleRule>
-->
<styleRuleset>
<styleRule>
@ -269,7 +306,7 @@ be put in localization.
<styleRule>
<paramLevelMatches>
<parameter>guidance</parameter>
<parameter>guidanceRFCFFG</parameter>
</paramLevelMatches>
<imageStyle>
<displayUnits>in</displayUnits>
@ -294,4 +331,331 @@ be put in localization.
</imageStyle>
</styleRule>
<!-- This one is the default for guidance if all else fails to load -->
<styleRule>
<paramLevelMatches>
<parameter>guidance</parameter>
</paramLevelMatches>
<imageStyle>
<displayUnits>in</displayUnits>
<defaultColormap>Grid/gridded data</defaultColormap>
<dataMapping>
<entry displayValue='0.0' pixelValue='0'/>
<entry displayValue='1.0' pixelValue='17'/>
<entry displayValue='2.0' pixelValue='35'/>
<entry displayValue='3.0' pixelValue='52'/>
<entry displayValue='4.0' pixelValue='69'/>
<entry displayValue='5.0' pixelValue='86'/>
<entry displayValue='6.0' pixelValue='102'/>
<entry displayValue='7.0' pixelValue='119'/>
<entry displayValue='8.0' pixelValue='136'/>
<entry displayValue='9.0' pixelValue='153'/>
<entry displayValue='10.0' pixelValue='169'/>
<entry displayValue='11.0' pixelValue='186'/>
<entry displayValue='12.0' pixelValue='204'/>
<entry displayValue='13.0' pixelValue='220'/>
<entry displayValue='15.0' pixelValue='255'/>
</dataMapping>
</imageStyle>
</styleRule>
<styleRule>
<paramLevelMatches>
<parameter>guidanceARIFFG1</parameter>
</paramLevelMatches>
<imageStyle>
<displayUnits>in</displayUnits>
<defaultColormap>Grid/gridded data</defaultColormap>
<dataMapping>
<entry displayValue='5.0' pixelValue='0'/>
<entry displayValue='10.0' pixelValue='17'/>
<entry displayValue='15.0' pixelValue='35'/>
<entry displayValue='20.0' pixelValue='52'/>
<entry displayValue='25.0' pixelValue='69'/>
<entry displayValue='30.0' pixelValue='86'/>
<entry displayValue='35.0' pixelValue='102'/>
<entry displayValue='40.0' pixelValue='119'/>
<entry displayValue='50.0' pixelValue='136'/>
<entry displayValue='60.0' pixelValue='153'/>
<entry displayValue='70.0' pixelValue='169'/>
<entry displayValue='80.0' pixelValue='186'/>
<entry displayValue='90.0' pixelValue='204'/>
<entry displayValue='100.0' pixelValue='220'/>
<entry displayValue='110.0' pixelValue='255'/>
</dataMapping>
</imageStyle>
</styleRule>
<styleRule>
<paramLevelMatches>
<parameter>guidanceARIFFG2</parameter>
</paramLevelMatches>
<imageStyle>
<displayUnits>in</displayUnits>
<defaultColormap>Grid/gridded data</defaultColormap>
<dataMapping>
<entry displayValue='5.0' pixelValue='0'/>
<entry displayValue='10.0' pixelValue='17'/>
<entry displayValue='15.0' pixelValue='35'/>
<entry displayValue='20.0' pixelValue='52'/>
<entry displayValue='25.0' pixelValue='69'/>
<entry displayValue='30.0' pixelValue='86'/>
<entry displayValue='35.0' pixelValue='102'/>
<entry displayValue='40.0' pixelValue='119'/>
<entry displayValue='50.0' pixelValue='136'/>
<entry displayValue='60.0' pixelValue='153'/>
<entry displayValue='70.0' pixelValue='169'/>
<entry displayValue='80.0' pixelValue='186'/>
<entry displayValue='90.0' pixelValue='204'/>
<entry displayValue='100.0' pixelValue='220'/>
<entry displayValue='110.0' pixelValue='255'/>
</dataMapping>
</imageStyle>
</styleRule>
<styleRule>
<paramLevelMatches>
<parameter>guidanceARIFFG5</parameter>
</paramLevelMatches>
<imageStyle>
<displayUnits>in</displayUnits>
<defaultColormap>Grid/gridded data</defaultColormap>
<dataMapping>
<entry displayValue='5.0' pixelValue='0'/>
<entry displayValue='10.0' pixelValue='17'/>
<entry displayValue='15.0' pixelValue='35'/>
<entry displayValue='20.0' pixelValue='52'/>
<entry displayValue='25.0' pixelValue='69'/>
<entry displayValue='30.0' pixelValue='86'/>
<entry displayValue='35.0' pixelValue='102'/>
<entry displayValue='40.0' pixelValue='119'/>
<entry displayValue='50.0' pixelValue='136'/>
<entry displayValue='60.0' pixelValue='153'/>
<entry displayValue='70.0' pixelValue='169'/>
<entry displayValue='80.0' pixelValue='186'/>
<entry displayValue='90.0' pixelValue='204'/>
<entry displayValue='100.0' pixelValue='220'/>
<entry displayValue='110.0' pixelValue='255'/>
</dataMapping>
</imageStyle>
</styleRule>
<styleRule>
<paramLevelMatches>
<parameter>guidanceARIFFG10</parameter>
</paramLevelMatches>
<imageStyle>
<displayUnits>in</displayUnits>
<defaultColormap>Grid/gridded data</defaultColormap>
<dataMapping>
<entry displayValue='50.0' pixelValue='0'/>
<entry displayValue='55.0' pixelValue='17'/>
<entry displayValue='60.0' pixelValue='35'/>
<entry displayValue='65.0' pixelValue='52'/>
<entry displayValue='70.0' pixelValue='69'/>
<entry displayValue='75.0' pixelValue='86'/>
<entry displayValue='80.0' pixelValue='102'/>
<entry displayValue='85.0' pixelValue='119'/>
<entry displayValue='90.0' pixelValue='136'/>
<entry displayValue='95.0' pixelValue='153'/>
<entry displayValue='100.0' pixelValue='169'/>
<entry displayValue='105.0' pixelValue='186'/>
<entry displayValue='110.0' pixelValue='204'/>
<entry displayValue='115.0' pixelValue='220'/>
<entry displayValue='120.0' pixelValue='255'/>
</dataMapping>
</imageStyle>
</styleRule>
<styleRule>
<paramLevelMatches>
<parameter>guidanceARIFFG25</parameter>
</paramLevelMatches>
<imageStyle>
<displayUnits>in</displayUnits>
<defaultColormap>Grid/gridded data</defaultColormap>
<dataMapping>
<entry displayValue='50.0' pixelValue='0'/>
<entry displayValue='55.0' pixelValue='17'/>
<entry displayValue='60.0' pixelValue='35'/>
<entry displayValue='65.0' pixelValue='52'/>
<entry displayValue='70.0' pixelValue='69'/>
<entry displayValue='75.0' pixelValue='86'/>
<entry displayValue='80.0' pixelValue='102'/>
<entry displayValue='85.0' pixelValue='119'/>
<entry displayValue='90.0' pixelValue='136'/>
<entry displayValue='95.0' pixelValue='153'/>
<entry displayValue='100.0' pixelValue='169'/>
<entry displayValue='105.0' pixelValue='186'/>
<entry displayValue='110.0' pixelValue='204'/>
<entry displayValue='115.0' pixelValue='220'/>
<entry displayValue='120.0' pixelValue='255'/>
</dataMapping>
</imageStyle>
</styleRule>
<styleRule>
<paramLevelMatches>
<parameter>guidanceARIFFG25</parameter>
</paramLevelMatches>
<imageStyle>
<displayUnits>in</displayUnits>
<defaultColormap>Grid/gridded data</defaultColormap>
<dataMapping>
<entry displayValue='50.0' pixelValue='0'/>
<entry displayValue='55.0' pixelValue='17'/>
<entry displayValue='60.0' pixelValue='35'/>
<entry displayValue='65.0' pixelValue='52'/>
<entry displayValue='70.0' pixelValue='69'/>
<entry displayValue='75.0' pixelValue='86'/>
<entry displayValue='80.0' pixelValue='102'/>
<entry displayValue='85.0' pixelValue='119'/>
<entry displayValue='90.0' pixelValue='136'/>
<entry displayValue='95.0' pixelValue='153'/>
<entry displayValue='100.0' pixelValue='169'/>
<entry displayValue='105.0' pixelValue='186'/>
<entry displayValue='110.0' pixelValue='204'/>
<entry displayValue='115.0' pixelValue='220'/>
<entry displayValue='120.0' pixelValue='255'/>
</dataMapping>
</imageStyle>
</styleRule>
<styleRule>
<paramLevelMatches>
<parameter>guidanceARIFFG50</parameter>
</paramLevelMatches>
<imageStyle>
<displayUnits>in</displayUnits>
<defaultColormap>Grid/gridded data</defaultColormap>
<dataMapping>
<entry displayValue='50.0' pixelValue='0'/>
<entry displayValue='55.0' pixelValue='17'/>
<entry displayValue='60.0' pixelValue='35'/>
<entry displayValue='65.0' pixelValue='52'/>
<entry displayValue='70.0' pixelValue='69'/>
<entry displayValue='75.0' pixelValue='86'/>
<entry displayValue='80.0' pixelValue='102'/>
<entry displayValue='85.0' pixelValue='119'/>
<entry displayValue='90.0' pixelValue='136'/>
<entry displayValue='95.0' pixelValue='153'/>
<entry displayValue='100.0' pixelValue='169'/>
<entry displayValue='105.0' pixelValue='186'/>
<entry displayValue='110.0' pixelValue='204'/>
<entry displayValue='115.0' pixelValue='220'/>
<entry displayValue='120.0' pixelValue='255'/>
</dataMapping>
</imageStyle>
</styleRule>
<styleRule>
<paramLevelMatches>
<parameter>guidanceARIFFG100</parameter>
</paramLevelMatches>
<imageStyle>
<displayUnits>in</displayUnits>
<defaultColormap>Grid/gridded data</defaultColormap>
<dataMapping>
<entry displayValue='50.0' pixelValue='0'/>
<entry displayValue='55.0' pixelValue='17'/>
<entry displayValue='60.0' pixelValue='35'/>
<entry displayValue='65.0' pixelValue='52'/>
<entry displayValue='70.0' pixelValue='69'/>
<entry displayValue='75.0' pixelValue='86'/>
<entry displayValue='80.0' pixelValue='102'/>
<entry displayValue='85.0' pixelValue='119'/>
<entry displayValue='90.0' pixelValue='136'/>
<entry displayValue='95.0' pixelValue='153'/>
<entry displayValue='100.0' pixelValue='169'/>
<entry displayValue='105.0' pixelValue='186'/>
<entry displayValue='110.0' pixelValue='204'/>
<entry displayValue='115.0' pixelValue='220'/>
<entry displayValue='120.0' pixelValue='255'/>
</dataMapping>
</imageStyle>
</styleRule>
<styleRule>
<paramLevelMatches>
<parameter>guidanceARIFFG200</parameter>
</paramLevelMatches>
<imageStyle>
<displayUnits>in</displayUnits>
<defaultColormap>Grid/gridded data</defaultColormap>
<dataMapping>
<entry displayValue='50.0' pixelValue='0'/>
<entry displayValue='55.0' pixelValue='17'/>
<entry displayValue='60.0' pixelValue='35'/>
<entry displayValue='65.0' pixelValue='52'/>
<entry displayValue='70.0' pixelValue='69'/>
<entry displayValue='75.0' pixelValue='86'/>
<entry displayValue='80.0' pixelValue='102'/>
<entry displayValue='85.0' pixelValue='119'/>
<entry displayValue='90.0' pixelValue='136'/>
<entry displayValue='95.0' pixelValue='153'/>
<entry displayValue='100.0' pixelValue='169'/>
<entry displayValue='105.0' pixelValue='186'/>
<entry displayValue='110.0' pixelValue='204'/>
<entry displayValue='115.0' pixelValue='220'/>
<entry displayValue='120.0' pixelValue='255'/>
</dataMapping>
</imageStyle>
</styleRule>
<styleRule>
<paramLevelMatches>
<parameter>guidanceARIFFG500</parameter>
</paramLevelMatches>
<imageStyle>
<displayUnits>in</displayUnits>
<defaultColormap>Grid/gridded data</defaultColormap>
<dataMapping>
<entry displayValue='50.0' pixelValue='0'/>
<entry displayValue='55.0' pixelValue='17'/>
<entry displayValue='60.0' pixelValue='35'/>
<entry displayValue='65.0' pixelValue='52'/>
<entry displayValue='70.0' pixelValue='69'/>
<entry displayValue='75.0' pixelValue='86'/>
<entry displayValue='80.0' pixelValue='102'/>
<entry displayValue='85.0' pixelValue='119'/>
<entry displayValue='90.0' pixelValue='136'/>
<entry displayValue='95.0' pixelValue='153'/>
<entry displayValue='100.0' pixelValue='169'/>
<entry displayValue='105.0' pixelValue='186'/>
<entry displayValue='110.0' pixelValue='204'/>
<entry displayValue='115.0' pixelValue='220'/>
<entry displayValue='120.0' pixelValue='255'/>
</dataMapping>
</imageStyle>
</styleRule>
<styleRule>
<paramLevelMatches>
<parameter>guidanceARIFFG1000</parameter>
</paramLevelMatches>
<imageStyle>
<displayUnits>in</displayUnits>
<defaultColormap>Grid/gridded data</defaultColormap>
<dataMapping>
<entry displayValue='200.0' pixelValue='0'/>
<entry displayValue='225.0' pixelValue='17'/>
<entry displayValue='250.0' pixelValue='35'/>
<entry displayValue='275.0' pixelValue='52'/>
<entry displayValue='300.0' pixelValue='69'/>
<entry displayValue='325.0' pixelValue='86'/>
<entry displayValue='350.0' pixelValue='102'/>
<entry displayValue='375.0' pixelValue='119'/>
<entry displayValue='400.0' pixelValue='136'/>
<entry displayValue='425.0' pixelValue='153'/>
<entry displayValue='450.0' pixelValue='169'/>
<entry displayValue='475.0' pixelValue='186'/>
<entry displayValue='500.0' pixelValue='204'/>
<entry displayValue='525.0' pixelValue='220'/>
<entry displayValue='550.0' pixelValue='255'/>
</dataMapping>
</imageStyle>
</styleRule>
</styleRuleset>

View file

@ -334,6 +334,24 @@ public class FFMPSourceConfigurationManager implements
}
return forecasts;
}
/**
* Get sources with the same family, used for source bins in FFMPGenerator
*
* @return
*/
public ArrayList<String> getFamilySources(String family) {
ArrayList<String> familySources = new ArrayList<String>();
for (SourceXML xml : configXml.getSource()) {
if (xml.getSourceFamily() != null
&& xml.getSourceFamily().equals(family)) {
familySources.add(xml.getSourceName());
}
}
return familySources;
}
/**
*

View file

@ -29,6 +29,7 @@ package com.raytheon.uf.common.monitor.xml;
* 29 Jan, 2010 3915 dhladky Initial creation
* 18 Apr. 2012 DR 14619 dhladky Replace isOverride()
* 28 Nov. 2012 DR 14412 gzhang makes unit internal to this class
* 28 Sep 2015 4756 dhladky Multiple Guidance upgrades.
* </pre>
* @author dhladky
* @version 1.0
@ -85,6 +86,9 @@ public class SourceXML {
@XmlElement(name = "interpolatedGuidanceTransition")
protected boolean interpolatedGuidanceTransition;
@XmlElement(name = "sourceFamily")
protected String sourceFamily;
// @XmlElement(name = "unit") // DR 14412
protected String unit;
@ -450,4 +454,23 @@ public class SourceXML {
return false;
}
/**
* Sources that have common backing grids can set this so that
* the source bins used for processing only have to be produced once.
* This saves time and CPU/memory
*
* @return
*/
public String getSourceFamily() {
return sourceFamily;
}
/**
* Set the sourceFamily
* @param sourceFamily
*/
public void setSourceFamily(String sourceFamily) {
this.sourceFamily = sourceFamily;
}
}

View file

@ -21,6 +21,8 @@ package com.raytheon.uf.edex.plugin.ffmp;
**/
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map.Entry;
@ -39,11 +41,15 @@ import com.raytheon.uf.common.datastorage.records.FloatDataRecord;
import com.raytheon.uf.common.datastorage.records.IDataRecord;
import com.raytheon.uf.common.monitor.config.FFMPRunConfigurationManager;
import com.raytheon.uf.common.monitor.config.FFMPSourceConfigurationManager;
import com.raytheon.uf.common.monitor.config.FFMPSourceConfigurationManager.GUIDANCE_TYPE;
import com.raytheon.uf.common.monitor.xml.DomainXML;
import com.raytheon.uf.common.monitor.xml.SourceXML;
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.database.DataAccessLayerException;
import com.raytheon.uf.edex.database.plugin.PluginDao;
import com.raytheon.uf.edex.database.purge.PurgeRuleSet;
/**
* FFMP specified data access object.
@ -54,6 +60,7 @@ import com.raytheon.uf.edex.database.plugin.PluginDao;
* ------------ ---------- ----------- --------------------------
* 07/01/09 2521 dhladky Initial Creation
* Jul 15, 2013 2184 dhladky Remove all HUC's for storage except ALL
* Oct 1, 2015 4756 dhladky Custom purging for FFMP.
*
* </pre>
*
@ -211,4 +218,35 @@ public class FFMPDao extends PluginDao {
}
return retVal;
}
/**
* Purge by Guidance Type in FFMP
*/
protected RuleResult purgeExpiredKey(PurgeRuleSet ruleSet,
String[] sourceName) throws DataAccessLayerException {
// We assume the String array only contains 1 sourceName,
// so we only take sourcName[0] from string array.
SourceXML source = FFMPSourceConfigurationManager.getInstance()
.getSource(sourceName[0]);
if (source != null) {
if (source.getGuidanceType() != null
&& source.getGuidanceType().equals(
GUIDANCE_TYPE.ARCHIVE.getGuidanceType())) {
// don't purge ARCHIVE types, return empty sets, 0.
return new RuleResult(new HashSet<Date>(), new HashSet<Date>(),
0);
} else {
// All other types follow general FFMP rules for purge. default
return super.purgeExpiredKey(ruleSet, sourceName);
}
} else {
statusHandler.warn("Encounterd a non-recognized source key: key: "
+ sourceName +" Can not be purged!");
// since it's an unknown source, it can't be purged, so return blank
return new RuleResult(new HashSet<Date>(), new HashSet<Date>(), 0);
}
}
}

View file

@ -696,6 +696,11 @@ public class FFMPGenerator extends CompositeProductGenerator implements
// Go over all of the sites, if mosaic source, can be many.
for (String siteKey : sites) {
// No dataKey hash?, dataKey comes from primary source (siteKey)
if (dataKey == null) {
dataKey = siteKey;
}
FFMPRecord ffmpRec = new FFMPRecord();
ffmpRec.setSourceName(ffmpProduct.getSourceName());
ffmpRec.setDataKey(dataKey);
@ -1068,13 +1073,21 @@ public class FFMPGenerator extends CompositeProductGenerator implements
if (sources != null && sources.size() > 0) {
for (String source : sources) {
SourceXML sourceXml = getSourceConfig().getSource(source);
try {
SourceXML sourceXml = getSourceConfig().getSource(
source);
if (sourceXml != null) {
if (sourceXml != null) {
String plugin = getSourceConfig().getSource(source)
.getPlugin();
uris.add(FFMPUtils.getFFGDataURI(GUIDANCE_TYPE.RFC, rfc, source, plugin));
String plugin = getSourceConfig().getSource(source)
.getPlugin();
uris.add(FFMPUtils.getFFGDataURI(GUIDANCE_TYPE.RFC,
rfc, source, plugin));
}
} catch (Exception e) {
statusHandler.error(
"Problem with extracting guidance source URI's. source="
+ source, e);
}
}
}
@ -1085,21 +1098,25 @@ public class FFMPGenerator extends CompositeProductGenerator implements
if (guidSources != null && guidSources.size() > 0) {
for (String guidSource : guidSources) {
SourceXML sourceXml = getSourceConfig().getSource(guidSource);
try {
SourceXML sourceXml = getSourceConfig().getSource(
guidSource);
if (sourceXml != null
&& sourceXml.getGuidanceType().equals(
GUIDANCE_TYPE.ARCHIVE.getGuidanceType())) {
String plugin = getSourceConfig().getSource(guidSource)
.getPlugin();
String[] uriComps = FFMPUtils.parseGridDataPath(sourceXml
.getDataPath());
/*
* datasetid is UriComp[3], parameter abbreviation is
* UriComp[7]
*/
uris.add(FFMPUtils.getFFGDataURI(GUIDANCE_TYPE.ARCHIVE,
uriComps[3], uriComps[7], plugin));
if (sourceXml != null
&& sourceXml.getGuidanceType().equals(
GUIDANCE_TYPE.ARCHIVE.getGuidanceType())) {
String plugin = sourceXml.getPlugin();
String[] uriComps = FFMPUtils
.parseGridDataPath(sourceXml.getDataPath());
/*
* datasetid is UriComp[3], parameter abbreviation is
* UriComp[7]
*/
uris.add(FFMPUtils.getFFGDataURI(GUIDANCE_TYPE.ARCHIVE,
uriComps[3], uriComps[7], plugin));
}
} catch (Exception e) {
statusHandler.error("Problem with extracting guidance source URI's. source="+guidSource, e);
}
}
}

View file

@ -61,6 +61,7 @@ import com.raytheon.uf.common.geospatial.ReferencedObject.Type;
import com.raytheon.uf.common.hydro.spatial.HRAPCoordinates;
import com.raytheon.uf.common.hydro.spatial.HRAPSubGrid;
import com.raytheon.uf.common.monitor.config.FFMPSourceConfigurationManager;
import com.raytheon.uf.common.monitor.config.FFMPSourceConfigurationManager.DATA_TYPE;
import com.raytheon.uf.common.monitor.config.FFMPSourceConfigurationManager.SOURCE_TYPE;
import com.raytheon.uf.common.monitor.processing.IMonitorProcessing;
import com.raytheon.uf.common.monitor.scan.ScanUtils;
@ -106,6 +107,7 @@ import com.vividsolutions.jts.geom.Polygon;
* Apr 15, 2014 3026 mpduff Set the xmrg filename into the metadata column.
* Aug 08, 2015 4722 dhladky Simplified processing by data type.
* Aug 26, 2015 4777 dhladky Fixed bug in DPR accumulations.
* Sep 28, 2015 4756 dhladky Multiple Guidance upgrades.
* </pre>
* @author dhladky
* @version 1
@ -360,7 +362,7 @@ public class FFMPProcessor {
// use
// when
// running
this.sourceId = source.getSourceName() + "-"
this.sourceId = getSourceBinNaming(source) + "-"
+ domain.getCwa() + "-" + dataKey;
if (sourceId != null) {
@ -382,7 +384,7 @@ public class FFMPProcessor {
map.keySet(),
cwaGeometries, radarRec));
} catch (Exception e) {
statusHandler.handle(Priority.WARN, "caught an Exception while generating Source Bin List");
statusHandler.handle(Priority.WARN, "Caught an Exception while generating Source Bin List");
if (!checkLockStatus()) {
ClusterLockUtils.unlock(sourceBinTaskName, sourceId);
}
@ -431,7 +433,7 @@ public class FFMPProcessor {
// use
// when
// running
this.sourceId = source.getSourceName() + "-"
this.sourceId = getSourceBinNaming(source) + "-"
+ domain.getCwa() + "-" + dataKey;
if (sourceId != null) {
@ -456,7 +458,7 @@ public class FFMPProcessor {
// use
// when
// running
this.sourceId = source.getSourceName() + "-"
this.sourceId = getSourceBinNaming(source) + "-"
+ domain.getCwa() + "-" + dataKey;
if (sourceId != null) {
@ -1868,4 +1870,34 @@ public class FFMPProcessor {
return xmrgData;
}
/**
* Gets the name used for the source bins produced by all sources. Some
* sources have identical Grid/RADAR bins/etc So, It's more efficient to
* name the bins the same so that we don't create identical one's for every
* single source that uses that bin schema.
*
* @param source
* @return
*/
private String getSourceBinNaming(SourceXML source) {
if (source.getSourceFamily() != null) {
/**
* ARI brought this forward because there are 6 different ARI
* sources that all use the same grid. Was pointless to have
* different source bins for each of them when they are identical.
*/
return source.getSourceFamily();
} else if (source.getDataType().equals(DATA_TYPE.XMRG.getDataType())) {
// HPE/BHPE use this type exclusively
return DATA_TYPE.XMRG.getDataType();
} else {
if (source.getSourceName().equals(source.getDisplayName())) {
return source.getDisplayName();
} else {
return source.getSourceName();
}
}
}
}

View file

@ -114,6 +114,7 @@
<conversion>0.03937</conversion>
<mosaic>true</mosaic>
<guidanceType>RFC</guidanceType>
<sourceFamily>RFCFFG</sourceFamily>
</source>
<source>
<SourceName>FFG0324hr</SourceName>
@ -130,6 +131,7 @@
<conversion>0.03937</conversion>
<mosaic>true</mosaic>
<guidanceType>RFC</guidanceType>
<sourceFamily>RFCFFG</sourceFamily>
</source>
<source>
<SourceName>FFG0624hr</SourceName>
@ -145,11 +147,862 @@
<interpolatedGuidanceTransition>true</interpolatedGuidanceTransition>
<conversion>0.03937</conversion>
<mosaic>true</mosaic>
<guidanceType>RFC</guidanceType>
<sourceFamily>RFCFFG</sourceFamily>
</source>
<!-- ARI sources -->
<source>
<SourceName>ARI1YR1</SourceName>
<DisplayName>ARIFFG1</DisplayName>
<DurationHour>1.0</DurationHour>
<dataPath>/grid/%/ARI/.*/.*/.*/ARI1YR1/SFC/0.0/-999999.0/</dataPath>
<plugin>grid</plugin>
<dataType>GRID</dataType>
<sourceType>GUIDANCE</sourceType>
<rateOrAccum>accum</rateOrAccum>
<expirationMinutes>2080</expirationMinutes>
<interpolatedGuidanceDelay>true</interpolatedGuidanceDelay>
<interpolatedGuidanceTransition>true</interpolatedGuidanceTransition>
<conversion>0.03937</conversion>
<mosaic>true</mosaic>
<guidanceType>ARCHIVE</guidanceType>
<sourceFamily>ARIFFG</sourceFamily>
</source>
<source>
<SourceName>ARI1YR3</SourceName>
<DisplayName>ARIFFG1</DisplayName>
<DurationHour>3.0</DurationHour>
<dataPath>/grid/%/ARI/.*/.*/.*/ARI1YR3/SFC/0.0/-999999.0/</dataPath>
<plugin>grid</plugin>
<dataType>GRID</dataType>
<sourceType>GUIDANCE</sourceType>
<rateOrAccum>accum</rateOrAccum>
<expirationMinutes>2080</expirationMinutes>
<interpolatedGuidanceDelay>true</interpolatedGuidanceDelay>
<interpolatedGuidanceTransition>true</interpolatedGuidanceTransition>
<conversion>0.03937</conversion>
<mosaic>true</mosaic>
<guidanceType>ARCHIVE</guidanceType>
<sourceFamily>ARIFFG</sourceFamily>
</source>
<source>
<SourceName>ARI1YR6</SourceName>
<DisplayName>ARIFFG1</DisplayName>
<DurationHour>6.0</DurationHour>
<dataPath>/grid/%/ARI/.*/.*/.*/ARI1YR6/SFC/0.0/-999999.0/</dataPath>
<plugin>grid</plugin>
<dataType>GRID</dataType>
<sourceType>GUIDANCE</sourceType>
<rateOrAccum>accum</rateOrAccum>
<expirationMinutes>2080</expirationMinutes>
<interpolatedGuidanceDelay>true</interpolatedGuidanceDelay>
<interpolatedGuidanceTransition>true</interpolatedGuidanceTransition>
<conversion>0.03937</conversion>
<mosaic>true</mosaic>
<guidanceType>ARCHIVE</guidanceType>
<sourceFamily>ARIFFG</sourceFamily>
</source>
<source>
<SourceName>ARI1YR12</SourceName>
<DisplayName>ARIFFG1</DisplayName>
<DurationHour>12.0</DurationHour>
<dataPath>/grid/%/ARI/.*/.*/.*/ARI1YR12/SFC/0.0/-999999.0/</dataPath>
<plugin>grid</plugin>
<dataType>GRID</dataType>
<sourceType>GUIDANCE</sourceType>
<rateOrAccum>accum</rateOrAccum>
<expirationMinutes>2080</expirationMinutes>
<interpolatedGuidanceDelay>true</interpolatedGuidanceDelay>
<interpolatedGuidanceTransition>true</interpolatedGuidanceTransition>
<conversion>0.03937</conversion>
<mosaic>true</mosaic>
<guidanceType>ARCHIVE</guidanceType>
<sourceFamily>ARIFFG</sourceFamily>
</source>
<source>
<SourceName>ARI1YR30</SourceName>
<DisplayName>ARIFFG1</DisplayName>
<DurationHour>0.5</DurationHour>
<dataPath>/grid/%/ARI/.*/.*/.*/ARI1YR30/SFC/0.0/-999999.0/</dataPath>
<plugin>grid</plugin>
<dataType>GRID</dataType>
<sourceType>GUIDANCE</sourceType>
<rateOrAccum>accum</rateOrAccum>
<expirationMinutes>2080</expirationMinutes>
<interpolatedGuidanceDelay>true</interpolatedGuidanceDelay>
<interpolatedGuidanceTransition>true</interpolatedGuidanceTransition>
<conversion>0.03937</conversion>
<mosaic>true</mosaic>
<guidanceType>ARCHIVE</guidanceType>
<sourceFamily>ARIFFG</sourceFamily>
</source>
<source>
<SourceName>ARI2YR1</SourceName>
<DisplayName>ARIFFG2</DisplayName>
<DurationHour>1.0</DurationHour>
<dataPath>/grid/%/ARI/.*/.*/.*/ARI2YR1/SFC/0.0/-999999.0/</dataPath>
<plugin>grid</plugin>
<dataType>GRID</dataType>
<sourceType>GUIDANCE</sourceType>
<rateOrAccum>accum</rateOrAccum>
<expirationMinutes>2080</expirationMinutes>
<interpolatedGuidanceDelay>true</interpolatedGuidanceDelay>
<interpolatedGuidanceTransition>true</interpolatedGuidanceTransition>
<conversion>0.03937</conversion>
<mosaic>true</mosaic>
<guidanceType>ARCHIVE</guidanceType>
<sourceFamily>ARIFFG</sourceFamily>
</source>
<source>
<SourceName>ARI2YR3</SourceName>
<DisplayName>ARIFFG2</DisplayName>
<DurationHour>3.0</DurationHour>
<dataPath>/grid/%/ARI/.*/.*/.*/ARI2YR3/SFC/0.0/-999999.0/</dataPath>
<plugin>grid</plugin>
<dataType>GRID</dataType>
<sourceType>GUIDANCE</sourceType>
<rateOrAccum>accum</rateOrAccum>
<expirationMinutes>2080</expirationMinutes>
<interpolatedGuidanceDelay>true</interpolatedGuidanceDelay>
<interpolatedGuidanceTransition>true</interpolatedGuidanceTransition>
<conversion>0.03937</conversion>
<mosaic>true</mosaic>
<guidanceType>ARCHIVE</guidanceType>
<sourceFamily>ARIFFG</sourceFamily>
</source>
<source>
<SourceName>ARI2YR6</SourceName>
<DisplayName>ARIFFG2</DisplayName>
<DurationHour>6.0</DurationHour>
<dataPath>/grid/%/ARI/.*/.*/.*/ARI2YR6/SFC/0.0/-999999.0/</dataPath>
<plugin>grid</plugin>
<dataType>GRID</dataType>
<sourceType>GUIDANCE</sourceType>
<rateOrAccum>accum</rateOrAccum>
<expirationMinutes>2080</expirationMinutes>
<interpolatedGuidanceDelay>true</interpolatedGuidanceDelay>
<interpolatedGuidanceTransition>true</interpolatedGuidanceTransition>
<conversion>0.03937</conversion>
<mosaic>true</mosaic>
<guidanceType>ARCHIVE</guidanceType>
<sourceFamily>ARIFFG</sourceFamily>
</source>
<source>
<SourceName>ARI2YR12</SourceName>
<DisplayName>ARIFFG2</DisplayName>
<DurationHour>12.0</DurationHour>
<dataPath>/grid/%/ARI/.*/.*/.*/ARI1YR12/SFC/0.0/-999999.0/</dataPath>
<plugin>grid</plugin>
<dataType>GRID</dataType>
<sourceType>GUIDANCE</sourceType>
<rateOrAccum>accum</rateOrAccum>
<expirationMinutes>2080</expirationMinutes>
<interpolatedGuidanceDelay>true</interpolatedGuidanceDelay>
<interpolatedGuidanceTransition>true</interpolatedGuidanceTransition>
<conversion>0.03937</conversion>
<mosaic>true</mosaic>
<guidanceType>ARCHIVE</guidanceType>
<sourceFamily>ARIFFG</sourceFamily>
</source>
<source>
<SourceName>ARI2YR30</SourceName>
<DisplayName>ARIFFG2</DisplayName>
<DurationHour>0.5</DurationHour>
<dataPath>/grid/%/ARI/.*/.*/.*/ARI2YR30/SFC/0.0/-999999.0/</dataPath>
<plugin>grid</plugin>
<dataType>GRID</dataType>
<sourceType>GUIDANCE</sourceType>
<rateOrAccum>accum</rateOrAccum>
<expirationMinutes>2080</expirationMinutes>
<interpolatedGuidanceDelay>true</interpolatedGuidanceDelay>
<interpolatedGuidanceTransition>true</interpolatedGuidanceTransition>
<conversion>0.03937</conversion>
<mosaic>true</mosaic>
<guidanceType>ARCHIVE</guidanceType>
<sourceFamily>ARIFFG</sourceFamily>
</source>
<source>
<SourceName>ARI5YR1</SourceName>
<DisplayName>ARIFFG5</DisplayName>
<DurationHour>1.0</DurationHour>
<dataPath>/grid/%/ARI/.*/.*/.*/ARI5YR1/SFC/0.0/-999999.0/</dataPath>
<plugin>grid</plugin>
<dataType>GRID</dataType>
<sourceType>GUIDANCE</sourceType>
<rateOrAccum>accum</rateOrAccum>
<expirationMinutes>2080</expirationMinutes>
<interpolatedGuidanceDelay>true</interpolatedGuidanceDelay>
<interpolatedGuidanceTransition>true</interpolatedGuidanceTransition>
<conversion>0.03937</conversion>
<mosaic>true</mosaic>
<guidanceType>ARCHIVE</guidanceType>
<sourceFamily>ARIFFG</sourceFamily>
</source>
<source>
<SourceName>ARI5YR3</SourceName>
<DisplayName>ARIFFG5</DisplayName>
<DurationHour>3.0</DurationHour>
<dataPath>/grid/%/ARI/.*/.*/.*/ARI5YR3/SFC/0.0/-999999.0/</dataPath>
<plugin>grid</plugin>
<dataType>GRID</dataType>
<sourceType>GUIDANCE</sourceType>
<rateOrAccum>accum</rateOrAccum>
<expirationMinutes>2080</expirationMinutes>
<interpolatedGuidanceDelay>true</interpolatedGuidanceDelay>
<interpolatedGuidanceTransition>true</interpolatedGuidanceTransition>
<conversion>0.03937</conversion>
<mosaic>true</mosaic>
<guidanceType>ARCHIVE</guidanceType>
<sourceFamily>ARIFFG</sourceFamily>
</source>
<source>
<SourceName>ARI5YR6</SourceName>
<DisplayName>ARIFFG5</DisplayName>
<DurationHour>6.0</DurationHour>
<dataPath>/grid/%/ARI/.*/.*/.*/ARI5YR6/SFC/0.0/-999999.0/</dataPath>
<plugin>grid</plugin>
<dataType>GRID</dataType>
<sourceType>GUIDANCE</sourceType>
<rateOrAccum>accum</rateOrAccum>
<expirationMinutes>2080</expirationMinutes>
<interpolatedGuidanceDelay>true</interpolatedGuidanceDelay>
<interpolatedGuidanceTransition>true</interpolatedGuidanceTransition>
<conversion>0.03937</conversion>
<mosaic>true</mosaic>
<guidanceType>ARCHIVE</guidanceType>
<sourceFamily>ARIFFG</sourceFamily>
</source>
<source>
<SourceName>ARI5YR12</SourceName>
<DisplayName>ARIFFG5</DisplayName>
<DurationHour>12.0</DurationHour>
<dataPath>/grid/%/ARI/.*/.*/.*/ARI5YR12/SFC/0.0/-999999.0/</dataPath>
<plugin>grid</plugin>
<dataType>GRID</dataType>
<sourceType>GUIDANCE</sourceType>
<rateOrAccum>accum</rateOrAccum>
<expirationMinutes>2080</expirationMinutes>
<interpolatedGuidanceDelay>true</interpolatedGuidanceDelay>
<interpolatedGuidanceTransition>true</interpolatedGuidanceTransition>
<conversion>0.03937</conversion>
<mosaic>true</mosaic>
<guidanceType>ARCHIVE</guidanceType>
<sourceFamily>ARIFFG</sourceFamily>
</source>
<source>
<SourceName>ARI5YR30</SourceName>
<DisplayName>ARIFFG5</DisplayName>
<DurationHour>0.5</DurationHour>
<dataPath>/grid/%/ARI/.*/.*/.*/ARI5YR30/SFC/0.0/-999999.0/</dataPath>
<plugin>grid</plugin>
<dataType>GRID</dataType>
<sourceType>GUIDANCE</sourceType>
<rateOrAccum>accum</rateOrAccum>
<expirationMinutes>2080</expirationMinutes>
<interpolatedGuidanceDelay>true</interpolatedGuidanceDelay>
<interpolatedGuidanceTransition>true</interpolatedGuidanceTransition>
<conversion>0.03937</conversion>
<mosaic>true</mosaic>
<guidanceType>ARCHIVE</guidanceType>
<sourceFamily>ARIFFG</sourceFamily>
</source>
<source>
<SourceName>ARI10YR1</SourceName>
<DisplayName>ARIFFG10</DisplayName>
<DurationHour>1.0</DurationHour>
<dataPath>/grid/%/ARI/.*/.*/.*/ARI10YR1/SFC/0.0/-999999.0/</dataPath>
<plugin>grid</plugin>
<dataType>GRID</dataType>
<sourceType>GUIDANCE</sourceType>
<rateOrAccum>accum</rateOrAccum>
<expirationMinutes>2080</expirationMinutes>
<interpolatedGuidanceDelay>true</interpolatedGuidanceDelay>
<interpolatedGuidanceTransition>true</interpolatedGuidanceTransition>
<conversion>0.03937</conversion>
<mosaic>true</mosaic>
<guidanceType>ARCHIVE</guidanceType>
<sourceFamily>ARIFFG</sourceFamily>
</source>
<source>
<SourceName>ARI10YR3</SourceName>
<DisplayName>ARIFFG10</DisplayName>
<DurationHour>3.0</DurationHour>
<dataPath>/grid/%/ARI/.*/.*/.*/ARI10YR3/SFC/0.0/-999999.0/</dataPath>
<plugin>grid</plugin>
<dataType>GRID</dataType>
<sourceType>GUIDANCE</sourceType>
<rateOrAccum>accum</rateOrAccum>
<expirationMinutes>2080</expirationMinutes>
<interpolatedGuidanceDelay>true</interpolatedGuidanceDelay>
<interpolatedGuidanceTransition>true</interpolatedGuidanceTransition>
<conversion>0.03937</conversion>
<mosaic>true</mosaic>
<guidanceType>ARCHIVE</guidanceType>
<sourceFamily>ARIFFG</sourceFamily>
</source>
<source>
<SourceName>ARI10YR6</SourceName>
<DisplayName>ARIFFG10</DisplayName>
<DurationHour>6.0</DurationHour>
<dataPath>/grid/%/ARI/.*/.*/.*/ARI10YR6/SFC/0.0/-999999.0/</dataPath>
<plugin>grid</plugin>
<dataType>GRID</dataType>
<sourceType>GUIDANCE</sourceType>
<rateOrAccum>accum</rateOrAccum>
<expirationMinutes>2080</expirationMinutes>
<interpolatedGuidanceDelay>true</interpolatedGuidanceDelay>
<interpolatedGuidanceTransition>true</interpolatedGuidanceTransition>
<conversion>0.03937</conversion>
<mosaic>true</mosaic>
<guidanceType>ARCHIVE</guidanceType>
<sourceFamily>ARIFFG</sourceFamily>
</source>
<source>
<SourceName>ARI10YR12</SourceName>
<DisplayName>ARIFFG10</DisplayName>
<DurationHour>12.0</DurationHour>
<dataPath>/grid/%/ARI/.*/.*/.*/ARI10YR12/SFC/0.0/-999999.0/</dataPath>
<plugin>grid</plugin>
<dataType>GRID</dataType>
<sourceType>GUIDANCE</sourceType>
<rateOrAccum>accum</rateOrAccum>
<expirationMinutes>2080</expirationMinutes>
<interpolatedGuidanceDelay>true</interpolatedGuidanceDelay>
<interpolatedGuidanceTransition>true</interpolatedGuidanceTransition>
<conversion>0.03937</conversion>
<mosaic>true</mosaic>
<guidanceType>ARCHIVE</guidanceType>
<sourceFamily>ARIFFG</sourceFamily>
</source>
<source>
<SourceName>ARI10YR30</SourceName>
<DisplayName>ARIFFG10</DisplayName>
<DurationHour>0.5</DurationHour>
<dataPath>/grid/%/ARI/.*/.*/.*/ARI10YR30/SFC/0.0/-999999.0/</dataPath>
<plugin>grid</plugin>
<dataType>GRID</dataType>
<sourceType>GUIDANCE</sourceType>
<rateOrAccum>accum</rateOrAccum>
<expirationMinutes>2080</expirationMinutes>
<interpolatedGuidanceDelay>true</interpolatedGuidanceDelay>
<interpolatedGuidanceTransition>true</interpolatedGuidanceTransition>
<conversion>0.03937</conversion>
<mosaic>true</mosaic>
<guidanceType>ARCHIVE</guidanceType>
<sourceFamily>ARIFFG</sourceFamily>
</source>
<source>
<SourceName>ARI25YR1</SourceName>
<DisplayName>ARIFFG25</DisplayName>
<DurationHour>1.0</DurationHour>
<dataPath>/grid/%/ARI/.*/.*/.*/ARI25YR1/SFC/0.0/-999999.0/</dataPath>
<plugin>grid</plugin>
<dataType>GRID</dataType>
<sourceType>GUIDANCE</sourceType>
<rateOrAccum>accum</rateOrAccum>
<expirationMinutes>2080</expirationMinutes>
<interpolatedGuidanceDelay>true</interpolatedGuidanceDelay>
<interpolatedGuidanceTransition>true</interpolatedGuidanceTransition>
<conversion>0.03937</conversion>
<mosaic>true</mosaic>
<guidanceType>ARCHIVE</guidanceType>
<sourceFamily>ARIFFG</sourceFamily>
</source>
<source>
<SourceName>ARI25YR3</SourceName>
<DisplayName>ARIFFG25</DisplayName>
<DurationHour>3.0</DurationHour>
<dataPath>/grid/%/ARI/.*/.*/.*/ARI25YR3/SFC/0.0/-999999.0/</dataPath>
<plugin>grid</plugin>
<dataType>GRID</dataType>
<sourceType>GUIDANCE</sourceType>
<rateOrAccum>accum</rateOrAccum>
<expirationMinutes>2080</expirationMinutes>
<interpolatedGuidanceDelay>true</interpolatedGuidanceDelay>
<interpolatedGuidanceTransition>true</interpolatedGuidanceTransition>
<conversion>0.03937</conversion>
<mosaic>true</mosaic>
<guidanceType>ARCHIVE</guidanceType>
<sourceFamily>ARIFFG</sourceFamily>
</source>
<source>
<SourceName>ARI25YR6</SourceName>
<DisplayName>ARIFFG25</DisplayName>
<DurationHour>6.0</DurationHour>
<dataPath>/grid/%/ARI/.*/.*/.*/ARI25YR6/SFC/0.0/-999999.0/</dataPath>
<plugin>grid</plugin>
<dataType>GRID</dataType>
<sourceType>GUIDANCE</sourceType>
<rateOrAccum>accum</rateOrAccum>
<expirationMinutes>2080</expirationMinutes>
<interpolatedGuidanceDelay>true</interpolatedGuidanceDelay>
<interpolatedGuidanceTransition>true</interpolatedGuidanceTransition>
<conversion>0.03937</conversion>
<mosaic>true</mosaic>
<guidanceType>ARCHIVE</guidanceType>
<sourceFamily>ARIFFG</sourceFamily>
</source>
<source>
<SourceName>ARI25YR12</SourceName>
<DisplayName>ARIFFG25</DisplayName>
<DurationHour>12.0</DurationHour>
<dataPath>/grid/%/ARI/.*/.*/.*/ARI1YR12/SFC/0.0/-999999.0/</dataPath>
<plugin>grid</plugin>
<dataType>GRID</dataType>
<sourceType>GUIDANCE</sourceType>
<rateOrAccum>accum</rateOrAccum>
<expirationMinutes>2080</expirationMinutes>
<interpolatedGuidanceDelay>true</interpolatedGuidanceDelay>
<interpolatedGuidanceTransition>true</interpolatedGuidanceTransition>
<conversion>0.03937</conversion>
<mosaic>true</mosaic>
<guidanceType>ARCHIVE</guidanceType>
<sourceFamily>ARIFFG</sourceFamily>
</source>
<source>
<SourceName>ARI25YR30</SourceName>
<DisplayName>ARIFFG25</DisplayName>
<DurationHour>0.5</DurationHour>
<dataPath>/grid/%/ARI/.*/.*/.*/ARI25YR30/SFC/0.0/-999999.0/</dataPath>
<plugin>grid</plugin>
<dataType>GRID</dataType>
<sourceType>GUIDANCE</sourceType>
<rateOrAccum>accum</rateOrAccum>
<expirationMinutes>2080</expirationMinutes>
<interpolatedGuidanceDelay>true</interpolatedGuidanceDelay>
<interpolatedGuidanceTransition>true</interpolatedGuidanceTransition>
<conversion>0.03937</conversion>
<mosaic>true</mosaic>
<guidanceType>ARCHIVE</guidanceType>
<sourceFamily>ARIFFG</sourceFamily>
</source>
<source>
<SourceName>ARI50YR1</SourceName>
<DisplayName>ARIFFG50</DisplayName>
<DurationHour>1.0</DurationHour>
<dataPath>/grid/%/ARI/.*/.*/.*/ARI50YR1/SFC/0.0/-999999.0/</dataPath>
<plugin>grid</plugin>
<dataType>GRID</dataType>
<sourceType>GUIDANCE</sourceType>
<rateOrAccum>accum</rateOrAccum>
<expirationMinutes>2080</expirationMinutes>
<interpolatedGuidanceDelay>true</interpolatedGuidanceDelay>
<interpolatedGuidanceTransition>true</interpolatedGuidanceTransition>
<conversion>0.03937</conversion>
<mosaic>true</mosaic>
<guidanceType>ARCHIVE</guidanceType>
<sourceFamily>ARIFFG</sourceFamily>
</source>
<source>
<SourceName>ARI50YR3</SourceName>
<DisplayName>ARIFFG50</DisplayName>
<DurationHour>3.0</DurationHour>
<dataPath>/grid/%/ARI/.*/.*/.*/ARI50YR3/SFC/0.0/-999999.0/</dataPath>
<plugin>grid</plugin>
<dataType>GRID</dataType>
<sourceType>GUIDANCE</sourceType>
<rateOrAccum>accum</rateOrAccum>
<expirationMinutes>2080</expirationMinutes>
<interpolatedGuidanceDelay>true</interpolatedGuidanceDelay>
<interpolatedGuidanceTransition>true</interpolatedGuidanceTransition>
<conversion>0.03937</conversion>
<mosaic>true</mosaic>
<guidanceType>ARCHIVE</guidanceType>
<sourceFamily>ARIFFG</sourceFamily>
</source>
<source>
<SourceName>ARI50YR6</SourceName>
<DisplayName>ARIFFG50</DisplayName>
<DurationHour>6.0</DurationHour>
<dataPath>/grid/%/ARI/.*/.*/.*/ARI50YR6/SFC/0.0/-999999.0/</dataPath>
<plugin>grid</plugin>
<dataType>GRID</dataType>
<sourceType>GUIDANCE</sourceType>
<rateOrAccum>accum</rateOrAccum>
<expirationMinutes>2080</expirationMinutes>
<interpolatedGuidanceDelay>true</interpolatedGuidanceDelay>
<interpolatedGuidanceTransition>true</interpolatedGuidanceTransition>
<conversion>0.03937</conversion>
<mosaic>true</mosaic>
<guidanceType>ARCHIVE</guidanceType>
<sourceFamily>ARIFFG</sourceFamily>
</source>
<source>
<SourceName>ARI50YR12</SourceName>
<DisplayName>ARIFFG50</DisplayName>
<DurationHour>12.0</DurationHour>
<dataPath>/grid/%/ARI/.*/.*/.*/ARI50YR12/SFC/0.0/-999999.0/</dataPath>
<plugin>grid</plugin>
<dataType>GRID</dataType>
<sourceType>GUIDANCE</sourceType>
<rateOrAccum>accum</rateOrAccum>
<expirationMinutes>2080</expirationMinutes>
<interpolatedGuidanceDelay>true</interpolatedGuidanceDelay>
<interpolatedGuidanceTransition>true</interpolatedGuidanceTransition>
<conversion>0.03937</conversion>
<mosaic>true</mosaic>
<guidanceType>ARCHIVE</guidanceType>
<sourceFamily>ARIFFG</sourceFamily>
</source>
<source>
<SourceName>ARI50YR30</SourceName>
<DisplayName>ARIFFG50</DisplayName>
<DurationHour>0.5</DurationHour>
<dataPath>/grid/%/ARI/.*/.*/.*/ARI50YR30/SFC/0.0/-999999.0/</dataPath>
<plugin>grid</plugin>
<dataType>GRID</dataType>
<sourceType>GUIDANCE</sourceType>
<rateOrAccum>accum</rateOrAccum>
<expirationMinutes>2080</expirationMinutes>
<interpolatedGuidanceDelay>true</interpolatedGuidanceDelay>
<interpolatedGuidanceTransition>true</interpolatedGuidanceTransition>
<conversion>0.03937</conversion>
<mosaic>true</mosaic>
<guidanceType>ARCHIVE</guidanceType>
<sourceFamily>ARIFFG</sourceFamily>
</source>
<source>
<SourceName>ARI100YR1</SourceName>
<DisplayName>ARIFFG100</DisplayName>
<DurationHour>1.0</DurationHour>
<dataPath>/grid/%/ARI/.*/.*/.*/ARI100YR1/SFC/0.0/-999999.0/</dataPath>
<plugin>grid</plugin>
<dataType>GRID</dataType>
<sourceType>GUIDANCE</sourceType>
<rateOrAccum>accum</rateOrAccum>
<expirationMinutes>2080</expirationMinutes>
<interpolatedGuidanceDelay>true</interpolatedGuidanceDelay>
<interpolatedGuidanceTransition>true</interpolatedGuidanceTransition>
<conversion>0.03937</conversion>
<mosaic>true</mosaic>
<guidanceType>ARCHIVE</guidanceType>
<sourceFamily>ARIFFG</sourceFamily>
</source>
<source>
<SourceName>ARI100YR3</SourceName>
<DisplayName>ARIFFG100</DisplayName>
<DurationHour>3.0</DurationHour>
<dataPath>/grid/%/ARI/.*/.*/.*/ARI100YR3/SFC/0.0/-999999.0/</dataPath>
<plugin>grid</plugin>
<dataType>GRID</dataType>
<sourceType>GUIDANCE</sourceType>
<rateOrAccum>accum</rateOrAccum>
<expirationMinutes>2080</expirationMinutes>
<interpolatedGuidanceDelay>true</interpolatedGuidanceDelay>
<interpolatedGuidanceTransition>true</interpolatedGuidanceTransition>
<conversion>0.03937</conversion>
<mosaic>true</mosaic>
<guidanceType>ARCHIVE</guidanceType>
<sourceFamily>ARIFFG</sourceFamily>
</source>
<source>
<SourceName>ARI100YR6</SourceName>
<DisplayName>ARIFFG100</DisplayName>
<DurationHour>6.0</DurationHour>
<dataPath>/grid/%/ARI/.*/.*/.*/ARI100YR6/SFC/0.0/-999999.0/</dataPath>
<plugin>grid</plugin>
<dataType>GRID</dataType>
<sourceType>GUIDANCE</sourceType>
<rateOrAccum>accum</rateOrAccum>
<expirationMinutes>2080</expirationMinutes>
<interpolatedGuidanceDelay>true</interpolatedGuidanceDelay>
<interpolatedGuidanceTransition>true</interpolatedGuidanceTransition>
<conversion>0.03937</conversion>
<mosaic>true</mosaic>
<guidanceType>ARCHIVE</guidanceType>
<sourceFamily>ARIFFG</sourceFamily>
</source>
<source>
<SourceName>ARI100YR12</SourceName>
<DisplayName>ARIFFG100</DisplayName>
<DurationHour>12.0</DurationHour>
<dataPath>/grid/%/ARI/.*/.*/.*/ARI100YR12/SFC/0.0/-999999.0/</dataPath>
<plugin>grid</plugin>
<dataType>GRID</dataType>
<sourceType>GUIDANCE</sourceType>
<rateOrAccum>accum</rateOrAccum>
<expirationMinutes>2080</expirationMinutes>
<interpolatedGuidanceDelay>true</interpolatedGuidanceDelay>
<interpolatedGuidanceTransition>true</interpolatedGuidanceTransition>
<conversion>0.03937</conversion>
<mosaic>true</mosaic>
<guidanceType>ARCHIVE</guidanceType>
<sourceFamily>ARIFFG</sourceFamily>
</source>
<source>
<SourceName>ARI100YR30</SourceName>
<DisplayName>ARIFFG100</DisplayName>
<DurationHour>0.5</DurationHour>
<dataPath>/grid/%/ARI/.*/.*/.*/ARI100YR30/SFC/0.0/-999999.0/</dataPath>
<plugin>grid</plugin>
<dataType>GRID</dataType>
<sourceType>GUIDANCE</sourceType>
<rateOrAccum>accum</rateOrAccum>
<expirationMinutes>2080</expirationMinutes>
<interpolatedGuidanceDelay>true</interpolatedGuidanceDelay>
<interpolatedGuidanceTransition>true</interpolatedGuidanceTransition>
<conversion>0.03937</conversion>
<mosaic>true</mosaic>
<guidanceType>ARCHIVE</guidanceType>
<sourceFamily>ARIFFG</sourceFamily>
</source>
<source>
<SourceName>ARI200YR1</SourceName>
<DisplayName>ARIFFG200</DisplayName>
<DurationHour>1.0</DurationHour>
<dataPath>/grid/%/ARI/.*/.*/.*/ARI200YR1/SFC/0.0/-999999.0/</dataPath>
<plugin>grid</plugin>
<dataType>GRID</dataType>
<sourceType>GUIDANCE</sourceType>
<rateOrAccum>accum</rateOrAccum>
<expirationMinutes>2080</expirationMinutes>
<interpolatedGuidanceDelay>true</interpolatedGuidanceDelay>
<interpolatedGuidanceTransition>true</interpolatedGuidanceTransition>
<conversion>0.03937</conversion>
<mosaic>true</mosaic>
<guidanceType>ARCHIVE</guidanceType>
<sourceFamily>ARIFFG</sourceFamily>
</source>
<source>
<SourceName>ARI200YR3</SourceName>
<DisplayName>ARIFFG200</DisplayName>
<DurationHour>3.0</DurationHour>
<dataPath>/grid/%/ARI/.*/.*/.*/ARI200YR3/SFC/0.0/-999999.0/</dataPath>
<plugin>grid</plugin>
<dataType>GRID</dataType>
<sourceType>GUIDANCE</sourceType>
<rateOrAccum>accum</rateOrAccum>
<expirationMinutes>2080</expirationMinutes>
<interpolatedGuidanceDelay>true</interpolatedGuidanceDelay>
<interpolatedGuidanceTransition>true</interpolatedGuidanceTransition>
<conversion>0.03937</conversion>
<mosaic>true</mosaic>
<guidanceType>ARCHIVE</guidanceType>
<sourceFamily>ARIFFG</sourceFamily>
</source>
<source>
<SourceName>ARI200YR6</SourceName>
<DisplayName>ARIFFG200</DisplayName>
<DurationHour>6.0</DurationHour>
<dataPath>/grid/%/ARI/.*/.*/.*/ARI200YR6/SFC/0.0/-999999.0/</dataPath>
<plugin>grid</plugin>
<dataType>GRID</dataType>
<sourceType>GUIDANCE</sourceType>
<rateOrAccum>accum</rateOrAccum>
<expirationMinutes>2080</expirationMinutes>
<interpolatedGuidanceDelay>true</interpolatedGuidanceDelay>
<interpolatedGuidanceTransition>true</interpolatedGuidanceTransition>
<conversion>0.03937</conversion>
<mosaic>true</mosaic>
<guidanceType>ARCHIVE</guidanceType>
<sourceFamily>ARIFFG</sourceFamily>
</source>
<source>
<SourceName>ARI200YR12</SourceName>
<DisplayName>ARIFFG200</DisplayName>
<DurationHour>12.0</DurationHour>
<dataPath>/grid/%/ARI/.*/.*/.*/ARI200YR12/SFC/0.0/-999999.0/</dataPath>
<plugin>grid</plugin>
<dataType>GRID</dataType>
<sourceType>GUIDANCE</sourceType>
<rateOrAccum>accum</rateOrAccum>
<expirationMinutes>2080</expirationMinutes>
<interpolatedGuidanceDelay>true</interpolatedGuidanceDelay>
<interpolatedGuidanceTransition>true</interpolatedGuidanceTransition>
<conversion>0.03937</conversion>
<mosaic>true</mosaic>
<guidanceType>ARCHIVE</guidanceType>
<sourceFamily>ARIFFG</sourceFamily>
</source>
<source>
<SourceName>ARI200YR30</SourceName>
<DisplayName>ARIFFG200</DisplayName>
<DurationHour>0.5</DurationHour>
<dataPath>/grid/%/ARI/.*/.*/.*/ARI200YR30/SFC/0.0/-999999.0/</dataPath>
<plugin>grid</plugin>
<dataType>GRID</dataType>
<sourceType>GUIDANCE</sourceType>
<rateOrAccum>accum</rateOrAccum>
<expirationMinutes>2080</expirationMinutes>
<interpolatedGuidanceDelay>true</interpolatedGuidanceDelay>
<interpolatedGuidanceTransition>true</interpolatedGuidanceTransition>
<conversion>0.03937</conversion>
<mosaic>true</mosaic>
<guidanceType>ARCHIVE</guidanceType>
<sourceFamily>ARIFFG</sourceFamily>
</source>
<source>
<SourceName>ARI500YR1</SourceName>
<DisplayName>ARIFFG500</DisplayName>
<DurationHour>1.0</DurationHour>
<dataPath>/grid/%/ARI/.*/.*/.*/ARI500YR1/SFC/0.0/-999999.0/</dataPath>
<plugin>grid</plugin>
<dataType>GRID</dataType>
<sourceType>GUIDANCE</sourceType>
<rateOrAccum>accum</rateOrAccum>
<expirationMinutes>2080</expirationMinutes>
<interpolatedGuidanceDelay>true</interpolatedGuidanceDelay>
<interpolatedGuidanceTransition>true</interpolatedGuidanceTransition>
<conversion>0.03937</conversion>
<mosaic>true</mosaic>
<guidanceType>ARCHIVE</guidanceType>
<sourceFamily>ARIFFG</sourceFamily>
</source>
<source>
<SourceName>ARI500YR3</SourceName>
<DisplayName>ARIFFG500</DisplayName>
<DurationHour>3.0</DurationHour>
<dataPath>/grid/%/ARI/.*/.*/.*/ARI500YR3/SFC/0.0/-999999.0/</dataPath>
<plugin>grid</plugin>
<dataType>GRID</dataType>
<sourceType>GUIDANCE</sourceType>
<rateOrAccum>accum</rateOrAccum>
<expirationMinutes>2080</expirationMinutes>
<interpolatedGuidanceDelay>true</interpolatedGuidanceDelay>
<interpolatedGuidanceTransition>true</interpolatedGuidanceTransition>
<conversion>0.03937</conversion>
<mosaic>true</mosaic>
<guidanceType>ARCHIVE</guidanceType>
<sourceFamily>ARIFFG</sourceFamily>
</source>
<source>
<SourceName>ARI500YR6</SourceName>
<DisplayName>ARIFFG500</DisplayName>
<DurationHour>6.0</DurationHour>
<dataPath>/grid/%/ARI/.*/.*/.*/ARI500YR6/SFC/0.0/-999999.0/</dataPath>
<plugin>grid</plugin>
<dataType>GRID</dataType>
<sourceType>GUIDANCE</sourceType>
<rateOrAccum>accum</rateOrAccum>
<expirationMinutes>2080</expirationMinutes>
<interpolatedGuidanceDelay>true</interpolatedGuidanceDelay>
<interpolatedGuidanceTransition>true</interpolatedGuidanceTransition>
<conversion>0.03937</conversion>
<mosaic>true</mosaic>
<guidanceType>ARCHIVE</guidanceType>
<sourceFamily>ARIFFG</sourceFamily>
</source>
<source>
<SourceName>ARI500YR12</SourceName>
<DisplayName>ARIFFG500</DisplayName>
<DurationHour>12.0</DurationHour>
<dataPath>/grid/%/ARI/.*/.*/.*/ARI500YR12/SFC/0.0/-999999.0/</dataPath>
<plugin>grid</plugin>
<dataType>GRID</dataType>
<sourceType>GUIDANCE</sourceType>
<rateOrAccum>accum</rateOrAccum>
<expirationMinutes>2080</expirationMinutes>
<interpolatedGuidanceDelay>true</interpolatedGuidanceDelay>
<interpolatedGuidanceTransition>true</interpolatedGuidanceTransition>
<conversion>0.03937</conversion>
<mosaic>true</mosaic>
<guidanceType>ARCHIVE</guidanceType>
<sourceFamily>ARIFFG</sourceFamily>
</source>
<source>
<SourceName>ARI500YR30</SourceName>
<DisplayName>ARIFFG500</DisplayName>
<DurationHour>0.5</DurationHour>
<dataPath>/grid/%/ARI/.*/.*/.*/ARI500YR30/SFC/0.0/-999999.0/</dataPath>
<plugin>grid</plugin>
<dataType>GRID</dataType>
<sourceType>GUIDANCE</sourceType>
<rateOrAccum>accum</rateOrAccum>
<expirationMinutes>2080</expirationMinutes>
<interpolatedGuidanceDelay>true</interpolatedGuidanceDelay>
<interpolatedGuidanceTransition>true</interpolatedGuidanceTransition>
<conversion>0.03937</conversion>
<mosaic>true</mosaic>
<guidanceType>ARCHIVE</guidanceType>
<sourceFamily>ARIFFG</sourceFamily>
</source>
<source>
<SourceName>ARI1000YR1</SourceName>
<DisplayName>ARIFFG1000</DisplayName>
<DurationHour>1.0</DurationHour>
<dataPath>/grid/%/ARI/.*/.*/.*/ARI1000YR1/SFC/0.0/-999999.0/</dataPath>
<plugin>grid</plugin>
<dataType>GRID</dataType>
<sourceType>GUIDANCE</sourceType>
<rateOrAccum>accum</rateOrAccum>
<expirationMinutes>2080</expirationMinutes>
<interpolatedGuidanceDelay>true</interpolatedGuidanceDelay>
<interpolatedGuidanceTransition>true</interpolatedGuidanceTransition>
<conversion>0.03937</conversion>
<mosaic>true</mosaic>
<guidanceType>ARCHIVE</guidanceType>
<sourceFamily>ARIFFG</sourceFamily>
</source>
<source>
<SourceName>ARI1000YR3</SourceName>
<DisplayName>ARIFFG1000</DisplayName>
<DurationHour>3.0</DurationHour>
<dataPath>/grid/%/ARI/.*/.*/.*/ARI1000YR3/SFC/0.0/-999999.0/</dataPath>
<plugin>grid</plugin>
<dataType>GRID</dataType>
<sourceType>GUIDANCE</sourceType>
<rateOrAccum>accum</rateOrAccum>
<expirationMinutes>2080</expirationMinutes>
<interpolatedGuidanceDelay>true</interpolatedGuidanceDelay>
<interpolatedGuidanceTransition>true</interpolatedGuidanceTransition>
<conversion>0.03937</conversion>
<mosaic>true</mosaic>
<guidanceType>ARCHIVE</guidanceType>
<sourceFamily>ARIFFG</sourceFamily>
</source>
<source>
<SourceName>ARI1000YR6</SourceName>
<DisplayName>ARIFFG1000</DisplayName>
<DurationHour>6.0</DurationHour>
<dataPath>/grid/%/ARI/.*/.*/.*/ARI1000YR6/SFC/0.0/-999999.0/</dataPath>
<plugin>grid</plugin>
<dataType>GRID</dataType>
<sourceType>GUIDANCE</sourceType>
<rateOrAccum>accum</rateOrAccum>
<expirationMinutes>2080</expirationMinutes>
<interpolatedGuidanceDelay>true</interpolatedGuidanceDelay>
<interpolatedGuidanceTransition>true</interpolatedGuidanceTransition>
<conversion>0.03937</conversion>
<mosaic>true</mosaic>
<guidanceType>ARCHIVE</guidanceType>
<sourceFamily>ARIFFG</sourceFamily>
</source>
<source>
<SourceName>ARI1000YR12</SourceName>
<DisplayName>ARIFFG1000</DisplayName>
<DurationHour>12.0</DurationHour>
<dataPath>/grid/%/ARI/.*/.*/.*/ARI1000YR12/SFC/0.0/-999999.0/</dataPath>
<plugin>grid</plugin>
<dataType>GRID</dataType>
<sourceType>GUIDANCE</sourceType>
<rateOrAccum>accum</rateOrAccum>
<expirationMinutes>2080</expirationMinutes>
<interpolatedGuidanceDelay>true</interpolatedGuidanceDelay>
<interpolatedGuidanceTransition>true</interpolatedGuidanceTransition>
<conversion>0.03937</conversion>
<mosaic>true</mosaic>
<guidanceType>ARCHIVE</guidanceType>
<sourceFamily>ARIFFG</sourceFamily>
</source>
<source>
<SourceName>ARI1000YR30</SourceName>
<DisplayName>ARIFFG1000</DisplayName>
<DurationHour>0.5</DurationHour>
<dataPath>/grid/%/ARI/.*/.*/.*/ARI1000YR30/SFC/0.0/-999999.0/</dataPath>
<plugin>grid</plugin>
<dataType>GRID</dataType>
<sourceType>GUIDANCE</sourceType>
<rateOrAccum>accum</rateOrAccum>
<expirationMinutes>2080</expirationMinutes>
<interpolatedGuidanceDelay>true</interpolatedGuidanceDelay>
<interpolatedGuidanceTransition>true</interpolatedGuidanceTransition>
<conversion>0.03937</conversion>
<mosaic>true</mosaic>
<guidanceType>ARCHIVE</guidanceType>
<sourceFamily>ARIFFG</sourceFamily>
</source>
<source>
<SourceName>MRMS</SourceName>
<DisplayName>MRMS-1000</DisplayName>
<DisplayName>MRMS-QPE</DisplayName>
<DurationHour>0.0</DurationHour>
<dataPath>/grid/%/MRMS_1000/.*/.*/.*/PrecipRate/FH/0.0/-999999.0/</dataPath>
<plugin>grid</plugin>
@ -185,6 +1038,19 @@
<conversion>0.03937</conversion>
<mosaic>false</mosaic>
</source>
<source>
<SourceName>HRRRQPF</SourceName>
<DisplayName>HRRRQPF</DisplayName>
<DurationHour>1.0</DurationHour>
<dataPath>/grid/%/HRRR/.*/.*/.*/TP1hr/SFC/0.0/-999999.0/</dataPath>
<plugin>grid</plugin>
<dataType>GRID</dataType>
<sourceType>QPF</sourceType>
<rateOrAccum>accum</rateOrAccum>
<expirationMinutes>75</expirationMinutes>
<conversion>0.03937</conversion>
<mosaic>true</mosaic>
</source>
<source>
<SourceName>VGBBIASHPE</SourceName>
<DisplayName>Virtual Gage Basins HPE</DisplayName>
@ -241,7 +1107,21 @@
<qpf>PRTM</qpf>
<qpf>BPRTM</qpf>
<qpf>QPFSCAN</qpf>
<!--
<qpf>HRRRQPF</qpf>
<qpf>MRMSQPF</qpf>
-->
<guidance>FFG0124hr, FFG0324hr, FFG0624hr</guidance>
<guidance>ARI1YR30, ARI1YR1, ARI1YR3, ARI1YR6, ARI1YR12</guidance>
<guidance>ARI2YR30, ARI1YR1, ARI2YR3, ARI2YR6, ARI2YR12</guidance>
<guidance>ARI5YR30, ARI5YR1, ARI5YR3, ARI5YR6, ARI5YR12</guidance>
<guidance>ARI10YR30, ARI10YR1, ARI10YR3, ARI10YR6, ARI10YR12</guidance>
<guidance>ARI25YR30, ARI25YR1, ARI25YR3, ARI25YR6, ARI25YR12</guidance>
<guidance>ARI50YR30, ARI50YR1, ARI50YR3, ARI50YR6, ARI50YR12</guidance>
<guidance>ARI100YR30, ARI100YR1, ARI100YR3, ARI100YR6, ARI100YR12</guidance>
<guidance>ARI200YR30, ARI200YR1, ARI200YR3, ARI200YR6, ARI200YR12</guidance>
<guidance>ARI500YR30, ARI500YR1, ARI500YR3, ARI500YR6, ARI500YR12</guidance>
<guidance>ARI1000YR30, ARI1000YR1, ARI1000YR3, ARI1000YR6, ARI1000YR12</guidance>
<virtual>VGBHPE</virtual>
</product>
<product primarySource="BDHRMOSAIC">
@ -250,7 +1130,21 @@
<qpf>BPRTM</qpf>
<qpf>PRTM</qpf>
<qpf>QPFSCAN</qpf>
<!--
<qpf>HRRRQPF</qpf>
<qpf>MRMSQPF</qpf>
-->
<guidance>FFG0124hr, FFG0324hr, FFG0624hr</guidance>
<guidance>ARI1YR30, ARI1YR1, ARI1YR3, ARI1YR6, ARI1YR12</guidance>
<guidance>ARI2YR30, ARI1YR1, ARI2YR3, ARI2YR6, ARI2YR12</guidance>
<guidance>ARI5YR30, ARI5YR1, ARI5YR3, ARI5YR6, ARI5YR12</guidance>
<guidance>ARI10YR30, ARI10YR1, ARI10YR3, ARI10YR6, ARI10YR12</guidance>
<guidance>ARI25YR30, ARI25YR1, ARI25YR3, ARI25YR6, ARI25YR12</guidance>
<guidance>ARI50YR30, ARI50YR1, ARI50YR3, ARI50YR6, ARI50YR12</guidance>
<guidance>ARI100YR30, ARI100YR1, ARI100YR3, ARI100YR6, ARI100YR12</guidance>
<guidance>ARI200YR30, ARI200YR1, ARI200YR3, ARI200YR6, ARI200YR12</guidance>
<guidance>ARI500YR30, ARI500YR1, ARI500YR3, ARI500YR6, ARI500YR12</guidance>
<guidance>ARI1000YR30, ARI1000YR1, ARI1000YR3, ARI1000YR6, ARI1000YR12</guidance>
<virtual>VGBBIASHPE</virtual>
</product>
<product primarySource="DHR">
@ -259,7 +1153,19 @@
<qpf>QPFSCAN</qpf>
<qpf>PRTM</qpf>
<qpf>BPRTM</qpf>
<qpf>HRRRQPF</qpf>
<qpf>MRMSQPF</qpf>
<guidance>FFG0124hr, FFG0324hr, FFG0624hr</guidance>
<guidance>ARI1YR30, ARI1YR1, ARI1YR3, ARI1YR6, ARI1YR12</guidance>
<guidance>ARI2YR30, ARI1YR1, ARI2YR3, ARI2YR6, ARI2YR12</guidance>
<guidance>ARI5YR30, ARI5YR1, ARI5YR3, ARI5YR6, ARI5YR12</guidance>
<guidance>ARI10YR30, ARI10YR1, ARI10YR3, ARI10YR6, ARI10YR12</guidance>
<guidance>ARI25YR30, ARI25YR1, ARI25YR3, ARI25YR6, ARI25YR12</guidance>
<guidance>ARI50YR30, ARI50YR1, ARI50YR3, ARI50YR6, ARI50YR12</guidance>
<guidance>ARI100YR30, ARI100YR1, ARI100YR3, ARI100YR6, ARI100YR12</guidance>
<guidance>ARI200YR30, ARI200YR1, ARI200YR3, ARI200YR6, ARI200YR12</guidance>
<guidance>ARI500YR30, ARI500YR1, ARI500YR3, ARI500YR6, ARI500YR12</guidance>
<guidance>ARI1000YR30, ARI1000YR1, ARI1000YR3, ARI1000YR6, ARI1000YR12</guidance>
<virtual>VGBDHR</virtual>
</product>
<product primarySource="DPR">
@ -268,7 +1174,19 @@
<qpf>QPFSCAN</qpf>
<qpf>BPRTM</qpf>
<qpf>PRTM</qpf>
<qpf>HRRRQPF</qpf>
<qpf>MRMSQPF</qpf>
<guidance>FFG0124hr, FFG0324hr, FFG0624hr</guidance>
<guidance>ARI1YR30, ARI1YR1, ARI1YR3, ARI1YR6, ARI1YR12</guidance>
<guidance>ARI2YR30, ARI1YR1, ARI2YR3, ARI2YR6, ARI2YR12</guidance>
<guidance>ARI5YR30, ARI5YR1, ARI5YR3, ARI5YR6, ARI5YR12</guidance>
<guidance>ARI10YR30, ARI10YR1, ARI10YR3, ARI10YR6, ARI10YR12</guidance>
<guidance>ARI25YR30, ARI25YR1, ARI25YR3, ARI25YR6, ARI25YR12</guidance>
<guidance>ARI50YR30, ARI50YR1, ARI50YR3, ARI50YR6, ARI50YR12</guidance>
<guidance>ARI100YR30, ARI100YR1, ARI100YR3, ARI100YR6, ARI100YR12</guidance>
<guidance>ARI200YR30, ARI200YR1, ARI200YR3, ARI200YR6, ARI200YR12</guidance>
<guidance>ARI500YR30, ARI500YR1, ARI500YR3, ARI500YR6, ARI500YR12</guidance>
<guidance>ARI1000YR30, ARI1000YR1, ARI1000YR3, ARI1000YR6, ARI1000YR12</guidance>
<virtual>VGBDPR</virtual>
</product>
<product primarySource="MRMS">
@ -278,7 +1196,19 @@
<qpf>BPRTM</qpf>
<qpf>PRTM</qpf>
<qpf>MRMSQPF</qpf>
<qpf>HRRRQPF</qpf>
<guidance>FFG0124hr, FFG0324hr, FFG0624hr</guidance>
<guidance>ARI1YR30, ARI1YR1, ARI1YR3, ARI1YR6, ARI1YR12</guidance>
<guidance>ARI2YR30, ARI1YR1, ARI2YR3, ARI2YR6, ARI2YR12</guidance>
<guidance>ARI5YR30, ARI5YR1, ARI5YR3, ARI5YR6, ARI5YR12</guidance>
<guidance>ARI10YR30, ARI10YR1, ARI10YR3, ARI10YR6, ARI10YR12</guidance>
<guidance>ARI25YR30, ARI25YR1, ARI25YR3, ARI25YR6, ARI25YR12</guidance>
<guidance>ARI50YR30, ARI50YR1, ARI50YR3, ARI50YR6, ARI50YR12</guidance>
<guidance>ARI100YR30, ARI100YR1, ARI100YR3, ARI100YR6, ARI100YR12</guidance>
<guidance>ARI200YR30, ARI200YR1, ARI200YR3, ARI200YR6, ARI200YR12</guidance>
<guidance>ARI500YR30, ARI500YR1, ARI500YR3, ARI500YR6, ARI500YR12</guidance>
<guidance>ARI1000YR30, ARI1000YR1, ARI1000YR3, ARI1000YR6, ARI1000YR12</guidance>
<virtual>MRMSVGB</virtual>
</product>
</FFMPSourceConfig>

View file

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<pathKeySet>
<!-- This pathKey corresponds to the source name listed in the FFMPSourceConfig.xml
this key must exist for FFMP to properly purge source data from postgres and HDF5 -->
<pathKey>
<key>sourceName</key>
<order>0</order>
</pathKey>
</pathKeySet>

View file

@ -3,9 +3,13 @@
period tag is where you change the time:
ex. 01-00:00:00 is one day or 24 hours of retention
ex. 00-12:00:00 is 12 hours
SourceName key is required in order for ARCHIVE types to NOT not be purged.
-->
<purgeRuleSet>
<defaultRule>
<period>01-00:00:00</period>
</defaultRule>
<key>sourceName</key>
<defaultRule>
<period>01-00:00:00</period>
</defaultRule>
</purgeRuleSet>