rm goesr plugins from awips2-builds revert to use AWIPS2_GOESR repo

This commit is contained in:
Michael James 2018-01-19 08:31:45 -07:00
parent a5ec61fd8c
commit dc746abd0c
122 changed files with 0 additions and 13225 deletions

View file

@ -1,17 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>com.raytheon.uf.viz.satellite.goesr.feature</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.pde.FeatureBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.pde.FeatureNature</nature>
</natures>
</projectDescription>

View file

@ -1 +0,0 @@
bin.includes = feature.xml

View file

@ -1,39 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<feature
id="com.raytheon.uf.viz.satellite.goesr.feature"
label="GOESR Feature"
version="1.15.0.qualifier"
provider-name="RAYTHEON">
<description>
Contains plugin(s) that allow custom visualization for data from the GOES-R series of satellites.
</description>
<license>
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 (&quot;Master Rights File.pdf&quot;) for
further licensing information.
</license>
<plugin
id="com.raytheon.uf.viz.satellite.goesr.legacyprofile"
download-size="0"
install-size="0"
version="0.0.0"
unpack="true" />
</feature>

View file

@ -1,7 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
<classpathentry kind="src" path="src"/>
<classpathentry kind="output" path="bin"/>
</classpath>

View file

@ -1,28 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>com.raytheon.uf.viz.satellite.goesr.legacyprofile</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.ManifestBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.SchemaBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.pde.PluginNature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>

View file

@ -1,23 +0,0 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: GOES-R Legacy Profile Displays
Bundle-SymbolicName: com.raytheon.uf.viz.satellite.goesr.legacyprofile;singleton:=true
Bundle-Version: 1.15.0.qualifier
Bundle-Vendor: Raytheon
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Require-Bundle: com.raytheon.uf.viz.d2d.nsharp;bundle-version="1.14.1",
com.raytheon.uf.viz.core;bundle-version="1.14.6",
gov.noaa.nws.ncep.edex.common,
gov.noaa.nws.ncep.ui.nsharp,
com.raytheon.uf.common.dataplugin;bundle-version="1.14.0",
com.raytheon.uf.common.dataplugin.satellite;bundle-version="1.14.0",
javax.measure;bundle-version="1.0.0",
com.raytheon.uf.common.datastorage;bundle-version="1.14.0",
com.raytheon.viz.satellite;bundle-version="1.14.0",
com.raytheon.uf.viz.points;bundle-version="1.0.0",
com.raytheon.uf.viz.sounding;bundle-version="1.14.0",
org.eclipse.core.runtime;bundle-version="3.8.0",
org.eclipse.ui;bundle-version="3.8.2",
com.raytheon.viz.ui;bundle-version="1.14.1",
com.raytheon.uf.common.geospatial;bundle-version="1.14.2",
com.raytheon.uf.viz.core.grid;bundle-version="1.15.0"

View file

@ -1,6 +0,0 @@
source.. = src/
output.. = bin/
bin.includes = META-INF/,\
.,\
localization/,\
plugin.xml

View file

@ -1,47 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
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.
-->
<bundle>
<displayList>
<displays xsi:type="nsharpSkewTPaneDisplay" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<descriptor xsi:type="nsharpSkewTPaneDescriptor">
<resource>
<loadProperties loadWithoutData="true" />
<resourceData xsi:type="goesrLegacyProfileResourceData" soundingType="GOES" pointName="${pointName;A}">
<metadataMap>
<mapping key="sectorID">
<constraint constraintValue="${sector}" constraintType="EQUALS" />
</mapping>
<mapping key="creatingEntity">
<constraint constraintValue="GOES%" constraintType="LIKE" />
</mapping>
<mapping key="pluginName">
<constraint constraintValue="satellite" constraintType="EQUALS" />
</mapping>
<mapping key="physicalElement">
<constraint constraintValue="V%P-%hPa" constraintType="LIKE" />
</mapping>
</metadataMap>
</resourceData>
</resource>
</descriptor>
</displays>
</displayList>
</bundle>

View file

@ -1,47 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
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.
-->
<bundle>
<displayList>
<displays xsi:type="mapRenderableDisplay" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<descriptor xsi:type="mapDescriptor">
<resource>
<loadProperties loadWithoutData="true" />
<resourceData xsi:type="goesrProfileMapResourceData">
<metadataMap>
<mapping key="sectorID">
<constraint constraintValue="${sector}" constraintType="EQUALS" />
</mapping>
<mapping key="creatingEntity">
<constraint constraintValue="GOES%" constraintType="LIKE" />
</mapping>
<mapping key="pluginName">
<constraint constraintValue="satellite" constraintType="EQUALS" />
</mapping>
<mapping key="physicalElement">
<constraint constraintValue="VTP-300.00hPa" constraintType="EQUALS" />
</mapping>
</metadataMap>
</resourceData>
</resource>
</descriptor>
</displays>
</displayList>
</bundle>

View file

@ -1,31 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
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.
-->
<?eclipse version="3.4"?>
<plugin>
<extension
point="com.raytheon.uf.viz.sounding.verticalSoundingProvider">
<verticalSoundingProvider
class="com.raytheon.uf.viz.satellite.goesr.legacyprofile.GoesrLegacySoundingProvider"
type="goesr">
</verticalSoundingProvider>
</extension>
</plugin>

View file

@ -1,162 +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.viz.satellite.goesr.legacyprofile;
import gov.noaa.nws.ncep.edex.common.sounding.NcSoundingCube;
import gov.noaa.nws.ncep.edex.common.sounding.NcSoundingCube.QueryStatus;
import gov.noaa.nws.ncep.edex.common.sounding.NcSoundingProfile;
import gov.noaa.nws.ncep.ui.nsharp.NsharpStationInfo;
import java.awt.Point;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import org.geotools.geometry.DirectPosition2D;
import org.geotools.referencing.CRS;
import org.geotools.referencing.crs.DefaultGeographicCRS;
import org.opengis.referencing.FactoryException;
import org.opengis.referencing.operation.MathTransform;
import org.opengis.referencing.operation.TransformException;
import com.raytheon.uf.common.dataplugin.HDF5Util;
import com.raytheon.uf.common.dataplugin.PluginDataObject;
import com.raytheon.uf.common.dataplugin.satellite.SatMapCoverage;
import com.raytheon.uf.common.dataplugin.satellite.SatelliteRecord;
import com.raytheon.uf.common.dataquery.requests.DbQueryRequest;
import com.raytheon.uf.common.dataquery.requests.RequestConstraint;
import com.raytheon.uf.common.dataquery.responses.DbQueryResponse;
import com.raytheon.uf.common.datastorage.DataStoreFactory;
import com.raytheon.uf.common.datastorage.IDataStore;
import com.raytheon.uf.common.datastorage.Request;
import com.raytheon.uf.common.datastorage.records.IDataRecord;
import com.raytheon.uf.common.serialization.comm.RequestRouter;
import com.raytheon.uf.common.status.IUFStatusHandler;
import com.raytheon.uf.common.status.UFStatus;
import com.raytheon.uf.common.time.DataTime;
import com.raytheon.uf.viz.d2d.nsharp.rsc.D2DNSharpResourceData;
import com.raytheon.uf.viz.points.PointsDataManager;
/**
* Resource data which allows loading GOESR Legacy Moisture/Temperature profiles
* into NSharp in the D2D perspective.
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------- -------- ----------- --------------------------
* Apr 30, 2015 4335 bsteffen Initial creation
*
* </pre>
*
* @author bsteffen
* @version 1.0
*/
@XmlAccessorType(XmlAccessType.NONE)
public class GoesrLegacyProfileResourceData extends D2DNSharpResourceData {
private static final transient IUFStatusHandler statusHandler = UFStatus
.getHandler(GoesrLegacyProfileResourceData.class);
public GoesrLegacyProfileResourceData() {
super();
}
@Override
protected void preparePointInfo() {
if (coordinate == null && pointName != null) {
coordinate = PointsDataManager.getInstance().getCoordinate(
pointName);
}
}
@Override
protected NcSoundingCube getSoundingCube(NsharpStationInfo stnInfo) {
DataTime time = new DataTime(stnInfo.getReftime());
DbQueryRequest pdoRequest = new DbQueryRequest(getMetadataMap());
pdoRequest.addConstraint(PluginDataObject.DATATIME_ID,
new RequestConstraint(time.toString()));
pdoRequest.setEntityClass(SatelliteRecord.class);
try {
DbQueryResponse response = (DbQueryResponse) RequestRouter
.route(pdoRequest);
/* This should be of size 1 in all normal circumstances. */
Map<SatMapCoverage, Request> requestMap = new HashMap<SatMapCoverage, Request>(
2);
GoesrProfileBuilder builder = new GoesrProfileBuilder();
for (SatelliteRecord record : response
.getEntityObjects(SatelliteRecord.class)) {
SatMapCoverage coverage = record.getCoverage();
Request request = requestMap.get(coverage);
if (request == null) {
request = getRequest(coverage);
requestMap.put(coverage, request);
}
if (request != null) {
IDataStore dataStore = DataStoreFactory
.getDataStore(HDF5Util.findHDF5Location(record));
IDataRecord dataRecord = dataStore.retrieve(
record.getDataURI(),
SatelliteRecord.SAT_DATASET_NAME, request);
builder.addRecord(record, dataRecord, 0);
}
}
if (builder.isEmpty()) {
return null;
}
NcSoundingProfile profile = builder.toNcSoundingProfile();
NcSoundingCube cube = new NcSoundingCube(Arrays.asList(profile));
cube.setRtnStatus(QueryStatus.OK);
return cube;
} catch (Exception e) {
statusHandler.error("Error occured retrieving GOESR profile data.",
e);
}
return null;
}
private Request getRequest(SatMapCoverage coverage)
throws FactoryException, TransformException {
MathTransform ll2crs = CRS.findMathTransform(
DefaultGeographicCRS.WGS84, coverage.getCrs(), true);
MathTransform crs2grid = coverage.getGridGeometry().getCRSToGrid2D();
DirectPosition2D point = new DirectPosition2D(coordinate.x,
coordinate.y);
ll2crs.transform(point, point);
crs2grid.transform(point, point);
int nx = coverage.getNx();
int ny = coverage.getNy();
if (point.y < 0 || point.y >= ny || Double.isNaN(point.y)) {
return null;
} else if (point.x < 0 || point.x >= nx || Double.isNaN(point.x)) {
return null;
} else {
return Request.buildPointRequest(new Point((int) Math
.round(point.x), (int) Math.round(point.y)));
}
}
}

View file

@ -1,171 +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.viz.satellite.goesr.legacyprofile;
import java.io.FileNotFoundException;
import java.util.HashMap;
import java.util.Map;
import org.geotools.geometry.DirectPosition2D;
import org.geotools.referencing.CRS;
import org.geotools.referencing.crs.DefaultGeographicCRS;
import org.opengis.referencing.FactoryException;
import org.opengis.referencing.operation.MathTransform;
import org.opengis.referencing.operation.TransformException;
import com.raytheon.uf.common.dataplugin.HDF5Util;
import com.raytheon.uf.common.dataplugin.PluginDataObject;
import com.raytheon.uf.common.dataplugin.satellite.SatMapCoverage;
import com.raytheon.uf.common.dataplugin.satellite.SatelliteRecord;
import com.raytheon.uf.common.dataquery.requests.DbQueryRequest;
import com.raytheon.uf.common.dataquery.requests.RequestConstraint;
import com.raytheon.uf.common.dataquery.responses.DbQueryResponse;
import com.raytheon.uf.common.datastorage.DataStoreFactory;
import com.raytheon.uf.common.datastorage.IDataStore;
import com.raytheon.uf.common.datastorage.Request;
import com.raytheon.uf.common.datastorage.StorageException;
import com.raytheon.uf.common.datastorage.records.IDataRecord;
import com.raytheon.uf.common.serialization.comm.RequestRouter;
import com.raytheon.uf.common.sounding.VerticalSounding;
import com.raytheon.uf.common.status.IUFStatusHandler;
import com.raytheon.uf.common.status.UFStatus;
import com.raytheon.uf.common.time.DataTime;
import com.raytheon.uf.viz.sounding.providers.AbstractVerticalSoundingProvider;
import com.vividsolutions.jts.geom.Coordinate;
/**
* Provider which allows GOESR Legacy Moisture/Temperature profiles to be used
* for popup skewt
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------- -------- ----------- --------------------------
* Apr 30, 2015 4335 bsteffen Initial creation
*
* </pre>
*
* @author bsteffen
* @version 1.0
*/
public class GoesrLegacySoundingProvider extends
AbstractVerticalSoundingProvider<SatelliteRecord[]> {
private static final transient IUFStatusHandler statusHandler = UFStatus
.getHandler(GoesrLegacySoundingProvider.class);
@Override
public String getSoundingSource() {
return "GOES";
}
@Override
protected SatelliteRecord[] queryForData(
Map<String, RequestConstraint> constraints, DataTime time,
Coordinate location) {
DbQueryRequest request = new DbQueryRequest(constraints);
RequestConstraint timeConstraint = new RequestConstraint(
time.toString());
request.addConstraint(PluginDataObject.DATATIME_ID, timeConstraint);
DbQueryResponse response;
try {
response = (DbQueryResponse) RequestRouter.route(request);
} catch (Exception e) {
statusHandler.error("Unable to request satellite data.", e);
return new SatelliteRecord[0];
}
SatelliteRecord[] records = response
.getEntityObjects(SatelliteRecord.class);
for (SatelliteRecord record : records) {
IDataStore dataStore = DataStoreFactory.getDataStore(HDF5Util
.findHDF5Location(record));
try {
IDataRecord dataRecord = dataStore.retrieve(
record.getDataURI(), SatelliteRecord.SAT_DATASET_NAME,
Request.ALL);
record.setMessageData(dataRecord);
} catch (FileNotFoundException | StorageException e) {
statusHandler.error("Unable to retrieve satellite data.", e);
}
}
return records;
}
@Override
protected VerticalSounding createSounding(DataTime time,
SatelliteRecord[] records, Coordinate location) {
GoesrProfileBuilder builder = new GoesrProfileBuilder();
/* This should be of size 1 in normal circumstances. */
Map<SatMapCoverage, Integer> indexMap = new HashMap<SatMapCoverage, Integer>(
2);
for (SatelliteRecord record : records) {
IDataRecord dataRecord = (IDataRecord) record.getMessageData();
if (dataRecord == null) {
continue;
}
SatMapCoverage coverage = record.getCoverage();
Integer index = indexMap.get(coverage);
if (index == null) {
try {
index = getDataIndex(coverage, location);
} catch (Exception e) {
statusHandler.error(
"Error determining satellite data location", e);
continue;
}
indexMap.put(coverage, index);
}
if (index >= 0) {
builder.addRecord(record, dataRecord, index);
}
}
if (builder.isEmpty()) {
return null;
}
VerticalSounding sounding = builder.toVerticalSounding();
sounding.setStationId(getSoundingSource());
return sounding;
}
private int getDataIndex(SatMapCoverage coverage, Coordinate coordinate)
throws FactoryException, TransformException {
MathTransform ll2crs = CRS.findMathTransform(
DefaultGeographicCRS.WGS84, coverage.getCrs(), true);
MathTransform crs2grid = coverage.getGridGeometry().getCRSToGrid2D();
DirectPosition2D point = new DirectPosition2D(coordinate.x,
coordinate.y);
ll2crs.transform(point, point);
crs2grid.transform(point, point);
int nx = coverage.getNx();
int ny = coverage.getNy();
if (point.y < 0 || point.y >= ny || Double.isNaN(point.y)) {
return -1;
} else if (point.x < 0 || point.x >= nx || Double.isNaN(point.x)) {
return -1;
} else {
return nx * (int) point.y + (int) point.x;
}
}
}

View file

@ -1,165 +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.viz.satellite.goesr.legacyprofile;
import gov.noaa.nws.ncep.edex.common.sounding.NcSoundingLayer;
import gov.noaa.nws.ncep.edex.common.sounding.NcSoundingProfile;
import java.lang.reflect.Array;
import java.text.ParseException;
import java.text.ParsePosition;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.NavigableMap;
import java.util.TreeMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.measure.quantity.Dimensionless;
import javax.measure.quantity.Temperature;
import javax.measure.unit.SI;
import javax.measure.unit.Unit;
import javax.measure.unit.UnitFormat;
import com.raytheon.uf.common.dataplugin.satellite.SatelliteRecord;
import com.raytheon.uf.common.datastorage.records.IDataRecord;
import com.raytheon.uf.common.sounding.VerticalSounding;
import com.raytheon.uf.common.status.IUFStatusHandler;
import com.raytheon.uf.common.status.UFStatus;
import com.raytheon.uf.viz.d2d.nsharp.SoundingLayerBuilder;
/**
* Common code to build {@link VerticalSounding} or a {@link NcSoundingProfile}
* from satellite records which contain GOESR Legacy Moisture/Temperature
* profile information.
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------- -------- ----------- --------------------------
* Apr 30, 2015 4335 bsteffen Initial creation
* May 13, 2015 4445 bsteffen Remove GOESR sounding layer builder.
*
* </pre>
*
* @author bsteffen
* @version 1.0
*/
public class GoesrProfileBuilder {
private static final transient IUFStatusHandler statusHandler = UFStatus
.getHandler(GoesrLegacySoundingProvider.class);
private final Pattern physicalElementPattern = Pattern
.compile("^V([TM])P-(\\d{1,4}\\.\\d{2})hPa$");
private NavigableMap<Double, SoundingLayerBuilder> map = new TreeMap<>();
public boolean isEmpty() {
return map.isEmpty();
}
public void addRecord(SatelliteRecord record, IDataRecord dataRecord,
int index) {
Matcher paramMatcher = physicalElementPattern.matcher(record
.getPhysicalElement());
if (!paramMatcher.matches()) {
statusHandler.warn("Cannot add " + record + " to the sounding");
return;
}
double pressure = Double.parseDouble(paramMatcher.group(2));
Unit<?> unit;
try {
unit = getDataUnit(record, dataRecord.getDataAttributes());
} catch (ParseException e) {
statusHandler.error("Cannot add " + record + " to the sounding", e);
return;
}
int value = (Array.getInt(dataRecord.getDataObject(), index));
if (value == dataRecord.getFillValue().doubleValue()) {
return;
} else {
value = value & 0xFFFF;
}
SoundingLayerBuilder layer = map.get(pressure);
if (layer == null) {
layer = new SoundingLayerBuilder();
layer.addPressure(pressure, SI.HECTO(SI.PASCAL));
map.put(pressure, layer);
}
if ("T".equals(paramMatcher.group(1))) {
layer.addTemperature(value, unit.asType(Temperature.class));
} else {
layer.addRelativeHumidity(value, unit.asType(Dimensionless.class));
}
}
public VerticalSounding toVerticalSounding() {
VerticalSounding sounding = new VerticalSounding();
for (SoundingLayerBuilder builder : map.values()) {
sounding.addLayer(builder.toSoundingLayer());
}
Collections.reverse(sounding.getLayerData());
return sounding;
}
public NcSoundingProfile toNcSoundingProfile() {
List<NcSoundingLayer> ncLayers = new ArrayList<>(map.size());
for (SoundingLayerBuilder builder : map.descendingMap().values()) {
ncLayers.add(builder.toNcSoundingLayer());
}
NcSoundingProfile profile = new NcSoundingProfile();
profile.setSoundingLyLst(ncLayers);
return profile;
}
private static Unit<?> getDataUnit(SatelliteRecord record,
Map<String, Object> dataAttributes) throws ParseException {
Unit<?> recordUnit = UnitFormat.getUCUMInstance().parseProductUnit(
record.getUnits(), new ParsePosition(0));
Unit<?> units = recordUnit != null ? recordUnit : Unit.ONE;
if (dataAttributes == null) {
return units;
}
Number offset = (Number) dataAttributes
.get(SatelliteRecord.SAT_ADD_OFFSET);
Number scale = (Number) dataAttributes
.get(SatelliteRecord.SAT_SCALE_FACTOR);
if (offset != null) {
double offsetVal = offset.doubleValue();
if (offsetVal != 0.0) {
units = units.plus(offsetVal);
}
}
if (scale != null) {
double scaleVal = scale.doubleValue();
if (scaleVal != 0.0) {
units = units.times(scaleVal);
}
}
return units;
}
}

View file

@ -1,170 +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.viz.satellite.goesr.legacyprofile.map;
import gov.noaa.nws.ncep.ui.nsharp.display.NsharpSkewTPaneDescriptor;
import gov.noaa.nws.ncep.ui.nsharp.display.NsharpSkewTPaneDisplay;
import java.util.HashMap;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Cursor;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IWorkbenchPart;
import com.raytheon.uf.common.dataquery.requests.RequestConstraint;
import com.raytheon.uf.common.dataquery.requests.RequestConstraint.ConstraintType;
import com.raytheon.uf.viz.core.DescriptorMap;
import com.raytheon.uf.viz.core.IDisplayPaneContainer;
import com.raytheon.uf.viz.core.drawables.AbstractRenderableDisplay;
import com.raytheon.uf.viz.core.drawables.ResourcePair;
import com.raytheon.uf.viz.core.procedures.Bundle;
import com.raytheon.uf.viz.core.rsc.LoadProperties;
import com.raytheon.uf.viz.satellite.goesr.legacyprofile.GoesrLegacyProfileResourceData;
import com.raytheon.viz.ui.BundleProductLoader;
import com.raytheon.viz.ui.UiUtil;
import com.raytheon.viz.ui.VizWorkbenchManager;
import com.raytheon.viz.ui.editor.AbstractEditor;
import com.raytheon.viz.ui.input.InputAdapter;
import com.vividsolutions.jts.geom.Coordinate;
/**
* Input handler for GOESR Legacy Moisture/Temperature profiles availability
* resource
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------- -------- ----------- --------------------------
* Apr 30, 2015 4335 bsteffen Initial creation
*
* </pre>
*
* @author bsteffen
* @version 1.0
*/
public class GoesrProfileMapInputHandler extends InputAdapter {
private GoesrProfileMapResource resource;
private Cursor handCursor;
private boolean overDataPoint = false;
private int downX, downY;
public GoesrProfileMapInputHandler(GoesrProfileMapResource resource) {
this.resource = resource;
Display display = Display.getCurrent();
handCursor = new Cursor(display, SWT.CURSOR_HAND);
}
public void dispose() {
handCursor.dispose();
}
@Override
public boolean handleMouseMove(int x, int y) {
boolean wasData = overDataPoint;
overDataPoint = false;
if (resource.isEditable()) {
Coordinate sampleCoord = resource.getResourceContainer()
.translateClick(x, y);
if (sampleCoord != null) {
overDataPoint = resource.isDataPoint(sampleCoord);
}
}
if (wasData && !overDataPoint) {
getShell().setCursor(null);
} else if (!wasData && overDataPoint) {
getShell().setCursor(handCursor);
}
return super.handleMouseMove(x, y);
}
@Override
public boolean handleMouseDown(int x, int y, int mouseButton) {
if (mouseButton == 1) {
downX = x;
downY = y;
}
return super.handleMouseDown(x, y, mouseButton);
}
@Override
public boolean handleMouseUp(int x, int y, int mouseButton) {
int downX = this.downX;
int downY = this.downY;
this.downX = this.downY = -1;
if (overDataPoint && mouseButton == 1 && downX == x && downY == y) {
HashMap<String, RequestConstraint> metadataMap = new HashMap<>(
resource.getResourceData().getMetadataMap());
metadataMap.put("physicalElement", new RequestConstraint(
"V%P-%hPa", ConstraintType.LIKE));
GoesrLegacyProfileResourceData resourceData = new GoesrLegacyProfileResourceData();
resourceData.setMetadataMap(metadataMap);
resourceData.setSoundingType("GOES");
resourceData.setCoordinate(resource.getResourceContainer()
.translateClick(x, y));
ResourcePair pair = new ResourcePair();
pair.setResourceData(resourceData);
pair.setLoadProperties(new LoadProperties());
NsharpSkewTPaneDisplay display = new NsharpSkewTPaneDisplay();
display.setDescriptor(new NsharpSkewTPaneDescriptor());
display.getDescriptor().getResourceList().add(pair);
String editorId = DescriptorMap.getEditorId(display.getDescriptor()
.getClass().getName());
AbstractEditor editor = UiUtil.createOrOpenEditor(editorId,
display.cloneDisplay());
Bundle b = new Bundle();
b.setDisplays(new AbstractRenderableDisplay[] { display });
Job j = new BundleProductLoader(editor, b);
j.schedule();
return true;
}
return super.handleMouseUp(x, y, mouseButton);
}
@Override
public boolean handleMouseExit(Event event) {
overDataPoint = false;
getShell().setCursor(null);
return super.handleMouseExit(event);
}
private Shell getShell() {
IDisplayPaneContainer container = resource.getResourceContainer();
if (container instanceof IWorkbenchPart) {
return ((IWorkbenchPart) container).getSite().getShell();
} else {
return VizWorkbenchManager.getInstance().getCurrentWindow()
.getShell();
}
}
}

View file

@ -1,340 +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.viz.satellite.goesr.legacyprofile.map;
import java.io.FileNotFoundException;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.BitSet;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import org.geotools.coverage.grid.GeneralGridGeometry;
import org.geotools.geometry.DirectPosition2D;
import org.geotools.referencing.CRS;
import org.geotools.referencing.crs.DefaultGeographicCRS;
import org.opengis.referencing.FactoryException;
import org.opengis.referencing.crs.CoordinateReferenceSystem;
import org.opengis.referencing.operation.MathTransform;
import org.opengis.referencing.operation.TransformException;
import com.raytheon.uf.common.dataplugin.HDF5Util;
import com.raytheon.uf.common.dataplugin.PluginDataObject;
import com.raytheon.uf.common.dataplugin.satellite.SatelliteRecord;
import com.raytheon.uf.common.datastorage.DataStoreFactory;
import com.raytheon.uf.common.datastorage.IDataStore;
import com.raytheon.uf.common.datastorage.Request;
import com.raytheon.uf.common.datastorage.StorageException;
import com.raytheon.uf.common.datastorage.records.IDataRecord;
import com.raytheon.uf.common.time.DataTime;
import com.raytheon.uf.viz.core.DrawableCircle;
import com.raytheon.uf.viz.core.IGraphicsTarget;
import com.raytheon.uf.viz.core.drawables.PaintProperties;
import com.raytheon.uf.viz.core.drawables.PaintStatus;
import com.raytheon.uf.viz.core.exception.VizException;
import com.raytheon.uf.viz.core.grid.display.AbstractGriddedDisplay;
import com.raytheon.uf.viz.core.map.IMapDescriptor;
import com.raytheon.uf.viz.core.rsc.AbstractVizResource;
import com.raytheon.uf.viz.core.rsc.IResourceDataChanged.ChangeType;
import com.raytheon.uf.viz.core.rsc.LoadProperties;
import com.raytheon.uf.viz.core.rsc.capabilities.ColorableCapability;
import com.raytheon.uf.viz.core.rsc.capabilities.DensityCapability;
import com.raytheon.uf.viz.core.rsc.capabilities.EditableCapability;
import com.raytheon.uf.viz.core.rsc.capabilities.MagnificationCapability;
import com.raytheon.viz.ui.input.EditableManager;
import com.vividsolutions.jts.geom.Coordinate;
/**
* GOESR Legacy Moisture/Temperature profiles availability resource. Draws
* points on map where data is available, user can click points to load
* sounding.
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------- -------- ----------- --------------------------
* Apr 30, 2015 4335 bsteffen Initial creation
*
* </pre>
*
* @author bsteffen
* @version 1.0
*/
public class GoesrProfileMapResource extends
AbstractVizResource<GoesrProfileMapResourceData, IMapDescriptor> {
private GoesrProfileMapInputHandler inputManager;
private Map<DataTime, SatelliteRecord> records = new HashMap<>();
private Map<DataTime, GoesrProfileMapDisplay> displays = new HashMap<>();
private Job loadJob = new Job("Loading Profile Availability") {
@Override
protected IStatus run(IProgressMonitor monitor) {
DataTime[] timesToLoad = getDataTimes();
for (DataTime time : timesToLoad) {
SatelliteRecord record = records.get(time);
if (record == null) {
continue;
}
IDataStore dataStore = DataStoreFactory.getDataStore(HDF5Util
.findHDF5Location(record));
IDataRecord dataRecord = null;
try {
dataRecord = dataStore.retrieve(record.getDataURI(),
SatelliteRecord.SAT_DATASET_NAME, Request.ALL);
} catch (FileNotFoundException | StorageException e) {
statusHandler.error(
"Unable to retrieve satellite data for " + record,
e);
continue;
}
GoesrProfileMapDisplay display = new GoesrProfileMapDisplay(
dataRecord, descriptor, record.getGridGeometry(), 5);
display.setASync(false);
displays.put(time, display);
issueRefresh();
}
return Status.OK_STATUS;
}
};
/**
* @param resourceData
* @param loadProperties
*/
protected GoesrProfileMapResource(GoesrProfileMapResourceData resourceData,
LoadProperties loadProperties) {
super(resourceData, loadProperties);
this.inputManager = new GoesrProfileMapInputHandler(this);
this.dataTimes = new ArrayList<DataTime>();
getCapability(EditableCapability.class).setEditable(true);
}
@Override
protected void resourceDataChanged(ChangeType type, Object updateObject) {
if (type == ChangeType.DATA_UPDATE) {
if (updateObject instanceof PluginDataObject[]) {
addRecords((PluginDataObject[]) updateObject);
}
}
super.resourceDataChanged(type, updateObject);
}
public synchronized void addRecords(PluginDataObject... records) {
for (PluginDataObject record : records) {
if (record instanceof SatelliteRecord) {
this.records
.put(record.getDataTime(), (SatelliteRecord) record);
}
}
List<DataTime> dataTimes = new ArrayList<DataTime>(
this.records.keySet());
Collections.sort(dataTimes);
this.dataTimes = dataTimes;
loadJob.schedule();
}
@Override
public synchronized void remove(DataTime dataTime) {
records.remove(dataTime);
GoesrProfileMapDisplay display = displays.remove(dataTime);
if (display != null) {
display.dispose();
}
super.remove(dataTime);
}
protected void resetDisplays() {
Map<DataTime, GoesrProfileMapDisplay> displays = this.displays;
this.displays = new HashMap<>();
for (GoesrProfileMapDisplay display : displays.values()) {
display.dispose();
}
}
@Override
protected void disposeInternal() {
inputManager.dispose();
getResourceContainer().unregisterMouseHandler(inputManager);
resetDisplays();
}
@Override
public void project(CoordinateReferenceSystem crs) throws VizException {
resetDisplays();
loadJob.schedule();
}
@Override
protected void paintInternal(IGraphicsTarget target,
PaintProperties paintProps) throws VizException {
DataTime time = paintProps.getDataTime();
if (time == null) {
return;
}
GoesrProfileMapDisplay display = displays.get(time);
if (display != null) {
display.setColor(getCapability(ColorableCapability.class)
.getColor());
display.setDensity(getCapability(DensityCapability.class)
.getDensity());
display.setMagnification(getCapability(
MagnificationCapability.class).getMagnification());
display.paint(target, paintProps);
} else if (loadJob.getState() == Job.RUNNING) {
updatePaintStatus(PaintStatus.INCOMPLETE);
}
}
@Override
protected void initInternal(IGraphicsTarget target) throws VizException {
EditableManager.makeEditable(this,
getCapability(EditableCapability.class).isEditable());
getResourceContainer().registerMouseHandler(inputManager);
}
public boolean isEditable() {
return getCapability(EditableCapability.class).isEditable()
&& getProperties().isVisible();
}
@Override
public String getName() {
return "GOES-R Legacy Temperature/Moisture Availability";
}
public boolean isDataPoint(Coordinate sampleCoord) {
DataTime time = descriptor.getTimeForResource(this);
if (time == null) {
return false;
}
GoesrProfileMapDisplay display = displays.get(time);
if (display == null) {
return false;
}
GeneralGridGeometry dataGeometry = display.getGridGeometryOfData();
DirectPosition2D point = new DirectPosition2D(sampleCoord.x,
sampleCoord.y);
try {
MathTransform ll2crs = CRS.findMathTransform(
DefaultGeographicCRS.WGS84,
dataGeometry.getCoordinateReferenceSystem(), true);
MathTransform crs2grid = dataGeometry.getGridToCRS().inverse();
ll2crs.transform(point, point);
crs2grid.transform(point, point);
} catch (TransformException | FactoryException e) {
statusHandler.error("", e);
return false;
}
int nx = dataGeometry.getGridRange().getSpan(0);
int ny = dataGeometry.getGridRange().getSpan(1);
if (point.y < 0 || point.y >= ny || Double.isNaN(point.y)) {
return false;
} else if (point.x < 0 || point.x >= nx || Double.isNaN(point.x)) {
return false;
} else {
return display.isDataPoint(point.x, point.y);
}
}
private static class GoesrProfileMapDisplay extends
AbstractGriddedDisplay<DrawableCircle> {
private final int nx;
private final BitSet dataMap;
public GoesrProfileMapDisplay(IDataRecord dataRecord,
IMapDescriptor descriptor,
GeneralGridGeometry gridGeometryOfGrid, double size) {
super(descriptor, gridGeometryOfGrid, size, 6);
Object array = dataRecord.getDataObject();
int fill = dataRecord.getFillValue().intValue();
/* Don't waste space, we only need to know which points have data. */
int length = Array.getLength(array);
dataMap = new BitSet(length);
for (int i = 0; i < length; i += 1) {
dataMap.set(i, Array.getInt(array, i) != fill);
}
this.nx = (int) dataRecord.getSizes()[0];
}
public boolean isDataPoint(double x, double y) {
int index = (int) (nx * Math.round(y) + Math.round(x));
return dataMap.get(index);
}
public GeneralGridGeometry getGridGeometryOfData() {
return gridGeometryOfGrid;
}
@Override
protected DrawableCircle getResource(Coordinate coord) {
if (!isDataPoint(coord.x, coord.y)) {
return null;
}
DrawableCircle circle = new DrawableCircle();
circle.screenRadius = size * magnification;
circle.numberOfPoints = (int) (circle.screenRadius * 4);
circle.basics.color = color;
circle.filled = true;
return circle;
}
@Override
protected DrawableCircle createResource(Coordinate coord)
throws VizException {
return getResource(coord);
}
@Override
protected void paint(PaintProperties paintProps,
Collection<GridCellRenderable> renderables) throws VizException {
List<DrawableCircle> circles = new ArrayList<DrawableCircle>(
renderables.size());
for (GridCellRenderable gridCell : renderables) {
gridCell.resource.setCoordinates(gridCell.plotLocation.x,
gridCell.plotLocation.y);
circles.add(gridCell.resource);
}
target.drawCircle(circles.toArray(new DrawableCircle[0]));
}
@Override
protected void disposeResources() {
/* DrawableCircles do not need to be disposed. */
}
}
}

View file

@ -1,61 +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.viz.satellite.goesr.legacyprofile.map;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import com.raytheon.uf.common.dataplugin.PluginDataObject;
import com.raytheon.uf.viz.core.exception.VizException;
import com.raytheon.uf.viz.core.rsc.AbstractRequestableResourceData;
import com.raytheon.uf.viz.core.rsc.AbstractVizResource;
import com.raytheon.uf.viz.core.rsc.LoadProperties;
/**
*
* Serialization information for {@link GoesrProfileMapResource}.
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------- -------- ----------- --------------------------
* Apr 30, 2015 4335 bsteffen Initial creation
*
* </pre>
*
* @author bsteffen
* @version 1.0
*/
@XmlAccessorType(XmlAccessType.NONE)
public class GoesrProfileMapResourceData extends AbstractRequestableResourceData {
@Override
protected AbstractVizResource<?, ?> constructResource(
LoadProperties loadProperties, PluginDataObject[] objects)
throws VizException {
GoesrProfileMapResource resource = new GoesrProfileMapResource(this,
loadProperties);
resource.addRecords(objects);
return resource;
}
}

View file

@ -1,7 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
<classpathentry kind="src" path="src"/>
<classpathentry kind="output" path="bin"/>
</classpath>

View file

@ -1,28 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>com.raytheon.uf.common.dataplugin.goesr.dmw</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.ManifestBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.SchemaBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.pde.PluginNature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>

View file

@ -1,12 +0,0 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: GOES-R Derived Motion Winds
Bundle-SymbolicName: com.raytheon.uf.common.dataplugin.goesr.dmw
Bundle-Version: 1.15.0.qualifier
Bundle-Vendor: RAYTHEON
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Require-Bundle: com.raytheon.uf.common.dataplugin;bundle-version="1.14.0",
com.raytheon.uf.common.serialization;bundle-version="1.14.2",
com.raytheon.uf.common.pointdata;bundle-version="1.14.0",
com.raytheon.uf.common.geospatial;bundle-version="1.14.2"
Export-Package: com.raytheon.uf.common.dataplugin.goesr.dmw

View file

@ -1,5 +0,0 @@
source.. = src/
output.. = bin/
bin.includes = META-INF/,\
.,\
utility/

View file

@ -1,337 +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.goesr.dmw;
import javax.persistence.Column;
import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;
import org.hibernate.annotations.Index;
import com.raytheon.uf.common.dataplugin.PluginDataObject;
import com.raytheon.uf.common.dataplugin.annotations.DataURI;
import com.raytheon.uf.common.dataplugin.persist.IPersistable;
import com.raytheon.uf.common.dataplugin.persist.PersistablePluginDataObject;
import com.raytheon.uf.common.geospatial.ISpatialEnabled;
import com.raytheon.uf.common.geospatial.ISpatialObject;
import com.raytheon.uf.common.pointdata.PointDataView;
import com.raytheon.uf.common.pointdata.spatial.SurfaceObsLocation;
import com.raytheon.uf.common.serialization.annotations.DynamicSerialize;
import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement;
/**
* GOES-R Derived Motion Wind Record. Updated to include "filter" DB column for
* pressure-based filtering of GOES-R/Himawari DMWs.
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Apr 6, 2015 4334 nabowle Initial creation
* July 14, 2016 19051 mcomerford Added "filter" field (DCS 19051)
*
* </pre>
*
* @author nabowle
* @version 1.0
*/
@Entity
@SequenceGenerator(initialValue = 1, name = PluginDataObject.ID_GEN, sequenceName = "dmwseq")
@Table(name = DMWRecord.PLUGIN_NAME, uniqueConstraints = { @UniqueConstraint(columnNames = {
"orbitalSlot", "scene", "channel", "refTime", "latitude", "longitude", "filter" }) })
@org.hibernate.annotations.Table(appliesTo = DMWRecord.PLUGIN_NAME, indexes = {
@Index(name = "%TABLE%_filterandwspd_index", columnNames = {"filter", "windspd"}) })
@DynamicSerialize
public class DMWRecord extends PersistablePluginDataObject implements
ISpatialEnabled, IPersistable {
/** Serializable id */
private static final long serialVersionUID = 1L;
public static final String PLUGIN_NAME = "dmw";
@Embedded
@DynamicSerializeElement
private PointDataView pointDataView;
@Embedded
@DataURI(position = 1, embedded = true)
@DynamicSerializeElement
private SurfaceObsLocation location;
@DataURI(position = 2)
@DynamicSerializeElement
@Column(nullable = false, length = 20)
private String orbitalSlot;
@DataURI(position = 3)
@DynamicSerializeElement
@Column(nullable = false, length = 20)
private String scene;
@DataURI(position = 4)
@DynamicSerializeElement
@Column(nullable = false)
private int channel;
/**
* Required to be in the DataURI for viz updates, but not used for the
* unique constraint.
*/
@DataURI(position = 5)
@DynamicSerializeElement
@Column
private float windSpd;
@DynamicSerializeElement
@Column
private float windDir;
/**
* Allows for filtering based off of a defined NetCDF-4 Variable
* (e.g. Pressure, Altitude, etc.)
*/
@Column
@DynamicSerializeElement
private Float filter;
/**
* Constructor.
*/
public DMWRecord() {
super();
pointDataView = new PointDataView();
}
/**
* Constructs a record from a dataURI
*
* @param uri
* The dataURI
*/
public DMWRecord(String uri) {
super(uri);
pointDataView = new PointDataView();
}
/*
* (non-Javadoc)
*
* @see com.raytheon.uf.common.dataplugin.PluginDataObject#getPluginName()
*/
@Override
public String getPluginName() {
return PLUGIN_NAME;
}
@Override
public ISpatialObject getSpatialObject() {
return location;
}
/**
* @return the location
*/
public SurfaceObsLocation getLocation() {
return location;
}
/**
* @param location
* the location to set
*/
public void setLocation(SurfaceObsLocation location) {
this.location = location;
}
/**
* @return the channel
*/
public int getChannel() {
return channel;
}
/**
* @param channel
* the channel to set
*/
public void setChannel(int channel) {
this.channel = channel;
}
/**
* @return the orbitalSlot
*/
public String getOrbitalSlot() {
return orbitalSlot;
}
/**
* @param orbitalSlot
* the orbitalSlot to set
*/
public void setOrbitalSlot(String orbitalSlot) {
this.orbitalSlot = orbitalSlot;
}
/**
* @return the scene
*/
public String getScene() {
return scene;
}
/**
* @param scene
* the scene to set
*/
public void setScene(String scene) {
this.scene = scene;
}
/**
* @return the windDir
*/
public float getWindDir() {
return windDir;
}
/**
* @param windDir
* the windDir to set
*/
public void setWindDir(float windDir) {
this.windDir = windDir;
}
/**
* @return the windSpd
*/
public float getWindSpd() {
return windSpd;
}
/**
* @param windSpd
* the windSpd to set
*/
public void setWindSpd(float windSpd) {
this.windSpd = windSpd;
}
/**
* @return the pointDataView
*/
public PointDataView getPointDataView() {
return pointDataView;
}
/**
* @param pointDataView
* the pointDataView to set
*/
public void setPointDataView(PointDataView pointDataView) {
this.pointDataView = pointDataView;
}
/**
* @return the filter
*/
public Float getFilter() {
return filter;
}
/**
* @param filter
* the filter to set
*/
public void setFilter(Float filter) {
this.filter = filter;
}
@Override
public int hashCode() {
final int prime = 31;
int result = super.hashCode();
result = prime * result + ((pointDataView == null) ? 0 : pointDataView.hashCode());
result = prime * result + ((location == null) ? 0 : location.hashCode());
result = prime * result + ((orbitalSlot == null) ? 0 : orbitalSlot.hashCode());
result = prime * result + ((scene == null) ? 0 : scene.hashCode());
result = prime * result + Integer.valueOf(channel).hashCode();
result = prime * result + Float.valueOf(windSpd).hashCode();
result = prime * result + Float.valueOf(windDir).hashCode();
result = prime * result + ((filter == null) ? 0 : filter.hashCode());
return result;
}
@Override
public boolean equals(Object obj){
if (this == obj)
return true;
if (!super.equals(obj))
return false;
if (getClass() != obj.getClass())
return false;
DMWRecord record = (DMWRecord) obj;
if (pointDataView == null) {
if (record.pointDataView != null)
return false;
} else if (!pointDataView.equals(record.pointDataView))
return false;
if (location == null) {
if (record.location != null)
return false;
} else if (!location.equals(record.location))
return false;
if (orbitalSlot == null) {
if (record.orbitalSlot != null)
return false;
} else if (!orbitalSlot.equals(record.orbitalSlot))
return false;
if (scene == null) {
if (record.scene != null)
return false;
} else if (!scene.equals(record.scene))
return false;
if (channel != record.channel)
return false;
if (windSpd != record.windSpd)
return false;
if (windDir != record.windDir)
return false;
if (filter != record.filter)
return false;
return true;
}
}

View file

@ -1,49 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
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.
-->
<!-- TOWRdocs Header
Configuration file that controls the text displayed in CAVE when a Derived Motion Wind
(DMW) product is sampled.
-->
<!-- TOWRdocs Description
This file formats the output of the string painted to the display upon sampling a
DMW product in AWIPS II CAVE. It dsiplays the the time of the observation,
followed by the wind direction and speed (knots).
-->
<!-- TOWRdocs Status
This file is a baseline file for the GOES-R Derived Motion Winds (DMW) plugin.
-->
<!-- TOWRdocs POC
Matt Comerford.
-->
<windPlot>
<longitude parameter="longitude"/>
<latitude parameter="latitude" />
<magnitude parameter="windSpd" unit="kn"/>
<direction parameter="windDir" />
<sample text="%tH%tMZ %3.0f @ %3.0f DMW">
<field parameter="validTime" time="true"/>
<field parameter="validTime" time="true"/>
<field parameter="windDir" />
<field parameter="windSpd" unit="kn"/>
</sample>
</windPlot>

View file

@ -1,7 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
<classpathentry kind="src" path="src"/>
<classpathentry kind="output" path="bin"/>
</classpath>

View file

@ -1,28 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>com.raytheon.uf.edex.plugin.goesr.dmw</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.ManifestBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.SchemaBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.pde.PluginNature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>

View file

@ -1,23 +0,0 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: GOES-R Derived Motion Winds
Bundle-SymbolicName: com.raytheon.uf.edex.plugin.goesr.dmw
Bundle-Version: 1.15.0.qualifier
Bundle-Vendor: RAYTHEON
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Require-Bundle: com.raytheon.uf.common.pointdata;bundle-version="1.14.0",
com.raytheon.uf.edex.pointdata,
com.raytheon.uf.common.dataplugin;bundle-version="1.14.0",
com.raytheon.uf.common.datastorage;bundle-version="1.14.0",
com.raytheon.uf.common.status;bundle-version="1.14.1",
net.sf.cglib;bundle-version="2.1.3",
com.raytheon.uf.edex.database;bundle-version="1.14.1",
com.raytheon.uf.common.wmo;bundle-version="1.14.0",
com.raytheon.edex.common;bundle-version="1.14.1",
ucar.nc2,
com.raytheon.uf.common.dataplugin.goesr.dmw,
com.raytheon.uf.edex.netcdf,
com.raytheon.uf.common.localization;bundle-version="1.15.1"
Export-Package: com.raytheon.uf.edex.plugin.goesr.dmw.dao,
com.raytheon.uf.edex.plugin.goesr.dmw.decoder,
com.raytheon.uf.edex.plugin.goesr.dmw.description

View file

@ -1,6 +0,0 @@
source.. = src/
output.. = bin/
bin.includes = META-INF/,\
.,\
res/,\
utility/

View file

@ -1,33 +0,0 @@
<?xml version='1.0' encoding='UTF-8'?>
<!--
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.
-->
<pointDataDbDescription>
<parameter name="validTime" queryName="dataTime.refTime" type="LONG" unit="ms" />
<parameter name="latitude" queryName="location.latitude" type="FLOAT" unit="°" />
<parameter name="longitude" queryName="location.longitude" type="FLOAT" unit="°" />
<parameter name="stationId" queryName="location.stationId" type="STRING" />
<parameter name="windSpd" queryName="windSpd" type="FLOAT" unit="m/s" fillValue="-999"/>
<parameter name="windDir" queryName="windDir" type="FLOAT" unit="°" fillValue="-999"/>
<parameter name="scene" queryName="scene" type="STRING" />
<parameter name="channel" queryName="channel" type="INT" />
<parameter name="orbitalSlot" queryName="orbitalSlot" type="STRING" />
<parameter name="filter" queryName="filter" type="FLOAT" />
</pointDataDbDescription>

View file

@ -1,38 +0,0 @@
<!-- TOWRdocs Header
Configuration file handling the common Spring declaration/instantiations of DMW Plugin
Java instances.
-->
<!-- TOWRdocs Description
This configuration file handles the definition and instantiation of instances of
DMW Plugin Java objects. The objects defined in this file may be referenced in subsequent Spring
configuration files. In this file we define the plugin-name (String), various default properties of the
plugin (name, FQN, dao Class, record Class), and register the plugin with the Plugin Registry
-->
<!-- TOWRdocs Status
This file is a baseline file for the GOES-R Derived Motion Winds (DMW) plugin.
-->
<!-- TOWRdocs POC
Matt Comerford.
-->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">
<bean id="dmwPluginName" class="java.lang.String">
<constructor-arg type="java.lang.String" value="dmw" />
</bean>
<bean id="dmwProperties" class="com.raytheon.uf.common.dataplugin.PluginProperties">
<property name="pluginName" ref="dmwPluginName" />
<property name="pluginFQN" value="com.raytheon.uf.common.dataplugin.goesr.dmw" />
<property name="dao" value="com.raytheon.uf.edex.plugin.goesr.dmw.dao.DMWDao" />
<property name="record" value="com.raytheon.uf.common.dataplugin.goesr.dmw.DMWRecord" />
</bean>
<bean factory-bean="pluginRegistry" factory-method="register">
<constructor-arg ref="dmwPluginName"/>
<constructor-arg ref="dmwProperties"/>
</bean>
</beans>

View file

@ -1,68 +0,0 @@
<!-- TOWRdocs Header
Configuration file handling the more Spring XML instantiations of Java Classes, as well
as the ingest of DMW products into EDEX
-->
<!-- TOWRdocs Description
This configuration file handles the definition and instantiation of instances of
DMW Plugin Java objects. It also sets up the ingest route that DMW products will take upon being
ingested into EDEX (starting at the "route" tag).
-->
<!-- TOWRdocs Status
This file is a baseline file for the GOES-R Derived Motion Winds (DMW) plugin.
-->
<!-- TOWRdocs POC
Matt Comerford.
-->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
<bean class="com.raytheon.uf.common.logback.appender.ThreadBasedAppender"
factory-method="registerThreadPattern">
<constructor-arg value="satellite" />
<constructor-arg value="Ingest.dmw.*" />
</bean>
<!-- Set the path manager to handle descriptions files -->
<bean id="dmwPathManager" class="com.raytheon.uf.common.localization.PathManagerFactory"
factory-method="getPathManager" />
<!-- Edited to include the newly-added "PathManager" to handler description files. -->
<bean id="dmwDecoder" class="com.raytheon.uf.edex.plugin.goesr.dmw.decoder.DMWDecoder">
<property name="pathManager" ref="dmwPathManager" />
</bean>
<bean id="dmwDistRegistry" factory-bean="distributionSrv"
factory-method="register">
<constructor-arg value="dmw" />
<constructor-arg value="jms-durable:queue:Ingest.dmw" />
</bean>
<!-- Defining the Camel Context and ingest route of DMW Products through EDEX -->
<camelContext id="dmw-camel"
xmlns="http://camel.apache.org/schema/spring" errorHandlerRef="errorHandler">
<route id="dmwIngestRoute">
<from uri="jms-durable:queue:Ingest.dmw"/>
<setHeader headerName="pluginName">
<constant>dmw</constant>
</setHeader>
<doTry>
<pipeline>
<bean ref="stringToFile" />
<bean ref="getFileWithoutWmoHeader" />
<bean ref="dmwDecoder" method="decode" />
<to uri="direct-vm:persistIndexAlert" />
</pipeline>
<doCatch>
<exception>java.lang.Throwable</exception>
<to uri="log:dmw?level=ERROR"/>
</doCatch>
</doTry>
</route>
</camelContext>
</beans>

View file

@ -1,130 +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.goesr.dmw.dao;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Map;
import com.raytheon.uf.common.dataplugin.PluginDataObject;
import com.raytheon.uf.common.dataplugin.PluginException;
import com.raytheon.uf.common.dataplugin.goesr.dmw.DMWRecord;
import com.raytheon.uf.common.datastorage.StorageException;
import com.raytheon.uf.common.datastorage.StorageStatus;
import com.raytheon.uf.common.pointdata.PointDataContainer;
import com.raytheon.uf.common.pointdata.PointDataDescription;
import com.raytheon.uf.edex.pointdata.PointDataPluginDao;
/**
* Dao for Derived Motion Winds.
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Apr 7, 2015 4334 nabowle Initial creation
*
* </pre>
*
* @author nabowle
* @version 1.0
*/
public class DMWDao extends PointDataPluginDao<DMWRecord> {
/**
* @param pluginName
* @throws PluginException
*/
public DMWDao(String pluginName) throws PluginException {
super(pluginName);
}
/*
* (non-Javadoc)
*
* @see
* com.raytheon.uf.edex.pointdata.PointDataPluginDao#getKeysRequiredForFileName
* ()
*/
@Override
public String[] getKeysRequiredForFileName() {
return new String[] { "dataTime.refTime" };
}
/*
* (non-Javadoc)
*
* @see com.raytheon.uf.edex.pointdata.PointDataPluginDao#newObject()
*/
@Override
public DMWRecord newObject() {
return new DMWRecord();
}
/*
* The following methods are overridden to effectively be NOOPs in order to
* bypass HDF5.
*/
/**
* Does nothing and returns a new StorageStatus.
*/
@Override
public StorageStatus persistToHDF5(PluginDataObject... records) {
return new StorageStatus();
}
/**
* Does nothing and returns a new PointDataDescription.
*/
@Override
public PointDataDescription getPointDataDescription(Map<String, Object> obj) {
return new PointDataDescription();
}
/**
* Does nothing and returns a new PointDataContainer.
*/
@Override
public PointDataContainer getPointData(File file, int[] indexes, int[] ids,
String[] attributes, LevelRequest request) throws StorageException,
FileNotFoundException {
return new PointDataContainer();
}
/*
* (non-Javadoc)
*
* @see
* com.raytheon.uf.edex.pointdata.PointDataPluginDao#getPointDataFileName
* (com.raytheon.uf.common.dataplugin.PluginDataObject)
*/
@Override
public String getPointDataFileName(DMWRecord p) {
// not needed for this datatype, but must be overridden.
return "dmw.h5";
}
}

View file

@ -1,400 +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.goesr.dmw.decoder;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import javax.xml.bind.JAXB;
import com.raytheon.edex.esb.Headers;
import com.raytheon.uf.common.dataplugin.PluginDataObject;
import com.raytheon.uf.common.dataplugin.goesr.dmw.DMWRecord;
import com.raytheon.uf.common.localization.IPathManager;
import com.raytheon.uf.common.localization.LocalizationFile;
import com.raytheon.uf.common.localization.exception.LocalizationException;
import com.raytheon.uf.common.pointdata.spatial.SurfaceObsLocation;
import com.raytheon.uf.common.status.IUFStatusHandler;
import com.raytheon.uf.common.status.UFStatus;
import com.raytheon.uf.common.time.DataTime;
import com.raytheon.uf.common.time.util.TimeUtil;
import com.raytheon.uf.edex.netcdf.description.exception.InvalidDescriptionException;
import com.raytheon.uf.edex.plugin.goesr.dmw.description.ProductDescription;
import com.raytheon.uf.edex.plugin.goesr.dmw.description.ProductDescriptions;
import ucar.ma2.Array;
import ucar.nc2.NetcdfFile;
import ucar.nc2.Variable;
/**
* Decoder for Derived Motion Wind products. Updated to handle both GOES-R and
* Himawari DMWs through Product Descriptions files
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Apr 7, 2015 4334 nabowle Initial creation
* Sep 28, 2015 4872 bsteffen Decode File instead of byte[]
* July 13, 2016 19051 mcomerford Enhanced DMW plugin update (DCS 19051)
*
* </pre>
*
* @author nabowle
* @version 1.0
*/
public class DMWDecoder {
private static final transient IUFStatusHandler statusHandler = UFStatus
.getHandler(DMWDecoder.class);
/*
* Used to parse the ProductDescription-defined epoch (handling the
* dataTime).
*/
private static final String DATE_STRING = "yyyy-MM-dd HH:mm:ss";
/*
* The ProductDescriptions that will be loaded from the description file.
*/
private ProductDescriptions descriptions;
/**
* Default constructor.
*/
public DMWDecoder() {
super();
}
/**
* Decode a GOES-R/Himawari DMW file.
*
* @param data
* The file data.
* @param headers
* The headers.
* @return The decoded objects.
*/
public PluginDataObject[] decode(File file, Headers headers) {
String traceId = "";
List<PluginDataObject> records = new ArrayList<>();
if (headers != null) {
traceId = (String) headers.get("traceId");
}
try {
if (file != null && file.length() > 0) {
try {
decodeData(file, traceId, records);
} catch (Exception e) {
statusHandler.error(traceId + "-Error in decode", e);
} finally {
if (records.isEmpty()) {
statusHandler.info(
String.format("%s - Decoded no obs", traceId));
} else {
statusHandler.info(String.format("%s - Decoded %d obs",
traceId, records.size()));
}
}
} else {
statusHandler.info(traceId + "- No data in file");
}
} catch (Exception e) {
statusHandler.error(traceId + "- Decoder error", e);
}
return records.toArray(new PluginDataObject[0]);
}
/**
* Decodes the file, adding valid obs to the records list.
*
* @param file
* The file.
* @param traceId
* The traceId.
* @param records
* The list to add valid records to.
*/
private void decodeData(File file, String traceId,
List<PluginDataObject> records) throws IOException {
NetcdfFile dataFile = NetcdfFile.open(file.getAbsolutePath());
/* Number of descriptions that have generated legimate records. */
int descMatch = 0;
/*
* Loop through the Product Descriptions file(s) to generate DMWRecords.
*/
for (ProductDescription description : descriptions.getDescriptions()) {
try {
processDescription(description, dataFile, records);
/*
* If we make it here, then the description was valid (although
* no records may have been generated).
*/
descMatch++;
} catch (InvalidDescriptionException e) {
if (description.isDebugStatus()) {
statusHandler.info(
"ProductDescription \"" + description.getName()
+ "\" -- " + e.getMessage());
}
} catch (Exception e) {
/* Any Exceptions not thrown as InvalidDescriptionExceptions. */
statusHandler
.info("An uncaught error occurred while processing description "
+ description.getName() + ": "
+ e.getMessage());
}
}
dataFile.close();
if (descMatch == 0) {
statusHandler
.info("No descriptions provided are valid for the file "
+ file.getName());
}
}
/**
* Processes a ProductDescription to decode file and populate the records
* list
*
* @param description
* instance being processed.
* @param file
* The file to be decoded.
* @param records
* The list of PluginDataObject to populate w/ valid obs.
* @throws Exception
* To log the which product description throws the error and
* where it is thrown.
*/
private void processDescription(ProductDescription description,
NetcdfFile dataFile, List<PluginDataObject> records)
throws IOException, InvalidDescriptionException {
// Date handling
String epochStr = description.getDataTime().getEpoch();
SimpleDateFormat sdf = new SimpleDateFormat(DATE_STRING);
Date timeDate;
try {
timeDate = sdf.parse(epochStr);
} catch (ParseException e) {
throw new InvalidDescriptionException(
"The \"epoch\" attribute of the \"<dateTime>\" bean must be of format \"yyyy-MM-dd HH:mm:ss\".");
}
Calendar epochCal = TimeUtil.newGmtCalendar(timeDate);
/* Initialize the variable(s) given the ProductDescriptions. */
Variable latVar, lonVar, spdVar, dirVar, dqfVar, filVar, epochOffsetVar;
try {
latVar = dataFile.findVariable(description.getLat().getName());
lonVar = dataFile.findVariable(description.getLon().getName());
spdVar = dataFile.findVariable(description.getWspd().getName());
dirVar = dataFile.findVariable(description.getWdir().getName());
dqfVar = dataFile.findVariable(description.getDQF().getName());
filVar = dataFile.findVariable(description.getFilter().getName());
epochOffsetVar = dataFile.findVariable(
description.getDataTime().getDelegate().getName());
} catch (Exception e) {
throw new InvalidDescriptionException(
"An error occurred while assigning the NetCDF Variables");
}
/* Quick check to see if a valid winds product may exist. */
if (latVar == null || lonVar == null || spdVar == null || dirVar == null
|| dqfVar == null) {
throw new InvalidDescriptionException(
"The Product Description could not load the necessary Variables from the file.");
}
/*
* Determine the percentage of valid DQF's in the file (no DMW Records
* are created if this is present in the description and its value is <=
* 0 in the NetCDF File.
*/
float percentGoodDQFVal = 0.0f;
if (description.getPercentGoodDQF() != null) {
percentGoodDQFVal = description.getPercentGoodDQF().getNumber(dataFile).floatValue();
if (percentGoodDQFVal <= 0.0f) {
throw new InvalidDescriptionException(
"\"<percentGoodDQF>\" field shows no valid winds in the file");
}
}
String scene = "";
if (description.getScene() != null) {
scene = description.getScene().getString(dataFile);
}
String orbitalSlot = "";
if (description.getOrbitalSlot() != null) {
orbitalSlot = description.getOrbitalSlot().getString(dataFile);
}
int channel = dataFile.findVariable(description.getChannel().getName())
.readScalarInt();
Array lats = latVar.read();
Array lons = lonVar.read();
Array spds = spdVar.read();
Array dirs = dirVar.read();
Array dqfs = dqfVar.read();
Array filters = filVar.read();
long latsSize = lats.getSize();
if (latsSize != lons.getSize() || latsSize != spds.getSize()
|| latsSize != dirs.getSize() || latsSize != dqfs.getSize()) {
throw new InvalidDescriptionException(
"The required data arrays within the file are not of the same length");
}
/*
* Handle setting the epoch/timestamp of the data (GOES-R : Scalar,
* Himawari : Array).
*/
int epochOffsetVal = 0;
Array epochOffsets = null;
if (epochOffsetVar.isScalar()) {
epochOffsetVal = epochOffsetVar.readScalarInt();
} else {
epochOffsets = epochOffsetVar.read();
}
double lat;
double lon;
float speed;
float direction;
byte quality;
DMWRecord record;
SurfaceObsLocation location;
Float filter;
while (lats.hasNext() && lons.hasNext() && spds.hasNext()
&& dirs.hasNext() && dqfs.hasNext()) {
lat = lats.nextDouble();
lon = lons.nextDouble();
speed = spds.nextFloat();
direction = dirs.nextFloat();
quality = dqfs.nextByte();
/*
* Get the next float in the "filters" Array. If there is no next
* float in the Array, then default the value.
*/
if (filters.hasNext()) {
try {
filter = filters.nextFloat();
} catch (Exception e) {
filter = (Float) null;
}
} else {
filter = (Float) null;
}
/* Now to do the same only for the epoch. */
if (!epochOffsetVar.isScalar()) {
if (epochOffsets.hasNext()) {
try {
Number epochOffset = (Number) epochOffsets.next();
epochOffsetVal = epochOffset.intValue();
} catch (Exception e) {
throw new InvalidDescriptionException(
"An error occurred while decoding \"<dataTime> <variable>\" field; ",
e);
}
} else {
throw new InvalidDescriptionException(
"Uncaught error occurred while decoding \"<dataTime>\" field");
}
}
/* Only create records for the description's valid DQF variable. */
if (quality == description.getValidDQF()) {
record = new DMWRecord();
record.setScene(scene);
record.setChannel(channel);
record.setOrbitalSlot(orbitalSlot);
location = new SurfaceObsLocation();
location.assignLocation((float) lat, (float) lon);
location.generateCoordinateStationId();
record.setLocation(location);
record.setWindSpd(speed);
record.setWindDir(direction);
record.setFilter(filter);
Calendar datetime = (Calendar) epochCal.clone();
datetime.add(Calendar.SECOND, epochOffsetVal);
record.setDataTime(new DataTime(datetime));
records.add(record);
}
}
}
/**
* The {@link IPathManager} is used to look up descriptions files.
*/
public void setPathManager(IPathManager pathManager) {
LocalizationFile[] files = pathManager.listStaticFiles(
"satellite/dmw/descriptions", new String[] { ".xml" }, true,
true);
ProductDescriptions descriptions = new ProductDescriptions();
for (LocalizationFile file : files) {
statusHandler.info(
"Loading DMW data description(s) from " + file.getPath());
try (InputStream inputStream = file.openInputStream()) {
ProductDescriptions unmarshalled = JAXB.unmarshal(inputStream,
ProductDescriptions.class);
descriptions.addDescriptions(unmarshalled);
} catch (LocalizationException | IOException e) {
statusHandler.error("Unable to load product descriptions from "
+ file.getPath(), e);
}
}
this.descriptions = descriptions;
}
}

View file

@ -1,271 +0,0 @@
package com.raytheon.uf.edex.plugin.goesr.dmw.description;
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 com.raytheon.uf.edex.netcdf.description.field.date.EpochOffsetDateValue;
import com.raytheon.uf.edex.netcdf.description.field.direct.VariableDescription;
import com.raytheon.uf.edex.netcdf.description.field.indirect.DelegateFieldDescription;
/**
* A single Derived Motion Winds (DMW) Product Description. Used by the
* DMWDecoder to decode fields from a single NetCDF file into multiple
* DMWRecords.
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* 07/13/2016 19051 mcomerford Initial creation
* </pre>
*
* @author matt.comerford
* @version 1.0
*/
@XmlAccessorType(XmlAccessType.NONE)
public class ProductDescription {
@XmlAttribute(required = true)
private String name;
@XmlElement
private VariableDescription lat;
@XmlElement
private VariableDescription lon;
@XmlElement
private VariableDescription wspd;
@XmlElement
private VariableDescription wdir;
@XmlElement
private VariableDescription dqf;
@XmlElement
private VariableDescription filter = null;
@XmlElement
private VariableDescription channel;
@XmlElement
private EpochOffsetDateValue dataTime;
@XmlElement
private DelegateFieldDescription orbitalSlot = null;
@XmlElement
private DelegateFieldDescription percentGoodDQF = null;
@XmlElement
private DelegateFieldDescription scene;
@XmlElement
private int validDQF;
@XmlElement(name = "debug")
private boolean debugStatus = false;
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}
/**
* @return the lat
*/
public VariableDescription getLat() {
return lat;
}
/**
* @param lat the lat to set
*/
public void setLat(VariableDescription lat) {
this.lat = lat;
}
/**
* @return the lon
*/
public VariableDescription getLon() {
return lon;
}
/**
* @param lon the lon to set
*/
public void setLon(VariableDescription lon) {
this.lon = lon;
}
/**
* @return the wspd
*/
public VariableDescription getWspd() {
return wspd;
}
/**
* @param wspd the wspd to set
*/
public void setWspd(VariableDescription wspd) {
this.wspd = wspd;
}
/**
* @return the wdir
*/
public VariableDescription getWdir() {
return wdir;
}
/**
* @param wdir the wdir to set
*/
public void setWdir(VariableDescription wdir) {
this.wdir = wdir;
}
/**
* @return the dqf
*/
public VariableDescription getDQF() {
return dqf;
}
/**
* @param dqf the dqf to set
*/
public void setDQF(VariableDescription dqf) {
this.dqf = dqf;
}
/**
* @return the filter
*/
public VariableDescription getFilter() {
return filter;
}
/**
* @param filter the filter to set
*/
public void setFilter(VariableDescription filter) {
this.filter = filter;
}
/**
* @return the channel
*/
public VariableDescription getChannel() {
return channel;
}
/**
* @param channel the channel to set
*/
public void setChannel(VariableDescription channel) {
this.channel = channel;
}
/**
* @return the dataTime
*/
public EpochOffsetDateValue getDataTime() {
return dataTime;
}
/**
* @param dataTime the dataTime to set
*/
public void setDataTime(EpochOffsetDateValue dataTime) {
this.dataTime = dataTime;
}
/**
* @return the orbitalSlot
*/
public DelegateFieldDescription getOrbitalSlot() {
return orbitalSlot;
}
/**
* @param orbitalSlot the orbitalSlot to set
*/
public void setOrbitalSlot(DelegateFieldDescription orbitalSlot) {
this.orbitalSlot = orbitalSlot;
}
/**
* @return the percentGoodDQF
*/
public DelegateFieldDescription getPercentGoodDQF() {
return percentGoodDQF;
}
/**
* @param percentGoodDQF the percentGoodDQF to set
*/
public void setPercentGoodDQF(DelegateFieldDescription percentGoodDQF) {
this.percentGoodDQF = percentGoodDQF;
}
/**
* @return the scene
*/
public DelegateFieldDescription getScene() {
return scene;
}
/**
* @param scene the scene to set
*/
public void setScene(DelegateFieldDescription scene) {
this.scene = scene;
}
/**
* @return the validDQF
*/
public int getValidDQF() {
return validDQF;
}
/**
* @param validDQF the validDQF to set
*/
public void setValidDQF(int validDQF) {
this.validDQF = validDQF;
}
/**
* @return the debugStatus
*/
public boolean isDebugStatus() {
return debugStatus;
}
/**
* @param debugStatus the debugStatus to set
*/
public void setDebugStatus(boolean debugStatus) {
this.debugStatus = debugStatus;
}
}

View file

@ -1,59 +0,0 @@
package com.raytheon.uf.edex.plugin.goesr.dmw.description;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
/**
* A list of Derived Motion Winds (DMW) Product Descriptions.
* See {@link PointSetProductDescriptions}, after which this class is modeled,
* for more information.
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* 07/13/2016 19051 mcomerford Initial creation
*
* </pre>
*
* @author matt.comerford
* @version 1.0
*/
@XmlRootElement
@XmlAccessorType(XmlAccessType.NONE)
public class ProductDescriptions {
@XmlElement(name = "description")
private List<ProductDescription> descriptions;
public List<ProductDescription> getDescriptions() {
return descriptions;
}
public String listDescriptions() {
return descriptions.toArray().toString();
}
public void setDescriptions(List<ProductDescription> descriptions) {
this.descriptions = descriptions;
}
public void addDescription(ProductDescription description) {
this.descriptions.add(description);
}
public void addDescriptions(ProductDescriptions descriptions) {
if (this.descriptions == null) {
this.descriptions = new ArrayList<>();
}
this.descriptions.addAll(descriptions.getDescriptions());
}
}

View file

@ -1,46 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
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.
-->
<!-- TOWRdocs Header
The distribution file for GOES-R and Himawari Derived Motion Winds
(DMW) products
-->
<!-- TOWRdocs Description
This file contains regex expressions used to match filename patterns to
the appropriate GOES-R or Himawari winds file. Any filename ingested that
any of the pattern(s) below will run through the DMWDecoder.
-->
<!-- TOWRdocs Status
This file is currently in the baseline. It has been modified to include Himawari
DMW product files as well.
-->
<!-- TOWRdocs POC
Matt Comerford
-->
<requestPatterns xmlns:ns2="group">
<!-- Raw GOES-R Products -->
<regex>^.*(DMW[A-Z0-9]{1,}-M[0-9]C[0-9]{2}).*\.nc$</regex>
<!-- WMO Header for GOES-R DMW -->
<regex>^IXTU99.*</regex>
<!-- Raw Himawari Products -->
<regex>^Himawari_AHI.*AMV_CH[0-9]{2}(_CS)?\.nc$</regex>
</requestPatterns>

View file

@ -1,41 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
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.
-->
<!-- TOWRdocs Header
The Derived Motion Winds (DMW) purge rules file.
-->
<!-- TOWRdocs Description
This file defines EDEX purge rule(s) for the DMW plugin.
The default is to purge any DMWRecords with a reftime
greater than 12 hours
-->
<!-- TOWRdocs Status
This is a baseline file and has not been modified in any way.
-->
<!-- TOWRdocs POC
Matt Comerford
-->
<purgeRuleSet>
<defaultRule>
<versionsToKeep>256</versionsToKeep>
</defaultRule>
</purgeRuleSet>

View file

@ -1,150 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!-- TOWRdocs Header
The DMW Product Descriptions configuration file for Himawari.
-->
<!-- TOWRdocs Description
This file contains multiple ProductDescription instances relating to the
GOES-R Derived Motion Winds (DMW) plugin. It provides the framework for
mapping NetCDF-4 Variables/Attributes/Values to DMWRecord fields, which allows
for and handles the decoding of DMW files into AWIPS II EDEX.
See com.raytheon.uf.edex.plugin.goesr.dmw.description.ProductDescription.java for more information.
~~~~~~~~~~~~~~~~~~ Description of Tags ~~~~~~~~~~~~~~~~~~
<description>
Specifies the beginning of a new product description. Each new description must
contain the tags described below (unless noted otherwise). Each product description
is closed off with the closing </description> tag.
<lat>
The "Latitude" Variable
<lon>
The "Longitude" Variable
<wspd>
The "Wind Speed" Variable
<wdir>
The "Wind Direction" Variable
<dqf>
The "Data Quality Flag" Variable. This maps the NetCDF Variable that handles the
"quality" of each observation (good obs, bad because ______, etc.)
<percentGoodDQF>
Variable (For Himawari ONLY) that maps the percentage
of winds observations that have a "good obs" quality flag associated.
NOTE: This is an optional variable. If not specified, the decoder will still attempt to
decode files even though they may have no valid DQF values (DQF=0).
Perhaps the best example of this would be if you are interested ingesting
winds that may have failed a certain verification test.
**IMPORTANT** - If this is your case, be sure to modify the <validDQF> tag
to match the DQF You are interested in!
<validDQF>
User-set variable that determines which DQF to use to create a DMW Record.
This value is default at 0 ("good observation"), but may be altered to ingest
other-quality winds into the database.
NOTE: DMWRecords will only be created for observations with a DWF value
matching the one provided. This means that multiple <description>
entries will be required to view more than just winds with a DQF=0
(one entry per desired "DQF")
<filter>
The Variable that determines what value to insert into the "filter" column for a
DMWRecord. This defaults to pressure for DMWs (for altitude-based querying) but
realistically may be expanded to handle other NetCDF Variables in the same file.
<channel>
The Variable that maps the "Channel Number" of the satellite associated with
the observation
<orbitalSlot>
A User-set value for the "Orbital Slot". This maps to a String, and it is defaulted to
"Himawari", as there is no "Orbital Slot" Variable/Attribute in Himawari DMW files.
This may be used in combination with validDQF above to create custom Orbital Slot
Strings, which may allow for DQF-based display and bundling in CAVE
i.e. <orbitalSlotValue value="HimawariDQF6" /> paired with <validDQF>6</validDQF>
<scene>
A User-set value for the "Scene". This maps to a String, and it is defaulted to
"Himawari", as there is no "Scene" Variable/Attribute in Himawari DMW files.
Much like with <orbitalSlotValue>, This may be modified by the user to allow for more
control when building CAVE bundles.
<dataTime>
Variable used to represent the "Time" Variable/Attribute of the NetCDF File. There may
be several Variables/Attributes that handle times or dates inside a single file.
However, for this specific entry we are interested in the Variable/Attribute that handles
"time in seconds since the specified epoch date", or something of the like.
attribute "epoch" - the epoch date specified in the Variable
MUST be in the form "yyyy-MM-dd HH:mm:ss"
attribute "units" - defaulted to SECONDS, as Himawari files provide the offset in
seconds.
<variable>
The name of the actual NetCDF Variable that holds the time we are interested in.
<debug>
This tag handles the verbose error logging specific to the <description> tag in which it
is specified. It is not a required tag (will automatically default to false).
If set to true and the description causes an error when creating a database entry, a
description of that error will be logged in "/awips2/edex/logs/edex-ingest-yyyyMMDD.log".
NOTE: Because the DMW plugin now handles both GOES-R and Himawari DMWs, at
least one product description will fail and throw and error (running a GOES-R description
on a Himawari file, and vice versa). Because of this, it is only suggested to use
<debug>true</debug>
when creating/modifying new or existing product descriptions. Otherwise you will see errors propogating
through the logs even though valid DMWRecords are being created and ingested properly.
-->
<!-- TOWRdocs Status
This is a new configuration file that will be added to the baseline in 16.4.1
-->
<!-- TOWRdocs POC
Matt Comerford
-->
<dmwProductDescriptions>
<!-- Himawari Products -->
<description name="Himawari">
<lat name="Latitude" />
<lon name="Longitude" />
<wspd name="Wind_Speed" />
<wdir name="Wind_Dir" />
<dqf name="Flag" />
<percendGoodDQF>
<variable name="QA_Value_0" />
</percendGoodDQF>
<validDQF>0</validDQF>
<filter name="MedianPress" />
<channel name="AMVChannel" />
<orbitalSlot>
<value value="Himawari" />
</orbitalSlot>
<scene>
<value value="Himawari" />
</scene>
<dataTime epoch="1970-01-01 00:00:00" units="SECONDS">
<variable name="Time" />
</dataTime>
<debug>false</debug>
</description>
</dmwProductDescriptions>

View file

@ -1,147 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!-- TOWRdocs Header
The DMW Product Descriptions configuration file for GOES-R.
-->
<!-- TOWRdocs Description
This file contains multiple ProductDescription instances relating to the
GOES-R Derived Motion Winds (DMW) plugin. It provides the framework for
mapping NetCDF-4 Variables/Attributes/Values to DMWRecord fields, which allows
for and handles the decoding of DMW files into AWIPS II EDEX.
See com.raytheon.uf.edex.plugin.goesr.dmw.description.ProductDescription.java for more information.
~~~~~~~~~~~~~~~~~~ Description of Tags ~~~~~~~~~~~~~~~~~~
<description>
Specifies the beginning of a new product description. Each new description must
contain the tags described below (unless noted otherwise). Each product description
is closed off with the closing </description> tag.
<lat>
The "Latitude" Variable
<lon>
The "Longitude" Variable
<wspd>
The "Wind Speed" Variable
<wdir>
The "Wind Direction" Variable
<dqf>
The "Data Quality Flag" Variable. This maps the NetCDF Variable that handles the
"quality" of each observation (good obs, bad because ______, etc.)
<percentGoodDQF>
Attribute (For GOES-R ONLY) of the "DQF" Variable, that maps the percentage
of winds observations that have a "good obs" quality flag associated.
NOTE: This is an optional variable. If not specified, the decoder will still attempt to
decode files even though they may have no valid DQF values (DQF=0).
Perhaps the best example of this would be if you are interested ingesting
winds that may have failed a certain verification test.
**IMPORTANT** - If this is your case, be sure to modify the <validDQF> tag
to match the DQF You are interested in!
<validDQF>
User-set variable that determines which DQF to use to create a DMW Record.
This value is default at 0 ("good observation"), but may be altered to ingest
other-quality winds into the database.
NOTE: DMWRecords will only be created for observations with a DWF value
matching the one provided. This means that multiple <description>
entries will be required to view more than just winds with a DQF=0
(one entry per desired "DQF")
<filter>
The Variable that determines what value to insert into the "filter" column for a
DMWRecord. This defaults to pressure for DMWs (for altitude-based querying) but
realistically may be expanded to handle other NetCDF Variables in the same file.
<channel>
The Variable that maps the "Channel Number" of the satellite associated with
the observation.
<orbitalSlot>
Maps to the NetCDF Global Attribute "orbital_slot" in GOES-R DMW Files.
NOTE: Himawari DMW Files are slightly different, and thus this value is user-set in the
description instead.
<scene>
Maps to the NetCDF Global Attribute "scene_id" in GOES-R DMW Files.
NOTE: Himawari DMW Files are slightly different, and thus this value is user-set in the
description instead.
<dataTime>
Variable used to represent the "Time" Variable/Attribute of the NetCDF File. There may
be several Variables/Attributes that handle times or dates inside a single file.
However, for this specific entry we are interested in the Variable/Attribute that handles
"time in seconds since the specified epoch date", or something of the like.
attribute "epoch" - the epoch date specified in the Variable
MUST be in the form "yyyy-MM-dd HH:mm:ss"
attribute "units" - defaulted to SECONDS, as GOES-R files provide the offset in
seconds.
<variable>
The name of the actual NetCDF Variable that holds the time we are interested in.
<debug>
This tag handles the verbose error logging specific to the <description> tag in which it
is specified. It is not a required tag (will automatically default to false).
If set to true and the description causes an error when creating a database entry, a
description of that error will be logged in "/awips2/edex/logs/edex-ingest-yyyyMMDD.log".
NOTE: Because the DMW plugin now handles both GOES-R and Himawari DMWs, at
least one product description will fail and throw and error (running a GOES-R description
on a Himawari file, and vice versa). Because of this, it is only suggested to use
<debug>true</debug>
when creating/modifying new or existing product descriptions. Otherwise you will see errors propogating
through the logs even though valid DMWRecords are being created and ingested properly.
-->
<!-- TOWRdocs Status
This is a new configuration file that will be added to the baseline in 16.4.1
-->
<!-- TOWRdocs POC
Matt Comerford
-->
<dmwProductDescriptions>
<!-- GOES-R Products -->
<description name="GOES-R">
<lat name="lat" />
<lon name="lon" />
<wspd name="wind_speed" />
<wdir name="wind_direction" />
<dqf name="DQF" />
<percentGoodDQF>
<variableAttribute attributeName="percent_good_wind_qf"
variableName="DQF" />
</percentGoodDQF>
<filter name="pressure" />
<channel name="band_id" />
<validDQF>0</validDQF>
<orbitalSlot>
<attribute name="orbital_slot" />
</orbitalSlot>
<scene>
<attribute name="scene_id" />
</scene>
<dataTime epoch="2000-01-01 12:00:00" units="SECONDS">
<variable name="time" />
</dataTime>
<debug>false</debug>
</description>
</dmwProductDescriptions>

View file

@ -1,7 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
<classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="output" path="bin"/>
</classpath>

View file

@ -1,28 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>com.raytheon.uf.edex.plugin.goesr</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.ManifestBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.SchemaBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.pde.PluginNature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>

View file

@ -1,23 +0,0 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: GOESR Decoder
Bundle-SymbolicName: com.raytheon.uf.edex.plugin.goesr
Bundle-Version: 1.16.0.qualifier
Bundle-Vendor: RAYTHEON
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Require-Bundle: javax.measure,
ucar.nc2,
com.raytheon.uf.common.status,
com.raytheon.uf.common.dataplugin.satellite,
com.raytheon.edex.plugin.satellite,
com.raytheon.uf.common.geospatial,
com.raytheon.uf.edex.database,
com.raytheon.uf.common.dataplugin,
com.raytheon.uf.common.datastorage,
com.raytheon.uf.edex.core,
com.raytheon.uf.common.localization;bundle-version="1.14.1",
org.slf4j;bundle-version="1.7.5",
com.raytheon.uf.edex.netcdf;bundle-version="1.15.1",
com.raytheon.uf.common.serialization;bundle-version="1.15.1",
org.apache.commons.beanutils;bundle-version="1.8.3"
Export-Package: com.raytheon.uf.edex.plugin.goesr

View file

@ -1,7 +0,0 @@
source.. = src/
output.. = bin/
bin.includes = META-INF/,\
.,\
res/,\
utility/,\
resources/

View file

@ -1,124 +0,0 @@
<?xml version='1.0' encoding='UTF-8'?>
<netcdf xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.unidata.ucar.edu/namespaces/netcdf/ncml-2.2 http://www.unidata.ucar.edu/schemas/netcdf/ncml-2.2.xsd" xmlns="http://www.unidata.ucar.edu/namespaces/netcdf/ncml-2.2">
<!-- This NCML defines a sectorized cloud and moisture CONUS product tile. The values for the attributes are representative. -->
<!-- Satellite = West -->
<!-- Projection = Lambert Conformal -->
<!-- Resolution = 2 km -->
<!-- Mode = 3 -->
<!-- Bit depth = 14 bits -->
<!-- Periodicity = 5 minutes -->
<!-- Channel 7 (6.19)-->
<!-- Tile Size = 1024 x 1024 -->
<!-- Dimension Statements -->
<!-- If the product image is not evenly divisable by the tile size, the residual data going into the edge tiles will have different dimensions than the tile size specified. -->
<dimension name="x" length= "1024" isUnlimited ="false"/>
<dimension name="y" length= "1024" isUnlimited ="false"/>
<!-- Variable Statements -->
<variable name="sectorized_cmi" type="short" shape="y x">
<attribute name="standard_name" value="brightness_temperature" type="string"/>
<attribute name="units" value="kelvin" type="string"/>
<attribute name="grid_mapping" value="lambert projection" type="string"/>
<!-- add_offset and scale_factor will have values that are calculated at the time of creation -->
<attribute name="add_offset" value="" type="float"/>
<attribute name="scale_factor" value="" type="float"/>
<attribute name="_FillValue" value="0" type="short"/>
<attribute name="valid_min" value="0" type="int"/>
<attribute name="valid_max" value="16383" type="int"/>
</variable>
<!-- Coordinate Variables -->
<variable name="x" type="short" shape="x">
<attribute name="standard_name" value="projection_x_coordinate" type="string"/>
<attribute name="units" value="microradian" type="string"/>
<!-- add_offset and scale_factor will have values that are calculated at the time of creation. These
values will be computed such that the values in the variable will be the position of the corresponding
column and row in the full image -->
<attribute name="add_offset" value="" type="double"/>
<attribute name="scale_factor" value="" type="double"/>
</variable>
<variable name="y" type="short" shape="y">
<attribute name="standard_name" value="projection_y_coordinate" type="string"/>
<attribute name="units" value="microradian" type="string"/>
<!-- add_offset and scale_factor will have values that are calculated at the time of creation. These
values will be computed such that the values in the variable will be the position of the corresponding
column and row in the full image -->
<attribute name="add_offset" value="" type="double"/>
<attribute name="scale_factor" value="" type="double"/>
</variable>
<!-- Projection Variable -->
<variable name="lambert_projection">
<attribute name="grid_mapping_name" value="lambert_conformal_conic" type="string"/>
<!-- The value of standard_parallel,longitude_of_central_meridian, and latitude_of_projection_origin will vary and will be calculated at tile creation.-->
<attribute name="standard_parallel" value="" type="double"/>
<attribute name="longitude_of_central_meridian" value="" type="double"/>
<attribute name="latitude_of_projection_origin" value="" type="double"/>
<attribute name="false_easting" value="0" type="double"/>
<attribute name="false_northing" value="0" type="double"/>
<attribute name="semi_major" value="6371200" type="double"/>
<attribute name="semi_minor" value="6371200" type="double"/>
</variable>
<!-- Global Metadata -->
<!-- title provides a succinct description of what is in the dataset -->
<attribute name="title" value="This is one tile of a CONUS product. The data comes from the west satellite
and uses a lambert conformal projection with a resolution of 2 kilometers. The satellite is using mode 3. The bit depth is
14 bits. The periodicity is 5 minutes and the tile size is 1024 x 1024."
type="string"/>
<!-- ICD_version is the file_name of the current GS to AWIPS ICD including the version number -->
<attribute name="ICD_version" value="file_name" type="string"/>
<attribute name="Conventions" value="CF-1.6" type="string"/>
<!-- production_location can have a value of WCDAS or RBU depending on where the product was produced -->
<attribute name="production_location" value="WCDAS" type="string"/>
<attribute name="product_name" value="WConus1-M3C3-T001" type="string"/>
<attribute name="channel_id" value="7" type="integer"/>
<attribute name="central_wavelength" value="6.19" type="float"/>
<attribute name="satellite_id" value="GOES-16(R)" type="string"/>
<attribute name="satellite_mode" value="3" type="integer"/>
<!-- periodicity is the delivery rate of the product from GS to AWIPS. It must be a multiple of the refresh rate. -->
<attribute name="periodicity" value="5" type="float"/>
<!-- bit depth can have values of 8-14 -->
<attribute name="bit_depth" value="14" type="int"/>
<attribute name="projection" value="Lambert Conformal" type="string"/>
<attribute name="source_spatial_resolution" value="2" type="float"/>
<attribute name="request_spatial_resolution" value="2" type="float"/>
<!-- start_date_time is the start date and time of when the satellite began capturing the Full Disk scene -->
<!-- The format is YYYYDDDhhmmss where YYYY = Year DDD = Day of the Year hh = hour of the day mm = minutes of day ss = seconds of day-->
<attribute name="start_date_time" value="2011365080000" type="string"/>
<!-- the value in number_product_tiles below was taken from the DTWT and is an estimate. The actual
value that goes into this attribute will be calculated at tile creation. -->
<attribute name="number_product_tiles" value="44" type="integer"/>
<!-- The default value of product_tile_size is 1024 but this value can be set to a value from 256 to 2048 -->
<attribute name="product_tile_size" value="1024" type="integer"/>
<attribute name="product_rows" value="2560" type="integer"/>
<attribute name="product_columns" value="2200" type="integer"/>
<attribute name="product_tile_width" value="1024" type="integer"/>
<attribute name="product_tile_height" value="1024" type="integer"/>
<attribute name="tile_row_offset" value="0" type="integer"/>
<attribute name="tile_column_offset" value="0" type="integer"/>
<attribute name="satellite_latitude" value="0" type="float"/>
<attribute name="satellite_longitude" value="-137" type="float"/>
<attribute name="satellite_altitude" value="35785831" type="float"/>
<attribute name="source_scene" value="CONUS" type="string"/>
<attribute name="product_center_latitude" value="0" type="double"/>
<attribute name="product_center_longitude" value="-137" type="double"/>
<!-- tile_center_latitude and tile_center_longitude values are variable and will be calculated at tile creation-->
<attribute name="tile_center_latitude" value="" type="double"/>
<attribute name="tile_center_longitude" value="" type="double"/>
<attribute name="pixel_x_size" value="2.0" type="double"/>
<attribute name="pixel_y_size" value="2.0" type="double"/>
</netcdf>

View file

@ -1,119 +0,0 @@
<?xml version='1.0' encoding='UTF-8'?>
<netcdf xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.unidata.ucar.edu/namespaces/netcdf/ncml-2.2 http://www.unidata.ucar.edu/schemas/netcdf/ncml-2.2.xsd" xmlns="http://www.unidata.ucar.edu/namespaces/netcdf/ncml-2.2">
<!-- This NCML defines a sectorized cloud and moisture Full Disk product tile. The values for the attributes are representative. -->
<!-- Satellite = West -->
<!-- Projection = Fixed Grid(WGS-84) -->
<!-- Resolution = 6 km -->
<!-- Mode = 4 -->
<!-- Bit depth = 12 bits -->
<!-- Periodicity = 5 minutes -->
<!-- Channel 2 -->
<!-- Tile Size = 1024 x 1024 -->
<!-- Tile # 1 -->
<!-- Dimension Statements -->
<!-- If the product image is not evenly divisable by the tile size, the residual data going into the edge tiles will have different dimensions than the tile size specified. -->
<dimension name="x" length= "1024" isUnlimited ="false"/>
<dimension name="y" length= "1024" isUnlimited ="false"/>
<!-- Variable Statements -->
<variable name="sectorized_cmi" type="short" shape="y x">
<attribute name="standard_name" value="toa_bidirectional_reflectance" type="string"/>
<!-- The value "1" for units below is a standard approach to representing quantities that are fractions or parts of a whole -->
<attribute name="units" value="1" type="string"/>
<attribute name="grid_mapping" value="fixedgrid_projection" type="string"/>
<!-- add_offset and scale_factor will have values that are calculated at the time of creation -->
<attribute name="add_offset" value="" type="float"/>
<attribute name="scale_factor" value="" type="float"/>
<attribute name="_FillValue" value="0" type="short"/>
<attribute name="valid_min" value="0" type="int"/>
<attribute name="valid_max" value="4095" type="int"/>
</variable>
<!-- Coordinate Variables -->
<variable name="x" type="short" shape="x">
<attribute name="standard_name" value="projection_x_coordinate" type="string"/>
<attribute name="units" value="microradian" type="string"/>
<!-- add_offset and scale_factor will have values that are calculated at the time of creation. These
values will be computed such that the values in the variable will be the position of the corresponding
column and row in the full image -->
<attribute name="add_offset" value="" type="double"/>
<attribute name="scale_factor" value="" type="double"/>
</variable>
<variable name="y" type="short" shape="y">
<attribute name="standard_name" value="projection_y_coordinate" type="string"/>
<attribute name="units" value="microradian" type="string"/>
<!-- add_offset and scale_factor will have values that are calculated at the time of creation. These
values will be computed such that the values in the variable will be the position of the corresponding
column and row in the full image -->
<attribute name="add_offset" value="" type="double"/>
<attribute name="scale_factor" value="" type="double"/>
</variable>
<!-- Projection Variable -->
<variable name="fixed_projection">
<attribute name="grid_mapping_name" value="vertical_perspective" type="string"/>
<attribute name="latitude_of_projection_origin" value="0" type="double"/>
<attribute name="longitude_of_projection_origin" value="-137" type="double"/>
<attribute name="semi_major" value="6378137" type="double"/>
<attribute name="semi_minor" value="6356732.314" type="double"/>
<attribute name="perspective_point_height" value="35785831" type="double"/>
</variable>
<!-- Global Metadata -->
<!-- title provides a succinct description of what is in the dataset -->
<attribute name="title" value="This is one tile of a Full Disk product. The data comes from the west satellite
and uses a fixed grid projection with a resolution of 6 kilometers. The satellite is using mode 4. The bit depth is
12 bits. The peridicity is 5 minutes and the tile size is 1024 x 1024."
type="string"/>
<!-- ICD_version is the file_name of the current GS to AWIPS ICD including the version number -->
<attribute name="ICD_version" value="ICD Filename" type="string"/>
<attribute name="Conventions" value="CF-1.6" type="string"/>
<!-- production_location can have a value of WCDAS or RBU depending on where the product was produced -->
<attribute name="production_location" value="WCDAS" type="string"/>
<attribute name="product_name" value="WFD6-M4C02-T001" type="string"/>
<attribute name="channel_id" value="2" type="integer"/>
<attribute name="central_wavelength" value="0.64" type="float"/>
<attribute name="satellite_id" value="GOES-16(R)" type="string"/>
<attribute name="satellite_mode" value="4" type="integer"/>
<!-- periodicity is the delivery rate of the product from GS to AWIPS. It must be a multiple of the refresh rate. -->
<attribute name="periodicity" value="5" type="float"/>
<!-- bit depth can have values of 8-14 -->
<attribute name="bit_depth" value="12" type="int"/>
<attribute name="projection" value="Fixed_Grid" type="string"/>
<attribute name="source_spatial_resolution" value=".5" type="float"/>
<attribute name="request_spatial_resolution" value="6" type="float"/>
<!-- start_date_time is the start date and time of when the satellite began capturing the Full Disk scene -->
<!-- The format is YYYYDDDhhmmss where YYYY = Year DDD = Day of the Year hh = hour of the day mm = minutes of day ss = seconds of day-->
<attribute name="start_date_time" value="2011365080000" type="string"/>
<!-- the value in number_product_tiles below was taken from the DTWT and is an estimate. The actual value that goes into this attribute will be calculated at tile creation. -->
<attribute name="number_product_tiles" value="4" type="integer"/>
<!-- The default value of product_tile_size is 1024 but this value can be set to a value from 256 to 2048 -->
<attribute name="product_tile_size" value="1024" type="integer"/>
<attribute name="product_rows" value="1808" type="integer"/>
<attribute name="product_columns" value="1808" type="integer"/>
<attribute name="product_tile_width" value="1024" type="integer"/>
<attribute name="product_tile_height" value="1024" type="integer"/>
<attribute name="tile_row_offset" value="0" type="integer"/>
<attribute name="tile_column_offset" value="0" type="integer"/>
<attribute name="satellite_latitude" value="0" type="float"/>
<attribute name="satellite_longitude" value="-137" type="float"/>
<attribute name="satellite_altitude" value="35785831" type="float"/>
<attribute name="source_scene" value="Full Disk" type="string"/>
<attribute name="product_center_latitude" value="0" type="double"/>
<attribute name="product_center_longitude" value="-137" type="double"/>
<!-- tile_center_latitude tile_center_longitude values are variable and will be calculated at tile creation-->
<attribute name="tile_center_latitude" value="" type="double"/>
<attribute name="tile_center_longitude" value="" type="double"/>
<attribute name="pixel_x_size" value="6.0" type="double"/>
<attribute name="pixel_y_size" value="6.0" type="double"/>
</netcdf>

View file

@ -1,125 +0,0 @@
<?xml version='1.0' encoding='UTF-8'?>
<netcdf xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.unidata.ucar.edu/namespaces/netcdf/ncml-2.2 http://www.unidata.ucar.edu/schemas/netcdf/ncml-2.2.xsd" xmlns="http://www.unidata.ucar.edu/namespaces/netcdf/ncml-2.2">
<!-- This NCML defines a sectorized cloud and moisture meso product tile. The values for the attributes are representative. -->
<!-- Satellite = West -->
<!-- Projection = Lambert Conformal -->
<!-- Resolution = 1 km -->
<!-- Mode = 3 -->
<!-- Bit depth = 12 bits -->
<!-- Periodicity = .5 minutes -->
<!-- Channel 1 (0.47) -->
<!-- Tile Size = 1024 x 1024 -->
<!-- Tile # 1 -->
<!-- Center point of meso is lat = 0 lon = -145 -->
<!-- Dimension Statements -->
<!-- If the product image is not evenly divisable by the tile size, the residual data going into the edge tiles will have different dimensions than the tile size specified. -->
<dimension name="x" length= "1024" isUnlimited ="false"/>
<dimension name="y" length= "1024" isUnlimited ="false"/>
<!-- Variable Statements -->
<variable name="sectorized_cmi" type="short" shape="y x">
<attribute name="standard_name" value="toa_bidirectional_reflectance" type="string"/>
<!-- The value "1" for units below is a standard approach to representing quantities that are fractions or parts of a whole -->
<attribute name="units" value="1" type="string"/>
<attribute name="grid_mapping" value="lambert_projection" type="string"/>
<!-- add_offset and scale_factor will have values that are calculated at the time of creation. These
values will be computed such that the values in the variable will be the position of the corresponding
column and row in the full image -->
<attribute name="add_offset" value="" type="float"/>
<attribute name="scale_factor" value="" type="float"/>
<attribute name="_FillValue" value="0" type="short"/>
<attribute name="valid_min" value="0" type="int"/>
<attribute name="valid_max" value="4095" type="int"/>
</variable>
<!-- Coordinate Variables -->
<variable name="x" type="short" shape="x">
<attribute name="standard_name" value="projection_x_coordinate" type="string"/>
<attribute name="units" value="microradian" type="string"/>
<!-- add_offset and scale_factor will have values that are calculated at the time of creation. These
values will be computed such that the values in the variable will be the position of the corresponding
column and row in the full image -->
<attribute name="add_offset" value="" type="double"/>
<attribute name="scale_factor" value="" type="double"/>
</variable>
<variable name="y" type="short" shape="y">
<attribute name="standard_name" value="projection_y_coordinate" type="string"/>
<attribute name="units" value="microradian" type="string"/>
<!-- add_offset and scale_factor will have values that are calculated at the time of creation -->
<attribute name="add_offset" value="" type="double"/>
<attribute name="scale_factor" value="" type="double"/>
</variable>
<!-- Projection Variable -->
<variable name="lambert_projection">
<attribute name="grid_mapping_name" value="lambert_conformal_conic" type="string"/>
<!-- The value of standard_parallel,longitude_of_central_meridian, and latitude_of_projection_origin will vary and will be calculated at tile creation.-->
<attribute name="standard_parallel" value="" type="double"/>
<attribute name="longitude_of_central_meridian" value="" type="double"/>
<attribute name="latitude_of_projection_origin" value="" type="double"/>
<attribute name="false_easting" value="0" type="double"/>
<attribute name="false_northing" value="0" type="double"/>
<attribute name="semi_major" value="6371200" type="double"/>
<attribute name="semi_minor" value="6371200" type="double"/>
</variable>
<!-- Global Metadata -->
<!-- title provides a succinct description of what is in the dataset -->
<attribute name="title" value="This is one tile of a meso product. The data comes from the west satellite
and uses a lambert conformal projection with a resolution of 1 kilometer. The satellite is using mode 3. The bit depth is
12 bits. The peridicity is .5 minutes and the tile size is 1024 x 1024."
type="string"/>
<!-- ICD_version is the file_name of the current GS to AWIPS ICD including the version number -->
<attribute name="ICD_version" value="file_name" type="string"/>
<attribute name="Conventions" value="CF-1.6" type="string"/>
<!-- production_location can have a value of WCDAS or RBU depending on where the product was produced -->
<attribute name="production_location" value="WCDAS" type="string"/>
<attribute name="product_name" value="WMESO5S1-M3C1-T001" type="string"/>
<attribute name="channel_id" value="1" type="integer"/>
<attribute name="central_wavelength" value="0.47" type="float"/>
<attribute name="satellite_id" value="GOES-16(R)" type="string"/>
<attribute name="satellite_mode" value="3" type="integer"/>
<!-- periodicity is the delivery rate of the product from GS to AWIPS. It must be a multiple of the refresh rate. -->
<attribute name="periodicity" value=".5" type="float"/>
<!-- bit depth can have values of 8-14 -->
<attribute name="bit_depth" value="12" type="int"/>
<attribute name="projection" value="Lambert Conformal" type="string"/>
<attribute name="source_spatial_resolution" value="1" type="float"/>
<attribute name="request_spatial_resolution" value="1" type="float"/>
<!-- start_date_time is the start date and time of when the satellite began capturing the Full Disk scene -->
<!-- The format is YYYYDDDhhmmss where YYYY = Year DDD = Day of the Year hh = hour of the day mm = minutes of day ss = seconds of day-->
<attribute name="start_date_time" value="2011365080000" type="string"/>
<!-- the value in number_product_tiles below was taken from the DTWT and is an estimate. The actual value that goes into this attribute will be calculated at tile creation. -->
<attribute name="number_product_tiles" value="3" type="integer"/>
<!-- The default value of product_tile_size is 1024 but this value can be set to a value from 256 to 2048 -->
<attribute name="product_tile_size" value="1024" type="integer"/>
<attribute name="product_rows" value="1250" type="integer"/>
<attribute name="product_columns" value="1500" type="integer"/>
<attribute name="product_tile_width" value="1024" type="integer"/>
<attribute name="product_tile_height" value="1024" type="integer"/>
<attribute name="tile_row_offset" value="0" type="integer"/>
<attribute name="tile_column_offset" value="0" type="integer"/>
<attribute name="satellite_latitude" value="0" type="float"/>
<attribute name="satellite_longitude" value="-137" type="float"/>
<attribute name="satellite_altitude" value="35785831" type="float"/>
<attribute name="source_scene" value="Mesoscale-1" type="string"/>
<attribute name="product_center_latitude" value="0" type="double"/>
<attribute name="product_center_longitude" value="-145" type="double"/>
<!-- tile_center_latitude tile_center_longitude values are variable and will be calculated at tile creation-->
<attribute name="tile_center_latitude" value="" type="double"/>
<attribute name="tile_center_longitude" value="" type="double"/>
<attribute name="pixel_x_size" value="1" type="double"/>
<attribute name="pixel_y_size" value="1" type="double"/>
</netcdf>

View file

@ -1,273 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema targetNamespace="http://www.unidata.ucar.edu/namespaces/netcdf/ncml-2.2" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.unidata.ucar.edu/namespaces/netcdf/ncml-2.2" xmlns:thredds="http://www.unidata.ucar.edu/namespaces/thredds/InvCatalog/v1.0" elementFormDefault="qualified">
<!-- XML encoding of Netcdf container object -->
<xsd:element name="netcdf">
<xsd:complexType>
<xsd:sequence>
<xsd:choice minOccurs="0">
<xsd:element name="readMetadata"/>
<xsd:element name="explicit"/>
</xsd:choice>
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:element ref="group"/>
<xsd:element ref="dimension"/>
<xsd:element ref="variable"/>
<xsd:element ref="attribute"/>
<xsd:element ref="remove"/>
</xsd:choice>
<xsd:element ref="aggregation" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="location" type="xsd:anyURI"/>
<xsd:attribute name="id" type="xsd:string"/>
<xsd:attribute name="title" type="xsd:string"/>
<xsd:attribute name="enhance" type="xsd:string"/>
<xsd:attribute name="addRecords" type="xsd:boolean"/>
<!-- iosp class name -->
<xsd:attribute name="iosp" type="xsd:string"/>
<!-- iosp parameter -->
<xsd:attribute name="iospParam" type="xsd:string"/>
<!-- raf buffer size -->
<xsd:attribute name="bufferSize" type="xsd:int"/>
<!-- for aggregations -->
<xsd:attribute name="ncoords" type="xsd:string"/>
<xsd:attribute name="coordValue" type="xsd:string"/>
<xsd:attribute name="section" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<!-- XML encoding of group object -->
<xsd:element name="group">
<xsd:complexType>
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:element ref="dimension"/>
<xsd:element ref="variable"/>
<xsd:element ref="attribute"/>
<xsd:element ref="group"/>
<xsd:element ref="enumTypedef"/>
<xsd:element ref="remove"/>
</xsd:choice>
<xsd:attribute name="name" type="xsd:string" use="required"/>
<xsd:attribute name="orgName" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<!-- XML encoding of dimension object -->
<xsd:element name="dimension">
<xsd:complexType>
<xsd:attribute name="name" type="xsd:token" use="required"/>
<xsd:attribute name="length" type="xsd:nonNegativeInteger"/>
<xsd:attribute name="isUnlimited" type="xsd:boolean" default="false"/>
<xsd:attribute name="isVariableLength" type="xsd:boolean" default="false"/>
<xsd:attribute name="isShared" type="xsd:boolean" default="true"/>
<xsd:attribute name="orgName" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<!-- XML encoding of Variable object -->
<xsd:element name="variable">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="attribute" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element ref="values" minOccurs="0"/>
<xsd:element ref="variable" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element ref="logicalSection" minOccurs="0"/>
<xsd:element ref="logicalSlice" minOccurs="0"/>
<xsd:element ref="remove" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:token" use="required"/>
<xsd:attribute name="type" type="DataType"/>
<xsd:attribute name="shape" type="xsd:token"/>
<xsd:attribute name="orgName" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<!-- XML encoding of values -->
<xsd:element name="values">
<xsd:complexType mixed="true">
<xsd:attribute name="start" type="xsd:float"/>
<xsd:attribute name="increment" type="xsd:float"/>
<xsd:attribute name="npts" type="xsd:int"/>
<xsd:attribute name="separator" type="xsd:string"/>
<xsd:attribute name="fromAttribute" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<!-- XML encoding of Attribute object -->
<xsd:element name="attribute">
<xsd:complexType mixed="true">
<xsd:attribute name="name" type="xsd:token" use="required"/>
<xsd:attribute name="type" type="DataType" default="String"/>
<xsd:attribute name="value" type="xsd:string"/>
<xsd:attribute name="separator" type="xsd:string"/>
<xsd:attribute name="orgName" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<!-- possible data types for Variable, Attribute objects -->
<xsd:simpleType name="DataType">
<xsd:restriction base="xsd:token">
<xsd:enumeration value="byte"/>
<xsd:enumeration value="char"/>
<xsd:enumeration value="short"/>
<xsd:enumeration value="int"/>
<xsd:enumeration value="long"/>
<xsd:enumeration value="float"/>
<xsd:enumeration value="double"/>
<xsd:enumeration value="String"/>
<xsd:enumeration value="string"/>
<xsd:enumeration value="Structure"/>
<xsd:enumeration value="Sequence"/>
<xsd:enumeration value="opaque"/>
<xsd:enumeration value="enum1"/>
<xsd:enumeration value="enum2"/>
<xsd:enumeration value="enum4"/>
</xsd:restriction>
</xsd:simpleType>
<!-- XML encoding of enum typedef object -->
<xsd:element name="enumTypedef">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="map" minOccurs="1" maxOccurs="unbounded">
<xsd:complexType mixed="true">
<xsd:attribute name="value" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:token" use="required"/>
<xsd:attribute name="type" type="DataType" default="enum1"/>
</xsd:complexType>
</xsd:element>
<!-- Dataset **********************************************************************-->
<xsd:element name="remove">
<xsd:complexType>
<xsd:attribute name="type" type="ObjectType" use="required"/>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<xsd:simpleType name="ObjectType">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="attribute"/>
<xsd:enumeration value="dimension"/>
<xsd:enumeration value="variable"/>
<xsd:enumeration value="group"/>
</xsd:restriction>
</xsd:simpleType>
<!-- logical view: use only a section of original -->
<xsd:element name="logicalSection">
<xsd:complexType>
<xsd:attribute name="section" type="xsd:token" use="required"/> <!-- creates anonymous dimension -->
</xsd:complexType>
</xsd:element>
<xsd:element name="logicalSlice">
<xsd:complexType>
<xsd:attribute name="dimName" type="xsd:token" use="required"/>
<xsd:attribute name="index" type="xsd:int" use="required"/>
</xsd:complexType>
</xsd:element>
<!-- aggregation -->
<xsd:element name="aggregation">
<xsd:complexType>
<xsd:sequence>
<!-- experimental - modify each dataset in aggregation -->
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:element ref="group"/>
<xsd:element ref="dimension"/>
<xsd:element ref="variable"/>
<xsd:element ref="attribute"/>
<xsd:element ref="remove"/>
</xsd:choice>
<xsd:element name="variableAgg" minOccurs="0" maxOccurs="unbounded">
<xsd:complexType>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<xsd:element ref="promoteGlobalAttribute" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element ref="cacheVariable" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element ref="netcdf" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element name="scan" minOccurs="0" maxOccurs="unbounded">
<xsd:complexType>
<xsd:attribute name="location" type="xsd:string" use="required"/>
<xsd:attribute name="regExp" type="xsd:string"/>
<xsd:attribute name="suffix" type="xsd:string"/>
<xsd:attribute name="subdirs" type="xsd:boolean" default="true"/>
<xsd:attribute name="olderThan" type="xsd:string"/>
<xsd:attribute name="dateFormatMark" type="xsd:string"/>
<xsd:attribute name="enhance" type="xsd:boolean"/>
</xsd:complexType>
</xsd:element>
<!-- fmrcSingle only -->
<xsd:element name="scanFmrc" minOccurs="0" maxOccurs="unbounded">
<xsd:complexType>
<xsd:attribute name="location" type="xsd:string" use="required"/>
<xsd:attribute name="regExp" type="xsd:string"/>
<xsd:attribute name="suffix" type="xsd:string"/>
<xsd:attribute name="subdirs" type="xsd:boolean" default="true"/>
<xsd:attribute name="olderThan" type="xsd:string"/>
<xsd:attribute name="runDateMatcher" type="xsd:string"/>
<xsd:attribute name="forecastDateMatcher" type="xsd:string"/>
<xsd:attribute name="forecastOffsetMatcher" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="type" type="AggregationType" use="required"/>
<xsd:attribute name="dimName" type="xsd:token"/>
<xsd:attribute name="recheckEvery" type="xsd:string"/>
<xsd:attribute name="timeUnitsChange" type="xsd:boolean"/>
<!-- fmrc, fmrcSingle only -->
<xsd:attribute name="fmrcDefinition" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<!-- type of aggregation -->
<xsd:simpleType name="AggregationType">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="forecastModelRunCollection"/>
<xsd:enumeration value="forecastModelRunSingleCollection"/>
<xsd:enumeration value="joinExisting"/>
<xsd:enumeration value="joinNew"/>
<xsd:enumeration value="tiled"/>
<xsd:enumeration value="union"/>
</xsd:restriction>
</xsd:simpleType>
<!-- promote global attribute to variable -->
<xsd:element name="promoteGlobalAttribute">
<xsd:complexType>
<xsd:attribute name="name" type="xsd:token" use="required"/>
<xsd:attribute name="orgName" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<!-- cache a Variable for efficiency -->
<xsd:element name="cacheVariable">
<xsd:complexType>
<xsd:attribute name="name" type="xsd:token" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:schema>

View file

@ -1,70 +0,0 @@
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
<bean class="com.raytheon.uf.common.logback.appender.ThreadBasedAppender"
factory-method="registerThreadPattern">
<constructor-arg value="satellite" />
<constructor-arg value="Ingest.GOESR.*" />
</bean>
<bean id="goesrPluginName" class="java.lang.String">
<constructor-arg type="java.lang.String" value="goesr" />
</bean>
<bean id="goesrDistRegistry" factory-bean="distributionSrv"
factory-method="register">
<constructor-arg ref="goesrPluginName" />
<constructor-arg value="jms-durable:queue:Ingest.GOESR" />
</bean>
<bean id="goesrPathManager" class="com.raytheon.uf.common.localization.PathManagerFactory" factory-method="getPathManager"/>
<bean id="goesrProjectionFactory"
class="com.raytheon.uf.edex.plugin.goesr.geospatial.GoesrProjectionFactory" />
<bean id="goesrDecoder" class="com.raytheon.uf.edex.plugin.goesr.GoesrNetcdfDecoder">
<constructor-arg ref="goesrProjectionFactory" />
<constructor-arg ref="goesrPathManager" />
</bean>
<camelContext id="goesr-camel" xmlns="http://camel.apache.org/schema/spring"
errorHandlerRef="errorHandler">
<endpoint id="goesrJmsEndpoint" uri="jms-durable:queue:Ingest.GOESR?concurrentConsumers=${goesr-decode.threads}" />
<route id="goesrIngestRoute">
<from ref="goesrJmsEndpoint" />
<setHeader headerName="pluginName">
<constant>satellite</constant>
</setHeader>
<setHeader headerName="dataType">
<constant>goes-r</constant>
</setHeader>
<doTry>
<pipeline>
<bean ref="stringToFile" />
<bean ref="getFileWithoutWmoHeader" />
<split streaming="true">
<method bean="goesrDecoder" method="split"/>
<doTry>
<pipeline>
<bean ref="goesrDecoder" method="decode" />
<to uri="direct-vm:persistIndexAlert" />
</pipeline>
<doCatch>
<exception>java.lang.Throwable</exception>
<to uri="log:goesr?level=ERROR" />
</doCatch>
</doTry>
</split>
</pipeline>
<doCatch>
<exception>java.lang.Throwable</exception>
<to uri="log:goesr?level=ERROR" />
</doCatch>
</doTry>
</route>
</camelContext>
</beans>

View file

@ -1,2 +0,0 @@
# Number threads for decoding GOES-R data
goesr-decode.threads=2

View file

@ -1,419 +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.goesr;
import java.io.File;
import java.io.IOException;
import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.measure.unit.SI;
import javax.xml.bind.JAXBException;
import org.opengis.referencing.crs.CoordinateReferenceSystem;
import ucar.nc2.Attribute;
import ucar.nc2.NetcdfFile;
import ucar.nc2.Variable;
import com.raytheon.uf.common.dataplugin.persist.PersistablePluginDataObject;
import com.raytheon.uf.common.dataplugin.satellite.SatMapCoverage;
import com.raytheon.uf.common.dataplugin.satellite.SatelliteRecord;
import com.raytheon.uf.common.datastorage.DataStoreFactory;
import com.raytheon.uf.common.datastorage.records.IDataRecord;
import com.raytheon.uf.common.localization.IPathManager;
import com.raytheon.uf.common.serialization.JAXBManager;
import com.raytheon.uf.edex.netcdf.decoder.AbstractNetcdfDecoder;
import com.raytheon.uf.edex.netcdf.decoder.NetcdfRecordInfo;
import com.raytheon.uf.edex.netcdf.decoder.exception.NetcdfDecoderException;
import com.raytheon.uf.edex.netcdf.decoder.util.NetcdfDecoderUtils;
import com.raytheon.uf.edex.netcdf.description.data.DataDescription;
import com.raytheon.uf.edex.netcdf.description.exception.InvalidDescriptionException;
import com.raytheon.uf.edex.netcdf.description.field.direct.VariableDescription;
import com.raytheon.uf.edex.netcdf.description.product.NetcdfProductDescription;
import com.raytheon.uf.edex.netcdf.description.product.NetcdfProductDescriptions;
import com.raytheon.uf.edex.plugin.goesr.decoder.lookup.GoesrNetcdfProductDescription;
import com.raytheon.uf.edex.plugin.goesr.decoder.lookup.GoesrNetcdfProductDescriptions;
import com.raytheon.uf.edex.plugin.goesr.decoder.lookup.GoesrUtils;
import com.raytheon.uf.edex.plugin.goesr.description.data.GoesrDataDescription;
import com.raytheon.uf.edex.plugin.goesr.exception.GoesrProjectionException;
import com.raytheon.uf.edex.plugin.goesr.geospatial.GoesrProjectionFactory;
import com.raytheon.uf.edex.plugin.goesr.geospatial.GoesrSatelliteHeight;
/**
* This decoder attempts to open a potential GOES-R netCDF file, decode the data
* contained in it, and make it available to be stored.
*
* <pre>
* The code implements the
* Ground Segment (GS) to Advanced Weather Interactive Processing System (AWIPS)
* Interface Control Document (ICD)
* DOCUMENT CONTROL NUMBER: 7034704 CDRL SE-08 REVISION B
* Date 31 MAY 2012
* *****
* Some variances between the code and the revision are noted. These are
* due to discrepancies between the ICD and the sample data. These have
* been reported.
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* May 31, 2012 796 jkorman Initial creation
* Jul 5, 2013 2123 mschenke Changed to use in-memory netcdf object
* Feb 13, 2015 4043 bsteffen Include scene number in sector.
* Apr 17, 2015 4336 bsteffen Rewrite to be configurable for other attribute conventions.
* Sep 28, 2015 4872 bsteffen Decode File instead of byte[]
* Mar 16, 2016 5456 bsteffen Fix log statements
* May 26, 2016 5584 nabowle Refactor and rename for consolidation.
*
* </pre>
*
* @author nabowle
*/
public class GoesrNetcdfDecoder extends AbstractNetcdfDecoder {
private static final String UNITS_KEY = "units";
private static final String COVERAGE_KEY = "coverage";
private GoesrProjectionFactory projectionFactory;
public GoesrNetcdfDecoder(GoesrProjectionFactory projectionFactory,
IPathManager manager) {
this(getDefaultLocalizationPath(), projectionFactory, manager);
}
public GoesrNetcdfDecoder(String localizationPath,
GoesrProjectionFactory projectionFactory, IPathManager manager) {
super(localizationPath, manager);
this.projectionFactory = projectionFactory;
}
@Override
public NetcdfRecordInfo createRecordInfo(File file,
NetcdfFile netcdfFile, NetcdfProductDescription description)
throws NetcdfDecoderException {
NetcdfRecordInfo record = super.createRecordInfo(file,
netcdfFile, description);
if (record == null) {
return record;
}
if (!(description instanceof GoesrNetcdfProductDescription)) {
throw new NetcdfDecoderException(
"The configured description is not a "
+ GoesrNetcdfProductDescription.class
.getSimpleName());
}
GoesrDataDescription dataDesc = (GoesrDataDescription) description
.getData();
String gridMapping = null;
String units = null;
if (dataDesc.getVariable() != null) {
Variable dataVariable = netcdfFile.findVariable(dataDesc
.getVariable().getName());
if (dataVariable == null) {
if (description.isDebug()) {
logger.debug("Description skipped because data variable "
+ dataDesc.getVariable().getName()
+ " cannot be found.");
}
return null;
}
try {
units = GoesrUtils.getUnits(netcdfFile, dataDesc, dataVariable);
} catch (InvalidDescriptionException e) {
throw new NetcdfDecoderException("Error decoding units.", e);
}
gridMapping = dataVariable.findAttribute("grid_mapping")
.getStringValue();
} else if (dataDesc.getBitset() != null) {
Variable dataVariable;
Attribute attr;
for (String variable : dataDesc.getBitset()) {
dataVariable = netcdfFile.findVariable(variable);
attr = dataVariable.findAttribute("grid_mapping");
if (attr != null) {
if (gridMapping == null) {
gridMapping = attr.getStringValue();
} else if (!attr.getStringValue().equals(gridMapping)) {
throw new GoesrProjectionException(
"Bitset projections do not match.");
}
}
}
}
if (gridMapping == null) {
if (description.isDebug()) {
logger.debug("Description skipped because the gridMapping could not be decoded. ");
}
return null;
}
SatMapCoverage coverage = projectionFactory.getCoverage(netcdfFile,
gridMapping);
record.getBeanMap().put(COVERAGE_KEY, coverage);
if (units != null) {
record.addField(UNITS_KEY, units);
}
return record;
}
@Override
protected void extractData(NetcdfFile netcdfFile, NetcdfRecordInfo info)
throws NetcdfDecoderException, InvalidDescriptionException {
if (this.projectionFactory == null) {
throw new NetcdfDecoderException(
"Cannot decode goesr data because no projection factory is available.");
}
GoesrDataDescription dataDesc = (GoesrDataDescription) info
.getDeferredDescription(DataDescription.DATA_KEY);
VariableDescription variable = dataDesc.getVariable();
List<String> bitset = dataDesc.getBitset();
SatMapCoverage coverage = (SatMapCoverage) info.getField(COVERAGE_KEY);
long[] sizes = new long[] { coverage.getNx(), coverage.getNy() };
if (variable != null) {
extractDataFromVariable(netcdfFile, dataDesc, info, variable, sizes);
} else if (bitset != null) {
try {
extractDataFromBitset(netcdfFile, dataDesc, info, bitset, sizes);
} catch (IOException e) {
throw new NetcdfDecoderException(
"Unable to read data from bitset"
+ Arrays.toString(bitset.toArray()), e);
}
}
Number satHeight = (Number) info.getField("satHeight");
if (satHeight == null) {
/*
* Some data formats, which are in a geostationary projection, do
* not define that satellite height, except in the projection
* metadata.
*/
CoordinateReferenceSystem crs = ((SatMapCoverage) info
.getField("coverage")).getCrs();
double satHeightD = GoesrSatelliteHeight.getOrbitalHeight(crs,
SI.KILOMETER);
if (!Double.isNaN(satHeightD)) {
info.addField("satHeight", (int) satHeightD);
}
}
}
/**
* Extract data from a variable, similar to
* {@link AbstractNetcdfDecoder#extractData(NetcdfFile, NetcdfRecordInfo)},
* but insert the scale factor and add offset into the IDataRecord's
* attributes.
*/
private void extractDataFromVariable(NetcdfFile netcdfFile,
DataDescription dataDesc, NetcdfRecordInfo info,
VariableDescription variable, long[] sizes)
throws NetcdfDecoderException {
Variable dataVariable = netcdfFile.findVariable(variable.getName());
if (dataVariable == null) {
throw new NetcdfDecoderException(
"Unable to find the data variable "
+ variable.getName());
}
Buffer data;
data = NetcdfDecoderUtils.readData(
dataVariable,
NetcdfDecoderUtils.getRecordSection(dataVariable,
info.getDimensionIndexMap()), null, null, null, null);
applyMasks(netcdfFile, info, dataDesc, data);
Map<String, Object> attributes = new HashMap<>();
Number addOffset = NetcdfDecoderUtils.getNumericAttributeValue(
dataVariable, null, NetcdfDecoderUtils.ADD_OFFSET);
if (addOffset != null) {
attributes.put(SatelliteRecord.SAT_ADD_OFFSET,
addOffset.floatValue());
}
Number scaleFactor = NetcdfDecoderUtils.getNumericAttributeValue(
dataVariable, null, NetcdfDecoderUtils.SCALE_FACTOR);
if (scaleFactor != null) {
attributes.put(SatelliteRecord.SAT_SCALE_FACTOR,
scaleFactor.floatValue());
}
Number fillValue = GoesrUtils.getFillValue(dataVariable, data);
IDataRecord storageRecord = DataStoreFactory.createStorageRecord(
SatelliteRecord.SAT_DATASET_NAME, null, data.array(), 2, sizes);
storageRecord.setFillValue(fillValue);
storageRecord.setDataAttributes(attributes);
storageRecord.setGroup(((SatelliteRecord) info.getBeanMap().getBean())
.getDataURI());
info.addField(DataDescription.DATA_KEY, storageRecord, true);
}
private void extractDataFromBitset(NetcdfFile netcdfFile,
DataDescription dataDesc, NetcdfRecordInfo info,
List<String> bitset, long[] sizes) throws IOException,
NetcdfDecoderException {
if (bitset.size() > 7) {
throw new NetcdfDecoderException(
"Bitset can only currently support 7 fields, this is too many: "
+ bitset.toString());
}
byte[] data = null;
int bit = 0;
for (String variable : bitset) {
Variable dataVariable = netcdfFile.findVariable(variable);
Object rawField = dataVariable.read().copyTo1DJavaArray();
if (!(rawField instanceof byte[])) {
throw new NetcdfDecoderException("Unexpected type["
+ rawField.getClass() + "] for variable[" + variable
+ "]");
}
byte[] field = (byte[]) rawField;
int fillValue = 0xFF & GoesrUtils.getFillValue(dataVariable, field)
.intValue();
if (data == null) {
data = field;
if (fillValue != GoesrDataDescription.BITSET_FILL) {
for (int i = 0; i < field.length; i += 1) {
if (fillValue == (0xFF & field[i])) {
field[i] = (byte) GoesrDataDescription.BITSET_FILL;
}
}
}
} else {
for (int i = 0; i < field.length; i += 1) {
if (fillValue == (0xFF & field[i])) {
/*
* Do Nothing, this is an assumption. When thinking
* about a bitset, normally fill is not an option for an
* input but this data has fill and it is used. Do
* nothing means if the data is already filled it will
* stay filled, so any index where all fields are filled
* will be filled but if any one field is valid then all
* filled fields will be 0s
*/
continue;
} else if (GoesrDataDescription.BITSET_FILL == (0xFF & field[i])) {
data[i] = 0;
}
if (field[i] != 0) {
data[i] = (byte) (data[i] + (1 << bit));
}
}
}
bit += 1;
}
ByteBuffer dataBuff = ByteBuffer.wrap(data);
applyMasks(netcdfFile, info, dataDesc, dataBuff);
IDataRecord storageRecord = DataStoreFactory.createStorageRecord(
SatelliteRecord.SAT_DATASET_NAME, null, dataBuff.array(), 2,
sizes);
storageRecord.setFillValue(GoesrDataDescription.BITSET_FILL);
storageRecord.setGroup(((SatelliteRecord) info.getBeanMap().getBean())
.getDataURI());
info.addField(DataDescription.DATA_KEY, storageRecord, true);
}
protected static String getDefaultLocalizationPath() {
return "satellite/goesr/descriptions/";
}
@Override
protected JAXBManager getJaxbManager() throws JAXBException {
return new JAXBManager(GoesrNetcdfProductDescriptions.class);
}
public void setProjectionFactory(GoesrProjectionFactory projectionFactory) {
this.projectionFactory = projectionFactory;
}
@Override
protected NetcdfRecordInfo newRecord() {
return new NetcdfRecordInfo(new SatelliteRecord());
}
@Override
public void setDescriptions(List<NetcdfProductDescriptions> descriptions) {
for (NetcdfProductDescriptions descs : descriptions) {
if (!(descs instanceof GoesrNetcdfProductDescriptions)) {
throw new IllegalArgumentException(
GoesrNetcdfProductDescriptions.class.getSimpleName()
+ " are required by this decoder.");
}
}
super.setDescriptions(descriptions);
}
@Override
protected void validateRecord(PersistablePluginDataObject record)
throws NetcdfDecoderException {
super.validateRecord(record);
SatelliteRecord sRec = (SatelliteRecord) record;
if (sRec.getMessageData() == null) {
throw new NetcdfDecoderException("the data is missing.");
}
if (sRec.getCoverage() == null) {
throw new NetcdfDecoderException("coverage is missing.");
}
if (sRec.getCreatingEntity() == null) {
throw new NetcdfDecoderException("creatingEntity is missing.");
}
if (sRec.getSectorID() == null) {
throw new NetcdfDecoderException("sectorID is missing.");
}
if (sRec.getSource() == null) {
throw new NetcdfDecoderException("source is missing.");
}
if (sRec.getPhysicalElement() == null) {
throw new NetcdfDecoderException("physicalElement is missing.");
}
}
}

View file

@ -1,278 +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.goesr.decoder.lookup;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlSeeAlso;
import org.slf4j.Logger;
import ucar.nc2.NetcdfFile;
import com.raytheon.uf.edex.netcdf.decoder.NetcdfRecordInfo;
import com.raytheon.uf.edex.netcdf.decoder.util.NetcdfDecoderUtils;
import com.raytheon.uf.edex.netcdf.description.data.DataDescription;
import com.raytheon.uf.edex.netcdf.description.exception.InvalidDescriptionException;
import com.raytheon.uf.edex.netcdf.description.field.indirect.DelegateFieldDescription;
import com.raytheon.uf.edex.netcdf.description.product.NetcdfProductDescription;
import com.raytheon.uf.edex.plugin.goesr.description.data.GoesrDataDescription;
/**
* Product Description of Netcdf Goes-R data.
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* May 17, 2016 5584 nabowle Initial creation
*
* </pre>
*
* @author nabowle
*/
@XmlSeeAlso({ NetcdfProductDescription.class })
@XmlAccessorType(XmlAccessType.NONE)
public class GoesrNetcdfProductDescription extends NetcdfProductDescription {
@XmlElement
private DelegateFieldDescription physicalElement;
@XmlElement
private DelegateFieldDescription units;
@XmlElement
private DelegateFieldDescription creatingEntity;
@XmlElement
private DelegateFieldDescription source;
@XmlElement
private DelegateFieldDescription sectorID;
@XmlElement
private DelegateFieldDescription satHeight;
/**
*
*/
public GoesrNetcdfProductDescription() {
super();
}
/**
* @return the data
*/
@Override
@XmlElement(type = GoesrDataDescription.class)
public DataDescription getData() {
return super.getData();
}
/**
* @param data
* the data to set
*/
@Override
public void setData(DataDescription data) {
super.setData(data);
}
/**
* @return the physicalElement
*/
public DelegateFieldDescription getPhysicalElement() {
return physicalElement;
}
/**
* @param physicalElement
* the physicalElement to set
*/
public void setPhysicalElement(DelegateFieldDescription physicalElement) {
this.physicalElement = physicalElement;
}
/**
* @return the units
*/
public DelegateFieldDescription getUnits() {
return units;
}
/**
* @param units
* the units to set
*/
public void setUnits(DelegateFieldDescription units) {
this.units = units;
}
/**
* @return the creatingEntity
*/
public DelegateFieldDescription getCreatingEntity() {
return creatingEntity;
}
/**
* @param creatingEntity
* the creatingEntity to set
*/
public void setCreatingEntity(DelegateFieldDescription creatingEntity) {
this.creatingEntity = creatingEntity;
}
/**
* @return the source
*/
public DelegateFieldDescription getSource() {
return source;
}
/**
* @param source
* the source to set
*/
public void setSource(DelegateFieldDescription source) {
this.source = source;
}
/**
* @return the sectorId
*/
public DelegateFieldDescription getSectorID() {
return sectorID;
}
/**
* @param sectorId
* the sectorId to set
*/
public void setSectorID(DelegateFieldDescription sectorId) {
this.sectorID = sectorId;
}
/**
* @return the satHeight
*/
public DelegateFieldDescription getSatHeight() {
return satHeight;
}
/**
* @param satHeight
* the satHeight to set
*/
public void setSatHeight(DelegateFieldDescription satHeight) {
this.satHeight = satHeight;
}
@Override
public void updateFields(NetcdfFile netcdfFile,
List<NetcdfRecordInfo> records) throws InvalidDescriptionException {
super.updateFields(netcdfFile, records);
NetcdfDecoderUtils.updateField(netcdfFile, this.creatingEntity, "creatingEntity", records);
NetcdfDecoderUtils.updateField(netcdfFile, this.physicalElement, "physicalElement",
records);
NetcdfDecoderUtils.updateField(netcdfFile, this.satHeight, "satHeight", records);
NetcdfDecoderUtils.updateField(netcdfFile, this.sectorID, "sectorID",
records);
NetcdfDecoderUtils.updateField(netcdfFile, this.source, "source", records);
NetcdfDecoderUtils.updateField(netcdfFile, this.units, "units", records);
}
@Override
public boolean isAllPresent(NetcdfFile file, Logger logger)
throws InvalidDescriptionException {
if (!super.isAllPresent(file, logger)) {
return false;
}
if (this.physicalElement != null) {
if (!this.physicalElement.isPresent(file)) {
logDebugMessage(logger, "physicalElement");
return false;
}
}
if (this.creatingEntity != null) {
if (!this.creatingEntity.isPresent(file)) {
logDebugMessage(logger, "creatingEntity");
return false;
}
}
if (this.satHeight != null) {
if (!this.satHeight.isPresent(file)) {
logDebugMessage(logger, "satHeight");
return false;
}
}
if (this.sectorID != null) {
if (!this.sectorID.isPresent(file)) {
logDebugMessage(logger, "sectorID");
return false;
}
}
if (this.source != null) {
if (!this.source.isPresent(file)) {
logDebugMessage(logger, "source");
return false;
}
}
if (this.units != null) {
if (!this.units.isPresent(file)) {
logDebugMessage(logger, "units");
return false;
}
}
return true;
}
@Override
public void validate() throws InvalidDescriptionException {
super.validate();
if (this.physicalElement != null) {
this.physicalElement.validate();
}
if (this.creatingEntity != null) {
this.creatingEntity.validate();
}
if (this.satHeight != null) {
this.satHeight.validate();
}
if (this.sectorID != null) {
this.sectorID.validate();
}
if (this.source != null) {
this.source.validate();
}
if (this.units != null) {
this.units.validate();
}
}
}

View file

@ -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.goesr.decoder.lookup;
import java.util.List;
import javax.xml.bind.JAXB;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlSeeAlso;
import com.raytheon.uf.edex.netcdf.description.exception.InvalidDescriptionException;
import com.raytheon.uf.edex.netcdf.description.product.NetcdfProductDescription;
import com.raytheon.uf.edex.netcdf.description.product.NetcdfProductDescriptions;
/**
* A collection of {@link GoesrNetcdfProductDescription}s whose primary role is
* to serve as a container for {@link JAXB} serialization of multiple
* descriptions into a single file.
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* May 17, 2016 5584 nabowle Initial creation
*
* </pre>
*
* @author nabowle
*/
@XmlRootElement(name = "goesrProductDescriptions")
@XmlAccessorType(XmlAccessType.NONE)
@XmlSeeAlso({ GoesrNetcdfProductDescription.class })
public class GoesrNetcdfProductDescriptions extends
NetcdfProductDescriptions {
/**
*
*/
public GoesrNetcdfProductDescriptions() {
super();
}
@Override
public void mergeDefaultIntoDescriptions() {
super.mergeDefaultIntoDescriptions();
if (this.defaultDescription == null
|| !(this.defaultDescription instanceof GoesrNetcdfProductDescription)) {
return;
}
GoesrNetcdfProductDescription gDefault = (GoesrNetcdfProductDescription) this.defaultDescription;
GoesrNetcdfProductDescription gDesc;
for (NetcdfProductDescription desc : this.descriptions) {
if (desc instanceof GoesrNetcdfProductDescription) {
gDesc = (GoesrNetcdfProductDescription) desc;
if (gDesc.getPhysicalElement() == null
&& gDefault.getPhysicalElement() != null) {
gDesc.setPhysicalElement(gDefault.getPhysicalElement());
}
if (gDesc.getUnits() == null && gDefault.getUnits() != null) {
gDesc.setUnits(gDefault.getUnits());
}
if (gDesc.getCreatingEntity() == null
&& gDefault.getCreatingEntity() != null) {
gDesc.setCreatingEntity(gDefault.getCreatingEntity());
}
if (gDesc.getSource() == null && gDefault.getSource() != null) {
gDesc.setSource(gDefault.getSource());
}
if (gDesc.getSectorID() == null
&& gDefault.getSectorID() != null) {
gDesc.setSectorID(gDefault.getSectorID());
}
if (gDesc.getSatHeight() == null
&& gDefault.getSatHeight() != null) {
gDesc.setSatHeight(gDefault.getSatHeight());
}
}
}
}
/*
* The following methods are overridden to be able to specify to JAXB which
* subclass of NetcdfProductDescription to unmarshal into.
*/
@Override
@XmlElement(name = "default", type = GoesrNetcdfProductDescription.class)
public NetcdfProductDescription getDefaultDescription() {
return this.defaultDescription;
}
@Override
public void setDefaultDescription(
NetcdfProductDescription defaultDescription) {
this.defaultDescription = defaultDescription;
}
@Override
@XmlElement(name = "description", type = GoesrNetcdfProductDescription.class)
public List<NetcdfProductDescription> getDescriptions() {
return this.descriptions;
}
@Override
public void setDescriptions(List<NetcdfProductDescription> descriptions) {
this.descriptions = descriptions;
}
@Override
public void validate() throws InvalidDescriptionException {
for (NetcdfProductDescription description : this.descriptions) {
if (!(description instanceof GoesrNetcdfProductDescription)) {
throw new InvalidDescriptionException(
"invalid descriptions class configured. expected "
+ GoesrNetcdfProductDescription.class
.getSimpleName());
}
}
super.validate();
}
}

View file

@ -1,120 +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.goesr.decoder.lookup;
import java.util.Map;
import ucar.nc2.Attribute;
import ucar.nc2.NetcdfFile;
import ucar.nc2.Variable;
import com.raytheon.uf.common.dataplugin.satellite.SatelliteRecord;
import com.raytheon.uf.common.datastorage.records.IDataRecord;
import com.raytheon.uf.edex.netcdf.description.exception.InvalidDescriptionException;
import com.raytheon.uf.edex.plugin.goesr.description.data.GoesrDataDescription;
/**
* Utility class for Goes-R Decoding.
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Dec 3, 2015 5059 nabowle Initial creation
*
* </pre>
*
* @author nabowle
* @version 1.0
*/
public class GoesrUtils {
private GoesrUtils() {
}
/**
* When in the Course of decoding records, it becomes necessary for one
* value to be sent from the {@link DataDescription} to an attribute of a
* data record, it can be added to the
* {@link IDataRecord#getDataAttributes()} and be used as though it were an
* attribute on the netcdf file.
*/
public static Object getAttributeFromRecord(SatelliteRecord record,
String name) {
if (record == null) {
return null;
}
IDataRecord dataRecord = (IDataRecord) record.getMessageData();
if (dataRecord == null) {
return null;
}
Map<String, Object> attributes = dataRecord.getDataAttributes();
if (attributes == null) {
return null;
}
return attributes.get(name);
}
public static Number getFillValue(Variable variable, Object data) {
Number fillValue = 0;
Attribute attr = variable.findAttribute("_FillValue");
if (attr != null) {
fillValue = attr.getNumericValue();
attr = variable.findAttribute("_Unsigned");
if (attr != null) {
boolean unsigned = attr.getStringValue().equals("true");
if (unsigned && fillValue.intValue() < 0) {
if (data instanceof byte[]) {
fillValue = 0xFF & (fillValue.intValue());
} else if (data instanceof short[]) {
fillValue = 0xFFFF & (fillValue.intValue());
}
}
}
}
return fillValue;
}
public static String getUnits(NetcdfFile file,
GoesrDataDescription dataDesc, Variable variable)
throws InvalidDescriptionException {
String units = null;
if (dataDesc.getUnits() != null) {
units = dataDesc.getUnits().getString(file);
if ("1".equals(units)) {
units = null;
}
}
if (units == null) {
Attribute attr = variable.findAttribute("units");
if (attr != null) {
units = attr.getStringValue();
if ("1".equals(units)) {
units = null;
}
}
}
return units;
}
}

View file

@ -1,199 +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.goesr.description.data;
import java.util.Arrays;
import java.util.List;
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 ucar.nc2.NetcdfFile;
import com.raytheon.uf.common.dataplugin.satellite.SatelliteRecord;
import com.raytheon.uf.edex.netcdf.description.data.DataDescription;
import com.raytheon.uf.edex.netcdf.description.data.mask.AbstractDataMaskDescription;
import com.raytheon.uf.edex.netcdf.description.exception.InvalidDescriptionException;
import com.raytheon.uf.edex.netcdf.description.field.direct.VariableDescription;
import com.raytheon.uf.edex.netcdf.description.field.indirect.DelegateFieldDescription;
/**
* A description of the data contained with a {@link NetcdfFile} that can be
* used to extract the message data for use in a {@link SatelliteRecord}
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Apr 17, 2015 4336 bsteffen Initial creation
* May 26, 2016 5584 nabowle Rename and refactor for consolidation.
* Jul 21, 2016 5584 nabowle Check data masks within isPresent()
*
*
* </pre>
*
* @author nabowle
*/
@XmlAccessorType(XmlAccessType.NONE)
public class GoesrDataDescription extends DataDescription {
public static final int BITSET_FILL = 0xFF;
@XmlAttribute
private List<String> bitset;
@XmlElement
private DelegateFieldDescription units;
public GoesrDataDescription() {
super();
}
/**
* @return the bitset
*/
public List<String> getBitset() {
return bitset;
}
/**
* @param bitset
* the bitset to set
*/
public void setBitset(List<String> bitset) {
this.bitset = bitset;
}
/**
* @return the units
*/
public DelegateFieldDescription getUnits() {
return units;
}
/**
* @param units
* the units to set
*/
public void setUnits(DelegateFieldDescription units) {
this.units = units;
}
/**
* @return the bitsetFill
*/
public static int getBitsetFill() {
return BITSET_FILL;
}
@Override
public void validate() throws InvalidDescriptionException {
if (this.variable == null
&& (this.bitset == null || this.bitset.isEmpty())) {
throw new InvalidDescriptionException(
"the data variable or bitset variables must be configured.");
}
if (this.variable != null && this.bitset != null
&& !this.bitset.isEmpty()) {
throw new InvalidDescriptionException(
"the data variable and bitset variables cannot both be configured.");
}
if (this.variable != null) {
this.variable.validate();
}
if (this.masks != null) {
for (AbstractDataMaskDescription mask : this.masks) {
mask.validate();
}
}
}
/**
* If any data masks are configured, true will only be returned if all data
* masks are present. If the variable is configured,
* this.variable.isPresent(file) is returned. If the bitset is configured,
* true will be returned only if every variable in the bitset is present. If
* neither is configured, an InvalidDescriptionException will be thrown.
*
* @param file
* The netcdf file.
* @return true if the described variable is present in the netcdf file, or
* if all the bitset variables are present, and all configured data
* masks are present.
* @throws InvalidDescriptionException
* if the variable description and bitset variables are not
* configured, or if the variable description is invalid.
*/
@Override
public boolean isPresent(NetcdfFile file)
throws InvalidDescriptionException {
boolean dataVarConfigured = false;
if (this.variable != null) {
if (!this.variable.isPresent(file)) {
return false;
}
dataVarConfigured = true;
}
if (this.bitset != null && !this.bitset.isEmpty()) {
VariableDescription var = new VariableDescription();
for (String varName : this.bitset) {
var.setName(varName);
if (!var.isPresent(file)) {
return false;
}
}
dataVarConfigured = true;
}
if (!dataVarConfigured) {
throw new InvalidDescriptionException(
"the data variable or bitset variables must be configured.");
}
if (this.masks != null) {
for (AbstractDataMaskDescription mask : this.masks) {
if (!mask.isPresent(file)) {
return false;
}
}
}
return true;
}
@Override
public String getVariableName() {
if (this.variable != null) {
return this.variable.getName();
} else if (this.bitset != null && !this.bitset.isEmpty()) {
return Arrays.toString(this.bitset.toArray());
}
return null;
}
}

View file

@ -1,69 +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.goesr.exception;
import com.raytheon.uf.edex.netcdf.decoder.exception.NetcdfDecoderException;
/**
* Thrown when the given projection could not be created.
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------- -------- ----------- --------------------------
* Jul 03, 2012 jkorman Initial creation
* Apr 17, 2015 4336 bsteffen Extend GoesrDecoderException
*
* </pre>
*
* @author jkorman
* @version 1.0
*/
public class GoesrProjectionException extends NetcdfDecoderException {
private static final long serialVersionUID = 1L;
/**
* Constructs a InvalidProjectionException with an error message.
*
* @param message
* The exception detail message.
*/
public GoesrProjectionException(String message) {
super(message);
}
/**
* Constructs a InvalidProjectionException with an error message and a
* chained cause.
*
* @param message
* The exception detail message.
* @param cause
* The exception that caused this exception to be thrown.
*/
public GoesrProjectionException(String message, Throwable cause) {
super(message, cause);
}
}

View file

@ -1,227 +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.goesr.geospatial;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.opengis.referencing.crs.CoordinateReferenceSystem;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ucar.nc2.Attribute;
import ucar.nc2.NetcdfFile;
import ucar.nc2.Variable;
import com.raytheon.edex.plugin.satellite.dao.SatMapCoverageDao;
import com.raytheon.uf.common.dataplugin.satellite.SatMapCoverage;
import com.raytheon.uf.edex.plugin.goesr.exception.GoesrProjectionException;
import com.raytheon.uf.edex.plugin.goesr.geospatial.crs.GeostationaryCrsFactory;
import com.raytheon.uf.edex.plugin.goesr.geospatial.crs.GoesrCrsFactory;
import com.raytheon.uf.edex.plugin.goesr.geospatial.crs.LambertConformalCrsFactory;
import com.raytheon.uf.edex.plugin.goesr.geospatial.crs.MercatorCrsFactory;
import com.raytheon.uf.edex.plugin.goesr.geospatial.crs.NorthPolarStereographicCrsFactory;
import com.raytheon.uf.edex.plugin.goesr.geospatial.envelope.DimensionEnvelopeFactory;
import com.raytheon.uf.edex.plugin.goesr.geospatial.envelope.GoesrEnvelope;
import com.raytheon.uf.edex.plugin.goesr.geospatial.envelope.GoesrEnvelopeFactory;
import com.raytheon.uf.edex.plugin.goesr.geospatial.envelope.ImageBoundsEnvelopeFactory;
import com.raytheon.uf.edex.plugin.goesr.geospatial.envelope.ProductCenterEnvelopeFactory;
import com.raytheon.uf.edex.plugin.goesr.geospatial.envelope.TileCenterEnvelopeFactory;
/**
*
* In a GOESR NetCDF file the geolocation information is extracted as two
* separate, yet equally important entities. The crs which defines the
* translation onto a spheroid and the envelope which defines the coverage of
* the product. This is their factory.
*
* Create the {@link SatMapCoverage} corresponding to the projection information
* contained in the GOES-R netCDF file.
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------- -------- ----------- --------------------------
* Jun 01, 2012 796 jkorman Initial creation
* Jul 05, 2013 2123 mschenke Refactored to have CRS factory for each type of CRS
* Oct 29, 2014 3770 bsteffen Pass more attributes to the projection.
* Apr 17, 2015 4336 bsteffen Split out crs and envelope creation into distinct factories.
* Mar 15, 2016 5456 bsteffen Change Priority of envelope factories
*
* </pre>
*
* @author jkorman
* @version 1.0
*/
public class GoesrProjectionFactory {
private static final transient Logger logger = LoggerFactory
.getLogger(GoesrProjectionFactory.class);
private static final boolean DEBUG_ENVELOPES = Boolean
.getBoolean("goesr.projection.debug.envelopes");
private final Map<String, GoesrCrsFactory> crsMap = new HashMap<>();
private final List<GoesrEnvelopeFactory> envelopeList = new ArrayList<>(3);
private SatMapCoverageDao satDao;
/**
* Create an instance of this factory.
*/
public GoesrProjectionFactory() {
satDao = new SatMapCoverageDao();
GoesrCrsFactory geostationary = new GeostationaryCrsFactory();
GoesrCrsFactory lambert = new LambertConformalCrsFactory();
GoesrCrsFactory mercator = new MercatorCrsFactory();
GoesrCrsFactory polar = new NorthPolarStereographicCrsFactory();
/*
* These are the values of the grid_mapping_name attribute within the
* grid mapping variable. These are consistent for all known goesr
* products.
*/
crsMap.put("geostationary", geostationary);
crsMap.put("lambert_conformal_conic", lambert);
crsMap.put("polar_stereographic", polar);
crsMap.put("mercator", mercator);
/*
* These are the names of the grid mapping variable for sectorized CMI,
* these are not consistent for other data types. It may be safe to
* remove these and rely only on the names above.
*/
crsMap.put("lambert_projection", lambert);
crsMap.put("mercator_projection", mercator);
crsMap.put("polar_projection", polar);
crsMap.put("fixedgrid_projection", geostationary);
envelopeList.add(new DimensionEnvelopeFactory());
envelopeList.add(new ImageBoundsEnvelopeFactory());
envelopeList.add(new ProductCenterEnvelopeFactory());
envelopeList.add(new TileCenterEnvelopeFactory());
}
public GoesrCrsFactory registerCrsFactory(String name,
GoesrCrsFactory crsFactory) {
crsMap.put(name, crsFactory);
return crsFactory;
}
public SatMapCoverage getCoverage(NetcdfFile cdfFile, String projName)
throws GoesrProjectionException {
Variable projection = cdfFile.findVariable(projName);
if (projection != null) {
GoesrCrsFactory crsFactory = null;
Attribute attr = projection.findAttribute("grid_mapping_name");
if (attr != null) {
crsFactory = crsMap.get(attr.getStringValue());
}
if (crsFactory == null) {
crsFactory = crsMap.get(projName);
if (crsFactory == null) {
String message;
if (attr != null) {
message = String.format(
"Invalid projection identifier [%s.%s].",
projName, attr.getStringValue());
} else {
message = String
.format("Invalid projection identifier [%s].",
projName);
}
throw new GoesrProjectionException(message);
}
}
CoordinateReferenceSystem crs = crsFactory
.constructCoordinateReferenceSystem(projection);
if (DEBUG_ENVELOPES) {
debugEnvelopes(cdfFile, crs);
}
for (GoesrEnvelopeFactory envelopeFactory : envelopeList) {
GoesrEnvelope envelope = envelopeFactory.getEnvelope(cdfFile,
crs);
if (envelope != null) {
envelope.normalize();
SatMapCoverage coverage = new SatMapCoverage();
coverage.setCrsWKT(crs.toWKT());
coverage.setDx(envelope.getDx());
coverage.setDy(envelope.getDy());
coverage.setMinX(envelope.getMinX());
coverage.setMinY(envelope.getMinY());
coverage.setNx(envelope.getNx());
coverage.setNy(envelope.getNy());
/* Trigger generation of a location. */
coverage.getLocation();
try {
return satDao.getOrCreateCoverage(coverage);
} catch (Exception e) {
throw new GoesrProjectionException(
"Could not create coverage", e);
}
}
}
throw new GoesrProjectionException("Unable to create envelope.");
} else {
throw new GoesrProjectionException("Projection variable was null");
}
}
/**
* As long as there exists multiple envelope factories, it is useful to be
* able to compare them for different sample files and verify the results
* match.
*
* @param cdfFile
* @param crs
*/
private void debugEnvelopes(NetcdfFile cdfFile,
CoordinateReferenceSystem crs) {
StringBuilder builder = new StringBuilder();
builder.append("Envelope comparison for " + cdfFile.getLocation()
+ " ********************\n");
for (GoesrEnvelopeFactory envelopeFactory : envelopeList) {
builder.append(envelopeFactory.getClass().getSimpleName());
builder.append(": ");
GoesrEnvelope envelope = null;
try {
envelope = envelopeFactory.getEnvelope(cdfFile, crs);
} catch (GoesrProjectionException e) {
builder.append(e.getLocalizedMessage()).append(": ");
}
if (envelope != null) {
envelope.normalize();
builder.append(envelope.toString());
} else {
builder.append("No Envelope");
}
builder.append("\n");
}
builder.append("****************************************\n");
logger.info(builder.toString());
}
}

View file

@ -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.
**/
package com.raytheon.uf.edex.plugin.goesr.geospatial;
import javax.measure.quantity.Length;
import javax.measure.unit.Unit;
import org.geotools.referencing.CRS;
import org.geotools.referencing.operation.projection.MapProjection;
import org.opengis.parameter.ParameterValue;
import org.opengis.parameter.ParameterValueGroup;
import org.opengis.referencing.crs.CoordinateReferenceSystem;
import com.raytheon.uf.common.geospatial.projection.Geostationary;
/**
* Utility class for extracting the satellite height from the
* {@link CoordinateReferenceSystem}. Several pieces of the decoder need this
* information and don't have a better way to get it.
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------- -------- ----------- --------------------------
* Apr 17, 2015 4336 bsteffen Initial creation
*
* </pre>
*
* @author bsteffen
* @version 1.0
*/
public class GoesrSatelliteHeight {
public static double getOrbitalHeight(CoordinateReferenceSystem crs,
Unit<Length> unit) {
MapProjection worldProjection = CRS.getMapProjection(crs);
if (worldProjection instanceof Geostationary) {
ParameterValueGroup group = worldProjection.getParameterValues();
ParameterValue<?> orbitalHeight = group
.parameter(Geostationary.ORBITAL_HEIGHT);
return orbitalHeight.doubleValue(unit);
}
return Double.NaN;
}
}

View file

@ -1,75 +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.goesr.geospatial.crs;
import org.opengis.parameter.ParameterValueGroup;
import ucar.nc2.Attribute;
import ucar.nc2.Variable;
import com.raytheon.uf.common.geospatial.projection.Geostationary;
import com.raytheon.uf.edex.plugin.goesr.exception.GoesrProjectionException;
/**
* A class representation of the GOES-R FixedGrid projection information
* contained in the GOES-R netCDF file. The ICD says that this is "unprojected"
* data, that is, the data is as it is seen from the satellite. This would be a
* orthographic type projection.
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------- -------- ----------- --------------------------
* Jun 01, 2012 796 jkorman Initial creation
* Jul 05, 2013 2123 mschenke Implemented Geostationary projection
* Apr 17, 2015 4336 bsteffen Converted to be only a CRS factory.
*
* </pre>
*
* @author jkorman
* @version 1.0
*/
public class GeostationaryCrsFactory extends GoesrCrsFactory {
private static final String DEF_SWEEP_AXIS = "x";
@Override
protected String getProjectionName() {
return Geostationary.PROJECTION_NAME;
}
@Override
protected void addSpecificParameters(Variable projectionVariable,
ParameterValueGroup parameters) throws GoesrProjectionException {
setDoubleParameter(projectionVariable, "latitude_of_projection_origin", parameters, "latitude_of_origin");
setDoubleParameter(projectionVariable, "longitude_of_projection_origin", parameters, "central_meridian");
setDoubleParameter(projectionVariable, "perspective_point_height", parameters, Geostationary.ORBITAL_HEIGHT);
Attribute attribute = projectionVariable.findAttribute("sweep_angle_axis");
if (attribute != null) {
String sweepAxis = attribute.getStringValue();
parameters.parameter(Geostationary.SWEEP_AXIS).setValue(
DEF_SWEEP_AXIS.equals(sweepAxis) ? 0 : 1);
}
}
}

View file

@ -1,169 +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.goesr.geospatial.crs;
import org.geotools.referencing.operation.DefaultMathTransformFactory;
import org.opengis.parameter.ParameterValueGroup;
import org.opengis.referencing.FactoryException;
import org.opengis.referencing.NoSuchIdentifierException;
import org.opengis.referencing.crs.CoordinateReferenceSystem;
import ucar.ma2.DataType;
import ucar.nc2.Attribute;
import ucar.nc2.NetcdfFile;
import ucar.nc2.Variable;
import com.raytheon.uf.common.geospatial.MapUtil;
import com.raytheon.uf.common.geospatial.projection.Geostationary;
import com.raytheon.uf.edex.plugin.goesr.exception.GoesrProjectionException;
/**
*
* A GoesrCrsFactory has the ability to parse projection information from the
* {@link Attribute}s of a {@link Variable} for a specific type of projection.
* The abstract class provides a means to parse the semi_major, semi_minor,
* false_easting, and false_northing which are common among all map projections.
* Other projection parameters should be parsed by sub classes.
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------- -------- ----------- --------------------------
* Apr 17, 2015 4336 bsteffen Initial creation
*
* </pre>
*
* @author bsteffen
* @version 1.0
*/
public abstract class GoesrCrsFactory {
protected static final DefaultMathTransformFactory dmtFactory = new DefaultMathTransformFactory();
public CoordinateReferenceSystem constructCoordinateReferenceSystem(
Variable projectionVariable) throws GoesrProjectionException {
try {
ParameterValueGroup parameters = dmtFactory
.getDefaultParameters(getProjectionName());
setDoubleParameter(projectionVariable, "semi_major_axis",
parameters, "semi_major");
setDoubleParameter(projectionVariable, "semi_minor_axis",
parameters, "semi_minor");
setDoubleParameter(projectionVariable, parameters, "semi_major");
setDoubleParameter(projectionVariable, parameters, "semi_minor");
setDoubleParameter(projectionVariable, parameters, "false_easting");
setDoubleParameter(projectionVariable, parameters, "false_northing");
addSpecificParameters(projectionVariable, parameters);
return MapUtil.constructProjection(getProjectionName(),
parameters);
} catch (NoSuchIdentifierException e) {
throw new GoesrProjectionException(
"Unable to find projection by name: "
+ Geostationary.PROJECTION_NAME, e);
} catch (FactoryException e) {
throw new GoesrProjectionException(
"Error constructing projected CRS", e);
}
}
/**
* @return The name used to look up the parameters for the projection.
*/
protected abstract String getProjectionName();
/**
* Method provided so that subclasses can add parameters that are needed for
* the specific projection type that they are implementing.
*
* @param projectionVariable
* the {@link Variable} from the {@link NetcdfFile} that ocntains
* all the projection {@link Attribute}s.
* @param parameters
* The parameters that need to be set to define a
* {@link CoordinateReferenceSystem}.
* @throws GoesrProjectionException
*/
protected abstract void addSpecificParameters(Variable projectionVariable,
ParameterValueGroup parameters) throws GoesrProjectionException;
/**
* Method to copy a value from a netcdf {@link Attribute} to a
* {@link ParameterValueGroup}. This should be used when the name that is
* expected in the netcdf file matches the name needed for the crs. If the
* attribute does not exist then the value is left unchanged in the group.
*
* @param projectionVariable
* {@link Variable} containing projection attributes.
* @param parameters
* parameters needed to build a CRS.
* @param name
* the name of the attribute, used for both lookup in the netcdf
* file and setting the parameter in the group.
* @throws GoesrProjectionException
*/
protected final void setDoubleParameter(Variable projectionVariable,
ParameterValueGroup parameters, String name)
throws GoesrProjectionException {
setDoubleParameter(projectionVariable, name, parameters, name);
}
/**
* Method to copy a value from a netcdf {@link Attribute} to a
* {@link ParameterValueGroup}. This should be used when the name that is
* expected in the netcdf file matches the name needed for the crs. If the
* attribute does not exist then the value is left unchanged in the group.
*
* @param projectionVariable
* {@link Variable} containing projection attributes.
* @param attributeName
* name of the attribute that is expected to exist on the
* projectionVariable
* @param parameters
* parameters needed to build a CRS.
* @param parameterName
* name of the parameter to be set in the parameters.
* @throws GoesrProjectionException
*/
protected final void setDoubleParameter(Variable projectionVariable,
String attributeName, ParameterValueGroup parameters,
String parameterName) throws GoesrProjectionException {
Attribute attribute = projectionVariable.findAttribute(attributeName);
if (attribute == null) {
return;
}
if(attribute.getDataType() == DataType.STRING){
String strValue = attribute.getStringValue();
try {
double value = Double.parseDouble(strValue);
parameters.parameter(parameterName).setValue(value);
} catch (NumberFormatException e) {
throw new GoesrProjectionException("Unable to parse"
+ attributeName, e);
}
}else{
double value = attribute.getNumericValue().doubleValue();
parameters.parameter(parameterName).setValue(value);
}
}
}

View file

@ -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.
**/
package com.raytheon.uf.edex.plugin.goesr.geospatial.crs;
import org.opengis.parameter.ParameterValueGroup;
import ucar.nc2.Variable;
import com.raytheon.uf.edex.plugin.goesr.exception.GoesrProjectionException;
/**
* A class representation of the GOES-R LambertConformal projection information
* contained in the GOES-R netCDF file.
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------- -------- ----------- --------------------------
* Jun 01, 2012 796 jkorman Initial creation
* Jul 05, 2013 2123 mschenke Refactored to be CRS factory
* Apr 17, 2015 4336 bsteffen Converted to be only a CRS factory.
*
* </pre>
*
* @author jkorman
* @version 1.0
*/
public class LambertConformalCrsFactory extends GoesrCrsFactory {
@Override
protected String getProjectionName() {
return "Lambert_Conformal_Conic_1SP";
}
@Override
protected void addSpecificParameters(Variable projectionVariable,
ParameterValueGroup parameters) throws GoesrProjectionException {
setDoubleParameter(projectionVariable, "standard_parallel", parameters,
"latitude_of_origin");
setDoubleParameter(projectionVariable, "longitude_of_central_meridian",
parameters, "longitude_of_origin");
}
}

View file

@ -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.
**/
package com.raytheon.uf.edex.plugin.goesr.geospatial.crs;
import org.opengis.parameter.ParameterValueGroup;
import ucar.nc2.Variable;
import com.raytheon.uf.edex.plugin.goesr.exception.GoesrProjectionException;
/**
* A class representation of the GOES-R Mercator projection information
* contained in the GOES-R netCDF file.
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------- -------- ----------- --------------------------
* Jun 01, 2012 796 jkorman Initial creation
* Jul 05, 2013 2123 mschenke Refactored to be CRS factory
* Apr 17, 2015 4336 bsteffen Converted to be only a CRS factory.
*
* </pre>
*
* @author jkorman
* @version 1.0
*/
public class MercatorCrsFactory extends GoesrCrsFactory {
@Override
protected String getProjectionName() {
return "Mercator_2SP";
}
@Override
protected void addSpecificParameters(Variable projectionVariable,
ParameterValueGroup parameters) throws GoesrProjectionException {
setDoubleParameter(projectionVariable, "standard_parallel", parameters,
"standard_parallel_1");
setDoubleParameter(projectionVariable,
"longitude_of_projection_origin", parameters,
"central_meridian");
}
}

View file

@ -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.
**/
package com.raytheon.uf.edex.plugin.goesr.geospatial.crs;
import org.opengis.parameter.ParameterValueGroup;
import ucar.nc2.Variable;
import com.raytheon.uf.edex.plugin.goesr.exception.GoesrProjectionException;
/**
* A class representation of the GOES-R PolarStereographic projection
* information contained in the GOES-R netCDF file.
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------- -------- --------- --------------------------------------------
* Jun 01, 2012 796 jkorman Initial creation
* Jul 05, 2013 2123 mschenke Refactored to be CRS factory
* Apr 17, 2015 4336 bsteffen Converted to be only a CRS factory.
* May 02, 2016 5612 bsteffen Use standard_parallel attribute to define
* standard_parallel_1
*
* </pre>
*
* @author jkorman
*/
public class NorthPolarStereographicCrsFactory extends GoesrCrsFactory {
@Override
protected String getProjectionName() {
return "Stereographic_North_Pole";
}
@Override
protected void addSpecificParameters(Variable projectionVariable,
ParameterValueGroup parameters) throws GoesrProjectionException {
setDoubleParameter(projectionVariable, "standard_parallel",
parameters, "standard_parallel_1");
setDoubleParameter(projectionVariable,
"straight_vertical_longitude_from_pole", parameters,
"central_meridian");
}
}

View file

@ -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.goesr.geospatial.envelope;
import javax.measure.unit.SI;
import org.opengis.referencing.crs.CoordinateReferenceSystem;
import ucar.nc2.Attribute;
import ucar.nc2.NetcdfFile;
import com.raytheon.uf.edex.plugin.goesr.geospatial.GoesrSatelliteHeight;
/**
*
* Base class for {@link GoesrEnvelopeFactory}s that determine the envelope by
* looking at global attributes on the netcdf file. This class provides a common
* method for calculating nx,ny,dx,dy within an envelope and subclasses can
* calculate minX and minY either by using the product center or tile center
* attributes. Since the Level2 data types do not set these attributes,
* factories of this type are generally only applicable to the sectorized CMI
* files. This factory converts meter spacing into angular spacing using
* {@link GoesrEnvelopeFactory#RADIANS_PER_KM_SPACING} so it is only suitable
* for GOES-R data and should not be used for Himawari-8 data.
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------- -------- ----------- --------------------------
* Apr 17, 2015 4336 bsteffen Initial creation
* Mar 15, 2016 5456 bsteffen Update javadoc to point out himawari deficiency
*
* </pre>
*
* @author bsteffen
* @version 1.0
*/
public abstract class AbstractCenterEnvelopeFactory implements
GoesrEnvelopeFactory {
protected GoesrEnvelope loadDistanceNumber(NetcdfFile cdfFile,
CoordinateReferenceSystem crs) {
GoesrEnvelope envelope = new GoesrEnvelope();
int tileNx;
int tileNy;
int productNx;
int productNy;
int offsetx;
int offsety;
Attribute attr = cdfFile.findGlobalAttribute("pixel_x_size");
if (attr == null) {
return null;
} else {
envelope.setDx(attr.getNumericValue().doubleValue() * 1000);
}
attr = cdfFile.findGlobalAttribute("pixel_y_size");
if (attr == null) {
return null;
} else {
envelope.setDy(attr.getNumericValue().doubleValue() * 1000);
}
attr = cdfFile.findGlobalAttribute("product_tile_width");
if (attr == null) {
return null;
} else {
tileNx = attr.getNumericValue().intValue();
}
attr = cdfFile.findGlobalAttribute("product_tile_height");
if (attr == null) {
return null;
} else {
tileNy = attr.getNumericValue().intValue();
}
attr = cdfFile.findGlobalAttribute("product_columns");
if (attr == null) {
return null;
} else {
productNx = attr.getNumericValue().intValue();
}
attr = cdfFile.findGlobalAttribute("product_rows");
if (attr == null) {
return null;
} else {
productNy = attr.getNumericValue().intValue();
}
attr = cdfFile.findGlobalAttribute("tile_column_offset");
if (attr == null) {
return null;
} else {
offsetx = attr.getNumericValue().intValue();
}
attr = cdfFile.findGlobalAttribute("tile_row_offset");
if (attr == null) {
return null;
} else {
offsety = attr.getNumericValue().intValue();
}
/*
* When the productNx is not evenly divisible by the tileNx the tileNx
* is not the actual tileNx. For example if productNx is 1808 tiled to
* 1024 than all tiles will have a tileNx of 1024 even the the rightmost
* tiles have an actual nx of 784
*/
tileNx = Math.min(productNx - offsetx, tileNx);
tileNy = Math.min(productNy - offsety, tileNy);
envelope.setNx(tileNx);
envelope.setNy(tileNy);
double orbitalHeight = GoesrSatelliteHeight.getOrbitalHeight(crs,
SI.KILOMETER);
if (!Double.isNaN(orbitalHeight)) {
// Geostationary dx/dy hack;
double dx = envelope.getDx();
double angularSeparation = (dx / 1000.0)
* RADIANS_PER_KM_SPACING;
dx = Math.tan(angularSeparation)
* orbitalHeight;
envelope.setDx(dx * 1000);
double dy = envelope.getDy();
angularSeparation = (dy / 1000.0)
* RADIANS_PER_KM_SPACING;
dy = Math.tan(angularSeparation)
* orbitalHeight;
envelope.setDy(dy * 1000);
}
return envelope;
}
}

View file

@ -1,121 +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.goesr.geospatial.envelope;
import java.text.ParseException;
import java.text.ParsePosition;
import javax.measure.unit.SI;
import javax.measure.unit.Unit;
import javax.measure.unit.UnitFormat;
import org.opengis.referencing.crs.CoordinateReferenceSystem;
import ucar.nc2.Attribute;
import ucar.nc2.NetcdfFile;
import ucar.nc2.Variable;
import com.raytheon.uf.edex.plugin.goesr.exception.GoesrProjectionException;
import com.raytheon.uf.edex.plugin.goesr.geospatial.GoesrSatelliteHeight;
/**
*
* Base class for all envelope factories that find envelopes using the x and y
* dimension variables.
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------- -------- ----------- --------------------------
* Apr 17, 2015 4336 bsteffen Initial creation
*
* </pre>
*
* @author bsteffen
* @version 1.0
*/
public abstract class AbstractDimensionEnvelopeFactory implements
GoesrEnvelopeFactory {
@Override
public GoesrEnvelope getEnvelope(NetcdfFile cdfFile,
CoordinateReferenceSystem crs) throws GoesrProjectionException {
Variable x = cdfFile.findVariable("x");
if (x == null || !x.isCoordinateVariable()) {
return null;
}
Variable y = cdfFile.findVariable("y");
if (y == null || !y.isCoordinateVariable()) {
return null;
}
return getEnvelopeFromDimensions(cdfFile, crs, x, y);
}
protected abstract GoesrEnvelope getEnvelopeFromDimensions(
NetcdfFile cdfFile, CoordinateReferenceSystem crs, Variable x,
Variable y) throws GoesrProjectionException;
protected static double findDistance(CoordinateReferenceSystem crs,
double scale, Variable dimension) throws GoesrProjectionException {
Attribute attr = dimension.findAttribute("units");
if (attr == null) {
return scale;
}
String units = attr.getStringValue();
return findDistance(crs, scale, units);
}
protected static double findDistance(CoordinateReferenceSystem crs,
double scale, String units) throws GoesrProjectionException {
if ("meters".equals(units)) {
return scale;
} else if ("rad".equals(units) || "radian".equals(units)) {
double orbitalHeight = GoesrSatelliteHeight.getOrbitalHeight(crs,
SI.METER);
if (Double.isNaN(orbitalHeight)) {
return 1000 * scale / RADIANS_PER_KM_SPACING;
} else {
return Math.tan(scale) * orbitalHeight;
}
} else if ("microradian".equals(units) || "microrad".equals(units)) {
return findDistance(crs, scale / 1000 / 1000, "rad");
} else {
try {
Unit<?> u = UnitFormat.getUCUMInstance().parseProductUnit(
units, new ParsePosition(0));
if (u.isCompatible(SI.METER)) {
u.getConverterTo(SI.METER).convert(scale);
} else {
throw new GoesrProjectionException("Incompatible units: "
+ units);
}
} catch (ParseException e) {
throw new GoesrProjectionException("Unrecognized units: "
+ units);
}
}
return scale;
}
}

View file

@ -1,102 +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.goesr.geospatial.envelope;
import java.io.IOException;
import org.opengis.referencing.crs.CoordinateReferenceSystem;
import ucar.nc2.NetcdfFile;
import ucar.nc2.Variable;
import com.raytheon.uf.edex.plugin.goesr.exception.GoesrProjectionException;
/**
*
* Uses the scale and offset and size of the x and y variables to determine the
* size of the product. This factory should work for all GOES-R products.
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------- -------- ----------- --------------------------
* Apr 17, 2015 4336 bsteffen Initial creation
* Mar 15, 2016 5456 bsteffen Add 0.5 to shift from cell center to cell corner.
*
* </pre>
*
* @author bsteffen
* @version 1.0
*/
public class DimensionEnvelopeFactory extends AbstractDimensionEnvelopeFactory {
@Override
public GoesrEnvelope getEnvelopeFromDimensions(NetcdfFile cdfFile,
CoordinateReferenceSystem crs, Variable x, Variable y)
throws GoesrProjectionException {
int nx = x.getDimension(0).getLength();
int ny = y.getDimension(0).getLength();
double scalex = x.findAttribute("scale_factor").getNumericValue()
.doubleValue();
double offsetx = x.findAttribute("add_offset").getNumericValue()
.doubleValue();
double scaley = y.findAttribute("scale_factor").getNumericValue()
.doubleValue();
double offsety = y.findAttribute("add_offset").getNumericValue()
.doubleValue();
double dx = findDistance(crs, scalex, x);
double dy = findDistance(crs, scaley, y);
double minx;
double miny;
try {
minx = x.read().getInt(0);
miny = y.read().getInt(0);
} catch (IOException e) {
throw new GoesrProjectionException(
"Unable to read min values of x or y dimesnions.", e);
}
/*
* The variables define the position of the center of the data value,
* expand by half a pixel to get the edge of the "image"
*/
minx -= 0.5;
miny -= 0.5;
/* Convert from pixel spacing to meter spacing. */
minx = (minx + offsetx / scalex) * dx;
miny = (miny + offsety / scaley) * dy;
GoesrEnvelope envelope = new GoesrEnvelope();
envelope.setNx(nx);
envelope.setNy(ny);
envelope.setDx(dx);
envelope.setDy(dy);
envelope.setMinX(minx);
envelope.setMinY(miny);
return envelope;
}
}

View file

@ -1,128 +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.goesr.geospatial.envelope;
import com.raytheon.uf.common.dataplugin.satellite.SatMapCoverage;
/**
*
* Defines the non-crs attributes needed to construct a {@link SatMapCoverage}.
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------- -------- ----------- --------------------------
* Apr 17, 2015 4336 bsteffen Initial creation
*
* </pre>
*
* @author bsteffen
* @version 1.0
*/
public class GoesrEnvelope {
private double minX;
private double minY;
private Integer nx;
private Integer ny;
private double dx;
private double dy;
public double getMinX() {
return minX;
}
public void setMinX(double minX) {
this.minX = minX;
}
public double getMinY() {
return minY;
}
public void setMinY(double minY) {
this.minY = minY;
}
public Integer getNx() {
return nx;
}
public void setNx(Integer nx) {
this.nx = nx;
}
public Integer getNy() {
return ny;
}
public void setNy(Integer ny) {
this.ny = ny;
}
public double getDx() {
return dx;
}
public void setDx(double dx) {
this.dx = dx;
}
public double getDy() {
return dy;
}
public void setDy(double dy) {
this.dy = dy;
}
public double getWidth() {
return nx * dx;
}
public double getHeight() {
return ny * dy;
}
public void normalize() {
if (dx < 0) {
minX = minX + dx * nx;
dx = -1 * dx;
}
if (dy < 0) {
minY = minY + dy * ny;
dy = -1 * dy;
}
}
@Override
public String toString() {
return "GoesrEnvelope [minX=" + minX + ", minY=" + minY + ", nx=" + nx
+ ", ny=" + ny + ", dx=" + dx + ", dy=" + dy + "]";
}
}

View file

@ -1,61 +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.goesr.geospatial.envelope;
import org.opengis.referencing.crs.CoordinateReferenceSystem;
import ucar.nc2.NetcdfFile;
import com.raytheon.uf.edex.plugin.goesr.exception.GoesrProjectionException;
/**
* Because there are multiple ways to define an envelope within a GOES-R
* {@link NetcdfFile} a common interface is needed for extracting this
* inofrmation using different methodoligies.
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------- -------- ----------- --------------------------
* Apr 17, 2015 4336 bsteffen Initial creation
* Mar 15, 2016 5456 bsteffen Update javadoc of RADIANS_PER_KM_SPACING
*
* </pre>
*
* @author bsteffen
* @version 1.0
*/
public interface GoesrEnvelopeFactory {
/**
* Default conversion value that is used to convert from an angle between
* the satellite and a point of earth into a meter spacing. This value is an
* approximation and a better value can usually be determined by using the
* actual orbital height. This value is an approximation defined for GOES-R
* data and may not be valid for other satellites.
*/
public static final double RADIANS_PER_KM_SPACING = 28 * 1e-6;
public GoesrEnvelope getEnvelope(NetcdfFile cdfFile,
CoordinateReferenceSystem crs) throws GoesrProjectionException;
}

View file

@ -1,116 +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.goesr.geospatial.envelope;
import java.io.IOException;
import org.opengis.referencing.crs.CoordinateReferenceSystem;
import ucar.ma2.Array;
import ucar.nc2.NetcdfFile;
import ucar.nc2.Variable;
import com.raytheon.uf.edex.plugin.goesr.exception.GoesrProjectionException;
/**
*
* Uses the x and y variables to determine nx and ny, then use the
* x_image_bounds and y_image_bounds to find the min/max extents of the data and
* divide by nx or ny to find dx or dy. Sectorized CMI data does not include the
* image_bounds and will not work with this image factory.
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------- -------- ----------- --------------------------
* Apr 17, 2015 4336 bsteffen Initial creation
*
* </pre>
*
* @author bsteffen
* @version 1.0
*/
public class ImageBoundsEnvelopeFactory extends
AbstractDimensionEnvelopeFactory {
@Override
public GoesrEnvelope getEnvelopeFromDimensions(NetcdfFile cdfFile,
CoordinateReferenceSystem crs, Variable x, Variable y)
throws GoesrProjectionException {
int nx = x.getDimension(0).getLength();
int ny = y.getDimension(0).getLength();
double minx;
double maxx;
double miny;
double maxy;
Variable xBounds = cdfFile.findVariable("x_image_bounds");
if (xBounds != null && xBounds.getSize() == 2) {
try {
Array xData = xBounds.read();
minx = xData.getFloat(0);
maxx = xData.getFloat(1);
} catch (IOException e) {
throw new GoesrProjectionException(
"Error reading x_image_bounds");
}
} else {
return null;
}
Variable yBounds = cdfFile.findVariable("y_image_bounds");
if (yBounds != null && yBounds.getSize() == 2) {
try {
Array yData = yBounds.read();
miny = yData.getFloat(0);
maxy = yData.getFloat(1);
} catch (IOException e) {
throw new GoesrProjectionException(
"Error reading y_image_bounds");
}
} else {
return null;
}
double dx_native = (maxx - minx) / nx;
double dy_native = (maxy - miny) / ny;
double dx = findDistance(crs, dx_native, x);
double dy = findDistance(crs, dy_native, y);
minx = minx * dx / dx_native;
maxx = maxx * dx / dx_native;
miny = miny * dy / dy_native;
maxy = maxy * dy / dy_native;
GoesrEnvelope envelope = new GoesrEnvelope();
envelope.setNx(nx);
envelope.setNy(ny);
envelope.setDx(dx);
envelope.setDy(dy);
envelope.setMinX(minx);
envelope.setMinY(miny);
return envelope;
}
}

View file

@ -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.
**/
package com.raytheon.uf.edex.plugin.goesr.geospatial.envelope;
import org.geotools.geometry.DirectPosition2D;
import org.geotools.referencing.CRS;
import org.geotools.referencing.crs.DefaultGeographicCRS;
import org.opengis.referencing.FactoryException;
import org.opengis.referencing.crs.CoordinateReferenceSystem;
import org.opengis.referencing.operation.TransformException;
import ucar.nc2.Attribute;
import ucar.nc2.NetcdfFile;
import com.raytheon.uf.edex.plugin.goesr.exception.GoesrProjectionException;
/**
*
* Calculate an envelope by offseting a tile withn a product using the tile
* offsets and the product center. This method should work for any sectorized
* CMI data.
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------- -------- ----------- --------------------------
* Apr 17, 2015 4336 bsteffen Initial creation
*
* </pre>
*
* @author bsteffen
* @version 1.0
*/
public class ProductCenterEnvelopeFactory extends AbstractCenterEnvelopeFactory {
@Override
public GoesrEnvelope getEnvelope(NetcdfFile cdfFile,
CoordinateReferenceSystem crs) throws GoesrProjectionException {
GoesrEnvelope envelope = loadDistanceNumber(cdfFile, crs);
if (envelope == null) {
return null;
}
DirectPosition2D center = new DirectPosition2D();
int productNx;
int productNy;
int offsetx;
int offsety;
Attribute attr = cdfFile.findGlobalAttribute("product_center_longitude");
if(attr == null){
return null;
}else{
center.x = attr.getNumericValue().doubleValue();
}
attr = cdfFile.findGlobalAttribute("product_center_latitude");
if (attr == null) {
return null;
} else {
center.y = attr.getNumericValue().doubleValue();
}
attr = cdfFile.findGlobalAttribute("product_columns");
if (attr == null) {
return null;
} else {
productNx = attr.getNumericValue().intValue();
}
attr = cdfFile.findGlobalAttribute("product_rows");
if (attr == null) {
return null;
} else {
productNy = attr.getNumericValue().intValue();
}
attr = cdfFile.findGlobalAttribute("tile_column_offset");
if (attr == null) {
return null;
} else {
offsetx = attr.getNumericValue().intValue();
}
attr = cdfFile.findGlobalAttribute("tile_row_offset");
if (attr == null) {
return null;
} else {
offsety = attr.getNumericValue().intValue();
}
try {
CRS.findMathTransform(DefaultGeographicCRS.WGS84, crs, true)
.transform(center, center);
} catch (TransformException | FactoryException e) {
throw new GoesrProjectionException(
"Error transforming product center point to CRS space", e);
}
double left = center.x + (offsetx - productNx / 2.0) * envelope.getDx();
double top = center.y - (offsety - productNy / 2.0) * envelope.getDy();
double bottom = top - envelope.getHeight();
envelope.setMinX(left);
envelope.setMinY(bottom);
return envelope;
}
}

View file

@ -1,98 +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.goesr.geospatial.envelope;
import org.geotools.geometry.DirectPosition2D;
import org.geotools.referencing.CRS;
import org.geotools.referencing.crs.DefaultGeographicCRS;
import org.opengis.referencing.FactoryException;
import org.opengis.referencing.crs.CoordinateReferenceSystem;
import org.opengis.referencing.operation.TransformException;
import ucar.ma2.DataType;
import ucar.nc2.Attribute;
import ucar.nc2.NetcdfFile;
import com.raytheon.uf.edex.plugin.goesr.exception.GoesrProjectionException;
/**
*
* Calculates envelope based off the tile center defined in the global
* attributes of a {@link NetcdfFile}. This is known to fail for Himawari data
* where the center of the tiles is not on the disk.
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------- -------- ----------- --------------------------
* Apr 17, 2015 4336 bsteffen Initial creation
*
* </pre>
*
* @author bsteffen
* @version 1.0
*/
public class TileCenterEnvelopeFactory extends AbstractCenterEnvelopeFactory {
@Override
public GoesrEnvelope getEnvelope(NetcdfFile cdfFile,
CoordinateReferenceSystem crs) throws GoesrProjectionException {
GoesrEnvelope envelope = loadDistanceNumber(cdfFile, crs);
if (envelope == null) {
return null;
}
DirectPosition2D center = new DirectPosition2D();
Attribute attr = cdfFile.findGlobalAttribute("tile_center_longitude");
/*
* The empty string is used by himawari when the center of a tile is off
* the world, since all valid data is numeric assume any string is
* invalid.
*/
if (attr == null || attr.getDataType() == DataType.STRING) {
return null;
}else{
center.x = attr.getNumericValue().doubleValue();
}
attr = cdfFile.findGlobalAttribute("tile_center_latitude");
if (attr == null || attr.getDataType() == DataType.STRING) {
return null;
} else {
center.y = attr.getNumericValue().doubleValue();
}
try {
CRS.findMathTransform(DefaultGeographicCRS.WGS84, crs, true)
.transform(center, center);
} catch (TransformException | FactoryException e) {
throw new GoesrProjectionException(
"Error transforming product center point to CRS space", e);
}
double minX = center.x - envelope.getWidth() / 2.0;
double minY = center.y - envelope.getHeight() / 2.0;
envelope.setMinX(minX);
envelope.setMinY(minY);
return envelope;
}
}

View file

@ -1,191 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
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.
-->
<bundle>
<displayList>
<displays xsi:type="d2DMapRenderableDisplay" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<descriptor xsi:type="mapDescriptor">
<!-- best res satellite resource -->
<resource>
<loadProperties>
<capabilities>
<capability xsi:type="imagingCapability" />
<capability xsi:type="colorMapCapability">
<colorMapParameters colorMapName="${colormap}" />
</capability>
</capabilities>
</loadProperties>
<resourceData xsi:type="satBestResResourceData" inclusionFactor="${inclusionFactor;0.6}">
<metadataMap>
<mapping key="pluginName">
<constraint constraintValue="satellite"
constraintType="EQUALS" />
</mapping>
<mapping key="physicalElement">
<constraint constraintValue="${element}"
constraintType="EQUALS" />
</mapping>
<mapping key="sectorID">
<constraint constraintValue="WFD,EFD,WCONUS,ECONUS"
constraintType="IN" />
</mapping>
<mapping key="creatingEntity">
<constraint constraintValue="${entity}"
constraintType="LIKE" />
</mapping>
</metadataMap>
<resource>
<properties>
<pdProps maxDisplayWidth="50000000" minDisplayWidth="6000000" />
</properties>
<resourceData xsi:type="satBlendedResourceData" timeMatchMode="${timeMatchMode;EVERY_IMAGE}">
<resource>
<resourceData xsi:type="satResourceData">
<binOffset posOffset="150" negOffset="150"/>
<metadataMap>
<mapping key="pluginName">
<constraint constraintValue="satellite"
constraintType="EQUALS" />
</mapping>
<mapping key="physicalElement">
<constraint constraintValue="${element}"
constraintType="EQUALS" />
</mapping>
<mapping key="sectorID">
<constraint constraintValue="${secondaryPosition;E}FD"
constraintType="EQUALS" />
</mapping>
<mapping key="creatingEntity">
<constraint constraintValue="${entity}"
constraintType="LIKE" />
</mapping>
</metadataMap>
</resourceData>
</resource>
<resource>
<resourceData xsi:type="satResourceData">
<binOffset posOffset="150" negOffset="150"/>
<metadataMap>
<mapping key="pluginName">
<constraint constraintValue="satellite"
constraintType="EQUALS" />
</mapping>
<mapping key="physicalElement">
<constraint constraintValue="${element}"
constraintType="EQUALS" />
</mapping>
<mapping key="sectorID">
<constraint constraintValue="${primaryPosition;W}FD"
constraintType="EQUALS" />
</mapping>
<mapping key="creatingEntity">
<constraint constraintValue="${entity}"
constraintType="LIKE" />
</mapping>
</metadataMap>
</resourceData>
</resource>
</resourceData>
</resource>
<resource>
<properties>
<pdProps maxDisplayWidth="10000000" minDisplayWidth="2500000" />
</properties>
<resourceData xsi:type="satBlendedResourceData" timeMatchMode="${timeMatchMode;EVERY_IMAGE}">
<resource>
<resourceData xsi:type="satResourceData">
<binOffset posOffset="150" negOffset="150"/>
<metadataMap>
<mapping key="pluginName">
<constraint constraintValue="satellite"
constraintType="EQUALS" />
</mapping>
<mapping key="physicalElement">
<constraint constraintValue="${element}"
constraintType="EQUALS" />
</mapping>
<mapping key="sectorID">
<constraint constraintValue="${secondaryPosition;E}CONUS"
constraintType="EQUALS" />
</mapping>
<mapping key="creatingEntity">
<constraint constraintValue="${entity}"
constraintType="LIKE" />
</mapping>
</metadataMap>
</resourceData>
</resource>
<resource>
<resourceData xsi:type="satResourceData">
<binOffset posOffset="150" negOffset="150"/>
<metadataMap>
<mapping key="pluginName">
<constraint constraintValue="satellite"
constraintType="EQUALS" />
</mapping>
<mapping key="physicalElement">
<constraint constraintValue="${element}"
constraintType="EQUALS" />
</mapping>
<mapping key="sectorID">
<constraint constraintValue="${primaryPosition;W}CONUS"
constraintType="EQUALS" />
</mapping>
<mapping key="creatingEntity">
<constraint constraintValue="${entity}"
constraintType="LIKE" />
</mapping>
</metadataMap>
</resourceData>
</resource>
</resourceData>
</resource>
<resource>
<properties>
<pdProps maxDisplayWidth="2500000" minDisplayWidth="0" />
</properties>
<resourceData xsi:type="satResourceData">
<binOffset posOffset="150" negOffset="150"/>
<metadataMap>
<mapping key="pluginName">
<constraint constraintValue="satellite"
constraintType="EQUALS" />
</mapping>
<mapping key="physicalElement">
<constraint constraintValue="${element}"
constraintType="EQUALS" />
</mapping>
<mapping key="sectorID">
<constraint constraintValue="${primaryPosition;W}CONUS"
constraintType="EQUALS" />
</mapping>
<mapping key="creatingEntity">
<constraint constraintValue="${entity}"
constraintType="LIKE" />
</mapping>
</metadataMap>
</resourceData>
</resource>
</resourceData>
</resource>
</descriptor>
</displays>
</displayList>
</bundle>

View file

@ -1,164 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
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.
-->
<bundle>
<displayList>
<displays xsi:type="d2DMapRenderableDisplay" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<descriptor xsi:type="mapDescriptor">
<!-- best res satellite resource -->
<resource>
<loadProperties>
<capabilities>
<capability xsi:type="imagingCapability" />
<capability xsi:type="colorMapCapability">
<colorMapParameters colorMapName="${colormap}" />
</capability>
</capabilities>
</loadProperties>
<resourceData xsi:type="satBestResResourceData" inclusionFactor="${inclusionFactor;0.6}">
<metadataMap>
<mapping key="pluginName">
<constraint constraintValue="satellite"
constraintType="EQUALS" />
</mapping>
<mapping key="physicalElement">
<constraint constraintValue="${element}"
constraintType="EQUALS" />
</mapping>
<mapping key="sectorID">
<constraint constraintValue="WFD,EFD,${region;AK}REGI"
constraintType="IN" />
</mapping>
<mapping key="creatingEntity">
<constraint constraintValue="${entity}"
constraintType="LIKE" />
</mapping>
</metadataMap>
<resource>
<properties>
<pdProps maxDisplayWidth="50000000" minDisplayWidth="${regionWidth;5000000}" />
</properties>
<resourceData xsi:type="satBlendedResourceData" timeMatchMode="${timeMatchMode;EVERY_IMAGE}">
<resource>
<resourceData xsi:type="satResourceData">
<binOffset posOffset="150" negOffset="150"/>
<metadataMap>
<mapping key="pluginName">
<constraint constraintValue="satellite"
constraintType="EQUALS" />
</mapping>
<mapping key="physicalElement">
<constraint constraintValue="${element}"
constraintType="EQUALS" />
</mapping>
<mapping key="sectorID">
<constraint constraintValue="${secondaryPosition;E}FD"
constraintType="EQUALS" />
</mapping>
<mapping key="creatingEntity">
<constraint constraintValue="${entity}"
constraintType="LIKE" />
</mapping>
</metadataMap>
</resourceData>
</resource>
<resource>
<resourceData xsi:type="satResourceData">
<binOffset posOffset="150" negOffset="150"/>
<metadataMap>
<mapping key="pluginName">
<constraint constraintValue="satellite"
constraintType="EQUALS" />
</mapping>
<mapping key="physicalElement">
<constraint constraintValue="${element}"
constraintType="EQUALS" />
</mapping>
<mapping key="sectorID">
<constraint constraintValue="${primaryPosition;W}FD"
constraintType="EQUALS" />
</mapping>
<mapping key="creatingEntity">
<constraint constraintValue="${entity}"
constraintType="LIKE" />
</mapping>
</metadataMap>
</resourceData>
</resource>
</resourceData>
</resource>
<resource>
<properties>
<pdProps maxDisplayWidth="${regionWidth;5000000}" minDisplayWidth="0" />
</properties>
<resourceData xsi:type="satResourceData">
<binOffset posOffset="150" negOffset="150"/>
<metadataMap>
<mapping key="pluginName">
<constraint constraintValue="satellite"
constraintType="EQUALS" />
</mapping>
<mapping key="physicalElement">
<constraint constraintValue="${element}"
constraintType="EQUALS" />
</mapping>
<mapping key="sectorID">
<constraint constraintValue="${region;AK}REGI"
constraintType="EQUALS" />
</mapping>
<mapping key="creatingEntity">
<constraint constraintValue="${entity}"
constraintType="LIKE" />
</mapping>
</metadataMap>
</resourceData>
</resource>
<resource>
<properties>
<pdProps maxDisplayWidth="${regionWidth;5000000}" minDisplayWidth="0" />
</properties>
<resourceData xsi:type="satResourceData">
<binOffset posOffset="150" negOffset="150"/>
<metadataMap>
<mapping key="pluginName">
<constraint constraintValue="satellite"
constraintType="EQUALS" />
</mapping>
<mapping key="physicalElement">
<constraint constraintValue="${element}"
constraintType="EQUALS" />
</mapping>
<mapping key="sectorID">
<constraint constraintValue="${region;AK}REGI"
constraintType="EQUALS" />
</mapping>
<mapping key="creatingEntity">
<constraint constraintValue="${entity}"
constraintType="LIKE" />
</mapping>
</metadataMap>
</resourceData>
</resource>
</resourceData>
</resource>
</descriptor>
</displays>
</displayList>
</bundle>

View file

@ -1,89 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
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.
-->
<bundle>
<displayList>
<displays xsi:type="d2DMapRenderableDisplay" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<descriptor xsi:type="mapDescriptor">
<resource>
<loadProperties >
<capabilities>
<capability xsi:type="colorMapCapability">
<colorMapParameters colorMapName="${colormap}"/>
</capability>
<capability xsi:type="imagingCapability"/>
</capabilities>
<perspectiveProperty xsi:type="d2dLoadProperties" overlayMatchTolerance="1"/>
</loadProperties>
<resourceData xsi:type="satBlendedResourceData" timeMatchMode="${timeMatchMode;EVERY_IMAGE}">
<resource>
<loadProperties>
<capabilities>
<capability xsi:type="imagingCapability" />
</capabilities>
</loadProperties>
<resourceData xsi:type="satResourceData">
<binOffset posOffset="150" negOffset="150"/>
<metadataMap>
<mapping key="pluginName">
<constraint constraintValue="satellite" constraintType="EQUALS"/>
</mapping>
<mapping key="physicalElement">
<constraint constraintValue="${element}" constraintType="IN"/>
</mapping>
<mapping key="sectorID">
<constraint constraintValue="${sector0}" constraintType="IN"/>
</mapping>
<mapping key="creatingEntity">
<constraint constraintValue="${entity}" constraintType="LIKE"/>
</mapping>
</metadataMap>
</resourceData>
</resource>
<resource>
<loadProperties>
<capabilities>
<capability xsi:type="imagingCapability"/>
</capabilities>
</loadProperties>
<resourceData xsi:type="satResourceData">
<binOffset posOffset="150" negOffset="150"/>
<metadataMap>
<mapping key="pluginName">
<constraint constraintValue="satellite" constraintType="EQUALS"/>
</mapping>
<mapping key="physicalElement">
<constraint constraintValue="${element}" constraintType="IN"/>
</mapping>
<mapping key="sectorID">
<constraint constraintValue="${sector1}" constraintType="IN"/>
</mapping>
<mapping key="creatingEntity">
<constraint constraintValue="${entity}" constraintType="LIKE"/>
</mapping>
</metadataMap>
</resourceData>
</resource>
</resourceData>
</resource>
</descriptor>
</displays>
</displayList>
</bundle>

View file

@ -1,97 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
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.
-->
<bundle xmlns:ns2="http://www.example.org/productType" xmlns:ns3="group">
<displayList>
<displays xsi:type="d2DMapRenderableDisplay"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<descriptor xsi:type="mapDescriptor">
<resource>
<loadProperties loadWithoutData="true">
<capabilities>
<capability xsi:type="colorableCapability"
colorAsString="white" />
</capabilities>
</loadProperties>
<resourceData xsi:type="trueColorResourceGroupData">
<groupName>${productName}</groupName>
<channelResource channelName="${redElement}">
<channel>RED</channel>
<resourceData xsi:type="satResourceData">
<metadataMap>
<mapping key="creatingEntity">
<constraint constraintValue="${entity}" constraintType="LIKE" />
</mapping>
<mapping key="physicalElement">
<constraint constraintValue="${redElement}" constraintType="EQUALS" />
</mapping>
<mapping key="sectorID">
<constraint constraintValue="${sector}" constraintType="EQUALS" />
</mapping>
<mapping key="pluginName">
<constraint constraintValue="satellite" constraintType="EQUALS" />
</mapping>
</metadataMap>
</resourceData>
</channelResource>
<channelResource channelName="${greenElement}">
<channel>GREEN</channel>
<resourceData xsi:type="satResourceData">
<metadataMap>
<mapping key="creatingEntity">
<constraint constraintValue="${entity}" constraintType="LIKE" />
</mapping>
<mapping key="physicalElement">
<constraint constraintValue="${greenElement}" constraintType="EQUALS" />
</mapping>
<mapping key="sectorID">
<constraint constraintValue="${sector}" constraintType="EQUALS" />
</mapping>
<mapping key="pluginName">
<constraint constraintValue="satellite" constraintType="EQUALS" />
</mapping>
</metadataMap>
</resourceData>
</channelResource>
<channelResource channelName="${blueElement}">
<channel>BLUE</channel>
<resourceData xsi:type="satResourceData">
<metadataMap>
<mapping key="creatingEntity">
<constraint constraintValue="${entity}" constraintType="LIKE" />
</mapping>
<mapping key="physicalElement">
<constraint constraintValue="${blueElement}" constraintType="EQUALS" />
</mapping>
<mapping key="sectorID">
<constraint constraintValue="${sector}" constraintType="EQUALS" />
</mapping>
<mapping key="pluginName">
<constraint constraintValue="satellite" constraintType="EQUALS" />
</mapping>
</metadataMap>
</resourceData>
</channelResource>
</resourceData>
</resource>
</descriptor>
</displays>
</displayList>
</bundle>

View file

@ -1,29 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
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.
-->
<colorMap>
<color r="0.0" g="0.0" b="0.0" a="0.0" />
<color r="0.0" g="1.0" b="1.0" a="1.0" />
<color r="0.0" g="1.0" b="0.0" a="1.0" />
<color r="0.0" g="0.5" b="0.0" a="1.0" />
<color r="1.0" g="0.0" b="0.0" a="1.0" />
<color r="1.0" g="1.0" b="1.0" a="1.0" />
<color r="0.0" g="0.0" b="0.0" a="0.0" />
</colorMap>

View file

@ -1,31 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
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.
-->
<colorMap>
<color r="0.0" g="0.0" b="0.0" a="0.0" />
<color r="1.0" g="1.0" b="0.0" a="1.0" />
<color r="0.0" g="0.0" b="1.0" a="1.0" />
<color r="0.0" g="0.5" b="0.0" a="1.0" />
<color r="1.0" g="0.0" b="0.0" a="1.0" />
<color r="1.0" g="0.5" b="0.0" a="1.0" />
<color r="0.5" g="0.0" b="1.0" a="1.0" />
<color r="1.0" g="1.0" b="1.0" a="1.0" />
<color r="0.0" g="0.0" b="0.0" a="0.0" />
</colorMap>

View file

@ -1,25 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
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.
-->
<colorMap>
<color r="0.0" g="0.0" b="0.0" a="0.0" />
<color r="1.0" g="1.0" b="1.0" a="1.0" />
<color r="0.0" g="0.0" b="0.0" a="0.0" />
</colorMap>

View file

@ -1,473 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
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.
-->
<colorMap>
<color r="1.0000" g="1.0000" b="1.0000" a="0.0000" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.0086" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.0170" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.0253" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.0334" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.0414" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.0492" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.0569" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.0645" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.0719" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.0792" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.0864" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.0934" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.1004" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.1072" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.1139" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.1206" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.1271" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.1335" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.1399" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.1461" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.1523" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.1584" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.1644" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.1703" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.1761" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.1818" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.1875" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.1931" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.1987" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.2041" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.2095" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.2148" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.2201" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.2253" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.2304" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.2355" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.2405" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.2455" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.2504" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.2553" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.2601" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.2648" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.2695" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.2742" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.2788" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.2833" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.2878" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.2923" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.2967" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.3010" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.3054" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.3096" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.3139" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.3181" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.3222" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.3263" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.3304" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.3345" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.3385" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.3424" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.3464" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.3502" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.3541" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.3579" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.3617" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.3655" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.3692" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.3729" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.3766" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.3802" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.3838" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.3874" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.3909" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.3945" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.3979" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.4014" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.4048" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.4082" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.4116" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.4150" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.4183" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.4216" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.4249" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.4281" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.4314" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.4346" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.4378" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.4409" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.4440" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.4472" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.4502" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.4533" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.4564" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.4594" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.4624" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.4654" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.4683" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.4713" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.4742" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.4771" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.4800" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.4829" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.4857" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.4886" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.4914" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.4942" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.4969" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.4997" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.5024" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.5051" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.5079" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.5105" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.5132" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.5159" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.5185" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.5211" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.5237" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.5263" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.5289" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.5315" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.5340" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.5366" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.5391" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.5416" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.5441" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.5465" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.5490" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.5514" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.5539" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.5563" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.5587" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.5611" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.5635" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.5658" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.5682" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.5705" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.5729" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.5752" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.5775" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.5798" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.5821" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.5843" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.5866" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.5888" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.5911" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.5933" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.5955" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.5977" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.5999" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.6021" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.6042" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.6064" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.6085" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.6107" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.6128" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.6149" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.6170" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.6191" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.6212" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.6232" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.6253" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.6274" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.6294" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.6314" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.6335" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.6355" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.6375" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.6395" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.6415" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.6435" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.6454" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.6474" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.6493" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.6513" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.6532" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.6551" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.6571" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.6590" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.6609" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.6628" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.6646" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.6665" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.6684" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.6702" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.6721" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.6739" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.6758" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.6776" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.6794" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.6812" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.6830" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.6848" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.6866" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.6884" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.6902" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.6920" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.6937" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.6955" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.6972" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.6990" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7007" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7024" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7042" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7059" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7076" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7093" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7110" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7126" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7143" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7160" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7177" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7193" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7210" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7226" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7243" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7259" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7275" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7292" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7308" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7324" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7340" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7356" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7372" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7388" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7404" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7419" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7435" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7451" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7466" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7482" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7497" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7513" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7528" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7543" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7559" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7574" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7589" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7604" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7619" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7634" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7649" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7664" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7679" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7694" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7709" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7723" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7738" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7752" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7767" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7782" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7796" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7810" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7825" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7839" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7853" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7868" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7882" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7896" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7910" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7924" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7938" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7952" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7966" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7980" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.7993" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8007" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8021" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8035" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8048" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8062" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8075" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8089" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8102" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8116" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8129" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8142" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8156" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8169" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8182" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8195" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8209" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8222" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8235" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8248" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8261" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8274" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8287" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8299" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8312" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8325" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8338" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8351" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8363" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8376" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8388" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8401" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8414" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8426" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8439" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8451" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8463" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8476" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8488" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8500" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8513" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8525" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8537" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8549" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8561" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8573" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8585" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8597" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8609" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8621" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8633" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8645" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8657" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8669" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8681" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8692" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8704" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8716" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8727" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8739" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8751" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8762" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8774" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8785" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8797" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8808" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8820" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8831" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8842" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8854" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8865" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8876" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8887" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8899" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8910" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8921" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8932" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8943" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8954" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8965" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8976" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8987" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.8998" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9009" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9020" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9031" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9042" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9053" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9063" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9074" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9085" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9096" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9106" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9117" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9128" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9138" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9149" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9159" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9170" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9180" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9191" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9201" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9212" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9222" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9232" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9243" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9253" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9263" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9274" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9284" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9294" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9304" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9315" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9325" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9335" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9345" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9355" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9365" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9375" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9385" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9395" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9405" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9415" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9425" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9435" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9445" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9455" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9465" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9474" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9484" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9494" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9504" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9513" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9523" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9533" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9542" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9552" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9562" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9571" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9581" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9590" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9600" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9609" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9619" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9628" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9638" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9647" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9657" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9666" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9675" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9685" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9694" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9703" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9713" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9722" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9731" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9741" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9750" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9759" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9768" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9777" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9786" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9795" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9805" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9814" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9823" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9832" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9841" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9850" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9859" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9868" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9877" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9886" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9894" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9903" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9912" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9921" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9930" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9939" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9948" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9956" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9965" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9974" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9983" />
<color r="1.0000" g="1.0000" b="1.0000" a="0.9991" />
<color r="1.0000" g="1.0000" b="1.0000" a="1.0000" />
</colorMap>

View file

@ -1,622 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
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.
-->
<colorMap>
<color r="0.000" g="0.000" b="0.000" a="0.000" />
<color r="0.996" g="0.496" b="0.996" a="1.000" />
<color r="0.992" g="0.492" b="0.992" a="1.000" />
<color r="0.988" g="0.488" b="0.988" a="1.000" />
<color r="0.984" g="0.484" b="0.984" a="1.000" />
<color r="0.980" g="0.480" b="0.980" a="1.000" />
<color r="0.976" g="0.476" b="0.976" a="1.000" />
<color r="0.972" g="0.472" b="0.972" a="1.000" />
<color r="0.968" g="0.468" b="0.968" a="1.000" />
<color r="0.964" g="0.464" b="0.964" a="1.000" />
<color r="0.960" g="0.460" b="0.960" a="1.000" />
<color r="0.956" g="0.456" b="0.956" a="1.000" />
<color r="0.952" g="0.452" b="0.952" a="1.000" />
<color r="0.948" g="0.448" b="0.948" a="1.000" />
<color r="0.944" g="0.444" b="0.944" a="1.000" />
<color r="0.940" g="0.440" b="0.940" a="1.000" />
<color r="0.936" g="0.436" b="0.936" a="1.000" />
<color r="0.932" g="0.432" b="0.932" a="1.000" />
<color r="0.928" g="0.428" b="0.928" a="1.000" />
<color r="0.924" g="0.424" b="0.924" a="1.000" />
<color r="0.920" g="0.420" b="0.920" a="1.000" />
<color r="0.916" g="0.416" b="0.916" a="1.000" />
<color r="0.912" g="0.412" b="0.912" a="1.000" />
<color r="0.908" g="0.408" b="0.908" a="1.000" />
<color r="0.904" g="0.404" b="0.904" a="1.000" />
<color r="0.900" g="0.400" b="0.900" a="1.000" />
<color r="0.896" g="0.396" b="0.896" a="1.000" />
<color r="0.892" g="0.392" b="0.892" a="1.000" />
<color r="0.888" g="0.388" b="0.888" a="1.000" />
<color r="0.884" g="0.384" b="0.884" a="1.000" />
<color r="0.880" g="0.380" b="0.880" a="1.000" />
<color r="0.876" g="0.376" b="0.876" a="1.000" />
<color r="0.872" g="0.372" b="0.872" a="1.000" />
<color r="0.868" g="0.368" b="0.868" a="1.000" />
<color r="0.864" g="0.364" b="0.864" a="1.000" />
<color r="0.860" g="0.360" b="0.860" a="1.000" />
<color r="0.856" g="0.356" b="0.856" a="1.000" />
<color r="0.852" g="0.352" b="0.852" a="1.000" />
<color r="0.848" g="0.348" b="0.848" a="1.000" />
<color r="0.844" g="0.344" b="0.844" a="1.000" />
<color r="0.840" g="0.340" b="0.840" a="1.000" />
<color r="0.836" g="0.336" b="0.836" a="1.000" />
<color r="0.832" g="0.332" b="0.832" a="1.000" />
<color r="0.828" g="0.328" b="0.828" a="1.000" />
<color r="0.824" g="0.324" b="0.824" a="1.000" />
<color r="0.820" g="0.320" b="0.820" a="1.000" />
<color r="0.816" g="0.316" b="0.816" a="1.000" />
<color r="0.812" g="0.312" b="0.812" a="1.000" />
<color r="0.808" g="0.308" b="0.808" a="1.000" />
<color r="0.804" g="0.304" b="0.804" a="1.000" />
<color r="0.800" g="0.300" b="0.800" a="1.000" />
<color r="0.796" g="0.296" b="0.796" a="1.000" />
<color r="0.792" g="0.292" b="0.792" a="1.000" />
<color r="0.788" g="0.288" b="0.788" a="1.000" />
<color r="0.784" g="0.284" b="0.784" a="1.000" />
<color r="0.780" g="0.280" b="0.780" a="1.000" />
<color r="0.776" g="0.276" b="0.776" a="1.000" />
<color r="0.772" g="0.272" b="0.772" a="1.000" />
<color r="0.768" g="0.268" b="0.768" a="1.000" />
<color r="0.764" g="0.264" b="0.764" a="1.000" />
<color r="0.760" g="0.260" b="0.760" a="1.000" />
<color r="0.756" g="0.256" b="0.756" a="1.000" />
<color r="0.752" g="0.252" b="0.752" a="1.000" />
<color r="0.748" g="0.248" b="0.748" a="1.000" />
<color r="0.744" g="0.244" b="0.744" a="1.000" />
<color r="0.740" g="0.240" b="0.740" a="1.000" />
<color r="0.736" g="0.236" b="0.736" a="1.000" />
<color r="0.732" g="0.232" b="0.732" a="1.000" />
<color r="0.728" g="0.228" b="0.728" a="1.000" />
<color r="0.724" g="0.224" b="0.724" a="1.000" />
<color r="0.720" g="0.220" b="0.720" a="1.000" />
<color r="0.716" g="0.216" b="0.716" a="1.000" />
<color r="0.712" g="0.212" b="0.712" a="1.000" />
<color r="0.708" g="0.208" b="0.708" a="1.000" />
<color r="0.704" g="0.204" b="0.704" a="1.000" />
<color r="0.700" g="0.200" b="0.700" a="1.000" />
<color r="0.696" g="0.196" b="0.696" a="1.000" />
<color r="0.692" g="0.192" b="0.692" a="1.000" />
<color r="0.688" g="0.188" b="0.688" a="1.000" />
<color r="0.684" g="0.184" b="0.684" a="1.000" />
<color r="0.680" g="0.180" b="0.680" a="1.000" />
<color r="0.676" g="0.176" b="0.676" a="1.000" />
<color r="0.672" g="0.172" b="0.672" a="1.000" />
<color r="0.668" g="0.168" b="0.668" a="1.000" />
<color r="0.664" g="0.164" b="0.664" a="1.000" />
<color r="0.660" g="0.160" b="0.660" a="1.000" />
<color r="0.656" g="0.156" b="0.656" a="1.000" />
<color r="0.652" g="0.152" b="0.652" a="1.000" />
<color r="0.648" g="0.148" b="0.648" a="1.000" />
<color r="0.644" g="0.144" b="0.644" a="1.000" />
<color r="0.640" g="0.140" b="0.640" a="1.000" />
<color r="0.636" g="0.136" b="0.636" a="1.000" />
<color r="0.632" g="0.132" b="0.632" a="1.000" />
<color r="0.628" g="0.128" b="0.628" a="1.000" />
<color r="0.624" g="0.124" b="0.624" a="1.000" />
<color r="0.620" g="0.120" b="0.620" a="1.000" />
<color r="0.616" g="0.116" b="0.616" a="1.000" />
<color r="0.612" g="0.112" b="0.612" a="1.000" />
<color r="0.608" g="0.108" b="0.608" a="1.000" />
<color r="0.604" g="0.104" b="0.604" a="1.000" />
<color r="0.500" g="0.800" b="1.000" a="1.000" />
<color r="0.496" g="0.796" b="0.996" a="1.000" />
<color r="0.492" g="0.792" b="0.992" a="1.000" />
<color r="0.488" g="0.788" b="0.988" a="1.000" />
<color r="0.484" g="0.784" b="0.984" a="1.000" />
<color r="0.480" g="0.780" b="0.980" a="1.000" />
<color r="0.476" g="0.776" b="0.976" a="1.000" />
<color r="0.472" g="0.772" b="0.972" a="1.000" />
<color r="0.468" g="0.768" b="0.968" a="1.000" />
<color r="0.464" g="0.764" b="0.964" a="1.000" />
<color r="0.460" g="0.760" b="0.960" a="1.000" />
<color r="0.456" g="0.756" b="0.956" a="1.000" />
<color r="0.452" g="0.752" b="0.952" a="1.000" />
<color r="0.448" g="0.748" b="0.948" a="1.000" />
<color r="0.444" g="0.744" b="0.944" a="1.000" />
<color r="0.440" g="0.740" b="0.940" a="1.000" />
<color r="0.436" g="0.736" b="0.936" a="1.000" />
<color r="0.432" g="0.732" b="0.932" a="1.000" />
<color r="0.428" g="0.728" b="0.928" a="1.000" />
<color r="0.424" g="0.724" b="0.924" a="1.000" />
<color r="0.420" g="0.720" b="0.920" a="1.000" />
<color r="0.416" g="0.716" b="0.916" a="1.000" />
<color r="0.412" g="0.712" b="0.912" a="1.000" />
<color r="0.408" g="0.708" b="0.908" a="1.000" />
<color r="0.404" g="0.704" b="0.904" a="1.000" />
<color r="0.400" g="0.700" b="0.900" a="1.000" />
<color r="0.396" g="0.696" b="0.896" a="1.000" />
<color r="0.392" g="0.692" b="0.892" a="1.000" />
<color r="0.388" g="0.688" b="0.888" a="1.000" />
<color r="0.384" g="0.684" b="0.884" a="1.000" />
<color r="0.380" g="0.680" b="0.880" a="1.000" />
<color r="0.376" g="0.676" b="0.876" a="1.000" />
<color r="0.372" g="0.672" b="0.872" a="1.000" />
<color r="0.368" g="0.668" b="0.868" a="1.000" />
<color r="0.364" g="0.664" b="0.864" a="1.000" />
<color r="0.360" g="0.660" b="0.860" a="1.000" />
<color r="0.356" g="0.656" b="0.856" a="1.000" />
<color r="0.352" g="0.652" b="0.852" a="1.000" />
<color r="0.348" g="0.648" b="0.848" a="1.000" />
<color r="0.344" g="0.644" b="0.844" a="1.000" />
<color r="0.340" g="0.640" b="0.840" a="1.000" />
<color r="0.336" g="0.636" b="0.836" a="1.000" />
<color r="0.332" g="0.632" b="0.832" a="1.000" />
<color r="0.328" g="0.628" b="0.828" a="1.000" />
<color r="0.324" g="0.624" b="0.824" a="1.000" />
<color r="0.320" g="0.620" b="0.820" a="1.000" />
<color r="0.316" g="0.616" b="0.816" a="1.000" />
<color r="0.312" g="0.612" b="0.812" a="1.000" />
<color r="0.308" g="0.608" b="0.808" a="1.000" />
<color r="0.304" g="0.604" b="0.804" a="1.000" />
<color r="0.300" g="0.600" b="0.800" a="1.000" />
<color r="0.296" g="0.596" b="0.796" a="1.000" />
<color r="0.292" g="0.592" b="0.792" a="1.000" />
<color r="0.288" g="0.588" b="0.788" a="1.000" />
<color r="0.284" g="0.584" b="0.784" a="1.000" />
<color r="0.280" g="0.580" b="0.780" a="1.000" />
<color r="0.276" g="0.576" b="0.776" a="1.000" />
<color r="0.272" g="0.572" b="0.772" a="1.000" />
<color r="0.268" g="0.568" b="0.768" a="1.000" />
<color r="0.264" g="0.564" b="0.764" a="1.000" />
<color r="0.260" g="0.560" b="0.760" a="1.000" />
<color r="0.256" g="0.556" b="0.756" a="1.000" />
<color r="0.252" g="0.552" b="0.752" a="1.000" />
<color r="0.248" g="0.548" b="0.748" a="1.000" />
<color r="0.244" g="0.544" b="0.744" a="1.000" />
<color r="0.240" g="0.540" b="0.740" a="1.000" />
<color r="0.236" g="0.536" b="0.736" a="1.000" />
<color r="0.232" g="0.532" b="0.732" a="1.000" />
<color r="0.228" g="0.528" b="0.728" a="1.000" />
<color r="0.224" g="0.524" b="0.724" a="1.000" />
<color r="0.220" g="0.520" b="0.720" a="1.000" />
<color r="0.216" g="0.516" b="0.716" a="1.000" />
<color r="0.212" g="0.512" b="0.712" a="1.000" />
<color r="0.208" g="0.508" b="0.708" a="1.000" />
<color r="0.204" g="0.504" b="0.704" a="1.000" />
<color r="0.200" g="0.500" b="0.700" a="1.000" />
<color r="0.196" g="0.496" b="0.696" a="1.000" />
<color r="0.192" g="0.492" b="0.692" a="1.000" />
<color r="0.188" g="0.488" b="0.688" a="1.000" />
<color r="0.184" g="0.484" b="0.684" a="1.000" />
<color r="0.180" g="0.480" b="0.680" a="1.000" />
<color r="0.176" g="0.476" b="0.676" a="1.000" />
<color r="0.172" g="0.472" b="0.672" a="1.000" />
<color r="0.168" g="0.468" b="0.668" a="1.000" />
<color r="0.164" g="0.464" b="0.664" a="1.000" />
<color r="0.160" g="0.460" b="0.660" a="1.000" />
<color r="0.156" g="0.456" b="0.656" a="1.000" />
<color r="0.152" g="0.452" b="0.652" a="1.000" />
<color r="0.148" g="0.448" b="0.648" a="1.000" />
<color r="0.144" g="0.444" b="0.644" a="1.000" />
<color r="0.140" g="0.440" b="0.640" a="1.000" />
<color r="0.136" g="0.436" b="0.636" a="1.000" />
<color r="0.132" g="0.432" b="0.632" a="1.000" />
<color r="0.128" g="0.428" b="0.628" a="1.000" />
<color r="0.124" g="0.424" b="0.624" a="1.000" />
<color r="0.120" g="0.420" b="0.620" a="1.000" />
<color r="0.116" g="0.416" b="0.616" a="1.000" />
<color r="0.112" g="0.412" b="0.612" a="1.000" />
<color r="0.108" g="0.408" b="0.608" a="1.000" />
<color r="0.104" g="0.404" b="0.604" a="1.000" />
<color r="0.500" g="1.000" b="0.500" a="1.000" />
<color r="0.496" g="0.996" b="0.496" a="1.000" />
<color r="0.492" g="0.992" b="0.492" a="1.000" />
<color r="0.488" g="0.988" b="0.488" a="1.000" />
<color r="0.484" g="0.984" b="0.484" a="1.000" />
<color r="0.480" g="0.980" b="0.480" a="1.000" />
<color r="0.476" g="0.976" b="0.476" a="1.000" />
<color r="0.472" g="0.972" b="0.472" a="1.000" />
<color r="0.468" g="0.968" b="0.468" a="1.000" />
<color r="0.464" g="0.964" b="0.464" a="1.000" />
<color r="0.460" g="0.960" b="0.460" a="1.000" />
<color r="0.456" g="0.956" b="0.456" a="1.000" />
<color r="0.452" g="0.952" b="0.452" a="1.000" />
<color r="0.448" g="0.948" b="0.448" a="1.000" />
<color r="0.444" g="0.944" b="0.444" a="1.000" />
<color r="0.440" g="0.940" b="0.440" a="1.000" />
<color r="0.436" g="0.936" b="0.436" a="1.000" />
<color r="0.432" g="0.932" b="0.432" a="1.000" />
<color r="0.428" g="0.928" b="0.428" a="1.000" />
<color r="0.424" g="0.924" b="0.424" a="1.000" />
<color r="0.420" g="0.920" b="0.420" a="1.000" />
<color r="0.416" g="0.916" b="0.416" a="1.000" />
<color r="0.412" g="0.912" b="0.412" a="1.000" />
<color r="0.408" g="0.908" b="0.408" a="1.000" />
<color r="0.404" g="0.904" b="0.404" a="1.000" />
<color r="0.400" g="0.900" b="0.400" a="1.000" />
<color r="0.396" g="0.896" b="0.396" a="1.000" />
<color r="0.392" g="0.892" b="0.392" a="1.000" />
<color r="0.388" g="0.888" b="0.388" a="1.000" />
<color r="0.384" g="0.884" b="0.384" a="1.000" />
<color r="0.380" g="0.880" b="0.380" a="1.000" />
<color r="0.376" g="0.876" b="0.376" a="1.000" />
<color r="0.372" g="0.872" b="0.372" a="1.000" />
<color r="0.368" g="0.868" b="0.368" a="1.000" />
<color r="0.364" g="0.864" b="0.364" a="1.000" />
<color r="0.360" g="0.860" b="0.360" a="1.000" />
<color r="0.356" g="0.856" b="0.356" a="1.000" />
<color r="0.352" g="0.852" b="0.352" a="1.000" />
<color r="0.348" g="0.848" b="0.348" a="1.000" />
<color r="0.344" g="0.844" b="0.344" a="1.000" />
<color r="0.340" g="0.840" b="0.340" a="1.000" />
<color r="0.336" g="0.836" b="0.336" a="1.000" />
<color r="0.332" g="0.832" b="0.332" a="1.000" />
<color r="0.328" g="0.828" b="0.328" a="1.000" />
<color r="0.324" g="0.824" b="0.324" a="1.000" />
<color r="0.320" g="0.820" b="0.320" a="1.000" />
<color r="0.316" g="0.816" b="0.316" a="1.000" />
<color r="0.312" g="0.812" b="0.312" a="1.000" />
<color r="0.308" g="0.808" b="0.308" a="1.000" />
<color r="0.304" g="0.804" b="0.304" a="1.000" />
<color r="0.300" g="0.800" b="0.300" a="1.000" />
<color r="0.296" g="0.796" b="0.296" a="1.000" />
<color r="0.292" g="0.792" b="0.292" a="1.000" />
<color r="0.288" g="0.788" b="0.288" a="1.000" />
<color r="0.284" g="0.784" b="0.284" a="1.000" />
<color r="0.280" g="0.780" b="0.280" a="1.000" />
<color r="0.276" g="0.776" b="0.276" a="1.000" />
<color r="0.272" g="0.772" b="0.272" a="1.000" />
<color r="0.268" g="0.768" b="0.268" a="1.000" />
<color r="0.264" g="0.764" b="0.264" a="1.000" />
<color r="0.260" g="0.760" b="0.260" a="1.000" />
<color r="0.256" g="0.756" b="0.256" a="1.000" />
<color r="0.252" g="0.752" b="0.252" a="1.000" />
<color r="0.248" g="0.748" b="0.248" a="1.000" />
<color r="0.244" g="0.744" b="0.244" a="1.000" />
<color r="0.240" g="0.740" b="0.240" a="1.000" />
<color r="0.236" g="0.736" b="0.236" a="1.000" />
<color r="0.232" g="0.732" b="0.232" a="1.000" />
<color r="0.228" g="0.728" b="0.228" a="1.000" />
<color r="0.224" g="0.724" b="0.224" a="1.000" />
<color r="0.220" g="0.720" b="0.220" a="1.000" />
<color r="0.216" g="0.716" b="0.216" a="1.000" />
<color r="0.212" g="0.712" b="0.212" a="1.000" />
<color r="0.208" g="0.708" b="0.208" a="1.000" />
<color r="0.204" g="0.704" b="0.204" a="1.000" />
<color r="0.200" g="0.700" b="0.200" a="1.000" />
<color r="0.196" g="0.696" b="0.196" a="1.000" />
<color r="0.192" g="0.692" b="0.192" a="1.000" />
<color r="0.188" g="0.688" b="0.188" a="1.000" />
<color r="0.184" g="0.684" b="0.184" a="1.000" />
<color r="0.180" g="0.680" b="0.180" a="1.000" />
<color r="0.176" g="0.676" b="0.176" a="1.000" />
<color r="0.172" g="0.672" b="0.172" a="1.000" />
<color r="0.168" g="0.668" b="0.168" a="1.000" />
<color r="0.164" g="0.664" b="0.164" a="1.000" />
<color r="0.160" g="0.660" b="0.160" a="1.000" />
<color r="0.156" g="0.656" b="0.156" a="1.000" />
<color r="0.152" g="0.652" b="0.152" a="1.000" />
<color r="0.148" g="0.648" b="0.148" a="1.000" />
<color r="0.144" g="0.644" b="0.144" a="1.000" />
<color r="0.140" g="0.640" b="0.140" a="1.000" />
<color r="0.136" g="0.636" b="0.136" a="1.000" />
<color r="0.132" g="0.632" b="0.132" a="1.000" />
<color r="0.128" g="0.628" b="0.128" a="1.000" />
<color r="0.124" g="0.624" b="0.124" a="1.000" />
<color r="0.120" g="0.620" b="0.120" a="1.000" />
<color r="0.116" g="0.616" b="0.116" a="1.000" />
<color r="0.112" g="0.612" b="0.112" a="1.000" />
<color r="0.108" g="0.608" b="0.108" a="1.000" />
<color r="0.104" g="0.604" b="0.104" a="1.000" />
<color r="1.000" g="1.000" b="0.500" a="1.000" />
<color r="0.996" g="0.996" b="0.496" a="1.000" />
<color r="0.992" g="0.992" b="0.492" a="1.000" />
<color r="0.988" g="0.988" b="0.488" a="1.000" />
<color r="0.984" g="0.984" b="0.484" a="1.000" />
<color r="0.980" g="0.980" b="0.480" a="1.000" />
<color r="0.976" g="0.976" b="0.476" a="1.000" />
<color r="0.972" g="0.972" b="0.472" a="1.000" />
<color r="0.968" g="0.968" b="0.468" a="1.000" />
<color r="0.964" g="0.964" b="0.464" a="1.000" />
<color r="0.960" g="0.960" b="0.460" a="1.000" />
<color r="0.956" g="0.956" b="0.456" a="1.000" />
<color r="0.952" g="0.952" b="0.452" a="1.000" />
<color r="0.948" g="0.948" b="0.448" a="1.000" />
<color r="0.944" g="0.944" b="0.444" a="1.000" />
<color r="0.940" g="0.940" b="0.440" a="1.000" />
<color r="0.936" g="0.936" b="0.436" a="1.000" />
<color r="0.932" g="0.932" b="0.432" a="1.000" />
<color r="0.928" g="0.928" b="0.428" a="1.000" />
<color r="0.924" g="0.924" b="0.424" a="1.000" />
<color r="0.920" g="0.920" b="0.420" a="1.000" />
<color r="0.916" g="0.916" b="0.416" a="1.000" />
<color r="0.912" g="0.912" b="0.412" a="1.000" />
<color r="0.908" g="0.908" b="0.408" a="1.000" />
<color r="0.904" g="0.904" b="0.404" a="1.000" />
<color r="0.900" g="0.900" b="0.400" a="1.000" />
<color r="0.896" g="0.896" b="0.396" a="1.000" />
<color r="0.892" g="0.892" b="0.392" a="1.000" />
<color r="0.888" g="0.888" b="0.388" a="1.000" />
<color r="0.884" g="0.884" b="0.384" a="1.000" />
<color r="0.880" g="0.880" b="0.380" a="1.000" />
<color r="0.876" g="0.876" b="0.376" a="1.000" />
<color r="0.872" g="0.872" b="0.372" a="1.000" />
<color r="0.868" g="0.868" b="0.368" a="1.000" />
<color r="0.864" g="0.864" b="0.364" a="1.000" />
<color r="0.860" g="0.860" b="0.360" a="1.000" />
<color r="0.856" g="0.856" b="0.356" a="1.000" />
<color r="0.852" g="0.852" b="0.352" a="1.000" />
<color r="0.848" g="0.848" b="0.348" a="1.000" />
<color r="0.844" g="0.844" b="0.344" a="1.000" />
<color r="0.840" g="0.840" b="0.340" a="1.000" />
<color r="0.836" g="0.836" b="0.336" a="1.000" />
<color r="0.832" g="0.832" b="0.332" a="1.000" />
<color r="0.828" g="0.828" b="0.328" a="1.000" />
<color r="0.824" g="0.824" b="0.324" a="1.000" />
<color r="0.820" g="0.820" b="0.320" a="1.000" />
<color r="0.816" g="0.816" b="0.316" a="1.000" />
<color r="0.812" g="0.812" b="0.312" a="1.000" />
<color r="0.808" g="0.808" b="0.308" a="1.000" />
<color r="0.804" g="0.804" b="0.304" a="1.000" />
<color r="0.800" g="0.800" b="0.300" a="1.000" />
<color r="0.796" g="0.796" b="0.296" a="1.000" />
<color r="0.792" g="0.792" b="0.292" a="1.000" />
<color r="0.788" g="0.788" b="0.288" a="1.000" />
<color r="0.784" g="0.784" b="0.284" a="1.000" />
<color r="0.780" g="0.780" b="0.280" a="1.000" />
<color r="0.776" g="0.776" b="0.276" a="1.000" />
<color r="0.772" g="0.772" b="0.272" a="1.000" />
<color r="0.768" g="0.768" b="0.268" a="1.000" />
<color r="0.764" g="0.764" b="0.264" a="1.000" />
<color r="0.760" g="0.760" b="0.260" a="1.000" />
<color r="0.756" g="0.756" b="0.256" a="1.000" />
<color r="0.752" g="0.752" b="0.252" a="1.000" />
<color r="0.748" g="0.748" b="0.248" a="1.000" />
<color r="0.744" g="0.744" b="0.244" a="1.000" />
<color r="0.740" g="0.740" b="0.240" a="1.000" />
<color r="0.736" g="0.736" b="0.236" a="1.000" />
<color r="0.732" g="0.732" b="0.232" a="1.000" />
<color r="0.728" g="0.728" b="0.228" a="1.000" />
<color r="0.724" g="0.724" b="0.224" a="1.000" />
<color r="0.720" g="0.720" b="0.220" a="1.000" />
<color r="0.716" g="0.716" b="0.216" a="1.000" />
<color r="0.712" g="0.712" b="0.212" a="1.000" />
<color r="0.708" g="0.708" b="0.208" a="1.000" />
<color r="0.704" g="0.704" b="0.204" a="1.000" />
<color r="0.700" g="0.700" b="0.200" a="1.000" />
<color r="0.696" g="0.696" b="0.196" a="1.000" />
<color r="0.692" g="0.692" b="0.192" a="1.000" />
<color r="0.688" g="0.688" b="0.188" a="1.000" />
<color r="0.684" g="0.684" b="0.184" a="1.000" />
<color r="0.680" g="0.680" b="0.180" a="1.000" />
<color r="0.676" g="0.676" b="0.176" a="1.000" />
<color r="0.672" g="0.672" b="0.172" a="1.000" />
<color r="0.668" g="0.668" b="0.168" a="1.000" />
<color r="0.664" g="0.664" b="0.164" a="1.000" />
<color r="0.660" g="0.660" b="0.160" a="1.000" />
<color r="0.656" g="0.656" b="0.156" a="1.000" />
<color r="0.652" g="0.652" b="0.152" a="1.000" />
<color r="0.648" g="0.648" b="0.148" a="1.000" />
<color r="0.644" g="0.644" b="0.144" a="1.000" />
<color r="0.640" g="0.640" b="0.140" a="1.000" />
<color r="0.636" g="0.636" b="0.136" a="1.000" />
<color r="0.632" g="0.632" b="0.132" a="1.000" />
<color r="0.628" g="0.628" b="0.128" a="1.000" />
<color r="0.624" g="0.624" b="0.124" a="1.000" />
<color r="0.620" g="0.620" b="0.120" a="1.000" />
<color r="0.616" g="0.616" b="0.116" a="1.000" />
<color r="0.612" g="0.612" b="0.112" a="1.000" />
<color r="0.608" g="0.608" b="0.108" a="1.000" />
<color r="0.604" g="0.604" b="0.104" a="1.000" />
<color r="1.000" g="0.800" b="0.500" a="1.000" />
<color r="0.996" g="0.796" b="0.496" a="1.000" />
<color r="0.992" g="0.792" b="0.492" a="1.000" />
<color r="0.988" g="0.788" b="0.488" a="1.000" />
<color r="0.984" g="0.784" b="0.484" a="1.000" />
<color r="0.980" g="0.780" b="0.480" a="1.000" />
<color r="0.976" g="0.776" b="0.476" a="1.000" />
<color r="0.972" g="0.772" b="0.472" a="1.000" />
<color r="0.968" g="0.768" b="0.468" a="1.000" />
<color r="0.964" g="0.764" b="0.464" a="1.000" />
<color r="0.960" g="0.760" b="0.460" a="1.000" />
<color r="0.956" g="0.756" b="0.456" a="1.000" />
<color r="0.952" g="0.752" b="0.452" a="1.000" />
<color r="0.948" g="0.748" b="0.448" a="1.000" />
<color r="0.944" g="0.744" b="0.444" a="1.000" />
<color r="0.940" g="0.740" b="0.440" a="1.000" />
<color r="0.936" g="0.736" b="0.436" a="1.000" />
<color r="0.932" g="0.732" b="0.432" a="1.000" />
<color r="0.928" g="0.728" b="0.428" a="1.000" />
<color r="0.924" g="0.724" b="0.424" a="1.000" />
<color r="0.920" g="0.720" b="0.420" a="1.000" />
<color r="0.916" g="0.716" b="0.416" a="1.000" />
<color r="0.912" g="0.712" b="0.412" a="1.000" />
<color r="0.908" g="0.708" b="0.408" a="1.000" />
<color r="0.904" g="0.704" b="0.404" a="1.000" />
<color r="0.900" g="0.700" b="0.400" a="1.000" />
<color r="0.896" g="0.696" b="0.396" a="1.000" />
<color r="0.892" g="0.692" b="0.392" a="1.000" />
<color r="0.888" g="0.688" b="0.388" a="1.000" />
<color r="0.884" g="0.684" b="0.384" a="1.000" />
<color r="0.880" g="0.680" b="0.380" a="1.000" />
<color r="0.876" g="0.676" b="0.376" a="1.000" />
<color r="0.872" g="0.672" b="0.372" a="1.000" />
<color r="0.868" g="0.668" b="0.368" a="1.000" />
<color r="0.864" g="0.664" b="0.364" a="1.000" />
<color r="0.860" g="0.660" b="0.360" a="1.000" />
<color r="0.856" g="0.656" b="0.356" a="1.000" />
<color r="0.852" g="0.652" b="0.352" a="1.000" />
<color r="0.848" g="0.648" b="0.348" a="1.000" />
<color r="0.844" g="0.644" b="0.344" a="1.000" />
<color r="0.840" g="0.640" b="0.340" a="1.000" />
<color r="0.836" g="0.636" b="0.336" a="1.000" />
<color r="0.832" g="0.632" b="0.332" a="1.000" />
<color r="0.828" g="0.628" b="0.328" a="1.000" />
<color r="0.824" g="0.624" b="0.324" a="1.000" />
<color r="0.820" g="0.620" b="0.320" a="1.000" />
<color r="0.816" g="0.616" b="0.316" a="1.000" />
<color r="0.812" g="0.612" b="0.312" a="1.000" />
<color r="0.808" g="0.608" b="0.308" a="1.000" />
<color r="0.804" g="0.604" b="0.304" a="1.000" />
<color r="0.800" g="0.600" b="0.300" a="1.000" />
<color r="0.796" g="0.596" b="0.296" a="1.000" />
<color r="0.792" g="0.592" b="0.292" a="1.000" />
<color r="0.788" g="0.588" b="0.288" a="1.000" />
<color r="0.784" g="0.584" b="0.284" a="1.000" />
<color r="0.780" g="0.580" b="0.280" a="1.000" />
<color r="0.776" g="0.576" b="0.276" a="1.000" />
<color r="0.772" g="0.572" b="0.272" a="1.000" />
<color r="0.768" g="0.568" b="0.268" a="1.000" />
<color r="0.764" g="0.564" b="0.264" a="1.000" />
<color r="0.760" g="0.560" b="0.260" a="1.000" />
<color r="0.756" g="0.556" b="0.256" a="1.000" />
<color r="0.752" g="0.552" b="0.252" a="1.000" />
<color r="0.748" g="0.548" b="0.248" a="1.000" />
<color r="0.744" g="0.544" b="0.244" a="1.000" />
<color r="0.740" g="0.540" b="0.240" a="1.000" />
<color r="0.736" g="0.536" b="0.236" a="1.000" />
<color r="0.732" g="0.532" b="0.232" a="1.000" />
<color r="0.728" g="0.528" b="0.228" a="1.000" />
<color r="0.724" g="0.524" b="0.224" a="1.000" />
<color r="0.720" g="0.520" b="0.220" a="1.000" />
<color r="0.716" g="0.516" b="0.216" a="1.000" />
<color r="0.712" g="0.512" b="0.212" a="1.000" />
<color r="0.708" g="0.508" b="0.208" a="1.000" />
<color r="0.704" g="0.504" b="0.204" a="1.000" />
<color r="0.700" g="0.500" b="0.200" a="1.000" />
<color r="0.696" g="0.496" b="0.196" a="1.000" />
<color r="0.692" g="0.492" b="0.192" a="1.000" />
<color r="0.688" g="0.488" b="0.188" a="1.000" />
<color r="0.684" g="0.484" b="0.184" a="1.000" />
<color r="0.680" g="0.480" b="0.180" a="1.000" />
<color r="0.676" g="0.476" b="0.176" a="1.000" />
<color r="0.672" g="0.472" b="0.172" a="1.000" />
<color r="0.668" g="0.468" b="0.168" a="1.000" />
<color r="0.664" g="0.464" b="0.164" a="1.000" />
<color r="0.660" g="0.460" b="0.160" a="1.000" />
<color r="0.656" g="0.456" b="0.156" a="1.000" />
<color r="0.652" g="0.452" b="0.152" a="1.000" />
<color r="0.648" g="0.448" b="0.148" a="1.000" />
<color r="0.644" g="0.444" b="0.144" a="1.000" />
<color r="0.640" g="0.440" b="0.140" a="1.000" />
<color r="0.636" g="0.436" b="0.136" a="1.000" />
<color r="0.632" g="0.432" b="0.132" a="1.000" />
<color r="0.628" g="0.428" b="0.128" a="1.000" />
<color r="0.624" g="0.424" b="0.124" a="1.000" />
<color r="0.620" g="0.420" b="0.120" a="1.000" />
<color r="0.616" g="0.416" b="0.116" a="1.000" />
<color r="0.612" g="0.412" b="0.112" a="1.000" />
<color r="0.608" g="0.408" b="0.108" a="1.000" />
<color r="0.604" g="0.404" b="0.104" a="1.000" />
<color r="1.000" g="0.500" b="0.500" a="1.000" />
<color r="0.996" g="0.496" b="0.496" a="1.000" />
<color r="0.992" g="0.492" b="0.492" a="1.000" />
<color r="0.988" g="0.488" b="0.488" a="1.000" />
<color r="0.984" g="0.484" b="0.484" a="1.000" />
<color r="0.980" g="0.480" b="0.480" a="1.000" />
<color r="0.976" g="0.476" b="0.476" a="1.000" />
<color r="0.972" g="0.472" b="0.472" a="1.000" />
<color r="0.968" g="0.468" b="0.468" a="1.000" />
<color r="0.964" g="0.464" b="0.464" a="1.000" />
<color r="0.960" g="0.460" b="0.460" a="1.000" />
<color r="0.956" g="0.456" b="0.456" a="1.000" />
<color r="0.952" g="0.452" b="0.452" a="1.000" />
<color r="0.948" g="0.448" b="0.448" a="1.000" />
<color r="0.944" g="0.444" b="0.444" a="1.000" />
<color r="0.940" g="0.440" b="0.440" a="1.000" />
<color r="0.936" g="0.436" b="0.436" a="1.000" />
<color r="0.932" g="0.432" b="0.432" a="1.000" />
<color r="0.928" g="0.428" b="0.428" a="1.000" />
<color r="0.924" g="0.424" b="0.424" a="1.000" />
<color r="0.920" g="0.420" b="0.420" a="1.000" />
<color r="0.916" g="0.416" b="0.416" a="1.000" />
<color r="0.912" g="0.412" b="0.412" a="1.000" />
<color r="0.908" g="0.408" b="0.408" a="1.000" />
<color r="0.904" g="0.404" b="0.404" a="1.000" />
<color r="0.900" g="0.400" b="0.400" a="1.000" />
<color r="0.896" g="0.396" b="0.396" a="1.000" />
<color r="0.892" g="0.392" b="0.392" a="1.000" />
<color r="0.888" g="0.388" b="0.388" a="1.000" />
<color r="0.884" g="0.384" b="0.384" a="1.000" />
<color r="0.880" g="0.380" b="0.380" a="1.000" />
<color r="0.876" g="0.376" b="0.376" a="1.000" />
<color r="0.872" g="0.372" b="0.372" a="1.000" />
<color r="0.868" g="0.368" b="0.368" a="1.000" />
<color r="0.864" g="0.364" b="0.364" a="1.000" />
<color r="0.860" g="0.360" b="0.360" a="1.000" />
<color r="0.856" g="0.356" b="0.356" a="1.000" />
<color r="0.852" g="0.352" b="0.352" a="1.000" />
<color r="0.848" g="0.348" b="0.348" a="1.000" />
<color r="0.844" g="0.344" b="0.344" a="1.000" />
<color r="0.840" g="0.340" b="0.340" a="1.000" />
<color r="0.836" g="0.336" b="0.336" a="1.000" />
<color r="0.832" g="0.332" b="0.332" a="1.000" />
<color r="0.828" g="0.328" b="0.328" a="1.000" />
<color r="0.824" g="0.324" b="0.324" a="1.000" />
<color r="0.820" g="0.320" b="0.320" a="1.000" />
<color r="0.816" g="0.316" b="0.316" a="1.000" />
<color r="0.812" g="0.312" b="0.312" a="1.000" />
<color r="0.808" g="0.308" b="0.308" a="1.000" />
<color r="0.804" g="0.304" b="0.304" a="1.000" />
<color r="0.800" g="0.300" b="0.300" a="1.000" />
<color r="0.796" g="0.296" b="0.296" a="1.000" />
<color r="0.792" g="0.292" b="0.292" a="1.000" />
<color r="0.788" g="0.288" b="0.288" a="1.000" />
<color r="0.784" g="0.284" b="0.284" a="1.000" />
<color r="0.780" g="0.280" b="0.280" a="1.000" />
<color r="0.776" g="0.276" b="0.276" a="1.000" />
<color r="0.772" g="0.272" b="0.272" a="1.000" />
<color r="0.768" g="0.268" b="0.268" a="1.000" />
<color r="0.764" g="0.264" b="0.264" a="1.000" />
<color r="0.760" g="0.260" b="0.260" a="1.000" />
<color r="0.756" g="0.256" b="0.256" a="1.000" />
<color r="0.752" g="0.252" b="0.252" a="1.000" />
<color r="0.748" g="0.248" b="0.248" a="1.000" />
<color r="0.744" g="0.244" b="0.244" a="1.000" />
<color r="0.740" g="0.240" b="0.240" a="1.000" />
<color r="0.736" g="0.236" b="0.236" a="1.000" />
<color r="0.732" g="0.232" b="0.232" a="1.000" />
<color r="0.728" g="0.228" b="0.228" a="1.000" />
<color r="0.724" g="0.224" b="0.224" a="1.000" />
<color r="0.720" g="0.220" b="0.220" a="1.000" />
<color r="0.716" g="0.216" b="0.216" a="1.000" />
<color r="0.712" g="0.212" b="0.212" a="1.000" />
<color r="0.708" g="0.208" b="0.208" a="1.000" />
<color r="0.704" g="0.204" b="0.204" a="1.000" />
<color r="0.700" g="0.200" b="0.200" a="1.000" />
<color r="0.696" g="0.196" b="0.196" a="1.000" />
<color r="0.692" g="0.192" b="0.192" a="1.000" />
<color r="0.688" g="0.188" b="0.188" a="1.000" />
<color r="0.684" g="0.184" b="0.184" a="1.000" />
<color r="0.680" g="0.180" b="0.180" a="1.000" />
<color r="0.676" g="0.176" b="0.176" a="1.000" />
<color r="0.672" g="0.172" b="0.172" a="1.000" />
<color r="0.668" g="0.168" b="0.168" a="1.000" />
<color r="0.664" g="0.164" b="0.164" a="1.000" />
<color r="0.660" g="0.160" b="0.160" a="1.000" />
<color r="0.656" g="0.156" b="0.156" a="1.000" />
<color r="0.652" g="0.152" b="0.152" a="1.000" />
<color r="0.648" g="0.148" b="0.148" a="1.000" />
<color r="0.644" g="0.144" b="0.144" a="1.000" />
<color r="0.640" g="0.140" b="0.140" a="1.000" />
<color r="0.636" g="0.136" b="0.136" a="1.000" />
<color r="0.632" g="0.132" b="0.132" a="1.000" />
<color r="0.628" g="0.128" b="0.128" a="1.000" />
<color r="0.624" g="0.124" b="0.124" a="1.000" />
<color r="0.620" g="0.120" b="0.120" a="1.000" />
<color r="0.616" g="0.116" b="0.116" a="1.000" />
<color r="0.612" g="0.112" b="0.112" a="1.000" />
<color r="0.608" g="0.108" b="0.108" a="1.000" />
<color r="0.604" g="0.104" b="0.104" a="1.000" />
</colorMap>

View file

@ -1,264 +0,0 @@
<?xml version="1.0" ?>
<colorMap>
<!-- Colormap converted by bsteffen from CIMSS_IR.ET which was provided by:
Timothy J. Schmit
NOAA/NESDIS Center for SaTellite Applications and Research (STAR)
Advanced Satellite Products Branch (ASPB)
-->
<color r="1.0" g="0.0" b="0.0" a="1"></color>
<color r="1.0" g="0.011764706" b="0.0" a="1"></color>
<color r="1.0" g="0.023529412" b="0.0" a="1"></color>
<color r="1.0" g="0.03529412" b="0.0" a="1"></color>
<color r="1.0" g="0.047058824" b="0.0" a="1"></color>
<color r="1.0" g="0.05882353" b="0.0" a="1"></color>
<color r="1.0" g="0.07058824" b="0.0" a="1"></color>
<color r="1.0" g="0.08235294" b="0.0" a="1"></color>
<color r="1.0" g="0.09411765" b="0.0" a="1"></color>
<color r="1.0" g="0.105882354" b="0.0" a="1"></color>
<color r="1.0" g="0.11764706" b="0.0" a="1"></color>
<color r="1.0" g="0.12941177" b="0.0" a="1"></color>
<color r="1.0" g="0.14117648" b="0.0" a="1"></color>
<color r="1.0" g="0.15294118" b="0.0" a="1"></color>
<color r="1.0" g="0.16078432" b="0.0" a="1"></color>
<color r="1.0" g="0.17254902" b="0.0" a="1"></color>
<color r="1.0" g="0.18431373" b="0.0" a="1"></color>
<color r="1.0" g="0.19607843" b="0.0" a="1"></color>
<color r="1.0" g="0.20784314" b="0.0" a="1"></color>
<color r="1.0" g="0.21960784" b="0.0" a="1"></color>
<color r="1.0" g="0.23137255" b="0.0" a="1"></color>
<color r="1.0" g="0.24313726" b="0.0" a="1"></color>
<color r="1.0" g="0.25490198" b="0.0" a="1"></color>
<color r="1.0" g="0.26666668" b="0.0" a="1"></color>
<color r="1.0" g="0.2784314" b="0.0" a="1"></color>
<color r="1.0" g="0.2901961" b="0.0" a="1"></color>
<color r="1.0" g="0.3019608" b="0.0" a="1"></color>
<color r="1.0" g="0.3137255" b="0.0" a="1"></color>
<color r="1.0" g="0.3254902" b="0.0" a="1"></color>
<color r="1.0" g="0.3372549" b="0.0" a="1"></color>
<color r="1.0" g="0.34901962" b="0.0" a="1"></color>
<color r="1.0" g="0.36078432" b="0.0" a="1"></color>
<color r="1.0" g="0.37254903" b="0.0" a="1"></color>
<color r="1.0" g="0.38431373" b="0.0" a="1"></color>
<color r="1.0" g="0.39607844" b="0.0" a="1"></color>
<color r="1.0" g="0.40784314" b="0.0" a="1"></color>
<color r="1.0" g="0.41960785" b="0.0" a="1"></color>
<color r="1.0" g="0.43137255" b="0.0" a="1"></color>
<color r="1.0" g="0.44313726" b="0.0" a="1"></color>
<color r="1.0" g="0.45490196" b="0.0" a="1"></color>
<color r="1.0" g="0.46666667" b="0.0" a="1"></color>
<color r="1.0" g="0.47843137" b="0.0" a="1"></color>
<color r="1.0" g="0.4862745" b="0.0" a="1"></color>
<color r="1.0" g="0.49803922" b="0.0" a="1"></color>
<color r="1.0" g="0.50980395" b="0.0" a="1"></color>
<color r="1.0" g="0.52156866" b="0.0" a="1"></color>
<color r="1.0" g="0.53333336" b="0.0" a="1"></color>
<color r="1.0" g="0.54509807" b="0.0" a="1"></color>
<color r="1.0" g="0.5568628" b="0.0" a="1"></color>
<color r="1.0" g="0.5686275" b="0.0" a="1"></color>
<color r="1.0" g="0.5803922" b="0.0" a="1"></color>
<color r="1.0" g="0.5921569" b="0.0" a="1"></color>
<color r="1.0" g="0.6039216" b="0.0" a="1"></color>
<color r="1.0" g="0.6156863" b="0.0" a="1"></color>
<color r="1.0" g="0.627451" b="0.0" a="1"></color>
<color r="1.0" g="0.6392157" b="0.0" a="1"></color>
<color r="1.0" g="0.6509804" b="0.0" a="1"></color>
<color r="1.0" g="0.6627451" b="0.0" a="1"></color>
<color r="1.0" g="0.6745098" b="0.0" a="1"></color>
<color r="1.0" g="0.6862745" b="0.0" a="1"></color>
<color r="1.0" g="0.69803923" b="0.0" a="1"></color>
<color r="1.0" g="0.70980394" b="0.0" a="1"></color>
<color r="1.0" g="0.72156864" b="0.0" a="1"></color>
<color r="1.0" g="0.73333335" b="0.0" a="1"></color>
<color r="1.0" g="0.74509805" b="0.0" a="1"></color>
<color r="1.0" g="0.75686276" b="0.0" a="1"></color>
<color r="1.0" g="0.76862746" b="0.0" a="1"></color>
<color r="1.0" g="0.78039217" b="0.0" a="1"></color>
<color r="1.0" g="0.7921569" b="0.0" a="1"></color>
<color r="1.0" g="0.8039216" b="0.0" a="1"></color>
<color r="1.0" g="0.8117647" b="0.0" a="1"></color>
<color r="1.0" g="0.8235294" b="0.0" a="1"></color>
<color r="1.0" g="0.8352941" b="0.0" a="1"></color>
<color r="1.0" g="0.84705883" b="0.0" a="1"></color>
<color r="1.0" g="0.85882354" b="0.0" a="1"></color>
<color r="1.0" g="0.87058824" b="0.0" a="1"></color>
<color r="1.0" g="0.88235295" b="0.0" a="1"></color>
<color r="1.0" g="0.89411765" b="0.0" a="1"></color>
<color r="1.0" g="0.90588236" b="0.0" a="1"></color>
<color r="1.0" g="0.91764706" b="0.0" a="1"></color>
<color r="1.0" g="0.92941177" b="0.0" a="1"></color>
<color r="1.0" g="0.9411765" b="0.0" a="1"></color>
<color r="1.0" g="0.9529412" b="0.0" a="1"></color>
<color r="1.0" g="0.9647059" b="0.0" a="1"></color>
<color r="0.9843137" g="0.9843137" b="0.015686275" a="1"></color>
<color r="0.972549" g="0.972549" b="0.02745098" a="1"></color>
<color r="0.9607843" g="0.9607843" b="0.039215688" a="1"></color>
<color r="0.9490196" g="0.9490196" b="0.050980393" a="1"></color>
<color r="0.9372549" g="0.9372549" b="0.0627451" a="1"></color>
<color r="0.9254902" g="0.9254902" b="0.07450981" a="1"></color>
<color r="0.9098039" g="0.9098039" b="0.09019608" a="1"></color>
<color r="0.8980392" g="0.8980392" b="0.101960786" a="1"></color>
<color r="0.8862745" g="0.8862745" b="0.11372549" a="1"></color>
<color r="0.8745098" g="0.8745098" b="0.1254902" a="1"></color>
<color r="0.8627451" g="0.8627451" b="0.13725491" a="1"></color>
<color r="0.8509804" g="0.8509804" b="0.14901961" a="1"></color>
<color r="0.8392157" g="0.8392157" b="0.16078432" a="1"></color>
<color r="0.827451" g="0.827451" b="0.17254902" a="1"></color>
<color r="0.8156863" g="0.8156863" b="0.18431373" a="1"></color>
<color r="0.8039216" g="0.8039216" b="0.19607843" a="1"></color>
<color r="0.7882353" g="0.7882353" b="0.21176471" a="1"></color>
<color r="0.7764706" g="0.7764706" b="0.22352941" a="1"></color>
<color r="0.7647059" g="0.7647059" b="0.23529412" a="1"></color>
<color r="0.7529412" g="0.7529412" b="0.24705882" a="1"></color>
<color r="0.7411765" g="0.7411765" b="0.25882354" a="1"></color>
<color r="0.7294118" g="0.7294118" b="0.27058825" a="1"></color>
<color r="0.7176471" g="0.7176471" b="0.28235295" a="1"></color>
<color r="0.7058824" g="0.7058824" b="0.29411766" a="1"></color>
<color r="0.69411767" g="0.69411767" b="0.30588236" a="1"></color>
<color r="0.68235296" g="0.68235296" b="0.31764707" a="1"></color>
<color r="0.6666667" g="0.6666667" b="0.33333334" a="1"></color>
<color r="0.654902" g="0.654902" b="0.34509805" a="1"></color>
<color r="0.6431373" g="0.6431373" b="0.35686275" a="1"></color>
<color r="0.6313726" g="0.6313726" b="0.36862746" a="1"></color>
<color r="0.61960787" g="0.61960787" b="0.38039216" a="1"></color>
<color r="0.60784316" g="0.60784316" b="0.39215687" a="1"></color>
<color r="0.59607846" g="0.59607846" b="0.40392157" a="1"></color>
<color r="0.58431375" g="0.58431375" b="0.41568628" a="1"></color>
<color r="0.57254905" g="0.57254905" b="0.42745098" a="1"></color>
<color r="0.56078434" g="0.56078434" b="0.4392157" a="1"></color>
<color r="0.54509807" g="0.54509807" b="0.45490196" a="1"></color>
<color r="0.53333336" g="0.53333336" b="0.46666667" a="1"></color>
<color r="0.52156866" g="0.52156866" b="0.47843137" a="1"></color>
<color r="0.50980395" g="0.50980395" b="0.49019608" a="1"></color>
<color r="0.49803922" g="0.49803922" b="0.5019608" a="1"></color>
<color r="0.4862745" g="0.4862745" b="0.5137255" a="1"></color>
<color r="0.4745098" g="0.4745098" b="0.5254902" a="1"></color>
<color r="0.4627451" g="0.4627451" b="0.5372549" a="1"></color>
<color r="0.4509804" g="0.4509804" b="0.54901963" a="1"></color>
<color r="0.4392157" g="0.4392157" b="0.56078434" a="1"></color>
<color r="0.42352942" g="0.42352942" b="0.5764706" a="1"></color>
<color r="0.4117647" g="0.4117647" b="0.5882353" a="1"></color>
<color r="0.4" g="0.4" b="0.6" a="1"></color>
<color r="0.3882353" g="0.3882353" b="0.6117647" a="1"></color>
<color r="0.3764706" g="0.3764706" b="0.62352943" a="1"></color>
<color r="0.3647059" g="0.3647059" b="0.63529414" a="1"></color>
<color r="0.3529412" g="0.3529412" b="0.64705884" a="1"></color>
<color r="0.34117648" g="0.34117648" b="0.65882355" a="1"></color>
<color r="0.32941177" g="0.32941177" b="0.67058825" a="1"></color>
<color r="0.31764707" g="0.31764707" b="0.68235296" a="1"></color>
<color r="0.3019608" g="0.3019608" b="0.69803923" a="1"></color>
<color r="0.2901961" g="0.2901961" b="0.70980394" a="1"></color>
<color r="0.2784314" g="0.2784314" b="0.72156864" a="1"></color>
<color r="0.26666668" g="0.26666668" b="0.73333335" a="1"></color>
<color r="0.25490198" g="0.25490198" b="0.74509805" a="1"></color>
<color r="0.24313726" g="0.24313726" b="0.75686276" a="1"></color>
<color r="0.23137255" g="0.23137255" b="0.76862746" a="1"></color>
<color r="0.21960784" g="0.21960784" b="0.78039217" a="1"></color>
<color r="0.20784314" g="0.20784314" b="0.7921569" a="1"></color>
<color r="0.19607843" g="0.19607843" b="0.8039216" a="1"></color>
<color r="0.18039216" g="0.18039216" b="0.81960785" a="1"></color>
<color r="0.16862746" g="0.16862746" b="0.83137256" a="1"></color>
<color r="0.15686275" g="0.15686275" b="0.84313726" a="1"></color>
<color r="0.14509805" g="0.14509805" b="0.85490197" a="1"></color>
<color r="0.13333334" g="0.13333334" b="0.8666667" a="1"></color>
<color r="0.12156863" g="0.12156863" b="0.8784314" a="1"></color>
<color r="0.10980392" g="0.10980392" b="0.8901961" a="1"></color>
<color r="0.09803922" g="0.09803922" b="0.9019608" a="1"></color>
<color r="0.08627451" g="0.08627451" b="0.9137255" a="1"></color>
<color r="0.07450981" g="0.07450981" b="0.9254902" a="1"></color>
<color r="0.05882353" g="0.05882353" b="0.9411765" a="1"></color>
<color r="0.047058824" g="0.047058824" b="0.9529412" a="1"></color>
<color r="0.03529412" g="0.03529412" b="0.9647059" a="1"></color>
<color r="0.023529412" g="0.023529412" b="0.9764706" a="1"></color>
<color r="0.011764706" g="0.011764706" b="0.9882353" a="1"></color>
<color r="0.0" g="0.0" b="1.0" a="1"></color>
<color r="0.039215688" g="0.039215688" b="1.0" a="1"></color>
<color r="0.078431375" g="0.078431375" b="1.0" a="1"></color>
<color r="0.11372549" g="0.11372549" b="1.0" a="1"></color>
<color r="0.15294118" g="0.15294118" b="1.0" a="1"></color>
<color r="0.19215687" g="0.19215687" b="1.0" a="1"></color>
<color r="0.23137255" g="0.23137255" b="1.0" a="1"></color>
<color r="0.27058825" g="0.27058825" b="1.0" a="1"></color>
<color r="0.30588236" g="0.30588236" b="1.0" a="1"></color>
<color r="0.34509805" g="0.34509805" b="1.0" a="1"></color>
<color r="0.38431373" g="0.38431373" b="1.0" a="1"></color>
<color r="0.42352942" g="0.42352942" b="1.0" a="1"></color>
<color r="0.4627451" g="0.4627451" b="1.0" a="1"></color>
<color r="0.5019608" g="0.5019608" b="1.0" a="1"></color>
<color r="0.5372549" g="0.5372549" b="1.0" a="1"></color>
<color r="0.5764706" g="0.5764706" b="1.0" a="1"></color>
<color r="0.6156863" g="0.6156863" b="1.0" a="1"></color>
<color r="0.654902" g="0.654902" b="1.0" a="1"></color>
<color r="0.69411767" g="0.69411767" b="1.0" a="1"></color>
<color r="0.7294118" g="0.7294118" b="1.0" a="1"></color>
<color r="0.76862746" g="0.76862746" b="1.0" a="1"></color>
<color r="0.80784315" g="0.80784315" b="1.0" a="1"></color>
<color r="0.84705883" g="0.84705883" b="1.0" a="1"></color>
<color r="0.8862745" g="0.8862745" b="1.0" a="1"></color>
<color r="0.92156863" g="0.92156863" b="1.0" a="1"></color>
<color r="0.9607843" g="0.9607843" b="1.0" a="1"></color>
<color r="1.0" g="1.0" b="1.0" a="1"></color>
<color r="0.96862745" g="0.96862745" b="0.96862745" a="1"></color>
<color r="0.9529412" g="0.9529412" b="0.9529412" a="1"></color>
<color r="0.9372549" g="0.9372549" b="0.9372549" a="1"></color>
<color r="0.92156863" g="0.92156863" b="0.92156863" a="1"></color>
<color r="0.9098039" g="0.9098039" b="0.9098039" a="1"></color>
<color r="0.89411765" g="0.89411765" b="0.89411765" a="1"></color>
<color r="0.8784314" g="0.8784314" b="0.8784314" a="1"></color>
<color r="0.8627451" g="0.8627451" b="0.8627451" a="1"></color>
<color r="0.84705883" g="0.84705883" b="0.84705883" a="1"></color>
<color r="0.83137256" g="0.83137256" b="0.83137256" a="1"></color>
<color r="0.8156863" g="0.8156863" b="0.8156863" a="1"></color>
<color r="0.8039216" g="0.8039216" b="0.8039216" a="1"></color>
<color r="0.7882353" g="0.7882353" b="0.7882353" a="1"></color>
<color r="0.77254903" g="0.77254903" b="0.77254903" a="1"></color>
<color r="0.75686276" g="0.75686276" b="0.75686276" a="1"></color>
<color r="0.7411765" g="0.7411765" b="0.7411765" a="1"></color>
<color r="0.7254902" g="0.7254902" b="0.7254902" a="1"></color>
<color r="0.70980394" g="0.70980394" b="0.70980394" a="1"></color>
<color r="0.69803923" g="0.69803923" b="0.69803923" a="1"></color>
<color r="0.68235296" g="0.68235296" b="0.68235296" a="1"></color>
<color r="0.6666667" g="0.6666667" b="0.6666667" a="1"></color>
<color r="0.6509804" g="0.6509804" b="0.6509804" a="1"></color>
<color r="0.63529414" g="0.63529414" b="0.63529414" a="1"></color>
<color r="0.61960787" g="0.61960787" b="0.61960787" a="1"></color>
<color r="0.6039216" g="0.6039216" b="0.6039216" a="1"></color>
<color r="0.5921569" g="0.5921569" b="0.5921569" a="1"></color>
<color r="0.5764706" g="0.5764706" b="0.5764706" a="1"></color>
<color r="0.56078434" g="0.56078434" b="0.56078434" a="1"></color>
<color r="0.54509807" g="0.54509807" b="0.54509807" a="1"></color>
<color r="0.5294118" g="0.5294118" b="0.5294118" a="1"></color>
<color r="0.5137255" g="0.5137255" b="0.5137255" a="1"></color>
<color r="0.5019608" g="0.5019608" b="0.5019608" a="1"></color>
<color r="0.4862745" g="0.4862745" b="0.4862745" a="1"></color>
<color r="0.47058824" g="0.47058824" b="0.47058824" a="1"></color>
<color r="0.45490196" g="0.45490196" b="0.45490196" a="1"></color>
<color r="0.4392157" g="0.4392157" b="0.4392157" a="1"></color>
<color r="0.42352942" g="0.42352942" b="0.42352942" a="1"></color>
<color r="0.40784314" g="0.40784314" b="0.40784314" a="1"></color>
<color r="0.39607844" g="0.39607844" b="0.39607844" a="1"></color>
<color r="0.38039216" g="0.38039216" b="0.38039216" a="1"></color>
<color r="0.3647059" g="0.3647059" b="0.3647059" a="1"></color>
<color r="0.34901962" g="0.34901962" b="0.34901962" a="1"></color>
<color r="0.33333334" g="0.33333334" b="0.33333334" a="1"></color>
<color r="0.31764707" g="0.31764707" b="0.31764707" a="1"></color>
<color r="0.3019608" g="0.3019608" b="0.3019608" a="1"></color>
<color r="0.2901961" g="0.2901961" b="0.2901961" a="1"></color>
<color r="0.27450982" g="0.27450982" b="0.27450982" a="1"></color>
<color r="0.25882354" g="0.25882354" b="0.25882354" a="1"></color>
<color r="0.24313726" g="0.24313726" b="0.24313726" a="1"></color>
<color r="0.22745098" g="0.22745098" b="0.22745098" a="1"></color>
<color r="0.21176471" g="0.21176471" b="0.21176471" a="1"></color>
<color r="0.19607843" g="0.19607843" b="0.19607843" a="1"></color>
<color r="0.18431373" g="0.18431373" b="0.18431373" a="1"></color>
<color r="0.16862746" g="0.16862746" b="0.16862746" a="1"></color>
<color r="0.15294118" g="0.15294118" b="0.15294118" a="1"></color>
<color r="0.13725491" g="0.13725491" b="0.13725491" a="1"></color>
<color r="0.12156863" g="0.12156863" b="0.12156863" a="1"></color>
<color r="0.105882354" g="0.105882354" b="0.105882354" a="1"></color>
<color r="0.09019608" g="0.09019608" b="0.09019608" a="1"></color>
<color r="0.078431375" g="0.078431375" b="0.078431375" a="1"></color>
<color r="0.0627451" g="0.0627451" b="0.0627451" a="1"></color>
<color r="0.047058824" g="0.047058824" b="0.047058824" a="1"></color>
<color r="0.03137255" g="0.03137255" b="0.03137255" a="1"></color>
<color r="1.0" g="1.0" b="1.0" a="1"></color>
</colorMap>

View file

@ -1,264 +0,0 @@
<?xml version="1.0" ?>
<colorMap>
<!-- Colormap converted by bsteffen from CIMSS_WV.ET which was provided by:
Timothy J. Schmit
NOAA/NESDIS Center for SaTellite Applications and Research (STAR)
Advanced Satellite Products Branch (ASPB)
-->
<color r="0.0" g="0.0" b="0.0" a="1"></color>
<color r="0.0" g="0.0" b="0.0" a="1"></color>
<color r="0.0" g="0.0" b="0.0" a="1"></color>
<color r="0.0" g="0.0" b="0.0" a="1"></color>
<color r="0.0" g="0.0" b="0.0" a="1"></color>
<color r="0.019607844" g="0.0" b="0.0" a="1"></color>
<color r="0.039215688" g="0.0" b="0.0" a="1"></color>
<color r="0.05882353" g="0.0" b="0.0" a="1"></color>
<color r="0.078431375" g="0.0" b="0.0" a="1"></color>
<color r="0.101960786" g="0.0" b="0.0" a="1"></color>
<color r="0.12156863" g="0.0" b="0.0" a="1"></color>
<color r="0.14117648" g="0.0" b="0.0" a="1"></color>
<color r="0.16078432" g="0.0" b="0.0" a="1"></color>
<color r="0.18039216" g="0.0" b="0.0" a="1"></color>
<color r="0.2" g="0.0" b="0.0" a="1"></color>
<color r="0.21960784" g="0.0" b="0.0" a="1"></color>
<color r="0.23921569" g="0.0" b="0.0" a="1"></color>
<color r="0.25882354" g="0.0" b="0.0" a="1"></color>
<color r="0.2784314" g="0.0" b="0.0" a="1"></color>
<color r="0.3019608" g="0.0" b="0.0" a="1"></color>
<color r="0.32156864" g="0.0" b="0.0" a="1"></color>
<color r="0.34117648" g="0.0" b="0.0" a="1"></color>
<color r="0.36078432" g="0.0" b="0.0" a="1"></color>
<color r="0.38039216" g="0.0" b="0.0" a="1"></color>
<color r="0.4" g="0.0" b="0.0" a="1"></color>
<color r="0.41960785" g="0.0" b="0.0" a="1"></color>
<color r="0.4392157" g="0.0" b="0.0" a="1"></color>
<color r="0.45882353" g="0.0" b="0.0" a="1"></color>
<color r="0.47843137" g="0.0" b="0.0" a="1"></color>
<color r="0.49803922" g="0.0" b="0.0" a="1"></color>
<color r="0.52156866" g="0.0" b="0.0" a="1"></color>
<color r="0.5411765" g="0.0" b="0.0" a="1"></color>
<color r="0.56078434" g="0.0" b="0.0" a="1"></color>
<color r="0.5803922" g="0.0" b="0.0" a="1"></color>
<color r="0.6" g="0.0" b="0.0" a="1"></color>
<color r="0.61960787" g="0.0" b="0.0" a="1"></color>
<color r="0.6392157" g="0.0" b="0.0" a="1"></color>
<color r="0.65882355" g="0.0" b="0.0" a="1"></color>
<color r="0.6784314" g="0.0" b="0.0" a="1"></color>
<color r="0.7019608" g="0.0" b="0.0" a="1"></color>
<color r="0.72156864" g="0.0" b="0.0" a="1"></color>
<color r="0.7411765" g="0.0" b="0.0" a="1"></color>
<color r="0.7607843" g="0.0" b="0.0" a="1"></color>
<color r="0.78039217" g="0.0" b="0.0" a="1"></color>
<color r="0.8" g="0.0" b="0.0" a="1"></color>
<color r="0.81960785" g="0.0" b="0.0" a="1"></color>
<color r="0.8392157" g="0.0" b="0.0" a="1"></color>
<color r="0.85882354" g="0.0" b="0.0" a="1"></color>
<color r="0.8784314" g="0.0" b="0.0" a="1"></color>
<color r="0.8980392" g="0.0" b="0.0" a="1"></color>
<color r="0.92156863" g="0.0" b="0.0" a="1"></color>
<color r="0.9411765" g="0.0" b="0.0" a="1"></color>
<color r="0.9607843" g="0.0" b="0.0" a="1"></color>
<color r="0.98039216" g="0.0" b="0.0" a="1"></color>
<color r="1.0" g="0.0" b="0.0" a="1"></color>
<color r="1.0" g="0.023529412" b="0.0" a="1"></color>
<color r="1.0" g="0.050980393" b="0.0" a="1"></color>
<color r="1.0" g="0.07450981" b="0.0" a="1"></color>
<color r="1.0" g="0.101960786" b="0.0" a="1"></color>
<color r="1.0" g="0.1254902" b="0.0" a="1"></color>
<color r="1.0" g="0.14901961" b="0.0" a="1"></color>
<color r="1.0" g="0.1764706" b="0.0" a="1"></color>
<color r="1.0" g="0.2" b="0.0" a="1"></color>
<color r="1.0" g="0.22352941" b="0.0" a="1"></color>
<color r="1.0" g="0.2509804" b="0.0" a="1"></color>
<color r="1.0" g="0.27450982" b="0.0" a="1"></color>
<color r="1.0" g="0.3019608" b="0.0" a="1"></color>
<color r="1.0" g="0.3254902" b="0.0" a="1"></color>
<color r="1.0" g="0.34901962" b="0.0" a="1"></color>
<color r="1.0" g="0.3764706" b="0.0" a="1"></color>
<color r="1.0" g="0.4" b="0.0" a="1"></color>
<color r="1.0" g="0.42352942" b="0.0" a="1"></color>
<color r="1.0" g="0.4509804" b="0.0" a="1"></color>
<color r="1.0" g="0.4745098" b="0.0" a="1"></color>
<color r="1.0" g="0.5019608" b="0.0" a="1"></color>
<color r="1.0" g="0.5254902" b="0.0" a="1"></color>
<color r="1.0" g="0.54901963" b="0.0" a="1"></color>
<color r="1.0" g="0.5764706" b="0.0" a="1"></color>
<color r="1.0" g="0.6" b="0.0" a="1"></color>
<color r="1.0" g="0.62352943" b="0.0" a="1"></color>
<color r="1.0" g="0.6509804" b="0.0" a="1"></color>
<color r="1.0" g="0.6745098" b="0.0" a="1"></color>
<color r="1.0" g="0.7019608" b="0.0" a="1"></color>
<color r="1.0" g="0.7254902" b="0.0" a="1"></color>
<color r="1.0" g="0.7490196" b="0.0" a="1"></color>
<color r="1.0" g="0.7764706" b="0.0" a="1"></color>
<color r="1.0" g="0.8" b="0.0" a="1"></color>
<color r="1.0" g="0.8235294" b="0.0" a="1"></color>
<color r="1.0" g="0.8509804" b="0.0" a="1"></color>
<color r="1.0" g="0.8745098" b="0.0" a="1"></color>
<color r="1.0" g="0.9019608" b="0.0" a="1"></color>
<color r="1.0" g="0.9254902" b="0.0" a="1"></color>
<color r="1.0" g="0.9490196" b="0.0" a="1"></color>
<color r="1.0" g="0.9764706" b="0.0" a="1"></color>
<color r="1.0" g="1.0" b="0.0" a="1"></color>
<color r="0.9843137" g="0.9843137" b="0.015686275" a="1"></color>
<color r="0.972549" g="0.972549" b="0.02745098" a="1"></color>
<color r="0.95686275" g="0.95686275" b="0.043137256" a="1"></color>
<color r="0.94509804" g="0.94509804" b="0.05490196" a="1"></color>
<color r="0.92941177" g="0.92941177" b="0.07058824" a="1"></color>
<color r="0.91764706" g="0.91764706" b="0.08235294" a="1"></color>
<color r="0.9019608" g="0.9019608" b="0.09803922" a="1"></color>
<color r="0.8901961" g="0.8901961" b="0.10980392" a="1"></color>
<color r="0.8745098" g="0.8745098" b="0.1254902" a="1"></color>
<color r="0.8627451" g="0.8627451" b="0.13725491" a="1"></color>
<color r="0.84705883" g="0.84705883" b="0.15294118" a="1"></color>
<color r="0.8352941" g="0.8352941" b="0.16862746" a="1"></color>
<color r="0.81960785" g="0.81960785" b="0.18039216" a="1"></color>
<color r="0.8039216" g="0.8039216" b="0.19607843" a="1"></color>
<color r="0.7921569" g="0.7921569" b="0.20784314" a="1"></color>
<color r="0.7764706" g="0.7764706" b="0.22352941" a="1"></color>
<color r="0.7647059" g="0.7647059" b="0.23529412" a="1"></color>
<color r="0.7490196" g="0.7490196" b="0.2509804" a="1"></color>
<color r="0.7372549" g="0.7372549" b="0.2627451" a="1"></color>
<color r="0.72156864" g="0.72156864" b="0.2784314" a="1"></color>
<color r="0.70980394" g="0.70980394" b="0.2901961" a="1"></color>
<color r="0.69411767" g="0.69411767" b="0.30588236" a="1"></color>
<color r="0.68235296" g="0.68235296" b="0.31764707" a="1"></color>
<color r="0.6666667" g="0.6666667" b="0.33333334" a="1"></color>
<color r="0.6509804" g="0.6509804" b="0.34901962" a="1"></color>
<color r="0.6392157" g="0.6392157" b="0.36078432" a="1"></color>
<color r="0.62352943" g="0.62352943" b="0.3764706" a="1"></color>
<color r="0.6117647" g="0.6117647" b="0.3882353" a="1"></color>
<color r="0.59607846" g="0.59607846" b="0.40392157" a="1"></color>
<color r="0.58431375" g="0.58431375" b="0.41568628" a="1"></color>
<color r="0.5686275" g="0.5686275" b="0.43137255" a="1"></color>
<color r="0.5568628" g="0.5568628" b="0.44313726" a="1"></color>
<color r="0.5411765" g="0.5411765" b="0.45882353" a="1"></color>
<color r="0.5294118" g="0.5294118" b="0.47058824" a="1"></color>
<color r="0.5137255" g="0.5137255" b="0.4862745" a="1"></color>
<color r="0.5019608" g="0.5019608" b="0.5019608" a="1"></color>
<color r="0.4862745" g="0.4862745" b="0.5137255" a="1"></color>
<color r="0.47058824" g="0.47058824" b="0.5294118" a="1"></color>
<color r="0.45882353" g="0.45882353" b="0.5411765" a="1"></color>
<color r="0.44313726" g="0.44313726" b="0.5568628" a="1"></color>
<color r="0.43137255" g="0.43137255" b="0.5686275" a="1"></color>
<color r="0.41568628" g="0.41568628" b="0.58431375" a="1"></color>
<color r="0.40392157" g="0.40392157" b="0.59607846" a="1"></color>
<color r="0.3882353" g="0.3882353" b="0.6117647" a="1"></color>
<color r="0.3764706" g="0.3764706" b="0.62352943" a="1"></color>
<color r="0.36078432" g="0.36078432" b="0.6392157" a="1"></color>
<color r="0.34901962" g="0.34901962" b="0.6509804" a="1"></color>
<color r="0.33333334" g="0.33333334" b="0.6666667" a="1"></color>
<color r="0.31764707" g="0.31764707" b="0.68235296" a="1"></color>
<color r="0.30588236" g="0.30588236" b="0.69411767" a="1"></color>
<color r="0.2901961" g="0.2901961" b="0.70980394" a="1"></color>
<color r="0.2784314" g="0.2784314" b="0.72156864" a="1"></color>
<color r="0.2627451" g="0.2627451" b="0.7372549" a="1"></color>
<color r="0.2509804" g="0.2509804" b="0.7490196" a="1"></color>
<color r="0.23529412" g="0.23529412" b="0.7647059" a="1"></color>
<color r="0.22352941" g="0.22352941" b="0.7764706" a="1"></color>
<color r="0.20784314" g="0.20784314" b="0.7921569" a="1"></color>
<color r="0.19607843" g="0.19607843" b="0.8039216" a="1"></color>
<color r="0.18039216" g="0.18039216" b="0.81960785" a="1"></color>
<color r="0.16862746" g="0.16862746" b="0.8352941" a="1"></color>
<color r="0.15294118" g="0.15294118" b="0.84705883" a="1"></color>
<color r="0.13725491" g="0.13725491" b="0.8627451" a="1"></color>
<color r="0.1254902" g="0.1254902" b="0.8745098" a="1"></color>
<color r="0.10980392" g="0.10980392" b="0.8901961" a="1"></color>
<color r="0.09803922" g="0.09803922" b="0.9019608" a="1"></color>
<color r="0.08235294" g="0.08235294" b="0.91764706" a="1"></color>
<color r="0.07058824" g="0.07058824" b="0.92941177" a="1"></color>
<color r="0.05490196" g="0.05490196" b="0.94509804" a="1"></color>
<color r="0.043137256" g="0.043137256" b="0.95686275" a="1"></color>
<color r="0.02745098" g="0.02745098" b="0.972549" a="1"></color>
<color r="0.015686275" g="0.015686275" b="0.9843137" a="1"></color>
<color r="0.0" g="0.0" b="1.0" a="1"></color>
<color r="0.02745098" g="0.02745098" b="1.0" a="1"></color>
<color r="0.05490196" g="0.05490196" b="1.0" a="1"></color>
<color r="0.08235294" g="0.08235294" b="1.0" a="1"></color>
<color r="0.10980392" g="0.10980392" b="1.0" a="1"></color>
<color r="0.13725491" g="0.13725491" b="1.0" a="1"></color>
<color r="0.16862746" g="0.16862746" b="1.0" a="1"></color>
<color r="0.19607843" g="0.19607843" b="1.0" a="1"></color>
<color r="0.22352941" g="0.22352941" b="1.0" a="1"></color>
<color r="0.2509804" g="0.2509804" b="1.0" a="1"></color>
<color r="0.2784314" g="0.2784314" b="1.0" a="1"></color>
<color r="0.30588236" g="0.30588236" b="1.0" a="1"></color>
<color r="0.33333334" g="0.33333334" b="1.0" a="1"></color>
<color r="0.36078432" g="0.36078432" b="1.0" a="1"></color>
<color r="0.3882353" g="0.3882353" b="1.0" a="1"></color>
<color r="0.41568628" g="0.41568628" b="1.0" a="1"></color>
<color r="0.44313726" g="0.44313726" b="1.0" a="1"></color>
<color r="0.47058824" g="0.47058824" b="1.0" a="1"></color>
<color r="0.5019608" g="0.5019608" b="1.0" a="1"></color>
<color r="0.5294118" g="0.5294118" b="1.0" a="1"></color>
<color r="0.5568628" g="0.5568628" b="1.0" a="1"></color>
<color r="0.58431375" g="0.58431375" b="1.0" a="1"></color>
<color r="0.6117647" g="0.6117647" b="1.0" a="1"></color>
<color r="0.6392157" g="0.6392157" b="1.0" a="1"></color>
<color r="0.6666667" g="0.6666667" b="1.0" a="1"></color>
<color r="0.69411767" g="0.69411767" b="1.0" a="1"></color>
<color r="0.72156864" g="0.72156864" b="1.0" a="1"></color>
<color r="0.7490196" g="0.7490196" b="1.0" a="1"></color>
<color r="0.7764706" g="0.7764706" b="1.0" a="1"></color>
<color r="0.8039216" g="0.8039216" b="1.0" a="1"></color>
<color r="0.8352941" g="0.8352941" b="1.0" a="1"></color>
<color r="0.8627451" g="0.8627451" b="1.0" a="1"></color>
<color r="0.8901961" g="0.8901961" b="1.0" a="1"></color>
<color r="0.91764706" g="0.91764706" b="1.0" a="1"></color>
<color r="0.94509804" g="0.94509804" b="1.0" a="1"></color>
<color r="0.972549" g="0.972549" b="1.0" a="1"></color>
<color r="1.0" g="1.0" b="1.0" a="1"></color>
<color r="0.98039216" g="0.98039216" b="0.98039216" a="1"></color>
<color r="0.95686275" g="0.95686275" b="0.95686275" a="1"></color>
<color r="0.9372549" g="0.9372549" b="0.9372549" a="1"></color>
<color r="0.91764706" g="0.91764706" b="0.91764706" a="1"></color>
<color r="0.89411765" g="0.89411765" b="0.89411765" a="1"></color>
<color r="0.8745098" g="0.8745098" b="0.8745098" a="1"></color>
<color r="0.85490197" g="0.85490197" b="0.85490197" a="1"></color>
<color r="0.8352941" g="0.8352941" b="0.8352941" a="1"></color>
<color r="0.8117647" g="0.8117647" b="0.8117647" a="1"></color>
<color r="0.7921569" g="0.7921569" b="0.7921569" a="1"></color>
<color r="0.77254903" g="0.77254903" b="0.77254903" a="1"></color>
<color r="0.7490196" g="0.7490196" b="0.7490196" a="1"></color>
<color r="0.7294118" g="0.7294118" b="0.7294118" a="1"></color>
<color r="0.70980394" g="0.70980394" b="0.70980394" a="1"></color>
<color r="0.6862745" g="0.6862745" b="0.6862745" a="1"></color>
<color r="0.6666667" g="0.6666667" b="0.6666667" a="1"></color>
<color r="0.64705884" g="0.64705884" b="0.64705884" a="1"></color>
<color r="0.62352943" g="0.62352943" b="0.62352943" a="1"></color>
<color r="0.6039216" g="0.6039216" b="0.6039216" a="1"></color>
<color r="0.58431375" g="0.58431375" b="0.58431375" a="1"></color>
<color r="0.56078434" g="0.56078434" b="0.56078434" a="1"></color>
<color r="0.5411765" g="0.5411765" b="0.5411765" a="1"></color>
<color r="0.52156866" g="0.52156866" b="0.52156866" a="1"></color>
<color r="0.5019608" g="0.5019608" b="0.5019608" a="1"></color>
<color r="0.47843137" g="0.47843137" b="0.47843137" a="1"></color>
<color r="0.45882353" g="0.45882353" b="0.45882353" a="1"></color>
<color r="0.4392157" g="0.4392157" b="0.4392157" a="1"></color>
<color r="0.41568628" g="0.41568628" b="0.41568628" a="1"></color>
<color r="0.39607844" g="0.39607844" b="0.39607844" a="1"></color>
<color r="0.3764706" g="0.3764706" b="0.3764706" a="1"></color>
<color r="0.3529412" g="0.3529412" b="0.3529412" a="1"></color>
<color r="0.33333334" g="0.33333334" b="0.33333334" a="1"></color>
<color r="0.3137255" g="0.3137255" b="0.3137255" a="1"></color>
<color r="0.2901961" g="0.2901961" b="0.2901961" a="1"></color>
<color r="0.27058825" g="0.27058825" b="0.27058825" a="1"></color>
<color r="0.2509804" g="0.2509804" b="0.2509804" a="1"></color>
<color r="0.22745098" g="0.22745098" b="0.22745098" a="1"></color>
<color r="0.20784314" g="0.20784314" b="0.20784314" a="1"></color>
<color r="0.1882353" g="0.1882353" b="0.1882353" a="1"></color>
<color r="0.16862746" g="0.16862746" b="0.16862746" a="1"></color>
<color r="0.14509805" g="0.14509805" b="0.14509805" a="1"></color>
<color r="0.1254902" g="0.1254902" b="0.1254902" a="1"></color>
<color r="0.105882354" g="0.105882354" b="0.105882354" a="1"></color>
<color r="0.08235294" g="0.08235294" b="0.08235294" a="1"></color>
<color r="0.0627451" g="0.0627451" b="0.0627451" a="1"></color>
<color r="0.043137256" g="0.043137256" b="0.043137256" a="1"></color>
<color r="0.019607844" g="0.019607844" b="0.019607844" a="1"></color>
<color r="1.0" g="1.0" b="1.0" a="1"></color>
<color r="1.0" g="1.0" b="1.0" a="1"></color>
<color r="1.0" g="1.0" b="1.0" a="1"></color>
<color r="1.0" g="1.0" b="1.0" a="1"></color>
<color r="1.0" g="1.0" b="1.0" a="1"></color>
<color r="1.0" g="1.0" b="1.0" a="1"></color>
</colorMap>

View file

@ -1,261 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<colorMap xmlns:ns2="group" xmlns:ns3="http://www.example.org/productType">
<!-- Colormap provided by Jordan Gerth -->
<!-- this is a converted legacy colomap -->
<color r="0.0" g="0.0" b="0.0" a="0.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="1.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="1.000000" g="0.031373" b="0.000000" a="1.0"/>
<color r="1.000000" g="0.062745" b="0.000000" a="1.0"/>
<color r="1.000000" g="0.094118" b="0.000000" a="1.0"/>
<color r="1.000000" g="0.125490" b="0.000000" a="1.0"/>
<color r="1.000000" g="0.156863" b="0.000000" a="1.0"/>
<color r="1.000000" g="0.188235" b="0.000000" a="1.0"/>
<color r="1.000000" g="0.219608" b="0.000000" a="1.0"/>
<color r="1.000000" g="0.250980" b="0.000000" a="1.0"/>
<color r="1.000000" g="0.282353" b="0.000000" a="1.0"/>
<color r="1.000000" g="0.313725" b="0.000000" a="1.0"/>
<color r="1.000000" g="0.349020" b="0.003922" a="1.0"/>
<color r="1.000000" g="0.380392" b="0.003922" a="1.0"/>
<color r="1.000000" g="0.411765" b="0.003922" a="1.0"/>
<color r="1.000000" g="0.443137" b="0.003922" a="1.0"/>
<color r="1.000000" g="0.474510" b="0.003922" a="1.0"/>
<color r="1.000000" g="0.505882" b="0.003922" a="1.0"/>
<color r="1.000000" g="0.537255" b="0.003922" a="1.0"/>
<color r="1.000000" g="0.568627" b="0.003922" a="1.0"/>
<color r="1.000000" g="0.600000" b="0.003922" a="1.0"/>
<color r="1.000000" g="0.631373" b="0.003922" a="1.0"/>
<color r="1.000000" g="0.666667" b="0.007843" a="1.0"/>
<color r="1.000000" g="0.698039" b="0.007843" a="1.0"/>
<color r="1.000000" g="0.729412" b="0.007843" a="1.0"/>
<color r="1.000000" g="0.760784" b="0.007843" a="1.0"/>
<color r="1.000000" g="0.792157" b="0.007843" a="1.0"/>
<color r="1.000000" g="0.823529" b="0.007843" a="1.0"/>
<color r="1.000000" g="0.854902" b="0.007843" a="1.0"/>
<color r="1.000000" g="0.886275" b="0.007843" a="1.0"/>
<color r="1.000000" g="0.917647" b="0.007843" a="1.0"/>
<color r="1.000000" g="0.949020" b="0.007843" a="1.0"/>
<color r="1.000000" g="0.984314" b="0.011765" a="1.0"/>
<color r="0.968627" g="0.952941" b="0.031373" a="1.0"/>
<color r="0.937255" g="0.921569" b="0.050980" a="1.0"/>
<color r="0.901961" g="0.886275" b="0.074510" a="1.0"/>
<color r="0.870588" g="0.854902" b="0.094118" a="1.0"/>
<color r="0.835294" g="0.823529" b="0.117647" a="1.0"/>
<color r="0.803922" g="0.788235" b="0.137255" a="1.0"/>
<color r="0.772549" g="0.756863" b="0.160784" a="1.0"/>
<color r="0.737255" g="0.725490" b="0.180392" a="1.0"/>
<color r="0.705882" g="0.690196" b="0.200000" a="1.0"/>
<color r="0.670588" g="0.658824" b="0.223529" a="1.0"/>
<color r="0.639216" g="0.623529" b="0.243137" a="1.0"/>
<color r="0.607843" g="0.592157" b="0.266667" a="1.0"/>
<color r="0.572549" g="0.560784" b="0.286275" a="1.0"/>
<color r="0.541176" g="0.525490" b="0.309804" a="1.0"/>
<color r="0.509804" g="0.494118" b="0.329412" a="1.0"/>
<color r="0.474510" g="0.462745" b="0.349020" a="1.0"/>
<color r="0.443137" g="0.427451" b="0.372549" a="1.0"/>
<color r="0.407843" g="0.396078" b="0.392157" a="1.0"/>
<color r="0.376471" g="0.364706" b="0.415686" a="1.0"/>
<color r="0.341176" g="0.329412" b="0.435294" a="1.0"/>
<color r="0.309804" g="0.298039" b="0.458824" a="1.0"/>
<color r="0.278431" g="0.262745" b="0.478431" a="1.0"/>
<color r="0.243137" g="0.231373" b="0.498039" a="1.0"/>
<color r="0.211765" g="0.200000" b="0.521569" a="1.0"/>
<color r="0.180392" g="0.164706" b="0.541176" a="1.0"/>
<color r="0.145098" g="0.133333" b="0.564706" a="1.0"/>
<color r="0.113725" g="0.101961" b="0.584314" a="1.0"/>
<color r="0.078431" g="0.066667" b="0.607843" a="1.0"/>
<color r="0.047059" g="0.035294" b="0.627451" a="1.0"/>
<color r="0.011765" g="0.000000" b="0.650980" a="1.0"/>
<color r="0.058824" g="0.047059" b="0.666667" a="1.0"/>
<color r="0.109804" g="0.098039" b="0.682353" a="1.0"/>
<color r="0.156863" g="0.149020" b="0.701961" a="1.0"/>
<color r="0.207843" g="0.200000" b="0.717647" a="1.0"/>
<color r="0.258824" g="0.247059" b="0.737255" a="1.0"/>
<color r="0.305882" g="0.298039" b="0.752941" a="1.0"/>
<color r="0.356863" g="0.349020" b="0.772549" a="1.0"/>
<color r="0.403922" g="0.400000" b="0.788235" a="1.0"/>
<color r="0.454902" g="0.447059" b="0.807843" a="1.0"/>
<color r="0.505882" g="0.498039" b="0.823529" a="1.0"/>
<color r="0.552941" g="0.549020" b="0.839216" a="1.0"/>
<color r="0.603922" g="0.600000" b="0.858824" a="1.0"/>
<color r="0.650980" g="0.647059" b="0.874510" a="1.0"/>
<color r="0.701961" g="0.698039" b="0.894118" a="1.0"/>
<color r="0.752941" g="0.749020" b="0.909804" a="1.0"/>
<color r="0.800000" g="0.800000" b="0.929412" a="1.0"/>
<color r="0.850980" g="0.847059" b="0.945098" a="1.0"/>
<color r="0.898039" g="0.898039" b="0.964706" a="1.0"/>
<color r="0.949020" g="0.949020" b="0.980392" a="1.0"/>
<color r="1.000000" g="1.000000" b="1.000000" a="1.0"/>
<color r="0.964706" g="0.980392" b="0.964706" a="1.0"/>
<color r="0.929412" g="0.960784" b="0.929412" a="1.0"/>
<color r="0.890196" g="0.937255" b="0.890196" a="1.0"/>
<color r="0.854902" g="0.917647" b="0.854902" a="1.0"/>
<color r="0.815686" g="0.894118" b="0.815686" a="1.0"/>
<color r="0.780392" g="0.874510" b="0.780392" a="1.0"/>
<color r="0.745098" g="0.850980" b="0.745098" a="1.0"/>
<color r="0.705882" g="0.831373" b="0.705882" a="1.0"/>
<color r="0.670588" g="0.807843" b="0.670588" a="1.0"/>
<color r="0.631373" g="0.788235" b="0.631373" a="1.0"/>
<color r="0.596078" g="0.764706" b="0.596078" a="1.0"/>
<color r="0.560784" g="0.745098" b="0.560784" a="1.0"/>
<color r="0.521569" g="0.721569" b="0.521569" a="1.0"/>
<color r="0.486275" g="0.701961" b="0.486275" a="1.0"/>
<color r="0.447059" g="0.678431" b="0.447059" a="1.0"/>
<color r="0.411765" g="0.658824" b="0.411765" a="1.0"/>
<color r="0.376471" g="0.635294" b="0.376471" a="1.0"/>
<color r="0.337255" g="0.615686" b="0.337255" a="1.0"/>
<color r="0.301961" g="0.592157" b="0.301961" a="1.0"/>
<color r="0.262745" g="0.572549" b="0.262745" a="1.0"/>
<color r="0.227451" g="0.549020" b="0.227451" a="1.0"/>
<color r="0.192157" g="0.529412" b="0.192157" a="1.0"/>
<color r="0.152941" g="0.505882" b="0.152941" a="1.0"/>
<color r="0.117647" g="0.486275" b="0.117647" a="1.0"/>
<color r="0.078431" g="0.462745" b="0.078431" a="1.0"/>
<color r="0.043137" g="0.443137" b="0.043137" a="1.0"/>
<color r="0.003922" g="0.419608" b="0.003922" a="1.0"/>
<color r="0.003922" g="0.431373" b="0.027451" a="1.0"/>
<color r="0.003922" g="0.447059" b="0.054902" a="1.0"/>
<color r="0.003922" g="0.462745" b="0.082353" a="1.0"/>
<color r="0.003922" g="0.478431" b="0.109804" a="1.0"/>
<color r="0.003922" g="0.494118" b="0.137255" a="1.0"/>
<color r="0.003922" g="0.509804" b="0.164706" a="1.0"/>
<color r="0.003922" g="0.525490" b="0.192157" a="1.0"/>
<color r="0.003922" g="0.541176" b="0.215686" a="1.0"/>
<color r="0.003922" g="0.556863" b="0.243137" a="1.0"/>
<color r="0.007843" g="0.568627" b="0.270588" a="1.0"/>
<color r="0.007843" g="0.584314" b="0.298039" a="1.0"/>
<color r="0.007843" g="0.600000" b="0.325490" a="1.0"/>
<color r="0.007843" g="0.615686" b="0.352941" a="1.0"/>
<color r="0.007843" g="0.631373" b="0.380392" a="1.0"/>
<color r="0.007843" g="0.647059" b="0.403922" a="1.0"/>
<color r="0.007843" g="0.662745" b="0.431373" a="1.0"/>
<color r="0.007843" g="0.678431" b="0.458824" a="1.0"/>
<color r="0.007843" g="0.694118" b="0.486275" a="1.0"/>
<color r="0.011765" g="0.705882" b="0.513725" a="1.0"/>
<color r="0.011765" g="0.721569" b="0.541176" a="1.0"/>
<color r="0.011765" g="0.737255" b="0.568627" a="1.0"/>
<color r="0.011765" g="0.752941" b="0.596078" a="1.0"/>
<color r="0.011765" g="0.768627" b="0.619608" a="1.0"/>
<color r="0.011765" g="0.784314" b="0.647059" a="1.0"/>
<color r="0.011765" g="0.800000" b="0.674510" a="1.0"/>
<color r="0.011765" g="0.815686" b="0.701961" a="1.0"/>
<color r="0.011765" g="0.831373" b="0.729412" a="1.0"/>
<color r="0.015686" g="0.843137" b="0.756863" a="1.0"/>
<color r="0.015686" g="0.858824" b="0.784314" a="1.0"/>
<color r="0.015686" g="0.874510" b="0.807843" a="1.0"/>
<color r="0.015686" g="0.890196" b="0.835294" a="1.0"/>
<color r="0.015686" g="0.905882" b="0.862745" a="1.0"/>
<color r="0.015686" g="0.921569" b="0.890196" a="1.0"/>
<color r="0.015686" g="0.937255" b="0.917647" a="1.0"/>
<color r="0.015686" g="0.952941" b="0.945098" a="1.0"/>
<color r="0.015686" g="0.968627" b="0.972549" a="1.0"/>
<color r="1.0" g="1.0" b="1.0" a="1.0"/>
</colorMap>

View file

@ -1,26 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
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.
-->
<DerivedParameter unit="K" name="Satellite Cloud Phase[8.5-11.2 um]" abbreviation="satCloudPhase">
<Method name="Difference">
<Field abbreviation="CH-11-8.50um" unit="K"/>
<Field abbreviation="CH-14-11.20um" unit="K"/>
</Method>
</DerivedParameter>

View file

@ -1,26 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
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.
-->
<DerivedParameter unit="K" name="Satellite Fog[3.9-11.2 um]" abbreviation="satFog">
<Method name="Difference">
<Field abbreviation="CH-07-3.90um" unit="K"/>
<Field abbreviation="CH-14-11.20um" unit="K"/>
</Method>
</DerivedParameter>

View file

@ -1,26 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
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.
-->
<DerivedParameter unit="K" name="Satellite Moisture[11.2-12.3 um]" abbreviation="satMoisture">
<Method name="Difference">
<Field abbreviation="CH-14-11.20um" unit="K"/>
<Field abbreviation="CH-15-12.30um" unit="K"/>
</Method>
</DerivedParameter>

View file

@ -1,26 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
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.
-->
<DerivedParameter name="Satellite Snow[0.64-1.61 um]" abbreviation="satSnow">
<Method name="Difference">
<Field abbreviation="CH-02-0.64um" unit="/4096"/>
<Field abbreviation="CH-05-1.61um" unit="/4096"/>
</Method>
</DerivedParameter>

View file

@ -1,26 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
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.
-->
<DerivedParameter unit="K" name="Satellite Upper Level Info[11.2-6.19 um]" abbreviation="satUpperLevelInfo">
<Method name="Difference">
<Field abbreviation="CH-14-11.20um" unit="K"/>
<Field abbreviation="CH-08-6.19um" unit="K"/>
</Method>
</DerivedParameter>

View file

@ -1,26 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
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.
-->
<DerivedParameter name="Satellite Vegetation[0.64-0.87 um]" abbreviation="satVegetation">
<Method name="Difference">
<Field abbreviation="CH-02-0.64um" unit="/4096"/>
<Field abbreviation="CH-03-0.87um" unit="/4096"/>
</Method>
</DerivedParameter>

View file

@ -1,21 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
GOES-16 Product WMO Header Regions
Aerosol Detection (Smoke+Dust) IXTA99 KNES F,C,M
Aerosol Optical Depth IXTB99 KNES F,C
Cloud Top Phase IXTD99 KNES F,C,M
Cloud Top Height IXTG99 KNES F,C,M
Cloud Top Pressure IXTX01 KNES F,C
Cloud Top Temperature IXTI99 KNES F,M
Derived Stability Indices IXTN99 KNES F,C,M
Total Precipitable Water IXTO99 KNES F,C,M
Clear Sky Mask IXTH99 KNES F,C,M
Fire/Hot Spot Characterization IXTJ99 KNES F,C
Land Surface (Skin) Temperature IXTK99 KNES F,C,M
-->
<requestPatterns xmlns:ns2="group">
<regex>^TI[SR]</regex>
<regex>^IXT[ABDGINOHJK]99</regex>
<!-- This pattern is intended to match standardized Level 2 filenames, it will not be used over LDM -->
<regex>^OR_ABI-L2-\w{3,5}(C|F|M1|M2)-M[34]_G\d\d_s\d{14}_e\d{14}_c\d{14}.nc$</regex>
</requestPatterns>

View file

@ -1,41 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
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.
-->
<goesrProductDescriptions>
<default>
<matches>
<match pattern="OR_ABI-L2-ACTP(C|F|M1|M2)-M[34]_G\d\d_s\d{14}_e\d{14}_c\d{14}.nc">
<attribute name="dataset_name" />
</match>
</matches>
</default>
<description>
<data>
<variable name="Phase" />
<discreteMask name="DQF" value="0" keep="true">
<fillByte>-1</fillByte>
</discreteMask>
</data>
<physicalElement>
<value value="ACTP" />
</physicalElement>
</description>
</goesrProductDescriptions>

View file

@ -1,63 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
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.
-->
<goesrProductDescriptions>
<default>
<matches>
<match pattern="OR_ABI-L2-ADP(C|F|M1|M2)-M[34]_G\d\d_s\d{14}_e\d{14}_c\d{14}.nc">
<attribute name="dataset_name" />
</match>
</matches>
</default>
<description>
<data bitset="Aerosol Dust Smoke" />
<physicalElement>
<value value="ADP" />
</physicalElement>
</description>
<!-- Enable these descriptions to decode individual fields separately. -->
<!--<description>
<data>
<variable name="Aerosol"/>
</data>
<physicalElement>
<value value="Aerosol" />
</physicalElement>
</description>
<description>
<data>
<variable name="Dust"/>
</data>
<physicalElement>
<value value="Dust" />
</physicalElement>
</description>
<description>
<data>
<variable name="Smoke"/>
</data>
<physicalElement>
<value value="Smoke" />
</physicalElement>
</description>
-->
</goesrProductDescriptions>

View file

@ -1,44 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
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.
-->
<goesrProductDescriptions>
<default>
<matches>
<match pattern="OR_ABI-L2-AOD(C|F|M1|M2)-M[34]_G\d\d_s\d{14}_e\d{14}_c\d{14}.nc">
<attribute name="dataset_name" />
</match>
</matches>
</default>
<description>
<data>
<variable name="AOD" />
<discreteMask name="DQF" value="0" keep="true">
<fillByte>-1</fillByte>
</discreteMask>
</data>
<physicalElement>
<value value="AOD" />
</physicalElement>
<units>
<value value="*1" />
</units>
</description>
</goesrProductDescriptions>

View file

@ -1,44 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
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.
-->
<goesrProductDescriptions>
<default>
<matches>
<match pattern="OR_ABI-L2-COD(C|F|M1|M2)-M[34]_G\d\d_s\d{14}_e\d{14}_c\d{14}.nc">
<attribute name="dataset_name" />
</match>
</matches>
</default>
<description>
<data>
<variable name="COD" />
<discreteMask name="DQF" value="0" keep="true">
<fillByte>-1</fillByte>
</discreteMask>
</data>
<physicalElement>
<value value="COD" />
</physicalElement>
<units>
<value value="*1" />
</units>
</description>
</goesrProductDescriptions>

View file

@ -1,44 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
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.
-->
<goesrProductDescriptions>
<default>
<matches>
<match pattern="OR_ABI-L2-CPS(C|F|M1|M2)-M[34]_G\d\d_s\d{14}_e\d{14}_c\d{14}.nc">
<attribute name="dataset_name" />
</match>
</matches>
</default>
<description>
<data>
<variable name="PSD" />
<discreteMask name="DQF" value="0" keep="true">
<fillByte>-1</fillByte>
</discreteMask>
</data>
<physicalElement>
<value value="CPSD" />
</physicalElement>
<units>
<value value="microm" />
</units>
</description>
</goesrProductDescriptions>

View file

@ -1,41 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
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.
-->
<goesrProductDescriptions>
<default>
<matches>
<match pattern="OR_ABI-L2-ACM(C|F|M1|M2)-M[34]_G\d\d_s\d{14}_e\d{14}_c\d{14}.nc">
<attribute name="dataset_name" />
</match>
</matches>
</default>
<description>
<data>
<variable name="BCM" />
<discreteMask name="DQF" value="0" keep="true">
<fillByte>-1</fillByte>
</discreteMask>
</data>
<physicalElement>
<value value="CSM" />
</physicalElement>
</description>
</goesrProductDescriptions>

View file

@ -1,47 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
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.
-->
<goesrProductDescriptions>
<!-- The following acronyms are helpful in understanding this file.
CTH : Cloud Top Height
HT : Height
ACHA : AWG Cloud Height Algorithm
AWG : Algorithm Working Group
-->
<default>
<matches>
<match pattern="OR_ABI-L2-ACHA(C|F|M1|M2)-M[34]_G\d\d_s\d{14}_e\d{14}_c\d{14}.nc">
<attribute name="dataset_name" />
</match>
</matches>
</default>
<description>
<data>
<variable name="HT" />
<discreteMask name="DQF" value="0" keep="true">
<fillByte>-1</fillByte>
</discreteMask>
</data>
<physicalElement>
<value value="CTH" />
</physicalElement>
</description>
</goesrProductDescriptions>

View file

@ -1,41 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
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.
-->
<goesrProductDescriptions>
<default>
<matches>
<match pattern="OR_ABI-L2-CTP(C|F|M1|M2)-M[34]_G\d\d_s\d{14}_e\d{14}_c\d{14}.nc">
<attribute name="dataset_name" />
</match>
</matches>
</default>
<description>
<data>
<variable name="PRES" />
<discreteMask name="DQF" value="0" keep="true">
<fillByte>-1</fillByte>
</discreteMask>
</data>
<physicalElement>
<value value="CTP" />
</physicalElement>
</description>
</goesrProductDescriptions>

View file

@ -1,41 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
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.
-->
<goesrProductDescriptions>
<default>
<matches>
<match pattern="OR_ABI-L2-ACHT(C|F|M1|M2)-M[34]_G\d\d_s\d{14}_e\d{14}_c\d{14}.nc">
<attribute name="dataset_name" />
</match>
</matches>
</default>
<description>
<data>
<variable name="TEMP" />
<discreteMask name="DQF" value="0" keep="true">
<fillByte>-1</fillByte>
</discreteMask>
</data>
<physicalElement>
<value value="CTT" />
</physicalElement>
</description>
</goesrProductDescriptions>

View file

@ -1,112 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
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.
-->
<goesrProductDescriptions>
<default>
<matches>
<match pattern="OR_ABI-L2-DSI(C|F|M1|M2)-M[34]_G\d\d_s\d{14}_e\d{14}_c\d{14}.nc">
<attribute name="dataset_name" />
</match>
</matches>
</default>
<description>
<data>
<variable name="CAPE" />
<discreteMask name="DQF_Overall" value="0" keep="true">
<fillByte>-1</fillByte>
</discreteMask>
</data>
<units>
<value value="J/kg" />
</units>
<physicalElement>
<value value="CAPE" />
</physicalElement>
</description>
<description>
<data>
<variable name="KI" />
<discreteMask name="DQF_Overall" value="0" keep="true">
<fillByte>-1</fillByte>
</discreteMask>
</data>
<!-- The default units are K, users prefer to use C, since this a
difference product K and C are the same and should not be converted. -->
<units>
<value value="C" />
</units>
<physicalElement>
<value value="KI" />
</physicalElement>
</description>
<description>
<data>
<variable name="LI" />
<discreteMask name="DQF_Overall" value="0" keep="true">
<fillByte>-1</fillByte>
</discreteMask>
</data>
<!-- The default units are K, users prefer to use C, since this a
difference product K and C are the same and should not be converted. -->
<units>
<value value="C" />
</units>
<physicalElement>
<value value="LI" />
</physicalElement>
</description>
<description>
<data>
<variable name="SI" />
<discreteMask name="DQF_Overall" value="0" keep="true">
<fillByte>-1</fillByte>
</discreteMask>
</data>
<!-- The default units are K, users prefer to use C, since this a
difference product K and C are the same and should not be converted. -->
<units>
<value value="C" />
</units>
<physicalElement>
<value value="SI" />
</physicalElement>
</description>
<description>
<data>
<variable name="TT" />
<discreteMask name="DQF_Overall" value="0" keep="true">
<fillByte>-1</fillByte>
</discreteMask>
</data>
<!-- The default units are K, users prefer to use C, since this a
difference product K and C are the same and should not be converted. -->
<units>
<value value="C" />
</units>
<physicalElement>
<value value="TT" />
</physicalElement>
</description>
</goesrProductDescriptions>

View file

@ -1,68 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
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.
-->
<goesrProductDescriptions>
<default>
<matches>
<match pattern="OR_ABI-L2-FDC(C|F|M1|M2)-M[34]_G\d\d_s\d{14}_e\d{14}_c\d{14}.nc">
<attribute name="dataset_name" />
</match>
</matches>
</default>
<description>
<data>
<variable name="Area" />
<discreteMask name="DQF" value="0" keep="true">
<fillByte>-1</fillByte>
</discreteMask>
</data>
<units>
<value value="km*km" />
</units>
<physicalElement>
<value value="FDC Area" />
</physicalElement>
</description>
<description>
<data>
<variable name="Power" />
<discreteMask name="DQF" value="0" keep="true">
<fillByte>-1</fillByte>
</discreteMask>
</data>
<physicalElement>
<value value="FDC Power" />
</physicalElement>
</description>
<description>
<data>
<variable name="Temp" />
<discreteMask name="DQF" value="0" keep="true">
<fillByte>-1</fillByte>
</discreteMask>
</data>
<physicalElement>
<value value="FDC Temp" />
</physicalElement>
</description>
</goesrProductDescriptions>

Some files were not shown because too many files have changed in this diff Show more