Merge tag 'OB_14.4.1-6m' into omaha_14.4.1

14.4.1-6


Former-commit-id: d0a1514ece [formerly 80dae4bc15] [formerly db185ed16c] [formerly b684848820 [formerly db185ed16c [formerly 6873606777f0c7c18928b0b0814050742c256dc2]]]
Former-commit-id: b684848820
Former-commit-id: abe5b26a9420a557ed9d91527aa7c8b4f60ad64c [formerly 40f44c9e15]
Former-commit-id: b971724d20
This commit is contained in:
Steve Harris 2015-02-03 11:24:39 -06:00
commit f2dd38f246
125 changed files with 7271 additions and 470 deletions

View file

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

View file

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>edu.wisc.ssec.cimss.common.dataplugin.convectprob</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.jdt.core.javanature</nature>
<nature>org.eclipse.pde.PluginNature</nature>
</natures>
</projectDescription>

View file

@ -0,0 +1,18 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: NOAA/CIMSS Prob Severe (dataplugin.convectprob)
Bundle-SymbolicName: edu.wisc.ssec.cimss.common.dataplugin.convectprob
Bundle-Version: 1.14.4.qualifier
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Export-Package: edu.wisc.ssec.cimss.common.dataplugin.convectprob,
edu.wisc.ssec.cimss.common.dataplugin.convectprob.impl
Require-Bundle: com.raytheon.uf.common.serialization,
com.raytheon.edex.common,
javax.persistence,
javax.measure,
com.raytheon.uf.common.dataplugin,
com.raytheon.uf.common.datastorage,
com.raytheon.uf.common.status
Import-Package: com.raytheon.uf.edex.decodertools.core,
com.raytheon.uf.edex.decodertools.time
Bundle-Vendor: CIMSS/SSEC

View file

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

View file

@ -0,0 +1,344 @@
package edu.wisc.ssec.cimss.common.dataplugin.convectprob;
import javax.persistence.Entity;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Transient;
import javax.persistence.UniqueConstraint;
import org.hibernate.annotations.Index;
import com.raytheon.uf.common.dataplugin.PluginDataObject;
import com.raytheon.uf.common.dataplugin.persist.IPersistable;
import com.raytheon.uf.common.dataplugin.persist.PersistablePluginDataObject;
import com.raytheon.uf.common.datastorage.IDataStore;
import com.raytheon.uf.common.datastorage.records.IDataRecord;
import com.raytheon.uf.common.datastorage.records.IntegerDataRecord;
import com.raytheon.uf.common.datastorage.records.StringDataRecord;
import com.raytheon.uf.common.serialization.annotations.DynamicSerialize;
import com.raytheon.uf.common.status.IUFStatusHandler;
import com.raytheon.uf.common.status.UFStatus;
import com.vividsolutions.jts.geom.Geometry;
import com.vividsolutions.jts.io.WKTReader;
import edu.wisc.ssec.cimss.common.dataplugin.convectprob.impl.ShapeObject;
/**
* NOAA/CIMSS Prob Severe Model Data Record Definition
*
* Data record that stores attributes of NOAA/CIMSS Prob Severe Model shapes
*
* <pre>
* SOFTWARE HISTORY
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Mar 27, 2014 DCS 15298 lcronce Initial Creation.
*
* </pre
*
* @author Lee Cronce
* @version 1.0
*
*/
@Entity
@SequenceGenerator(initialValue = 1, name = PluginDataObject.ID_GEN, sequenceName = "convectprobseq")
@Table(name = ConvectProbRecord.PLUGIN_NAME, uniqueConstraints = { @UniqueConstraint(columnNames = { "refTime" }) })
/*
* Both refTime and forecastTime are included in the refTimeIndex since
* forecastTime is unlikely to be used.
*/
@org.hibernate.annotations.Table(appliesTo = ConvectProbRecord.PLUGIN_NAME, indexes = { @Index(name = "convectprob_refTimeIndex", columnNames = {
"refTime", "forecastTime" }) })
@DynamicSerialize
public class ConvectProbRecord extends PersistablePluginDataObject implements
IPersistable {
/** Serializable id * */
private static final long serialVersionUID = 1L;
public static final String PLUGIN_NAME = "convectprob";
// Data store data item names
@Transient
private static final String[] DATA_NAMES = { "types", "probabilities", "mucapes", "ebshears", "meshes", "rcemisses", "rcicecfs", "polygons", "objectids" };
private final static transient IUFStatusHandler statusHandler = UFStatus.getHandler(ConvectProbRecord.class);
@Transient
private String[] types = null;
@Transient
private int[] probabilities = null;
@Transient
private String[] mucapes = null;
@Transient
private String[] ebshears = null;
@Transient
private String[] meshes = null;
@Transient
private String[] rcemisses = null;
@Transient
private String[] rcicecfs = null;
@Transient
private String[] polygons = null;
@Transient
private String[] objectids = null;
@Transient
private Object[] dataArrays = null;
@Transient
private int insertIndex = 0;
// Used to track
@Transient
long persistTime = 0L;
/**
* Required empty constructor.
*/
public ConvectProbRecord() {
}
/**
* Constructs a data record from a dataURI
*
* @param data URI
*/
public ConvectProbRecord(String uri) {
super(uri);
}
/**
* Constructs a convectprob record with a
* given amount of shapes
*
* @param size of arrays based on number of shapes
*/
public ConvectProbRecord(int arraysSize) {
types = new String[arraysSize];
probabilities = new int[arraysSize];
mucapes = new String[arraysSize];
ebshears = new String[arraysSize];
meshes = new String[arraysSize];
rcemisses = new String[arraysSize];
rcicecfs = new String[arraysSize];
polygons = new String[arraysSize];
objectids = new String[arraysSize];
dataArrays = new Object[] { types, probabilities, mucapes, ebshears, meshes, rcemisses, rcicecfs, polygons, objectids };
insertIndex = 0;
}
/**
* Adds a convectprob shape to the record collection.
*
* @param shape to add
*/
public void addShape(ShapeObject shape) {
try {
types[insertIndex] = shape.getType();
probabilities[insertIndex] = shape.getProbability();
mucapes[insertIndex] = shape.getMucape();
ebshears[insertIndex] = shape.getEbshear();
meshes[insertIndex] = shape.getMesh();
rcemisses[insertIndex] = shape.getRcemiss();
rcicecfs[insertIndex] = shape.getRcicecf();
polygons[insertIndex] = shape.getPolygon();
objectids[insertIndex] = shape.getObjectid();
insertIndex++;
} catch (Exception e) {
statusHandler.error("insertIndex is out of bounds: " + Integer.toString(insertIndex), e);
}
}
/**
* Retrieve names of data contained in data record
*
* @return string array of data record field names
*/
public String[] getDataNames() {
return DATA_NAMES;
}
/**
* Retrieve data contained within the data record
*
* @return array of data objects stored in record
*/
public Object[] getDataArrays() {
return dataArrays;
}
/**
* Set data to be contained within the data record
*
* @param array of data objects to be set
*/
public void setDataArrays(Object[] dataArrays) {
this.dataArrays = dataArrays;
}
/**
* Retrieves the shape types
*
* @return shape types
*/
public String[] getTypes() {
return types;
}
/**
* Retrieves the shape probabilities
*
* @return shape probabilities of severe
*/
public int[] getProbabilities() {
return probabilities;
}
/**
*Retrieves the MUCAPE associated with shapes
*
* @return shape MUCAPEs
*/
public String[] getMucapes() {
return mucapes;
}
/**
* Retrieves the EB shear associated with shapes
*
* @return shape EB Shears
*/
public String[] getEbshears() {
return ebshears;
}
/**
* Retrieves the MESH associated with the shapes
*
* @return shape MESHes
*/
public String[] getMeshes() {
return meshes;
}
/**
* Retrieves the emissivities associated with the shapes
*
* @return shape top of troposphere emissivities
*/
public String[] getRcemisses() {
return rcemisses;
}
/**
* Retrieves the ice cloud fractions associated with the shapes
*
* @return rates of change of ice cloud fraction
*/
public String[] getRcicecfs() {
return rcicecfs;
}
/**
* Retrieves the shape polygons
*
* @return polygons defining the data record shapes
*/
public String[] getPolygons() {
return polygons;
}
/**
* Retrieves the shape objectids
*
* @return objectids specifying the objectids of the shapes
*/
public String[] getObjectids() {
return objectids;
}
/**
* Creating Geometry objects from String representation
* of shape polygons
*
* @return Geometry objects of shape polygons
*/
public Geometry[] getPolyGeoms() {
Geometry[] polyGeoms = new Geometry[polygons.length];
WKTReader reader = new WKTReader();
int i = 0;
for (String poly : polygons) {
try {
polyGeoms[i] = reader.read(poly);
i++;
} catch (Exception e) {
statusHandler.error("Well Known Text reader could not read selected text: " + poly, e);
}
}
return polyGeoms;
}
/**
* Sets the data arrays from the store.
*
* @param dataStore
*/
public void retrieveFromDataStore(IDataStore dataStore) {
try {
IDataRecord[] dataRec = dataStore.retrieve(getDataURI());
dataArrays = new Object[dataRec.length];
for (int i = 0; i < dataRec.length; i++) {
if (dataRec[i].getName().equals("types")) {
types = ((StringDataRecord) dataRec[i]).getStringData();
dataArrays[i] = types;
} else if (dataRec[i].getName().equals("probabilities")) {
probabilities = ((IntegerDataRecord) dataRec[i]).getIntData();
dataArrays[i] = probabilities;
} else if (dataRec[i].getName().equals("mucapes")) {
mucapes = ((StringDataRecord) dataRec[i]).getStringData();
dataArrays[i] = mucapes;
} else if (dataRec[i].getName().equals("ebshears")) {
ebshears = ((StringDataRecord) dataRec[i]).getStringData();
dataArrays[i] = ebshears;
} else if (dataRec[i].getName().equals("meshes")) {
meshes = ((StringDataRecord) dataRec[i]).getStringData();
dataArrays[i] = meshes;
} else if (dataRec[i].getName().equals("rcemisses")) {
rcemisses = ((StringDataRecord) dataRec[i]).getStringData();
dataArrays[i] = rcemisses;
} else if (dataRec[i].getName().equals("rcicecfs")) {
rcicecfs = ((StringDataRecord) dataRec[i]).getStringData();
dataArrays[i] = rcicecfs;
} else if (dataRec[i].getName().equals("polygons")) {
polygons = ((StringDataRecord) dataRec[i]).getStringData();
dataArrays[i] = polygons;
} else if (dataRec[i].getName().equals("objectids")) {
objectids = ((StringDataRecord) dataRec[i]).getStringData();
dataArrays[i] = objectids;
}
}
setDataArrays(dataArrays);
} catch (Exception e) {
statusHandler.error("Error retrieving data from the convectprob data store", e);
}
}
/**
* @see com.raytheon.uf.common.dataplugin.PluginDataObject#getPluginName()
*/
@Override
public String getPluginName() {
return PLUGIN_NAME;
}
}

View file

@ -0,0 +1,208 @@
package edu.wisc.ssec.cimss.common.dataplugin.convectprob.impl;
/**
* NOAA/CIMSS Prob Severe Model Shape Object Definition
*
* Data object that defines attributes of a NOAA/CIMSS Prob Severe Model shape
*
* <pre>
* SOFTWARE HISTORY
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Mar 27, 2014 DCS 15298 lcronce Initial Creation.
*
* </pre
*
* @author Lee Cronce
* @version 1.0
*
*/
public class ShapeObject {
private String type;
private int probability;
private String mucape;
private String ebshear;
private String mesh;
private String rcemiss;
private String rcicecf;
private String polygon;
private String objectid;
/**
* Default empty constructor
*/
public ShapeObject() {
}
/**
* Retrieve type of a shape
*
* @return shape type
*/
public String getType() {
return type;
}
/**
* Retrieve shape probability of severe
*
* @return shape probability of severe
*/
public int getProbability() {
return probability;
}
/**
* Retrieve MUCAPE associated with a shape
*
* @return shape MUCAPE
*/
public String getMucape() {
return mucape;
}
/**
* Retrieve EB Shear associated with a shape
*
* @return shape EB Shear
*/
public String getEbshear() {
return ebshear;
}
/**
* Retrieve MESH associated with a shape
*
* @return shape MESH
*/
public String getMesh() {
return mesh;
}
/**
* Retrieve rate of change of emissivity of a shape
*
* @return shape emissivity rate of change
*/
public String getRcemiss() {
return rcemiss;
}
/**
* Retrieve rate of change of ice cloud fraction of a shape
*
* @return shape ice cloud fraction rate of change
*/
public String getRcicecf() {
return rcicecf;
}
/**
* Retrieve the polygon defining a shape
*
* @return shape polygon
*/
public String getPolygon() {
return polygon;
}
/**
* Retried the object ID of a shape
*
* @return shape objectID
*/
public String getObjectid() {
return objectid;
}
/**
* Set type of a shape
*
* @param shape type
*/
public void setType(String type) {
this.type = type;
}
/**
* Set shape probability of severe
*
* @param shape probability of severe
*/
public void setProbability(int probability) {
this.probability = probability;
}
/**
* Set MUCAPE associated with a shape
*
* @param shape MUCAPE
*/
public void setMucape(String mucape) {
this.mucape = mucape;
}
/**
* Set EB Shear associated with a shape
*
* @param shape EB Shear
*/
public void setEbshear(String ebshear) {
this.ebshear = ebshear;
}
/**
* Set MESH associated with a shape
*
* @param shape MESH
*/
public void setMesh(String mesh) {
this.mesh = mesh;
}
/**
* Set rate of change of emissivity of a shape
*
* @param shape emissivity rate of change
*/
public void setRcemiss(String rcemiss) {
this.rcemiss = rcemiss;
}
/**
* Set rate of change of ice cloud fraction of a shape
*
* @param shape ice cloud fraction rate of change
*/
public void setRcicecf(String rcicecf) {
this.rcicecf = rcicecf;
}
/**
* Set the polygon defining a shape
*
* @param shape polygon
*/
public void setPolygon(String polygon) {
this.polygon = polygon;
}
/**
* Set the object ID of a shape
*
* @param shape objectID
*/
public void setObjectid(String objectid) {
this.objectid = objectid;
}
}

View file

@ -0,0 +1,259 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<colorMap xmlns:ns2="http://www.example.org/productType">
<color r="0.3529412" g="0.3529412" b="0.3529412" a="1.0"/>
<color r="0.35686275" g="0.35686275" b="0.35686275" a="1.0"/>
<color r="0.36078432" g="0.36078432" b="0.36078432" a="1.0"/>
<color r="0.36862746" g="0.36862746" b="0.36862746" a="1.0"/>
<color r="0.37254903" g="0.37254903" b="0.37254903" a="1.0"/>
<color r="0.3764706" g="0.3764706" b="0.3764706" a="1.0"/>
<color r="0.38039216" g="0.38039216" b="0.38039216" a="1.0"/>
<color r="0.3882353" g="0.3882353" b="0.3882353" a="1.0"/>
<color r="0.39215687" g="0.39215687" b="0.39215687" a="1.0"/>
<color r="0.39607844" g="0.39607844" b="0.39607844" a="1.0"/>
<color r="0.4" g="0.4" b="0.4" a="1.0"/>
<color r="0.40784314" g="0.40784314" b="0.40784314" a="1.0"/>
<color r="0.4117647" g="0.4117647" b="0.4117647" a="1.0"/>
<color r="0.41568628" g="0.41568628" b="0.41568628" a="1.0"/>
<color r="0.41960785" g="0.41960785" b="0.41960785" a="1.0"/>
<color r="0.42745098" g="0.42745098" b="0.42745098" a="1.0"/>
<color r="0.43137255" g="0.43137255" b="0.43137255" a="1.0"/>
<color r="0.43529412" g="0.43529412" b="0.43529412" a="1.0"/>
<color r="0.4392157" g="0.4392157" b="0.4392157" a="1.0"/>
<color r="0.44705883" g="0.44705883" b="0.44705883" a="1.0"/>
<color r="0.4509804" g="0.4509804" b="0.4509804" a="1.0"/>
<color r="0.45490196" g="0.45490196" b="0.45490196" a="1.0"/>
<color r="0.45882353" g="0.45882353" b="0.45882353" a="1.0"/>
<color r="0.4627451" g="0.4627451" b="0.4627451" a="1.0"/>
<color r="0.47058824" g="0.47058824" b="0.47058824" a="1.0"/>
<color r="0.4745098" g="0.4745098" b="0.4745098" a="1.0"/>
<color r="0.48235294" g="0.48235294" b="0.48235294" a="1.0"/>
<color r="0.4745098" g="0.47843137" b="0.49411765" a="1.0"/>
<color r="0.46666667" g="0.47843137" b="0.5019608" a="1.0"/>
<color r="0.45882353" g="0.4745098" b="0.5137255" a="1.0"/>
<color r="0.4509804" g="0.47058824" b="0.52156866" a="1.0"/>
<color r="0.44313726" g="0.46666667" b="0.53333336" a="1.0"/>
<color r="0.43529412" g="0.46666667" b="0.5411765" a="1.0"/>
<color r="0.42745098" g="0.4627451" b="0.5529412" a="1.0"/>
<color r="0.41960785" g="0.45882353" b="0.5647059" a="1.0"/>
<color r="0.4117647" g="0.45490196" b="0.57254905" a="1.0"/>
<color r="0.40392157" g="0.45490196" b="0.58431375" a="1.0"/>
<color r="0.39607844" g="0.4509804" b="0.5921569" a="1.0"/>
<color r="0.3882353" g="0.44705883" b="0.6039216" a="1.0"/>
<color r="0.38039216" g="0.44705883" b="0.6156863" a="1.0"/>
<color r="0.37254903" g="0.44313726" b="0.62352943" a="1.0"/>
<color r="0.3647059" g="0.4392157" b="0.63529414" a="1.0"/>
<color r="0.35686275" g="0.43529412" b="0.6431373" a="1.0"/>
<color r="0.34901962" g="0.43529412" b="0.654902" a="1.0"/>
<color r="0.34117648" g="0.43137255" b="0.6627451" a="1.0"/>
<color r="0.33333334" g="0.42745098" b="0.6745098" a="1.0"/>
<color r="0.3254902" g="0.42352942" b="0.6862745" a="1.0"/>
<color r="0.31764707" g="0.42352942" b="0.69411767" a="1.0"/>
<color r="0.30980393" g="0.41960785" b="0.7058824" a="1.0"/>
<color r="0.3019608" g="0.41568628" b="0.7137255" a="1.0"/>
<color r="0.29411766" g="0.41568628" b="0.7254902" a="1.0"/>
<color r="0.28627452" g="0.4117647" b="0.7372549" a="1.0"/>
<color r="0.2784314" g="0.40784314" b="0.74509805" a="1.0"/>
<color r="0.27058825" g="0.40392157" b="0.75686276" a="1.0"/>
<color r="0.2627451" g="0.40392157" b="0.7647059" a="1.0"/>
<color r="0.25490198" g="0.4" b="0.7764706" a="1.0"/>
<color r="0.24705882" g="0.39607844" b="0.78431374" a="1.0"/>
<color r="0.23921569" g="0.39215687" b="0.79607844" a="1.0"/>
<color r="0.23137255" g="0.39215687" b="0.80784315" a="1.0"/>
<color r="0.22352941" g="0.3882353" b="0.8156863" a="1.0"/>
<color r="0.21568628" g="0.38431373" b="0.827451" a="1.0"/>
<color r="0.20784314" g="0.38039216" b="0.8352941" a="1.0"/>
<color r="0.2" g="0.38039216" b="0.84705883" a="1.0"/>
<color r="0.19215687" g="0.3764706" b="0.85882354" a="1.0"/>
<color r="0.18431373" g="0.37254903" b="0.8666667" a="1.0"/>
<color r="0.1764706" g="0.37254903" b="0.8784314" a="1.0"/>
<color r="0.16862746" g="0.36862746" b="0.8862745" a="1.0"/>
<color r="0.16078432" g="0.3647059" b="0.8980392" a="1.0"/>
<color r="0.15294118" g="0.36078432" b="0.90588236" a="1.0"/>
<color r="0.14509805" g="0.36078432" b="0.91764706" a="1.0"/>
<color r="0.13725491" g="0.35686275" b="0.92941177" a="1.0"/>
<color r="0.12941177" g="0.3529412" b="0.9372549" a="1.0"/>
<color r="0.12156863" g="0.34901962" b="0.9490196" a="1.0"/>
<color r="0.11372549" g="0.34901962" b="0.95686275" a="1.0"/>
<color r="0.105882354" g="0.34509805" b="0.96862745" a="1.0"/>
<color r="0.09803922" g="0.34117648" b="0.9764706" a="1.0"/>
<color r="0.09019608" g="0.34117648" b="0.9882353" a="1.0"/>
<color r="0.078431375" g="0.33333334" b="0.99607843" a="1.0"/>
<color r="0.09411765" g="0.34509805" b="0.99607843" a="1.0"/>
<color r="0.105882354" g="0.35686275" b="0.99607843" a="1.0"/>
<color r="0.12156863" g="0.37254903" b="0.99607843" a="1.0"/>
<color r="0.13333334" g="0.38431373" b="0.99215686" a="1.0"/>
<color r="0.14901961" g="0.39607844" b="0.99215686" a="1.0"/>
<color r="0.16078432" g="0.40784314" b="0.99215686" a="1.0"/>
<color r="0.1764706" g="0.41960785" b="0.99215686" a="1.0"/>
<color r="0.1882353" g="0.43137255" b="0.99215686" a="1.0"/>
<color r="0.20392157" g="0.44705883" b="0.99215686" a="1.0"/>
<color r="0.21568628" g="0.45882353" b="0.9882353" a="1.0"/>
<color r="0.23137255" g="0.47058824" b="0.9882353" a="1.0"/>
<color r="0.24705882" g="0.48235294" b="0.9882353" a="1.0"/>
<color r="0.25882354" g="0.49411765" b="0.9882353" a="1.0"/>
<color r="0.27450982" g="0.5058824" b="0.9882353" a="1.0"/>
<color r="0.28627452" g="0.52156866" b="0.9882353" a="1.0"/>
<color r="0.3019608" g="0.53333336" b="0.9843137" a="1.0"/>
<color r="0.3137255" g="0.54509807" b="0.9843137" a="1.0"/>
<color r="0.32941177" g="0.5568628" b="0.9843137" a="1.0"/>
<color r="0.34117648" g="0.5686275" b="0.9843137" a="1.0"/>
<color r="0.35686275" g="0.5803922" b="0.9843137" a="1.0"/>
<color r="0.36862746" g="0.59607846" b="0.9843137" a="1.0"/>
<color r="0.38431373" g="0.60784316" b="0.9843137" a="1.0"/>
<color r="0.4" g="0.61960787" b="0.98039216" a="1.0"/>
<color r="0.4117647" g="0.6313726" b="0.98039216" a="1.0"/>
<color r="0.42745098" g="0.6431373" b="0.98039216" a="1.0"/>
<color r="0.4392157" g="0.654902" b="0.98039216" a="1.0"/>
<color r="0.45490196" g="0.67058825" b="0.98039216" a="1.0"/>
<color r="0.46666667" g="0.68235296" b="0.98039216" a="1.0"/>
<color r="0.48235294" g="0.69411767" b="0.9764706" a="1.0"/>
<color r="0.49411765" g="0.7058824" b="0.9764706" a="1.0"/>
<color r="0.50980395" g="0.7176471" b="0.9764706" a="1.0"/>
<color r="0.5254902" g="0.73333335" b="0.9764706" a="1.0"/>
<color r="0.5372549" g="0.74509805" b="0.9764706" a="1.0"/>
<color r="0.5529412" g="0.75686276" b="0.9764706" a="1.0"/>
<color r="0.5647059" g="0.76862746" b="0.972549" a="1.0"/>
<color r="0.5803922" g="0.78039217" b="0.972549" a="1.0"/>
<color r="0.5921569" g="0.7921569" b="0.972549" a="1.0"/>
<color r="0.60784316" g="0.80784315" b="0.972549" a="1.0"/>
<color r="0.61960787" g="0.81960785" b="0.972549" a="1.0"/>
<color r="0.63529414" g="0.83137256" b="0.972549" a="1.0"/>
<color r="0.64705884" g="0.84313726" b="0.972549" a="1.0"/>
<color r="0.6627451" g="0.85490197" b="0.96862745" a="1.0"/>
<color r="0.6784314" g="0.8666667" b="0.96862745" a="1.0"/>
<color r="0.6901961" g="0.88235295" b="0.96862745" a="1.0"/>
<color r="0.7058824" g="0.89411765" b="0.96862745" a="1.0"/>
<color r="0.7176471" g="0.90588236" b="0.96862745" a="1.0"/>
<color r="0.73333335" g="0.91764706" b="0.96862745" a="1.0"/>
<color r="0.74509805" g="0.92941177" b="0.9647059" a="1.0"/>
<color r="0.7607843" g="0.9411765" b="0.9647059" a="1.0"/>
<color r="0.77254903" g="0.95686275" b="0.9647059" a="1.0"/>
<color r="0.78431374" g="0.9647059" b="0.9647059" a="1.0"/>
<color r="0.7882353" g="0.95686275" b="0.9647059" a="1.0"/>
<color r="0.7882353" g="0.94509804" b="0.9647059" a="1.0"/>
<color r="0.7921569" g="0.9372549" b="0.9647059" a="1.0"/>
<color r="0.7921569" g="0.9254902" b="0.9647059" a="1.0"/>
<color r="0.79607844" g="0.91764706" b="0.9647059" a="1.0"/>
<color r="0.79607844" g="0.90588236" b="0.9647059" a="1.0"/>
<color r="0.8" g="0.8980392" b="0.9647059" a="1.0"/>
<color r="0.8" g="0.8901961" b="0.9647059" a="1.0"/>
<color r="0.8039216" g="0.8784314" b="0.9647059" a="1.0"/>
<color r="0.8039216" g="0.87058824" b="0.9647059" a="1.0"/>
<color r="0.80784315" g="0.85882354" b="0.96862745" a="1.0"/>
<color r="0.8117647" g="0.8509804" b="0.96862745" a="1.0"/>
<color r="0.8117647" g="0.8392157" b="0.96862745" a="1.0"/>
<color r="0.8156863" g="0.83137256" b="0.96862745" a="1.0"/>
<color r="0.8156863" g="0.8235294" b="0.96862745" a="1.0"/>
<color r="0.81960785" g="0.8117647" b="0.96862745" a="1.0"/>
<color r="0.81960785" g="0.8039216" b="0.96862745" a="1.0"/>
<color r="0.8235294" g="0.7921569" b="0.96862745" a="1.0"/>
<color r="0.8235294" g="0.78431374" b="0.96862745" a="1.0"/>
<color r="0.827451" g="0.7764706" b="0.96862745" a="1.0"/>
<color r="0.827451" g="0.7647059" b="0.96862745" a="1.0"/>
<color r="0.83137256" g="0.75686276" b="0.96862745" a="1.0"/>
<color r="0.83137256" g="0.74509805" b="0.96862745" a="1.0"/>
<color r="0.8352941" g="0.7372549" b="0.96862745" a="1.0"/>
<color r="0.8392157" g="0.7254902" b="0.96862745" a="1.0"/>
<color r="0.8392157" g="0.7176471" b="0.96862745" a="1.0"/>
<color r="0.84313726" g="0.70980394" b="0.96862745" a="1.0"/>
<color r="0.84313726" g="0.69803923" b="0.96862745" a="1.0"/>
<color r="0.84705883" g="0.6901961" b="0.96862745" a="1.0"/>
<color r="0.84705883" g="0.6784314" b="0.96862745" a="1.0"/>
<color r="0.8509804" g="0.67058825" b="0.972549" a="1.0"/>
<color r="0.8509804" g="0.65882355" b="0.972549" a="1.0"/>
<color r="0.85490197" g="0.6509804" b="0.972549" a="1.0"/>
<color r="0.85490197" g="0.6431373" b="0.972549" a="1.0"/>
<color r="0.85882354" g="0.6313726" b="0.972549" a="1.0"/>
<color r="0.8627451" g="0.62352943" b="0.972549" a="1.0"/>
<color r="0.8627451" g="0.6117647" b="0.972549" a="1.0"/>
<color r="0.8666667" g="0.6039216" b="0.972549" a="1.0"/>
<color r="0.8666667" g="0.5921569" b="0.972549" a="1.0"/>
<color r="0.87058824" g="0.58431375" b="0.972549" a="1.0"/>
<color r="0.87058824" g="0.5764706" b="0.972549" a="1.0"/>
<color r="0.8745098" g="0.5647059" b="0.972549" a="1.0"/>
<color r="0.8745098" g="0.5568628" b="0.972549" a="1.0"/>
<color r="0.8784314" g="0.54509807" b="0.972549" a="1.0"/>
<color r="0.8784314" g="0.5372549" b="0.972549" a="1.0"/>
<color r="0.88235295" g="0.5294118" b="0.972549" a="1.0"/>
<color r="0.88235295" g="0.5176471" b="0.972549" a="1.0"/>
<color r="0.8862745" g="0.50980395" b="0.972549" a="1.0"/>
<color r="0.8901961" g="0.49803922" b="0.972549" a="1.0"/>
<color r="0.8901961" g="0.49019608" b="0.972549" a="1.0"/>
<color r="0.89411765" g="0.47843137" b="0.9764706" a="1.0"/>
<color r="0.89411765" g="0.47058824" b="0.9764706" a="1.0"/>
<color r="0.8980392" g="0.4627451" b="0.9764706" a="1.0"/>
<color r="0.8980392" g="0.4509804" b="0.9764706" a="1.0"/>
<color r="0.9019608" g="0.44313726" b="0.9764706" a="1.0"/>
<color r="0.9019608" g="0.43137255" b="0.9764706" a="1.0"/>
<color r="0.90588236" g="0.42352942" b="0.9764706" a="1.0"/>
<color r="0.90588236" g="0.4117647" b="0.9764706" a="1.0"/>
<color r="0.9098039" g="0.40392157" b="0.9764706" a="1.0"/>
<color r="0.9137255" g="0.39607844" b="0.9764706" a="1.0"/>
<color r="0.9137255" g="0.38431373" b="0.9764706" a="1.0"/>
<color r="0.91764706" g="0.3764706" b="0.9764706" a="1.0"/>
<color r="0.91764706" g="0.3647059" b="0.9764706" a="1.0"/>
<color r="0.92156863" g="0.35686275" b="0.9764706" a="1.0"/>
<color r="0.92156863" g="0.34509805" b="0.9764706" a="1.0"/>
<color r="0.9254902" g="0.3372549" b="0.9764706" a="1.0"/>
<color r="0.9254902" g="0.32941177" b="0.9764706" a="1.0"/>
<color r="0.92941177" g="0.31764707" b="0.9764706" a="1.0"/>
<color r="0.92941177" g="0.30980393" b="0.9764706" a="1.0"/>
<color r="0.93333334" g="0.29803923" b="0.9764706" a="1.0"/>
<color r="0.93333334" g="0.2901961" b="0.9764706" a="1.0"/>
<color r="0.9372549" g="0.2784314" b="0.98039216" a="1.0"/>
<color r="0.9411765" g="0.27058825" b="0.98039216" a="1.0"/>
<color r="0.9411765" g="0.2627451" b="0.98039216" a="1.0"/>
<color r="0.94509804" g="0.2509804" b="0.98039216" a="1.0"/>
<color r="0.94509804" g="0.24313726" b="0.98039216" a="1.0"/>
<color r="0.9490196" g="0.23137255" b="0.98039216" a="1.0"/>
<color r="0.9490196" g="0.22352941" b="0.98039216" a="1.0"/>
<color r="0.9529412" g="0.21568628" b="0.98039216" a="1.0"/>
<color r="0.9529412" g="0.20392157" b="0.98039216" a="1.0"/>
<color r="0.95686275" g="0.19607843" b="0.98039216" a="1.0"/>
<color r="0.95686275" g="0.18431373" b="0.98039216" a="1.0"/>
<color r="0.9607843" g="0.1764706" b="0.98039216" a="1.0"/>
<color r="0.9647059" g="0.16470589" b="0.98039216" a="1.0"/>
<color r="0.9647059" g="0.15686275" b="0.98039216" a="1.0"/>
<color r="0.96862745" g="0.14901961" b="0.98039216" a="1.0"/>
<color r="0.96862745" g="0.13725491" b="0.98039216" a="1.0"/>
<color r="0.972549" g="0.12941177" b="0.98039216" a="1.0"/>
<color r="0.972549" g="0.11764706" b="0.98039216" a="1.0"/>
<color r="0.9764706" g="0.10980392" b="0.98039216" a="1.0"/>
<color r="0.9764706" g="0.09803922" b="0.98039216" a="1.0"/>
<color r="0.98039216" g="0.09019608" b="0.9843137" a="1.0"/>
<color r="0.98039216" g="0.08235294" b="0.9843137" a="1.0"/>
<color r="0.9843137" g="0.07058824" b="0.9843137" a="1.0"/>
<color r="0.9843137" g="0.0627451" b="0.9843137" a="1.0"/>
<color r="0.9882353" g="0.050980393" b="0.9843137" a="1.0"/>
<color r="0.99215686" g="0.043137256" b="0.9843137" a="1.0"/>
<color r="0.99215686" g="0.03137255" b="0.9843137" a="1.0"/>
<color r="0.99607843" g="0.023529412" b="0.9843137" a="1.0"/>
<color r="0.99607843" g="0.015686275" b="0.9843137" a="1.0"/>
<color r="1.0" g="0.003921569" b="0.9843137" a="1.0"/>
<color r="1.0" g="0.0" b="0.9843137" a="1.0"/>
<color r="0.99607843" g="0.019607844" b="0.9843137" a="1.0"/>
<color r="0.99607843" g="0.019607844" b="0.9843137" a="1.0"/>
<color r="0.99607843" g="0.019607844" b="0.9843137" a="1.0"/>
<color r="0.99607843" g="0.019607844" b="0.9843137" a="1.0"/>
<color r="0.99607843" g="0.015686275" b="0.9843137" a="1.0"/>
<color r="0.99607843" g="0.015686275" b="0.9843137" a="1.0"/>
<color r="0.99607843" g="0.015686275" b="0.9843137" a="1.0"/>
<color r="0.99607843" g="0.015686275" b="0.9843137" a="1.0"/>
<color r="0.99607843" g="0.015686275" b="0.9843137" a="1.0"/>
<color r="0.99607843" g="0.011764706" b="0.9843137" a="1.0"/>
<color r="0.99607843" g="0.011764706" b="0.9843137" a="1.0"/>
<color r="0.99607843" g="0.011764706" b="0.9843137" a="1.0"/>
<color r="0.99607843" g="0.011764706" b="0.9843137" a="1.0"/>
<color r="1.0" g="0.011764706" b="0.9843137" a="1.0"/>
<color r="1.0" g="0.007843138" b="0.9843137" a="1.0"/>
<color r="1.0" g="0.007843138" b="0.9843137" a="1.0"/>
<color r="1.0" g="0.007843138" b="0.9843137" a="1.0"/>
<color r="1.0" g="0.007843138" b="0.9843137" a="1.0"/>
<color r="1.0" g="0.003921569" b="0.9843137" a="1.0"/>
<color r="1.0" g="0.003921569" b="0.9843137" a="1.0"/>
<color r="1.0" g="0.003921569" b="0.9843137" a="1.0"/>
<color r="1.0" g="0.003921569" b="0.9843137" a="1.0"/>
<color r="1.0" g="0.003921569" b="0.9843137" a="1.0"/>
<color r="1.0" g="0.0" b="0.9843137" a="1.0"/>
<color r="1.0" g="0.0" b="0.9843137" a="1.0"/>
</colorMap>

View file

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>edu.wisc.ssec.cimss.edex.convectprob.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

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

View file

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<feature
id="edu.wisc.ssec.cimss.edex.convectprob.feature"
label="Convectprob EDEX Feature"
version="1.0.0.qualifier"
provider-name="CIMSS/SSEC">
<description url="http://www.example.com/description">
[Enter Feature Description here.]
</description>
<copyright url="http://www.example.com/copyright">
[Enter Copyright Description here.]
</copyright>
<license url="http://www.example.com/license">
[Enter License Description here.]
</license>
<plugin
id="edu.wisc.ssec.cimss.common.dataplugin.convectprob"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="edu.wisc.ssec.cimss.edex.plugin.convectprob"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
</feature>

View file

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="src" path="/com.raytheon.edex.common"/>
<classpathentry kind="src" path="/edu.wisc.ssec.cimss.common.dataplugin.convectprob"/>
<classpathentry kind="src" path="/com.raytheon.uf.common.dataplugin"/>
<classpathentry kind="src" path="/com.raytheon.uf.common.time"/>
<classpathentry kind="src" path="/org.geotools"/>
<classpathentry combineaccessrules="false" kind="src" path="/com.raytheon.uf.edex.core"/>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
<classpathentry kind="output" path="bin"/>
</classpath>

View file

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>edu.wisc.ssec.cimss.edex.plugin.convectprob</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.jdt.core.javanature</nature>
<nature>org.eclipse.pde.PluginNature</nature>
</natures>
</projectDescription>

View file

@ -0,0 +1,16 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: NOAA/CIMSS Prob Severe (plugin.convectprob)
Bundle-SymbolicName: edu.wisc.ssec.cimss.edex.plugin.convectprob
Bundle-Version: 1.14.4.qualifier
Bundle-Vendor: CIMSS/SSEC
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Require-Bundle: com.raytheon.uf.edex.decodertools;bundle-version="1.0.0",
javax.persistence,
com.raytheon.uf.common.status;bundle-version="1.12.1174"
Import-Package: com.raytheon.uf.common.datastorage,
com.raytheon.uf.common.datastorage.records,
com.raytheon.uf.edex.database.plugin,
edu.wisc.ssec.cimss.common.dataplugin.convectprob,
edu.wisc.ssec.cimss.common.dataplugin.convectprob.impl

View file

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

View file

@ -0,0 +1,22 @@
<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="convectprobPluginName" class="java.lang.String">
<constructor-arg type="java.lang.String" value="convectprob" />
</bean>
<bean id="convectprobProperties" class="com.raytheon.uf.common.dataplugin.PluginProperties"
depends-on="convectprobPluginName">
<property name="pluginName" ref="convectprobPluginName" />
<property name="pluginFQN" value="edu.wisc.ssec.cimss.common.dataplugin.convectprob" />
<property name="dao" value="edu.wisc.ssec.cimss.edex.plugin.convectprob.dao.ConvectProbDao" />
<property name="record" value="edu.wisc.ssec.cimss.common.dataplugin.convectprob.ConvectProbRecord" />
</bean>
<bean id="convectprobRegistered" factory-bean="pluginRegistry" factory-method="register">
<constructor-arg value="convectprob"/>
<constructor-arg ref="convectprobProperties"/>
</bean>
</beans>

View file

@ -0,0 +1,39 @@
<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 id="convectprobDecoder"
class="edu.wisc.ssec.cimss.edex.plugin.convectprob.ConvectProbDecoder" />
<bean id="convectprobDistRegistry" factory-bean="distributionSrv"
factory-method="register">
<constructor-arg value="convectprob" />
<constructor-arg value="jms-durable:queue:Ingest.convectprob"/>
</bean>
<camelContext id="convectprob-camel"
xmlns="http://camel.apache.org/schema/spring"
errorHandlerRef="errorHandler"
autoStartup="false">
<!-- Begin convectprob routes -->
<route id="convectprobIngestRoute">
<from uri="jms-durable:queue:Ingest.convectprob"/>
<setHeader headerName="pluginName">
<constant>convectprob</constant>
</setHeader>
<doTry>
<pipeline>
<bean ref="stringToFile" />
<bean ref="convectprobDecoder" method="decode" />
<to uri="direct-vm:persistIndexAlert" />
</pipeline>
<doCatch>
<exception>java.lang.Throwable</exception>
<to uri="log:convectprob?level=ERROR"/>
</doCatch>
</doTry>
</route>
</camelContext>
</beans>

View file

@ -0,0 +1,115 @@
package edu.wisc.ssec.cimss.edex.plugin.convectprob;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import com.raytheon.edex.plugin.AbstractDecoder;
import com.raytheon.uf.common.dataplugin.PluginDataObject;
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 edu.wisc.ssec.cimss.common.dataplugin.convectprob.ConvectProbRecord;
import edu.wisc.ssec.cimss.common.dataplugin.convectprob.impl.ShapeObject;
import edu.wisc.ssec.cimss.edex.plugin.convectprob.impl.ConvectProbParser;
/**
* NOAA/CIMSS Prob Severe Model Data Decoder
*
* Data decoder that reads shapefile records of NOAA/CIMSS Prob Severe Model
*
* <pre>
* SOFTWARE HISTORY
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Mar 27, 2014 DCS 15298 lcronce Initial Creation.
*
* </pre
*
* @author Lee Cronce
* @version 1.0
*
*/
public class ConvectProbDecoder extends AbstractDecoder {
private final IUFStatusHandler statusHandler = UFStatus.getHandler(ConvectProbDecoder.class);
private String traceId = null;
/**
* Default empty constructor
*/
public ConvectProbDecoder() {
}
/**
* Creates the data object that will be persisted to the database and
* hdf5 repository
*
* @param File object passed by EDEX
* @return PluginDataObject[] object of shape data
* @throws Throwable
*/
public PluginDataObject[] decode(File file) throws Throwable {
ArrayList<ShapeObject> shapes = new ArrayList<ShapeObject>();
ConvectProbParser parser = new ConvectProbParser(file);
ShapeObject token;
while (parser.hasNext()) {
token = parser.next();
try {
if (token != null) {
shapes.add(token);
}
} catch (Exception e) {
statusHandler.error("Problem creating new convectprob object from file" + file.getName(), e);
return new PluginDataObject[0];
}
}
ConvectProbRecord record = null;
if (shapes.size() > 0) {
record = new ConvectProbRecord(shapes.size());
for (ShapeObject shape : shapes) {
record.addShape(shape);
}
} else {
return new PluginDataObject[0];
}
String validTime = parser.getValidTime();
if (validTime != null) {
Calendar c = TimeUtil.newCalendar();
record.setInsertTime(c);
try {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd_HHmmss");
record.setDataTime(new DataTime(dateFormat.parse(validTime)));
} catch (Exception e) {
statusHandler.error("Problem defining valid convectprob file time information using: " + validTime, e);
return new PluginDataObject[0];
}
} else {
return new PluginDataObject[0];
}
if (record != null) {
record.setTraceId(traceId);
}
return new PluginDataObject[] { record };
}
/**
* Set a trace identifier for the source data.
*
* @param traceId
* A unique identifier associated with the input data.
*/
public void setTraceId(String traceId) {
this.traceId = traceId;
}
}

View file

@ -0,0 +1,60 @@
package edu.wisc.ssec.cimss.edex.plugin.convectprob.dao;
import edu.wisc.ssec.cimss.common.dataplugin.convectprob.ConvectProbRecord;
import com.raytheon.uf.common.dataplugin.PluginException;
import com.raytheon.uf.common.dataplugin.persist.IPersistable;
import com.raytheon.uf.common.datastorage.DataStoreFactory;
import com.raytheon.uf.common.datastorage.IDataStore;
import com.raytheon.uf.common.datastorage.records.IDataRecord;
import com.raytheon.uf.edex.database.plugin.PluginDao;
/**
* NOAA/CIMSS Prob Severe Model Data Acquisition Object
*
* Defines access to persisted data from NOAA/CIMSS Prob Severe Model
*
* <pre>
* SOFTWARE HISTORY
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Mar 27, 2014 DCS 15298 jgerth Initial Creation.
*
* </pre
*
* @author Jordan Gerth
* @version 1.0
*
*/
public class ConvectProbDao extends PluginDao {
/**
* ConvectProbDao constructor
* @param Plugin name
* @throws PluginException
*/
public ConvectProbDao(String pluginName) throws PluginException {
super(pluginName);
}
/**
* Copy data from a Persistable object into a given DataStore container.
* @param dataStore DataStore instance to receive the Persistable data.
* @param obj The Persistable object to be stored.
* @throws Exception Any general exception thrown in this method.
*/
protected IDataStore populateDataStore(IDataStore dataStore,
IPersistable obj) throws Exception {
ConvectProbRecord cpRec = (ConvectProbRecord) obj;
for (int i = 0; i < cpRec.getDataArrays().length; i++) {
IDataRecord record = DataStoreFactory.createStorageRecord(
cpRec.getDataNames()[i], cpRec.getDataURI(), cpRec.getDataArrays()[i]);
record.setCorrelationObject(cpRec);
dataStore.addDataRecord(record);
}
return dataStore;
}
}

View file

@ -0,0 +1,242 @@
package edu.wisc.ssec.cimss.edex.plugin.convectprob.impl;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;
import com.raytheon.uf.common.status.IUFStatusHandler;
import com.raytheon.uf.common.status.UFStatus;
import edu.wisc.ssec.cimss.common.dataplugin.convectprob.impl.ShapeObject;
/**
* NOAA/CIMSS Prob Severe Model Data Parser
*
* Data parser that parses shapefile records of NOAA/CIMSS Prob Severe Model
*
* <pre>
* SOFTWARE HISTORY
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Mar 27, 2014 DCS 15298 lcronce Initial Creation.
*
* </pre
*
* @author Lee Cronce
* @version 1.0
*
*/
public class ConvectProbParser {
private final IUFStatusHandler statusHandler = UFStatus.getHandler(ConvectProbParser.class);
int currentShape = -1;
private List<ShapeObject> shapes;
private String validTime;
private List<String> fileLines;
/**
* Default empty constructor
*/
public ConvectProbParser() {
}
/**
* Calls setData method for defining shape data
*
* @param File object passed on from EDEX
*/
public ConvectProbParser(File file) {
setData(file);
}
/**
* Calls findShapes method to define shape data
*
* @param File object passed on from EDEX
*/
private void setData(File file) {
currentShape = -1;
fileLines = separateLines(file);
validTime = findTime(fileLines, file);
shapes = findShapes(fileLines);
if((shapes != null) && (shapes.size() > 0)) {
currentShape = 0;
}
}
/**
* Returns convectprob data file valid time reference
*
* @return String object defining valid time reference
*/
public String getValidTime() {
return validTime;
}
/**
* Determines if parser contains any more reports
*
* @return Boolean object defining "Does this parser contain any more reports?"
*/
public boolean hasNext() {
boolean next = (shapes != null);
if(next) {
next = ((currentShape >= 0) && (currentShape < shapes.size()));
}
if(!next) {
shapes = null;
currentShape = -1;
}
return next;
}
/**
* Gets the next available report and returns a null reference if no
* more reports are available.
*
* @return Next available shape object
*/
public ShapeObject next() {
ShapeObject shape = null;
if(currentShape < 0) {
return shape;
}
if(currentShape >= shapes.size()) {
shapes = null;
currentShape = -1;
} else {
shape = shapes.get(currentShape++);
}
return shape;
}
/**
* Parses out the data from the passed file object
*
* @param ArrayList of String type containing individual lines of a convectprob data file
* @return String object containing convectprob data valid time
*/
private String findTime(List<String> fileLines, File file) {
String validTime = null;
if (fileLines != null) {
try {
String vTime = fileLines.get(0);
if (!vTime.substring(0,5).equals("Valid")) {
if (file.getName().substring(0,4).equals("SSEC")) {
validTime = file.getName().substring(23,38);
} else {
validTime = null;
}
} else{
validTime = vTime.split(" ")[1];
}
} catch (Exception e) {
statusHandler.error("Problem acquiring convectprob data valid date and time", e);
}
}
return validTime;
}
/**
* Parses out the data from the passed file object
*
* @param File object passed on from EDEX
* @return ArrayList containing the shape data
*/
private List<ShapeObject> findShapes(List<String> fileLines) {
List<ShapeObject> shapes = new ArrayList<ShapeObject>();
if (fileLines != null) {
for (String line : fileLines) {
if (!line.substring(0,5).equals("Valid")) {
try {
ShapeObject shape = new ShapeObject();
String[] shapeAttributes = line.split(":");
String type = shapeAttributes[0];
shape.setType(type);
int probability = Integer.parseInt(shapeAttributes[1].replaceAll("\\D", ""));
shape.setProbability(probability);
String mucape = shapeAttributes[2];
shape.setMucape(mucape);
String ebshear = shapeAttributes[3];
shape.setEbshear(ebshear);
String mesh = shapeAttributes[4];
shape.setMesh(mesh);
String rcemiss = shapeAttributes[5];
shape.setRcemiss(rcemiss);
String rcicecf = shapeAttributes[6];
shape.setRcicecf(rcicecf);
String[] points = shapeAttributes[7].split(",");
float[] latitudes = new float[points.length/2];
float[] longitudes = new float[points.length/2];
for (int i=0; i < points.length; i++) {
if ((i == 0) || ((i%2) == 0)) {
latitudes[i/2] = Float.parseFloat(points[i]);
} else {
longitudes[(i-1)/2] = Float.parseFloat(points[i]);
}
}
StringBuffer strbuf = new StringBuffer();
strbuf.append("POLYGON((");
for (int j=0; j < latitudes.length; j++) {
strbuf.append(Float.toString(longitudes[j]));
strbuf.append(" ");
strbuf.append(Float.toString(latitudes[j]));
if (j < latitudes.length-1) {
strbuf.append(",");
strbuf.append(" ");
}
}
strbuf.append("))");
shape.setPolygon(strbuf.toString());
String objectid = shapeAttributes[8];
shape.setObjectid(objectid);
if (latitudes.length >= 4 || longitudes.length >= 4) {
shapes.add(shape);
}
} catch (Exception e) {
statusHandler.error("Problem defining convectprob shape object from read line: " + line, e);
}
}
}
}
return shapes;
}
/**
* Separates out lines of data from the input data file
*
* @param File passed on by EDEX
* @return ArrayList of lines of data from data file
*/
private List<String> separateLines(File file) {
List<String> fileLines = null;
try {
if (file != null) {
BufferedReader reader = new BufferedReader(new FileReader(file));
fileLines = new ArrayList<String>();
String line;
while ((line = reader.readLine()) != null) {
fileLines.add(line);
}
reader.close();
}
} catch (Exception e) {
statusHandler.error("Problem with reading lines of the convectprob input file: " + file.getName(), e);
}
return fileLines;
}
}

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purgeRuleSet>
<defaultRule>
<versionsToKeep>60</versionsToKeep>
</defaultRule>
</purgeRuleSet>

View file

@ -0,0 +1,23 @@
<?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.
-->
<requestPatterns xmlns:ns2="group">
<regex>^SSEC_AWIPS_CONVECTPROB_*</regex>
</requestPatterns>

View file

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>edu.wisc.ssec.cimss.viz.convectprob.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

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

View file

@ -0,0 +1,41 @@
<?xml version="1.0" encoding="UTF-8"?>
<feature
id="edu.wisc.ssec.cimss.viz.convectprob.feature"
label="Convectprob CAVE Feature"
version="1.0.0.qualifier"
provider-name="CIMSS/SSEC">
<description url="http://www.example.com/description">
[Enter Feature Description here.]
</description>
<copyright url="http://www.example.com/copyright">
[Enter Copyright Description here.]
</copyright>
<license url="http://www.example.com/license">
[Enter License Description here.]
</license>
<requires>
<import feature="com.raytheon.uf.viz.common.core.feature" version="1.0.0.qualifier"/>
<import feature="com.raytheon.uf.viz.core.feature" version="1.0.0.qualifier"/>
<import feature="com.raytheon.uf.viz.cots.feature" version="1.0.0.qualifier"/>
<import feature="com.raytheon.uf.viz.d2d.core.feature" version="1.0.0.qualifier"/>
</requires>
<plugin
id="edu.wisc.ssec.cimss.common.dataplugin.convectprob"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="edu.wisc.ssec.cimss.viz.convectprob"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
</feature>

View file

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

View file

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>edu.wisc.ssec.cimss.viz.convectprob</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

@ -0,0 +1,39 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: NOAA/CIMSS Prob Severe (viz.convectprob)
Bundle-SymbolicName: edu.wisc.ssec.cimss.viz.convectprob;singleton:=true
Bundle-Version: 1.14.4.qualifier
Require-Bundle: org.eclipse.ui,
org.geotools,
com.raytheon.uf.common.datastorage,
com.raytheon.uf.viz.core,
edu.wisc.ssec.cimss.common.dataplugin.convectprob
Bundle-ActivationPolicy: lazy
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Import-Package: com.raytheon.uf.common.colormap,
com.raytheon.uf.common.colormap.prefs,
com.raytheon.uf.common.dataplugin,
com.raytheon.uf.common.geospatial,
com.raytheon.uf.common.status,
com.raytheon.uf.common.time,
com.raytheon.uf.viz.core,
com.raytheon.uf.viz.core.drawables,
com.raytheon.uf.viz.core.exception,
com.raytheon.uf.viz.core.map,
com.raytheon.uf.viz.core.procedures,
com.raytheon.uf.viz.core.rsc,
com.raytheon.uf.viz.core.rsc.capabilities,
com.raytheon.uf.viz.core.status,
com.raytheon.uf.viz.d2d.core,
com.raytheon.uf.viz.productbrowser,
com.raytheon.viz.ui,
com.raytheon.viz.ui.editor,
com.vividsolutions.jts.geom,
org.eclipse.core.runtime,
org.eclipse.swt.graphics,
org.eclipse.ui.plugin,
org.opengis.referencing.crs,
org.osgi.framework
Export-Package: edu.wisc.ssec.cimss.viz.convectprob,
edu.wisc.ssec.cimss.viz.convectprob.rsc
Bundle-Vendor: CIMSS/SSEC

View file

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

View file

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
Affiliate_Name:________Cooperative Institute for Meteorological Satellite Studies
Affiliate_Address:_____1225 W. Dayton St.
_______________________Madison, WI 53706
-->
<bundle>
<displayList>
<displays xsi:type="d2DMapRenderableDisplay" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<descriptor xsi:type="mapDescriptor">
<resource>
<loadProperties loadWithoutData="false">
<capabilities>
<capability xsi:type="colorMapCapability">
<colorMapParameters colorMapName="prob_severe"/>
</capability>
<capability xsi:type="colorableCapability" colorAsString="#FFFFFF"/>
</capabilities>
<resourceType>PLAN_VIEW</resourceType>
</loadProperties>
<properties isSystemResource="false" isBlinking="false" isMapLayer="false" isHoverOn="false" isVisible="true">
</properties>
<resourceData xsi:type="convectProbResourceData"
isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true" retrieveData="true"
showObjectId="false">
<metadataMap>
<mapping key="pluginName">
<constraint constraintValue="convectprob" constraintType="EQUALS"/>
</mapping>
</metadataMap>
</resourceData>
</resource>
</descriptor>
</displays>
</displayList>
</bundle>

View file

@ -0,0 +1,39 @@
<?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.2"?>
<plugin>
<extension
point="com.raytheon.uf.viz.core.resource">
<resource
class="edu.wisc.ssec.cimss.viz.convectprob.rsc.ConvectProbResource"
name="ConvectProb"
recordClass="edu.wisc.ssec.cimss.common.dataplugin.convectprob.ConvectProbRecord"
renderingOrderId="PLOT"
resourceType="PLAN_VIEW"/>
</extension>
<extension
point="com.raytheon.uf.viz.productbrowser.dataDefinition">
<dataDefinition
name="convectProbProductBrowserDataDefinition"
class="edu.wisc.ssec.cimss.viz.convectprob.ConvectProbProductBrowserDataDefinition" >
</dataDefinition>
</extension>
</plugin>

View file

@ -0,0 +1,102 @@
package edu.wisc.ssec.cimss.viz.convectprob;
import java.util.ArrayList;
import java.util.List;
import com.raytheon.viz.ui.BundleProductLoader;
import com.raytheon.viz.ui.EditorUtil;
import com.raytheon.uf.common.localization.PathManagerFactory;
import com.raytheon.uf.common.status.IUFStatusHandler;
import com.raytheon.uf.common.status.UFStatus;
import com.raytheon.uf.common.status.UFStatus.Priority;
import com.raytheon.uf.viz.core.exception.VizException;
import com.raytheon.uf.viz.core.procedures.Bundle;
import com.raytheon.uf.viz.core.rsc.LoadProperties;
import com.raytheon.uf.viz.core.rsc.ResourceType;
import com.raytheon.uf.viz.productbrowser.AbstractProductBrowserDataDefinition;
import com.raytheon.uf.viz.productbrowser.ProductBrowserLabel;
import com.raytheon.uf.viz.productbrowser.ProductBrowserPreference;
import edu.wisc.ssec.cimss.viz.convectprob.rsc.ConvectProbResourceData;
/**
* NOAA/CIMSS Prob Severe Model Product Browser Data Definition
*
* Defines product browser access to NOAA/CIMSS Prob Severe Model data
*
* <pre>
* SOFTWARE HISTORY
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Mar 27, 2014 DCS 15298 jgerth Initial Creation.
*
* </pre
*
* @author Jordan Gerth
* @version 1.0
*
*/
public class ConvectProbProductBrowserDataDefinition extends
AbstractProductBrowserDataDefinition<ConvectProbResourceData> {
IUFStatusHandler statusHandler = UFStatus.getHandler(ConvectProbProductBrowserDataDefinition.class);
/**
* Constructor defining new instance of this class
*/
public ConvectProbProductBrowserDataDefinition() {
displayName = "Prob Severe";
loadProperties = new LoadProperties();
}
/**
* @see com.raytheon.uf.viz.productbrowser.AbstractProductBrowserDataDefinition#getResourceData()
*/
@Override
public ConvectProbResourceData getResourceData() {
return new ConvectProbResourceData();
}
/**
* @see com.raytheon.uf.viz.productbrowser.AbstractProductBrowserDataDefinition#populateData(java.lang.String[])
*/
@Override
public List<ProductBrowserLabel> populateData(String[] selection) {
List<ProductBrowserLabel> labels = new ArrayList<ProductBrowserLabel>();
ProductBrowserLabel label = new ProductBrowserLabel("NOAA/CIMSS Prob Severe Model", "Probability of Severe");
label.setProduct(true);
labels.add(label);
return labels;
}
/**
* @see com.raytheon.uf.viz.productbrowser.AbstractProductBrowserDataDefinition#buildProductList(java.util.List)
*/
@Override
public List<String> buildProductList(List<String> historyList) {
return historyList;
}
/**
* @see com.raytheon.uf.viz.productbrowser.AbstractProductBrowserDataDefinition#constructResource(java.lang.String[], com.raytheon.uf.viz.core.rsc.ResourceType)
*/
@Override
public void constructResource(String[] selection, ResourceType type) {
try {
Bundle b = Bundle.unmarshalBundle(PathManagerFactory.getPathManager().getStaticFile("bundles/ConvectProb.xml"));
new BundleProductLoader(EditorUtil.getActiveVizContainer(),b).run();
} catch (VizException e1) {
statusHandler.handle(Priority.PROBLEM, "Could not create resource for NOAA/CIMSS Prob Severe Model data", e1);
}
}
/**
* @see com.raytheon.uf.viz.productbrowser.AbstractProductBrowserDataDefinition#configurePreferences()
*/
@Override
public List<ProductBrowserPreference> configurePreferences() {
return super.configurePreferences();
}
}

View file

@ -0,0 +1,424 @@
package edu.wisc.ssec.cimss.viz.convectprob.rsc;
import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import org.eclipse.swt.graphics.RGB;
import org.opengis.referencing.crs.CoordinateReferenceSystem;
import com.raytheon.uf.common.colormap.Color;
import com.raytheon.uf.common.colormap.ColorMapException;
import com.raytheon.uf.common.colormap.prefs.ColorMapParameters;
import com.raytheon.uf.common.dataplugin.PluginDataObject;
import com.raytheon.uf.common.datastorage.DataStoreFactory;
import com.raytheon.uf.common.datastorage.IDataStore;
import com.raytheon.uf.common.geospatial.ReferencedCoordinate;
import com.raytheon.uf.common.time.DataTime;
import com.raytheon.uf.viz.core.IGraphicsTarget;
import com.raytheon.uf.viz.core.IGraphicsTarget.LineStyle;
import com.raytheon.uf.common.colormap.ColorMapLoader;
import com.raytheon.uf.viz.core.drawables.IWireframeShape;
import com.raytheon.uf.viz.core.drawables.PaintProperties;
import com.raytheon.uf.viz.core.exception.VizException;
import com.raytheon.uf.viz.core.map.MapDescriptor;
import com.raytheon.uf.viz.core.rsc.AbstractVizResource;
import com.raytheon.uf.viz.core.rsc.IResourceDataChanged;
import com.raytheon.uf.viz.core.rsc.LoadProperties;
import com.raytheon.uf.viz.core.rsc.capabilities.ColorMapCapability;
import com.vividsolutions.jts.geom.Coordinate;
import com.vividsolutions.jts.geom.Geometry;
import com.vividsolutions.jts.geom.GeometryFactory;
import com.vividsolutions.jts.geom.Point;
import com.raytheon.uf.common.status.IUFStatusHandler;
import com.raytheon.uf.common.status.UFStatus;
import com.raytheon.uf.common.status.UFStatus.Priority;
import com.raytheon.uf.common.dataplugin.HDF5Util;
import edu.wisc.ssec.cimss.common.dataplugin.convectprob.ConvectProbRecord;
/**
* NOAA/CIMSS Prob Severe Model Visualization Resource
*
* <pre>
* SOFTWARE HISTORY
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Mar 27, 2014 DCS 15298 lcronce Initial Creation.
*
* </pre
*
* @author Lee Cronce
* @version 1.0
*
*/
public class ConvectProbResource extends
AbstractVizResource<ConvectProbResourceData, MapDescriptor> {
private final IUFStatusHandler statusHandler = UFStatus
.getHandler(ConvectProbResource.class);
/**
* Class defining the attributes of the display frame
*
* This class holds cached shapes to avoid recalculating everything all
* the time
*/
private class DisplayFrame {
Collection<ConvectProbRecord> records = new ArrayList<ConvectProbRecord>();
IWireframeShape shape;
protected void dispose() {
if (this.shape != null) {
this.shape.dispose();
this.shape = null;
}
}
protected void createShapes(IGraphicsTarget target) {
dispose();
shape = target.createWireframeShape(false, descriptor);
}
}
// Place to store records that have not yet been processed
private Map<DataTime, Collection<ConvectProbRecord>> unprocessedRecords = new HashMap<DataTime, Collection<ConvectProbRecord>>();
private Map<DataTime, DisplayFrame> frames = new HashMap<DataTime, DisplayFrame>();
private DataTime displayedDataTime;
/**
* Constructor to define an instance of this resource
*
* @param ConvectProb plugin resource data
* @param Display load properties
*/
protected ConvectProbResource(ConvectProbResourceData resourceData,
LoadProperties loadProperties) {
super(resourceData, loadProperties);
resourceData.addChangeListener(new IResourceDataChanged() {
@Override
public void resourceChanged(ChangeType type, Object object) {
if (type == ChangeType.DATA_UPDATE) {
PluginDataObject[] pdo = (PluginDataObject[]) object;
for (PluginDataObject p : pdo) {
if (p instanceof ConvectProbRecord) {
addRecord((ConvectProbRecord) p);
}
}
}
issueRefresh();
}
});
this.dataTimes = new ArrayList<DataTime>();
}
/**
* @see com.raytheon.uf.viz.core.rsc.AbstractVizResource#disposeInternal()
*/
@Override
protected void disposeInternal() {
// Make sure we ditch all the shapes before we go
disposeFrames();
}
/**
* Disposes of all frames of visualization
*/
private void disposeFrames() {
synchronized (frames) {
for (DisplayFrame frame : frames.values()) {
frame.dispose();
}
}
}
/**
* @see com.raytheon.uf.viz.core.rsc.AbstractVizResource#getDataTimes()
*/
@Override
public DataTime[] getDataTimes() {
if (this.dataTimes == null) {
return new DataTime[0];
}
synchronized (dataTimes) {
return this.dataTimes.toArray(new DataTime[0]);
}
}
/**
* @see com.raytheon.uf.viz.core.rsc.AbstractVizResource#initInternal(com.raytheon.uf.viz.core.IGraphicsTarget)
*/
@Override
protected void initInternal(IGraphicsTarget target) throws VizException {
// Create colormap parameters
ColorMapParameters colorMapParams = getCapability(
ColorMapCapability.class).getColorMapParameters();
if (colorMapParams == null) {
colorMapParams = new ColorMapParameters();
}
String name = "Grid/gridded data";
if (colorMapParams.getColorMap() == null) {
if (colorMapParams.getColorMapName() != null)
name = colorMapParams.getColorMapName();
try {
colorMapParams.setColorMap(ColorMapLoader.loadColorMap(name));
} catch (ColorMapException e) {
statusHandler.handle(Priority.ERROR, "Error loading specified colormap: " + name, e);
}
}
colorMapParams.setColorMapMax(100.0f);
colorMapParams.setColorMapMin(0.0f);
float[] cbi = {0.0f, 10.0f, 20.0f, 30.0f, 40.0f, 50.0f, 60.0f, 70.0f, 80.0f, 90.0f, 100.0f};
colorMapParams.setColorBarIntervals(cbi);
}
/**
* @see com.raytheon.uf.viz.core.rsc.AbstractVizResource#inspect(com.raytheon.uf.common.geospatial.ReferencedCoordinate)
*/
@Override
public String inspect(ReferencedCoordinate coord) throws VizException {
DisplayFrame frame = null;
synchronized (frames) {
frame = frames.get(this.displayedDataTime);
}
if (frame == null) {
return "";
}
StringBuilder sample = new StringBuilder();
Coordinate latLon = new Coordinate();
try {
latLon = coord.asLatLon();
} catch (Exception e1) {
statusHandler.handle(Priority.ERROR, "Error converting ReferencedCoordinate to Lat/Lon", e1);
}
GeometryFactory geom = new GeometryFactory();
Point point = geom.createPoint(latLon);
for (ConvectProbRecord record : frame.records) {
// Check if we have an area we are rendering
if (resourceData.isDisplayShape()) {
try {
Geometry[] pg = record.getPolyGeoms();
for (int i=0; i < pg.length; i++) {
if (pg[i].contains(point)) {
sample.append("SVR PROB: "+Integer.toString(record.getProbabilities()[i])+"%");
sample.append("\n- Env MUCAPE: "+record.getMucapes()[i]);
sample.append("\n- Env EBShear: "+record.getEbshears()[i]);
sample.append("\n- MRMS MESH: "+record.getMeshes()[i]);
sample.append("\n- Norm Vert Growth Rate (Max): "+record.getRcemisses()[i]);
sample.append("\n- Glaciation Rate (Max): "+record.getRcicecfs()[i]);
if (resourceData.isShowObjectId()) {
sample.append("\n- Object ID: "+record.getObjectids()[i]);
}
return sample.toString();
}
}
} catch (Exception e) {
statusHandler.handle(Priority.ERROR, "Error interogating convectprob data", e);
}
}
}
return "";
}
/**
* Process all records for the displayedDataTime
*
* @param target
* @param paintProps
* @throws VizException
*/
private void updateRecords(IGraphicsTarget target,
PaintProperties paintProps) throws VizException {
DisplayFrame frame = null;
synchronized (frames) {
frame = frames.get(this.displayedDataTime);
if (frame == null) {
frame = new DisplayFrame();
frames.put(this.displayedDataTime, frame);
}
}
// Add all the new Records
Collection<ConvectProbRecord> newRecords = null;
synchronized (unprocessedRecords) {
newRecords = unprocessedRecords.get(this.displayedDataTime);
}
for (ConvectProbRecord record : newRecords) {
// If we need to draw anything for this record then keep it
if (resourceData.isDisplayShape()) {
frame.records.add(record);
}
}
newRecords.clear();
// Get some new shapes
frame.createShapes(target);
// Update each record
for (ConvectProbRecord record : frame.records) {
File f = HDF5Util.findHDF5Location(record);
IDataStore ds = DataStoreFactory.getDataStore(f);
record.retrieveFromDataStore(ds);
}
}
/**
* @see com.raytheon.uf.viz.core.rsc.AbstractVizResource#paintInternal(com.raytheon.uf.viz.core.IGraphicsTarget, com.raytheon.uf.viz.core.drawables.PaintProperties)
*/
@Override
protected void paintInternal(IGraphicsTarget target,
PaintProperties paintProps) throws VizException {
// Create colormap parameters
ColorMapParameters colorMapParams = getCapability(
ColorMapCapability.class).getColorMapParameters();
this.displayedDataTime = paintProps.getDataTime();
// First check to see if we need to process new data
Collection<ConvectProbRecord> unprocessed = null;
synchronized (unprocessedRecords) {
unprocessed = unprocessedRecords.get(this.displayedDataTime);
}
if (unprocessed != null && unprocessed.size() > 0) {
updateRecords(target, paintProps);
}
// Hopefully we now have some data to display, if not bail
DisplayFrame frame = null;
synchronized (frames) {
frame = frames.get(this.displayedDataTime);
}
if (frame == null) {
this.displayedDataTime = null;
return;
}
if (frame.records != null && frame.shape != null) {
boolean drawShape = false;
Color color;
float a, thick;
RGB shapeColor = new RGB(255, 255, 255);
for (ConvectProbRecord rec : frame.records) {
if (rec.getPolyGeoms() != null) {
Geometry[] polyGeoms = rec.getPolyGeoms();
int[] probabilities = rec.getProbabilities();
for (int j=0; j < 101; j++) {
frame.shape.reset();
drawShape = false;
for (int i=0; i < polyGeoms.length; i++) {
if (probabilities[i] == j) {
frame.shape.addLineSegment(polyGeoms[i].getCoordinates());
drawShape = true;
}
}
if (drawShape) {
color = colorMapParams.getColorByValue((float) j);
shapeColor.red = (int) (color.getRed() * 255);
shapeColor.green = (int) (color.getGreen() * 255);
shapeColor.blue = (int) (color.getBlue() * 255);
a = color.getAlpha() * paintProps.getAlpha();
thick = 7.0f;
if (j < 50) {
thick = 4.0f;
}
target.drawWireframeShape(frame.shape, shapeColor, thick, LineStyle.SOLID, a);
}
}
}
}
}
}
/**
* Adds a new record to this resource
*
* @param new ConvectProb record
*/
protected void addRecord(ConvectProbRecord obj) {
DataTime dataTime = obj.getDataTime();
if (dataTime != null) {
Collection<ConvectProbRecord> records = null;
boolean brandNew = false;
synchronized (unprocessedRecords) {
records = unprocessedRecords.get(dataTime);
if (records == null) {
records = new LinkedHashSet<ConvectProbRecord>();
unprocessedRecords.put(dataTime, records);
brandNew = true;
}
}
if (brandNew) {
synchronized (dataTimes) {
this.dataTimes.add(dataTime);
Collections.sort(this.dataTimes);
}
}
records.add(obj);
}
}
/**
* @see com.raytheon.uf.viz.core.rsc.AbstractVizResource#getName()
*/
@Override
public String getName() {
return "NOAA/CIMSS Prob Severe Model (%)";
}
/**
* @see com.raytheon.uf.viz.core.rsc.AbstractVizResource#project(org.opengis.referencing.crs.CoordinateReferenceSystem)
*/
@Override
public void project(CoordinateReferenceSystem crs) throws VizException {
synchronized (frames) {
disposeFrames();
// add as unprocessed to make sure frames created
for (DataTime time : frames.keySet()) {
DisplayFrame frame = frames.get(time);
if (frame != null) {
List<ConvectProbRecord> copyList = new ArrayList<ConvectProbRecord>(
frame.records);
synchronized (unprocessedRecords) {
unprocessedRecords.put(time, copyList);
}
}
}
}
}
/**
* @see com.raytheon.uf.viz.core.rsc.AbstractVizResource#remove(com.raytheon.uf.common.time.DataTime)
*/
@Override
public void remove(DataTime time) {
super.remove(time);
Collection<ConvectProbRecord> notNeeded = null;
synchronized (unprocessedRecords) {
notNeeded = unprocessedRecords.remove(time);
}
if (notNeeded != null) {
notNeeded.clear();
}
DisplayFrame frame = null;
synchronized (frames) {
frame = frames.remove(time);
}
if (frame != null) {
frame.dispose();
}
}
}

View file

@ -0,0 +1,130 @@
package edu.wisc.ssec.cimss.viz.convectprob.rsc;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import com.raytheon.uf.common.dataplugin.PluginDataObject;
import com.raytheon.uf.common.status.IUFStatusHandler;
import com.raytheon.uf.common.status.UFStatus;
import com.raytheon.uf.common.status.UFStatus.Priority;
import com.raytheon.uf.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;
import edu.wisc.ssec.cimss.common.dataplugin.convectprob.ConvectProbRecord;
/**
* NOAA/CIMSS Prob Severe Model Visualization Resource Data
*
* <pre>
* SOFTWARE HISTORY
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Mar 27, 2014 DCS 15298 lcronce Initial Creation.
*
* </pre
*
* @author Lee Cronce
* @version 1.0
*
*/
@XmlAccessorType(XmlAccessType.NONE)
public class ConvectProbResourceData extends AbstractRequestableResourceData {
private static final transient IUFStatusHandler statusHandler = UFStatus
.getHandler(ConvectProbResourceData.class);
// This flag determines if we draw polygons
@XmlAttribute
private boolean displayShape = true;
// This flag determines if object IDs are output to screen during inspect
@XmlAttribute
private boolean showObjectId = false;
/**
* @see com.raytheon.uf.viz.core.rsc.AbstractRequestableResourceData#equals(java.lang.Object)
*/
@Override
public boolean equals(Object obj) {
if (!super.equals(obj)) {
return false;
}
if (obj instanceof ConvectProbResourceData == false) {
return false;
}
ConvectProbResourceData other = (ConvectProbResourceData) obj;
if (other.displayShape != this.displayShape) {
return false;
}
if (other.showObjectId != this.showObjectId) {
return true;
}
return true;
}
/**
* @see com.raytheon.uf.viz.core.rsc.AbstractRequestableResourceData#constructResource(com.raytheon.uf.viz.core.rsc.LoadProperties, com.raytheon.uf.common.dataplugin.PluginDataObject[])
*/
@Override
protected AbstractVizResource<?, ?> constructResource(
LoadProperties loadProperties, PluginDataObject[] objects)
throws VizException {
ConvectProbResource rsc = new ConvectProbResource(this, loadProperties);
for (PluginDataObject o : objects) {
if (o instanceof ConvectProbRecord) {
ConvectProbRecord rec = (ConvectProbRecord) o;
rsc.addRecord(rec);
} else {
statusHandler.handle(Priority.PROBLEM,
"Received wrong type of data. Got: " + o.getClass()
+ " Expected: " + ConvectProbRecord.class);
}
}
return rsc;
}
/**
* Flag to see if shape should be displayed
*
* @return boolean
*/
public boolean isDisplayShape() {
return displayShape;
}
/**
* Set flag for displaying shape
*
* @param boolean
*/
public void setDisplayShape(boolean displayShape) {
this.displayShape = displayShape;
}
/**
* Flag to see if object ID should be displayed
*
* @return boolean
*/
public boolean isShowObjectId() {
return showObjectId;
}
/**
* Set flag for displaying shape
*
* @param boolean
*/
public void setShowObjectId(boolean showObjectId) {
this.showObjectId = showObjectId;
}
}

View file

@ -154,5 +154,6 @@
#???|256 | 0 | 0.25 | 230 | PRE | Inst Precip Rate (PRE) | Radial | y | | | | Z | | | | |63
166| 0 | 0 | 0.0 | 230 | ML | Melting Layer (ML) | Graphic | y | | | | Z | | | | |67
170|256 | 0 | 0.25 | 230 | DAA | One Hour Unbiased Accum (DAA) | Radial | | | | |0.01S| | | | |69
500 | 8 | 0 | 0.463 | 463 | HSR | Hybrid Scan Reflectivity (HSR)| Radial | | | | | | | | | |64
550 | 8 | 0 | 0.926 | 111 | HSR | Hybrid Scan Reflectivity (HSR)| Radial | | | | | | | | | |64
196| 0 | 0 | 0.0 | 50 | MBA | Microburst AMDA (MBA) | Generic | | | | | | | | | |28
500| 8 | 0 | 0.463| 463 | Z | Reflectivity (Z) | Radial | | | | | | | | | |64
550| 8 | 0 | 0.926| 111 | Z | Reflectivity (Z) | Radial | | | | | | | | | |64

View file

@ -7,6 +7,7 @@ Bundle-Vendor: RAYTHEON
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Bundle-ActivationPolicy: lazy
Require-Bundle: com.raytheon.uf.viz.core;bundle-version="1.14.0",
com.raytheon.viz.core.graphing,
com.raytheon.viz.ui;bundle-version="1.14.0",
gov.noaa.nws.ncep.ui.nsharp,
com.raytheon.uf.common.sounding,

View file

@ -24,9 +24,9 @@ import gov.noaa.nws.ncep.ui.nsharp.display.NsharpEditor;
import gov.noaa.nws.ncep.ui.nsharp.display.rsc.NsharpResourceHandler;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.List;
import java.util.LinkedHashMap;
import com.raytheon.uf.common.time.DataTime;
import com.raytheon.uf.viz.core.IDisplayPane;
import com.raytheon.uf.viz.core.datastructure.LoopProperties;
import com.raytheon.uf.viz.core.exception.VizException;
@ -40,58 +40,68 @@ import com.raytheon.viz.ui.editor.AbstractEditor;
* SOFTWARE HISTORY
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Jul 26, 2006 chammack Initial Creation.
* Unknown bsteffen Initial creation
* Unknown cchen Modifications
* Dec 8, 2014 DR16713 jgerth Incorporate date and time
*
* </pre>
*
* @author chammack
* @author bsteffen
* @version 1
*/
public class NSharpSaveScreenAction extends ExportImageHandler {
@Override
protected BufferedImage captureCurrentFrames(AbstractEditor editor) {
return editor.getActiveDisplayPane().getTarget().screenshot();
protected LinkedHashMap<DataTime, BufferedImage> captureCurrentFrames(AbstractEditor editor) {
NsharpResourceHandler handler = ((NsharpEditor) editor).getRscHandler();
LinkedHashMap<DataTime, BufferedImage> dtbiHash = new LinkedHashMap<DataTime, BufferedImage>();
DataTime[] dataTimes = handler.getSkewtPaneRsc().getDescriptor().getFramesInfo().getFrameTimes();
if (dataTimes == null || dataTimes.length == 0) {
dtbiHash.put(buildFakeTime(0), editor.getActiveDisplayPane().getTarget().screenshot());
} else {
dtbiHash.put(dataTimes[handler.getCurrentIndex()], editor.getActiveDisplayPane().getTarget().screenshot());
}
return dtbiHash;
}
@Override
protected List<BufferedImage> captureAllFrames(AbstractEditor editor)
protected LinkedHashMap<DataTime, BufferedImage> captureAllFrames(AbstractEditor editor)
throws VizException {
if(!(editor instanceof NsharpEditor)){
return super.captureAllFrames(editor);
}
NsharpResourceHandler handler = ((NsharpEditor) editor).getRscHandler();
int startIndex = 0;
int endIndex = handler .getFrameCount(); // Chin NsharpFrameIndexUtil.getFrameCount(handler);
int endIndex = handler.getFrameCount();
return captureFrames(editor, startIndex, endIndex);
}
@Override
protected List<BufferedImage> captureFrames(AbstractEditor editor,
protected LinkedHashMap<DataTime, BufferedImage> captureFrames(AbstractEditor editor,
int startIndex, int endIndex) throws VizException {
if(!(editor instanceof NsharpEditor)){
return super.captureFrames(editor, startIndex, endIndex);
}
LinkedHashMap<DataTime, BufferedImage> dtbiHash = new LinkedHashMap<DataTime, BufferedImage>();
IDisplayPane pane = editor.getActiveDisplayPane();
NsharpResourceHandler handler = ((NsharpEditor) editor).getRscHandler();
// save the frame we are on;
int startingIndex = handler.getCurrentIndex(); // Chin NsharpFrameIndexUtil.getCurrentIndex(handler);
List<BufferedImage> images = new ArrayList<BufferedImage>();
LoopProperties loopProperties = ((AbstractEditor) editor)
.getLoopProperties();
int startingIndex = handler.getCurrentIndex();
LoopProperties loopProperties = ((AbstractEditor) editor).getLoopProperties();
renderPane(pane, loopProperties);
DataTime[] dataTimes = handler.getSkewtPaneRsc().getDescriptor().getFramesInfo().getFrameTimes();
for (int i = startIndex; i < endIndex; i++) {
//Chin NsharpFrameIndexUtil.setCurrentIndex(handler, i);
if(handler.setCurrentIndex(i)== false)
continue;
if (handler.setCurrentIndex(i) == false) {
continue;
}
pane.refresh();
renderPane(pane, loopProperties);
images.add(captureCurrentFrames(editor));
dtbiHash.put(dataTimes[i], editor.getActiveDisplayPane().getTarget().screenshot());
}
handler.setCurrentIndex(startingIndex); // Chin NsharpFrameIndexUtil.setCurrentIndex(handler, startingIndex);
handler.setCurrentIndex(startingIndex);
pane.refresh();
renderPane(pane, loopProperties);
return images;
return dtbiHash;
}
}

View file

@ -39,6 +39,7 @@ import org.eclipse.swt.widgets.Text;
import com.raytheon.uf.common.time.util.TimeUtil;
import com.raytheon.uf.viz.image.export.options.ImageExportOptions;
import com.raytheon.uf.viz.image.export.options.ImageExportOptions.DateTimeSelection;
import com.raytheon.uf.viz.image.export.options.ImageExportOptions.FrameSelection;
import com.raytheon.uf.viz.image.export.options.ImageExportOptions.ImageFormat;
import com.raytheon.viz.ui.dialogs.CaveSWTDialog;
@ -56,6 +57,7 @@ import com.raytheon.viz.ui.dialogs.CaveSWTDialog;
* Mar 10, 2014 2867 bsteffen Better frame range validation.
* Oct 28, 2014 3767 bsteffen Automatically change filename if selected
* format does not support all options.
* Dec 4, 2014 DR16713 jgerth Support for date/time selection
*
* </pre>
*
@ -69,6 +71,8 @@ public class ImageExportDialog extends CaveSWTDialog {
protected Text locationText;
protected Button datetimeButton;
protected Button selectedFramesButton;
protected Button currentFramesButton;
@ -134,6 +138,13 @@ public class ImageExportDialog extends CaveSWTDialog {
selectDestinationFile();
}
});
datetimeButton = new Button(group, SWT.CHECK);
datetimeButton.setLayoutData(gridData);
datetimeButton.setText("Include date and time in file name");
datetimeButton
.setSelection(options.getDateTimeSelection() == DateTimeSelection.DATETIME);
datetimeButton
.setToolTipText("Append the date and time to the file name when Animate is not selected.");
}
protected void initializeFramesGroup(Group group) {
@ -211,6 +222,9 @@ public class ImageExportDialog extends CaveSWTDialog {
frameDelayText.setEnabled(animatedButton.getSelection());
firstFrameDwellText.setEnabled(animatedButton.getSelection());
lastFrameDwellText.setEnabled(animatedButton.getSelection());
datetimeButton.setEnabled(!animatedButton.getSelection());
datetimeButton.setSelection(false);
}
});
gridData = new GridData();
@ -364,6 +378,9 @@ public class ImageExportDialog extends CaveSWTDialog {
} else {
options.setImageFormat(ImageFormat.SEQUENCE);
}
if (datetimeButton.getSelection()) {
options.setDateTimeSelection(DateTimeSelection.DATETIME);
}
if (validate()) {
setReturnValue(options);
close();

View file

@ -20,12 +20,14 @@
package com.raytheon.uf.viz.image.export.handler;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.List;
import java.util.Calendar;
import java.util.LinkedHashMap;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.swt.graphics.Rectangle;
import com.raytheon.uf.common.time.DataTime;
import com.raytheon.uf.common.time.util.TimeUtil;
import com.raytheon.uf.viz.core.IDisplayPane;
import com.raytheon.uf.viz.core.IDisplayPaneContainer;
import com.raytheon.uf.viz.core.IGraphicsTarget;
@ -53,6 +55,7 @@ import com.raytheon.viz.ui.editor.AbstractEditor;
* Date Ticket# Engineer Description
* ------------- -------- ----------- --------------------------
* Jan 20, 2014 2312 bsteffen Move to image export plugin.
* Dec 4, 2014 DR16713 jgerth Incorporate date and time
*
* </pre>
*
@ -61,11 +64,18 @@ import com.raytheon.viz.ui.editor.AbstractEditor;
*/
public abstract class AbstractImageCaptureHandler extends AbstractHandler {
protected BufferedImage captureCurrentFrames(AbstractEditor editor) {
return editor.screenshot();
protected LinkedHashMap<DataTime, BufferedImage> captureCurrentFrames(AbstractEditor editor) {
LinkedHashMap<DataTime, BufferedImage> dtbiHash = new LinkedHashMap<DataTime, BufferedImage>();
DataTime[] dataTimes = editor.getActiveDisplayPane().getDescriptor().getFramesInfo().getFrameTimes();
if (dataTimes == null || dataTimes.length == 0) {
dtbiHash.put(buildFakeTime(0), editor.screenshot());
} else {
dtbiHash.put(dataTimes[editor.getActiveDisplayPane().getDescriptor().getFramesInfo().getFrameIndex()], editor.screenshot());
}
return dtbiHash;
}
protected List<BufferedImage> captureAllFrames(AbstractEditor editor)
protected LinkedHashMap<DataTime, BufferedImage> captureAllFrames(AbstractEditor editor)
throws VizException {
int startIndex = 0;
int endIndex = editor.getActiveDisplayPane().getDescriptor()
@ -76,28 +86,31 @@ public abstract class AbstractImageCaptureHandler extends AbstractHandler {
return captureFrames(editor, startIndex, endIndex);
}
protected List<BufferedImage> captureFrames(AbstractEditor editor,
protected LinkedHashMap<DataTime, BufferedImage> captureFrames(AbstractEditor editor,
int startIndex, int endIndex) throws VizException {
LinkedHashMap<DataTime, BufferedImage> dtbiHash = new LinkedHashMap<DataTime, BufferedImage>();
if (startIndex < 0) {
startIndex = 0;
}
List<BufferedImage> images = new ArrayList<BufferedImage>(endIndex
- startIndex);
int origIndex = editor.getActiveDisplayPane().getDescriptor()
.getFramesInfo().getFrameIndex();
int origIndex = editor.getActiveDisplayPane().getDescriptor().getFramesInfo().getFrameIndex();
DataTime[] dataTimes = editor.getActiveDisplayPane().getDescriptor().getFramesInfo().getFrameTimes();
for (int i = startIndex; i < endIndex; i++) {
for (IDisplayPane pane : editor.getDisplayPanes()) {
setFrameIndex(pane.getDescriptor(), i);
pane.refresh();
renderPane(pane, editor.getLoopProperties());
}
images.add(editor.screenshot());
if (dataTimes != null && dataTimes.length > 0) {
dtbiHash.put(dataTimes[i], editor.screenshot());
} else {
dtbiHash.put(buildFakeTime(i), editor.screenshot());
}
}
for (IDisplayPane pane : editor.getDisplayPanes()) {
setFrameIndex(pane.getDescriptor(), origIndex);
pane.refresh();
}
return images;
return dtbiHash;
}
private void setFrameIndex(IDescriptor desc, int index) {
@ -136,6 +149,20 @@ public abstract class AbstractImageCaptureHandler extends AbstractHandler {
}
}
/**
* Build a fake time when a time is not associated with a frame. The fake
* time is the number of milliseconds since the Epoch based on the integer
* frame number.
*
* @param the frame number
* @return the fake DataTime based on the frame number
*/
protected DataTime buildFakeTime(int i) {
Calendar c = TimeUtil.newGmtCalendar();
c.setTimeInMillis(i);
return new DataTime(c);
}
@Override
public void setEnabled(Object obj) {
IDisplayPaneContainer container = EditorUtil.getActiveVizContainer();

View file

@ -23,9 +23,16 @@ package com.raytheon.uf.viz.image.export.handler;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.TimeZone;
import javax.imageio.IIOImage;
import javax.imageio.ImageIO;
@ -53,9 +60,11 @@ import org.w3c.dom.Node;
import com.raytheon.uf.common.status.IUFStatusHandler;
import com.raytheon.uf.common.status.UFStatus;
import com.raytheon.uf.common.status.UFStatus.Priority;
import com.raytheon.uf.common.time.DataTime;
import com.raytheon.uf.viz.core.exception.VizException;
import com.raytheon.uf.viz.image.export.dialog.ImageExportDialog;
import com.raytheon.uf.viz.image.export.options.ImageExportOptions;
import com.raytheon.uf.viz.image.export.options.ImageExportOptions.DateTimeSelection;
import com.raytheon.uf.viz.image.export.options.ImageExportOptions.FrameSelection;
import com.raytheon.uf.viz.image.export.options.ImageExportOptions.ImageFormat;
import com.raytheon.viz.ui.EditorUtil;
@ -70,6 +79,7 @@ import com.raytheon.viz.ui.editor.AbstractEditor;
* ------------- -------- ----------- --------------------------
* Jul 26, 2006 chammack Initial Creation.
* Jan 20, 2014 2312 bsteffen Move to image export plugin, animation.
* Dec 4, 2014 DR16713 jgerth Support for date and time in file name
*
* </pre>
*
@ -80,6 +90,8 @@ public class ExportImageHandler extends AbstractImageCaptureHandler {
private static final transient IUFStatusHandler statusHandler = UFStatus
.getHandler(ExportImageHandler.class);
private static final String DATE_TIME_FORMAT = "yyyyMMdd_HHmmss";
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
IEditorPart part = EditorUtil.getActiveEditor();
@ -138,17 +150,17 @@ public class ExportImageHandler extends AbstractImageCaptureHandler {
}
}
List<BufferedImage> images = null;
LinkedHashMap<DataTime, BufferedImage> dtbiHash = new LinkedHashMap<DataTime, BufferedImage>();
try {
switch (options.getFrameSelection()) {
case CURRENT:
images = Arrays.asList(captureCurrentFrames(editor));
dtbiHash = captureCurrentFrames(editor);
break;
case ALL:
images = captureAllFrames(editor);
dtbiHash = captureAllFrames(editor);
break;
case USER:
images = captureFrames(editor, options.getFirstFrameIndex(),
dtbiHash = captureFrames(editor, options.getFirstFrameIndex(),
options.getLastFrameIndex());
break;
}
@ -158,8 +170,8 @@ public class ExportImageHandler extends AbstractImageCaptureHandler {
return null;
}
if (!images.isEmpty()) {
new SaveImageJob(options, images);
if (!dtbiHash.isEmpty()) {
new SaveImageJob(options, dtbiHash);
}
return null;
}
@ -175,10 +187,14 @@ public class ExportImageHandler extends AbstractImageCaptureHandler {
}
public void saveImages(IProgressMonitor monitor,
ImageExportOptions options, List<BufferedImage> images) {
monitor.beginTask("Saving Images", images.size());
ImageExportOptions options, Map<DataTime, BufferedImage> dtbiHash) {
monitor.beginTask("Saving Images", dtbiHash.size());
String path = options.getFileLocation().getAbsolutePath();
String ppath = path;
SimpleDateFormat sdf = new SimpleDateFormat(DATE_TIME_FORMAT);
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
NumberFormat twoDigit = new DecimalFormat("00");
String suffix = path.substring(path.lastIndexOf('.') + 1);
String basePath = path.substring(0, path.lastIndexOf('.'));
@ -192,33 +208,47 @@ public class ExportImageHandler extends AbstractImageCaptureHandler {
FileImageOutputStream stream = null;
try {
if (images.size() == 1) {
stream = new FileImageOutputStream(options.getFileLocation());
writer.setOutput(stream);
writer.write(images.get(0));
stream.close();
stream = null;
monitor.worked(1);
} else if (options.getImageFormat() == ImageFormat.SEQUENCE) {
for (int i = 0; i < images.size(); i++) {
BufferedImage bi = images.get(i);
/* Allow GC to collect image after write. */
images.set(i, null);
path = basePath + "-" + (i + 1) + "." + suffix;
if (options.getImageFormat() == ImageFormat.SEQUENCE) {
int i = 0;
for (Map.Entry<DataTime, BufferedImage> entry : dtbiHash.entrySet()) {
i++;
BufferedImage bi = entry.getValue();
if (options.getDateTimeSelection() == DateTimeSelection.DATETIME) {
DataTime key = entry.getKey();
Date validTime = key.getValidTimeAsDate();
if (validTime != null && !isFakeTime(key)) {
path = basePath + "-" + sdf.format(validTime) + "." + suffix;
if (path.equals(ppath)) {
path = basePath + "-" + sdf.format(validTime) + "-" + twoDigit.format(i).toString() + "." + suffix;
}
} else {
path = basePath + "-" + twoDigit.format(i).toString() + "." + suffix;
}
} else if (dtbiHash.size() > 1) {
path = basePath + "-" + twoDigit.format(i).toString() + "." + suffix;
} else {
path = basePath + "." + suffix;
}
ppath = path;
stream = new FileImageOutputStream(new File(path));
writer.setOutput(stream);
writer.write(bi);
stream.close();
stream = null;
if (monitor.isCanceled()) {
dtbiHash.clear();
break;
}
monitor.worked(1);
}
dtbiHash.clear();
} else if (options.getImageFormat() == ImageFormat.ANIMATION) {
stream = new FileImageOutputStream(options.getFileLocation());
writer.setOutput(stream);
writer.prepareWriteSequence(null);
List<BufferedImage> images = new ArrayList<BufferedImage>();
images.addAll(dtbiHash.values());
dtbiHash.clear();
for (int i = 0; i < images.size(); i++) {
BufferedImage bi = images.get(i);
/* Allow GC to collect image after write. */
@ -229,14 +259,12 @@ public class ExportImageHandler extends AbstractImageCaptureHandler {
if (i == 0) {
configureAnimation(metadata,
options.getFirstFrameDwell(), true);
} else if (i == images.size() - 1) {
configureAnimation(metadata,
options.getLastFrameDwell(), false);
} else {
configureAnimation(metadata, options.getFrameDelay(),
false);
}
IIOImage ii = new IIOImage(bi, null, metadata);
writer.writeToSequence(ii, null);
@ -313,23 +341,36 @@ public class ExportImageHandler extends AbstractImageCaptureHandler {
}
/**
* There may be cases in which a valid time is not associated with a frame.
* In such cases, a valid time is set to a number of milliseconds from the
* Epoch time based on the frame number. Here we check if that is one of
* those such cases.
*
* @param a DataTime
* @return true if the DataTime is close to the Epoch time
*/
public boolean isFakeTime(DataTime dt) {
return dt.getValidTime().getTimeInMillis() < 1000;
}
protected class SaveImageJob extends Job {
protected final ImageExportOptions options;
protected final List<BufferedImage> images;
protected final LinkedHashMap<DataTime, BufferedImage> dtbiHash;
protected SaveImageJob(ImageExportOptions options,
List<BufferedImage> images) {
LinkedHashMap<DataTime, BufferedImage> dtbiHash) {
super("Saving image");
this.options = options;
this.images = images;
this.dtbiHash = dtbiHash;
this.schedule();
}
@Override
protected IStatus run(IProgressMonitor monitor) {
saveImages(monitor, options, images);
saveImages(monitor, options, dtbiHash);
return Status.OK_STATUS;
}

View file

@ -61,6 +61,7 @@ import com.raytheon.viz.ui.editor.AbstractEditor;
* Aug 08, 2008 703 randerso fixed bug, changed to scale to fit paper
* and rotate if necessary
* Jan 20, 2014 2312 bsteffen Move to image export plugin.
* Dec 4, 2014 DR16713 jgerth Support for date and time in file name
*
* </pre>
*
@ -116,7 +117,7 @@ public class PrintImageCaptureHandler extends AbstractImageCaptureHandler {
switch (pd.getScope()) {
case PrinterData.ALL_PAGES: {
try {
for (BufferedImage bi : captureAllFrames(editor)) {
for (BufferedImage bi : captureAllFrames(editor).values()) {
printImage(printer, display, bi);
}
} catch (VizException e) {
@ -128,7 +129,7 @@ public class PrintImageCaptureHandler extends AbstractImageCaptureHandler {
case PrinterData.PAGE_RANGE: {
try {
for (BufferedImage bi : captureFrames(editor,
pd.getStartPage() - 1, pd.getEndPage())) {
pd.getStartPage() - 1, pd.getEndPage()).values()) {
printImage(printer, display, bi);
}
} catch (VizException e) {

View file

@ -38,6 +38,7 @@ import com.raytheon.uf.viz.core.datastructure.LoopProperties;
* Jan 20, 2014 2312 bsteffen Initial creation
* Mar 10, 2014 2867 bsteffen Better frame range validation.
* Oct 28, 2014 3767 bsteffen Change default name to screenCapture.png
* Dec 4, 2014 DR16713 jgerth Support for date/time selection
*
* </pre>
*
@ -47,6 +48,10 @@ import com.raytheon.uf.viz.core.datastructure.LoopProperties;
public class ImageExportOptions {
public static enum DateTimeSelection {
DATETIME, SEQUENTIAL;
}
public static enum FrameSelection {
ALL, CURRENT, USER;
}
@ -86,6 +91,8 @@ public class ImageExportOptions {
private FrameSelection frameSelection = FrameSelection.CURRENT;
private DateTimeSelection dateTimeSelection = DateTimeSelection.SEQUENTIAL;
private int firstFrameIndex = 0;
private int lastFrameIndex = 0;
@ -119,6 +126,14 @@ public class ImageExportOptions {
this.imageFormat = imageFormat;
}
public DateTimeSelection getDateTimeSelection() {
return dateTimeSelection;
}
public void setDateTimeSelection(DateTimeSelection dts) {
this.dateTimeSelection = dts;
}
public FrameSelection getFrameSelection() {
return frameSelection;
}

View file

@ -61,6 +61,7 @@
<item mne="MD"/>
<item mne="DMD"/>
<item mne="GFM"/>
<item mne="MBA"/>
<item mne="MRU"/>
<item mne="TVS"/>
<item mne="TRU"/>

View file

@ -188,7 +188,11 @@
<includes
id="com.raytheon.uf.viz.datadelivery.feature"
version="0.0.0"/>
<includes
id="edu.wisc.ssec.cimss.viz.convectprob.feature"
version="0.0.0"/>
<requires>
<import feature="com.raytheon.uf.viz.application.feature" version="1.0.0.qualifier"/>
</requires>

View file

@ -19,6 +19,24 @@
<substitute key="elevation" value="0.5" />
<substitute key="name" value="0.5 Reflectivity" />
</contribute>
<contribute xsi:type="bundleItem" file="bundles/DefaultRadarMosaic.xml"
menuText="0.5 Differential Refl" id="Radar05ZDR">
<substitute key="product" value="159,158" />
<substitute key="elevation" value="0.5" />
<substitute key="name" value="0.5 Diff Reflectivity" />
</contribute>
<contribute xsi:type="bundleItem" file="bundles/DefaultRadarMosaic.xml"
menuText="0.5 Specific Diff Phase" id="Radar05KDP">
<substitute key="product" value="163,162" />
<substitute key="elevation" value="0.5" />
<substitute key="name" value="0.5 Specific Diff Phase" />
</contribute>
<contribute xsi:type="bundleItem" file="bundles/DefaultRadarMosaic.xml"
menuText="0.5 Correlation Coeff" id="Radar05CC">
<substitute key="product" value="161,160" />
<substitute key="elevation" value="0.5" />
<substitute key="name" value="0.5 Correlation Coefficient" />
</contribute>
<contribute xsi:type="bundleItem" file="bundles/DefaultRadarMosaic.xml"
menuText="Hybrid Scan Refl" id="RadarHybridScanRefl">
<substitute key="product" value="32,33" />

View file

@ -3,16 +3,35 @@
<contribute xsi:type="subMenu" menuText="${icao}"
id="${icao}RadarARSR4UnitStatus">
<contribute xsi:type="bundleItem" file="bundles/DefaultRadar.xml"
menuText="${icao} Z" id="${icao}ARSR4Reflectivity\">
menuText="Reflectivity (Z)" id="${icao}ARSR4Reflectivity\">
<substitute key="icao" value="${icao}" />
<substitute key="product" value="500" />
<substitute key="elevation" value="0.0--360.0" />
</contribute>
<contribute xsi:type="bundleItem" file="bundles/DefaultRadar.xml"
menuText="One Hour Precip (OHP)" id="${icao}ARSR4OneHourPrecipOHP">
<substitute key="icao" value="${icao}" />
<substitute key="product" value="78" />
<substitute key="elevation" value="0.0--0.0" />
</contribute>
<contribute xsi:type="bundleItem" file="bundles/DefaultRadar.xml"
menuText="Storm Total Precip (STP)" id="${icao}ARSR4StormTotalPrecipSTP">
<substitute key="icao" value="${icao}" />
<substitute key="product" value="80" />
<substitute key="elevation" value="0.0--0.0" />
</contribute>
<contribute xsi:type="bundleItem" file="bundles/DefaultRadar.xml"
menuText="Hybrid Scan Refl (DHR)" id="${icao}ARSR4HybridScanReflDHR">
<substitute key="icao" value="${icao}" />
<substitute key="product" value="32" />
<substitute key="elevation" value="0.0--0.0" />
</contribute>
<contribute xsi:type="bundleItem" file="bundles/DefaultRadarXY.xml"
id="${icao}ARSR4UnitStatus" editorType="com.raytheon.viz.radar.ui.xy.RadarXYEditor" menuText="ARSR-4 Unit Status">
id="${icao}ARSR4UnitStatus" editorType="com.raytheon.viz.radar.ui.xy.RadarXYEditor"
menuText="ARSR-4 Unit Status">
<substitute key="icao" value="${icao}" />
<substitute key="product" value="2" />
<substitute key="insetMap" value="false"/>
<substitute key="insetMap" value="false" />
</contribute>
</contribute>
</menuTemplate>

View file

@ -3,16 +3,35 @@
<contribute xsi:type="subMenu" menuText="${icao}"
id="${icao}RadarASR11UnitStatus">
<contribute xsi:type="bundleItem" file="bundles/DefaultRadar.xml"
menuText="${icao} Z" id="${icao}ASR11Reflectivity\">
menuText="Reflectivity (Z)" id="${icao}ASR11Reflectivity\">
<substitute key="icao" value="${icao}" />
<substitute key="product" value="550" />
<substitute key="elevation" value="0.0--360.0" />
</contribute>
<contribute xsi:type="bundleItem" file="bundles/DefaultRadar.xml"
menuText="One Hour Precip (OHP)" id="${icao}ASR11OneHourPrecipOHP">
<substitute key="icao" value="${icao}" />
<substitute key="product" value="78" />
<substitute key="elevation" value="0.0--0.0" />
</contribute>
<contribute xsi:type="bundleItem" file="bundles/DefaultRadar.xml"
menuText="Storm Total Precip (STP)" id="${icao}ASR11StormTotalPrecipSTP">
<substitute key="icao" value="${icao}" />
<substitute key="product" value="80" />
<substitute key="elevation" value="0.0--0.0" />
</contribute>
<contribute xsi:type="bundleItem" file="bundles/DefaultRadar.xml"
menuText="Hybrid Scan Refl (DHR)" id="${icao}ASR11HybridScanReflDHR">
<substitute key="icao" value="${icao}" />
<substitute key="product" value="32" />
<substitute key="elevation" value="0.0--0.0" />
</contribute>
<contribute xsi:type="bundleItem" file="bundles/DefaultRadarXY.xml"
id="${icao}ASR11UnitStatus" editorType="com.raytheon.viz.radar.ui.xy.RadarXYEditor" menuText="ASR-11 Unit Status">
id="${icao}ASR11UnitStatus" editorType="com.raytheon.viz.radar.ui.xy.RadarXYEditor"
menuText="ASR-11 Unit Status">
<substitute key="icao" value="${icao}" />
<substitute key="product" value="2" />
<substitute key="insetMap" value="false"/>
<substitute key="insetMap" value="false" />
</contribute>
</contribute>
</menuTemplate>

View file

@ -223,6 +223,14 @@
<substitute key="latest" value="true" />
<substitute key="elevation" value="0.0--360.0" />
</contribute>
<contribute xsi:type="bundleItem" file="bundles/DefaultRadarGraphic.xml"
menuText="Microburst AMDA (MBA)" id="${icao}MicroburstAMDA">
<substitute key="icao" value="${icao}" />
<substitute key="product" value="196" />
<substitute key="mode" value="" />
<substitute key="latest" value="true" />
<substitute key="elevation" value="0.0--360.0" />
</contribute>
<contribute xsi:type="command"
commandId="com.raytheon.viz.radar.ui.RadarDisplayControls" menuText="Radar Display Controls..."
id="${icao}GraphicsRadarDisplayControls" />

View file

@ -0,0 +1,209 @@
/**
* This software was developed and / or modified by Raytheon Company,
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
*
* U.S. EXPORT CONTROLLED TECHNICAL DATA
* This software product contains export-restricted data whose
* export/transfer/disclosure is restricted by U.S. law. Dissemination
* to non-U.S. persons whether in the United States or abroad requires
* an export license or other authorization.
*
* Contractor Name: Raytheon Company
* Contractor Address: 6825 Pine Street, Suite 340
* 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.viz.radar.interrogators;
import java.util.HashMap;
import java.util.Map;
import javax.measure.converter.UnitConverter;
import javax.measure.unit.NonSI;
import javax.measure.unit.SI;
import org.opengis.referencing.operation.MathTransform;
import com.raytheon.uf.common.colormap.prefs.ColorMapParameters;
import com.raytheon.uf.common.dataplugin.radar.RadarDataKey;
import com.raytheon.uf.common.dataplugin.radar.RadarDataPoint;
import com.raytheon.uf.common.dataplugin.radar.RadarRecord;
import com.raytheon.uf.common.dataplugin.radar.level3.MBAPacket.MBAAttributeIDs;
import com.raytheon.uf.common.dataplugin.radar.level3.MBAPacket.MBACategory;
import com.raytheon.uf.common.dataplugin.radar.level3.generic.AreaComponent;
import com.raytheon.uf.common.dataplugin.radar.level3.generic.GenericDataComponent;
import com.raytheon.uf.common.geospatial.CRSCache;
import com.raytheon.viz.radar.ui.RadarDisplayControls;
import com.raytheon.viz.radar.ui.RadarDisplayManager;
import com.vividsolutions.jts.geom.Coordinate;
import com.vividsolutions.jts.geom.Envelope;
/**
* Interrogator class for Radar GFM sampling.
*
* <pre>
*
* SOFTWARE HISTORY
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* 11/06/2014 DCS 16776 zwang Initial creation
*
* </pre>
*
* @author zwang
* @version 1.0
*/
public class RadarMBAInterrogator extends RadarGraphicInterrogator implements
IRadarInterrogator {
public RadarMBAInterrogator() {
super();
}
/*
* (non-Javadoc)
*
* @see
* com.raytheon.viz.radar.interrogators.IRadarInterrogator#sample(com.raytheon
* .edex.plugin.radar.RadarRecord, com.vividsolutions.jts.geom.Coordinate,
* com.raytheon.uf.viz.core.drawables.ColorMapParameters)
*/
@Override
public Map<String, String> sample(RadarRecord record, Coordinate latLon,
ColorMapParameters params) {
Map<String, String> dataMap = new HashMap<String, String>();
if (latLon == null) {
return null;
}
double[] input = { latLon.x, latLon.y }; // rr
double[] output = new double[2]; // rr
try {
MathTransform mt = CRSCache.getInstance().getTransformFromLatLon(
record.getCRS());
mt.transform(input, 0, output, 0, 1);
dataMap.put("crsLocation", output == null ? "-1,-1" : output[0]
+ "," + output[1]);
} catch (Exception e) {
return null;
}
dataMap.put("ICAO", record.getIcao());
dataMap.put("Mnemonic", record.getMnemonic());
addParameters(record, latLon, dataMap);
return dataMap;
}
/*
* (non-Javadoc)
*
* @see
* com.raytheon.viz.radar.interrogators.IRadarInterrogator#addParameters
* (com.raytheon.uf.common.dataplugin.radar.RadarRecord,
* com.vividsolutions.jts.geom.Coordinate, java.util.Map)
*/
@Override
public int addParameters(RadarRecord radarRecord, Coordinate latLon,
Map<String, String> dataMap) {
dataMap.put("Value", getDataValues(radarRecord, latLon));
return 0;
}
private String getDataValues(RadarRecord radarRecord, Coordinate latLon) {
StringBuffer rval = new StringBuffer();
Coordinate c1 = new Coordinate(latLon.x + .025, latLon.y + .025);
Coordinate c2 = new Coordinate(latLon.x - .025, latLon.y - .025);
Envelope env = new Envelope(c1, c2);
UnitConverter metersPerSecondToKnots = SI.METERS_PER_SECOND
.getConverterTo(NonSI.KNOT);
// Determine if the feature should be sampled
RadarDisplayControls currentSettings = RadarDisplayManager
.getInstance().getCurrentSettings();
if (radarRecord.getProductCode() == 196) {
for (RadarDataKey key : radarRecord.getSymbologyData().keySet()) {
Coordinate currStorm = new Coordinate(key.getLon(),
key.getLat());
if (env.contains(currStorm)) {
// Get the data for the select feature
RadarDataPoint currPoint = radarRecord.getSymbologyData()
.get(key);
AreaComponent currFeature;
HashMap<Integer, HashMap<Integer, GenericDataComponent>> currPointData = currPoint
.getDisplayGenericPointData();
for (Integer type : currPointData.keySet()) {
for (GenericDataComponent currComp : currPointData.get(
type).values()) {
currFeature = (AreaComponent) currComp;
// Category: CATEGORY
String category = currFeature
.getValue(MBAAttributeIDs.CATEGORY
.toString());
// if MBA is filtered out by category, do not sample
int catValue = category.equals("") ? 0 : Integer
.parseInt(category);
// By default, do not show MBA Wind Shear
int minCat = 1;
if (currentSettings.isMbaShowWindShear())
minCat = 0;
if (catValue >= minCat) {
// Microburst strength: DELTAV
String strength = currFeature
.getValue(MBAAttributeIDs.DELTAV.toString());
if ((strength != null) && (strength.length() > 0)) {
double strengthValue = metersPerSecondToKnots
.convert(new Double(strength));
strength = String.format("%dkts", (int) strengthValue);
}
// Maximum wind speed: MAXWINDSPEED
String maxSpeed = currFeature
.getValue(MBAAttributeIDs.MAXWINDSPEED
.toString());
if ((maxSpeed != null) && (maxSpeed.length() > 0)) {
double spdValue = metersPerSecondToKnots
.convert(new Double(maxSpeed));
maxSpeed = String.format("%dkts", (int) spdValue);
}
// Maximum shear: MAXSHEAR
String maxShear = currFeature
.getValue(MBAAttributeIDs.MAXSHEAR
.toString());
if ((maxShear != null) && (maxShear.length() > 0)) {
double shearValue = new Double(maxShear);
maxShear = String.format("%.4f/s", shearValue);
}
rval.append(MBACategory.getCatName(catValue));
rval.append(" " + maxShear);
rval.append(" maxV " + maxSpeed);
rval.append(" deltaV " + strength);
}
}
}
}
}
}
return rval.toString();
}
}

View file

@ -34,6 +34,7 @@ import com.raytheon.viz.radar.interrogators.RadarGFMInterrogator;
import com.raytheon.viz.radar.interrogators.RadarDefaultInterrogator;
import com.raytheon.viz.radar.interrogators.RadarEETInterrogator;
import com.raytheon.viz.radar.interrogators.RadarGraphicInterrogator;
import com.raytheon.viz.radar.interrogators.RadarMBAInterrogator;
import com.raytheon.viz.radar.interrogators.RadarPrecipInterrogator;
import com.raytheon.viz.radar.interrogators.RadarRadialInterrogator;
import com.raytheon.viz.radar.interrogators.RadarRasterInterrogator;
@ -60,6 +61,7 @@ import com.raytheon.viz.radar.ui.xy.RadarXsectXYResource;
* Aug 4, 2010 mnash Initial creation
* 03/04/2013 DCS51 zwang Handle GFM product
* 05/02/2013 DR 14587 D. Friedman Add isVelocityProductCode
* 09/26/2014 DCS16776 zwang Add product Microburst AMDA (MBA)
*
* </pre>
*
@ -99,6 +101,9 @@ public class RadarProductFactory {
}
else if (productCode == 140) {
interrogator = new RadarGFMInterrogator();
}
else if (productCode == 196) {
interrogator = new RadarMBAInterrogator();
} else {
interrogator = new RadarGraphicInterrogator();
}

View file

@ -41,6 +41,7 @@ import com.raytheon.uf.common.dataplugin.radar.level3.DMDPacket.DMDAttributeIDs;
import com.raytheon.uf.common.dataplugin.radar.level3.GFMPacket;
import com.raytheon.uf.common.dataplugin.radar.level3.HdaHailPacket.HdaHailPoint;
import com.raytheon.uf.common.dataplugin.radar.level3.LinkedVector;
import com.raytheon.uf.common.dataplugin.radar.level3.MBAPacket.MBAAttributeIDs;
import com.raytheon.uf.common.dataplugin.radar.level3.MesocyclonePacket.MesocyclonePoint;
import com.raytheon.uf.common.dataplugin.radar.level3.SCITDataPacket;
import com.raytheon.uf.common.dataplugin.radar.level3.SCITDataPacket.SCITDataCell;
@ -107,6 +108,7 @@ import com.vividsolutions.jts.geom.LineString;
* Aug 11, 2014 3504 mapeters Replaced deprecated IODataPreparer
* instances with IRenderedImageCallback.
* Sep 03, 2014 3574 njensen Properly dispose objects
* Nov 06, 2014 16776 zwang Handle AMDA product MBA
*
* </pre>
*
@ -443,6 +445,15 @@ public class RadarGraphicsPage implements IRenderable {
}
}
}
// MBA
else if (type == 196) {
// Handle each Feature in the MBA Packet
for (GenericDataComponent currComponent : stormData
.getDisplayGenericPointData().get(type).values()) {
// Handle Graphic portion
drawMbaImage(currComponent);
}
}
}
// Only display storm id if other information is being displayed
@ -973,6 +984,50 @@ public class RadarGraphicsPage implements IRenderable {
return images;
}
// Handle MBA product
private void drawMbaImage(GenericDataComponent currPt)
throws VizException {
double x, y;
Coordinate point;
// Determine if the feature should be rendered
RadarDisplayControls currentSettings = RadarDisplayManager
.getInstance().getCurrentSettings();
AreaComponent currFeature = (AreaComponent) currPt;
String cat = currFeature.getValue(MBAAttributeIDs.CATEGORY
.getName());
int catValue = cat.equals("") ? 0 : Integer.parseInt(cat);
// By default, do not show MBA Wind Shear
int minCat = 1;
if (currentSettings.isMbaShowWindShear())
minCat = 0;
if (catValue >= minCat) {
int numPoints = currFeature.getPoints().size();
Coordinate[] points = new Coordinate[numPoints];
// Draw Microburst cell
try {
for (int k = 0; k < numPoints; k++) {
x = currFeature.getPoints().get(k).getCoordinate1();
y = currFeature.getPoints().get(k).getCoordinate2();
// convert xy to latlon
point = referencedGfmCoord(x, y).asLatLon();
points[k] = point;
}
wireframeShape.addLineSegment(points);
} catch (TransformException e) {
throw new VizException(e);
} catch (FactoryException e) {
throw new VizException(e);
}
}
}
private PlotObject getImage(HdaHailPoint currPt) throws VizException {
PlotObject image = null;

View file

@ -0,0 +1,33 @@
package com.raytheon.viz.radar.textcontributors;
import com.raytheon.uf.common.dataplugin.radar.RadarRecord;
/**
*
* Display "SAILS" at upper text for SAILS products
*
* <pre>
*
* SOFTWARE HISTORY
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* 07/08/2014 DR17356 zwang Initial creation
*
* </pre>
*
* @author zwang
* @version 1.0
*/
public class SailsTextContributor implements IRadarTextContributor {
@Override
public String contributeText(RadarRecord record) {
String sailsStr = "";
if (record.getPrimaryElevationAngle() <= 0.5 && record.getElevationNumber() > 2)
sailsStr = "SAILS";
return sailsStr;
}
}

View file

@ -39,6 +39,7 @@ import javax.xml.bind.annotation.XmlElements;
* ------------ ---------- ----------- --------------------------
* Sep 7, 2010 bsteffen Initial creation
* 03/05/2013 DCS51 zwang Handle GFM product
* 07/08/2013 DR17356 zwang Tag SAILS product
*
* </pre>
*
@ -60,6 +61,7 @@ public class UpperText {
@XmlElement(name = "productDependentDate", type = ProdDepDateTextContributor.class),
@XmlElement(name = "productDependentUSPMax", type = USPMaxTextContributor.class),
@XmlElement(name = "productDependentDVLMax", type = DigitalVilMaxTextContributor.class),
@XmlElement(name = "sails", type = SailsTextContributor.class),
@XmlElement(name = "gfmCount", type = GfmTextContributor.class),
@XmlElement(name = "srmMovement", type = SrmMovementTextContributor.class),
@XmlElement(name = "srmSource", type = SrmSourceTextContributor.class) })

View file

@ -53,6 +53,7 @@ import com.raytheon.viz.ui.dialogs.CaveSWTDialog;
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* 04 DEC 2007 373 lvenable Initial creation
* 06 Nov 2014 DCS 16776 zwang Add control for MBA
*
* </pre>
*
@ -127,6 +128,11 @@ public class RadarDisplayControlDlg extends CaveSWTDialog {
*/
private Scale minFeatureScale;
/**
* Show MBA Wind Shear check box.
*/
private Button showMbaWindShear;
/**
* Overlap Mesos check box.
*/
@ -224,6 +230,8 @@ public class RadarDisplayControlDlg extends CaveSWTDialog {
addSeparator();
createDmdControls();
addSeparator();
createMbaControls();
addSeparator();
createSrmControls();
createCustomStormMotionGroup();
createCloseButton();
@ -273,6 +281,7 @@ public class RadarDisplayControlDlg extends CaveSWTDialog {
overlapMesosChk.setSelection(values.isDmdShowOverlapping());
dmdTrackToShowCbo.select(dmdTrackToShowCbo.indexOf(values
.getDmdTrackType().toString()));
showMbaWindShear.setSelection(values.isMbaShowWindShear());
stormMotionRdo.setSelection(values.getSrmSource().equals(
RadarSRMResource.SRMSource.WARNGEN));
averageStormRdo.setSelection(values.getSrmSource().equals(
@ -660,6 +669,31 @@ public class RadarDisplayControlDlg extends CaveSWTDialog {
});
}
/**
* Create the MBA controls.
*/
private void createMbaControls() {
Composite mbaComp = new Composite(shell, SWT.NONE);
GridLayout gl = new GridLayout(2, false);
mbaComp.setLayout(gl);
GridData gd = new GridData(60, SWT.DEFAULT);
Label mbaLbl = new Label(mbaComp, SWT.NONE);
mbaLbl.setFont(labelFont);
mbaLbl.setForeground(getDisplay().getSystemColor(SWT.COLOR_BLUE));
mbaLbl.setText("MBA");
mbaLbl.setLayoutData(gd);
showMbaWindShear = new Button(mbaComp, SWT.CHECK);
showMbaWindShear.setText("Show Wind Shear");
showMbaWindShear.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
values.setMbaShowWindShear(showMbaWindShear.getSelection());
}
});
}
/**
* Create the SRM radio button controls.
*/

View file

@ -29,7 +29,7 @@ import com.raytheon.viz.radar.ui.RadarDisplayManager.TrackTypes;
* SOFTWARE HISTORY
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
*
* 11/06/2014 DCS 16776 zwang Add control for MBA
*
* </pre>
*
@ -59,6 +59,8 @@ public class RadarDisplayControls {
private boolean dmdShowOverlapping;
private TrackTypes dmdTrackType = TrackTypes.PAST_AND_FORECAST;
private boolean mbaShowWindShear;
private SRMSource srmSource;
@ -201,6 +203,25 @@ public class RadarDisplayControls {
}
}
/**
* @return the mbaShowWindShear
*/
public boolean isMbaShowWindShear() {
return mbaShowWindShear;
}
/**
* @param mbaShowWindShear
* the mbaShowWindShear to set
*/
public void setMbaShowWindShear(boolean mbaShowWindShear) {
if (mbaShowWindShear != this.mbaShowWindShear) {
this.mbaShowWindShear = mbaShowWindShear;
RadarDisplayManager.getInstance().displayConfigUpdated();
}
}
/**
* @return the srmSource
*/

View file

@ -19,8 +19,32 @@
further_licensing_information.
-->
<menuTemplate xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<contribute xsi:type="menuItem" menuText="Tstorm Prob"
key="ThP" indentText="false" />
<contribute xsi:type="menuItem" menuText="Tstorm Occr"
key="CTSTM" indentText="false" />
</menuTemplate>
<contribute xsi:type="menuItem" menuText="Temperature" key="T"
indentText="false" />
contribute xsi:type="menuItem" menuText="Temp Anl Uncertainty"
key="Terranl" indentText="true" />
<contribute xsi:type="menuItem" menuText="Dewpoint" key="DpT"
indentText="true" />
<contribute xsi:type="menuItem" menuText="DpT Anl Uncertainty"
key="DpTerranl" indentText="true" />
<contribute xsi:type="menuItem" menuText="Wind" key="Wind"
indentText="false" />
<contribute xsi:type="menuItem" menuText="Wind Speed" key="wSp"
indentText="true" />
<contribute xsi:type="menuItem" menuText="WSp Anl Uncertainty"
key="wSpea" indentText="true" />
<contribute xsi:type="menuItem" menuText="Visibility" key="Vis"
indentText="false" />
<contribute xsi:type="menuItem" menuText="Sky Cover" key="TCC"
indentText="false" />
<contribute xsi:type="menuItem" menuText="Ceiling Height" key="CC"
indentText="false" />
<contribute xsi:type="menuItem" menuText="Convection Prob"
key="PROCON2hr" indentText="false" />
<contribute xsi:type="menuItem" menuText="Convection Occr"
key="CONVP2hr" indentText="false" />
<contribute xsi:type="menuItem" menuText="Lightning Prob"
key="PROLGHT2hr" indentText="false" />
<contribute xsi:type="menuItem" menuText="Lightning Occr"
key="CLGTN2hr" indentText="false" />
</menuTemplate>

View file

@ -41,7 +41,7 @@
<vbSource key="GFE" category="SfcGrid" views="PLANVIEW TIMESERIES" />
<vbSource key="GFS199" category="SfcGrid" views="PLANVIEW TIMESERIES" />
<vbSource key="GFSGuide" category="SfcGrid" views="PLANVIEW TIMESERIES" />
<vbSource key="GFSLAMPTstorm" name="GFSLAMP-Grid" category="SfcGrid"
<vbSource key="GFSLAMPGrid" name="GFSLAMPGrid" category="SfcGrid"
views="PLANVIEW TIMESERIES" />
<vbSource key="GLERL" category="SfcGrid" views="PLANVIEW TIMESERIES" />
<vbSource key="GlobalWave" category="SfcGrid" views="PLANVIEW TIMESERIES" />
@ -52,6 +52,7 @@
<vbSource key="Guam-RTMA" category="SfcGrid" views="PLANVIEW TIMESERIES" />
<vbSource key="GWW233" category="SfcGrid" views="PLANVIEW TIMESERIES" />
<vbSource key="HurWind250" category="SfcGrid" views="PLANVIEW TIMESERIES" />
<vbSource key="HI-MOSGuide" category="SfcGrid" views="PLANVIEW TIMESERIES" />
<vbSource key="HI-NamDNG5" category="SfcGrid" views="PLANVIEW TIMESERIES" />
<vbSource key="HI-RTMA" category="SfcGrid" views="PLANVIEW TIMESERIES" />
<vbSource key="HPCqpfNDFD" category="SfcGrid" views="PLANVIEW TIMESERIES" />
@ -152,4 +153,4 @@
<vbSource key="WNAwave10" category="SfcGrid" views="PLANVIEW TIMESERIES" />
<vbSource key="WNAwave4" category="SfcGrid" views="PLANVIEW TIMESERIES" />
<vbSource key="WPHwave10" category="SfcGrid" views="PLANVIEW TIMESERIES" />
</vbSourceList>
</vbSourceList>

View file

@ -87,6 +87,7 @@ import com.vividsolutions.jts.geom.prep.PreparedGeometryFactory;
* Mar 10, 2014 2832 njensen Moved duplicated subclass's disposeInternal() logic here
* Aug 14, 2014 3523 mapeters Updated deprecated {@link DrawableString#textStyle}
* assignments.
* Dec 5, 2014 DR14944 jgerth Only set outline width when there is no existing capability
*
* </pre>
*
@ -177,7 +178,9 @@ public abstract class AbstractWWAResource extends
super(data, props);
this.recordsToLoad = new ArrayList<AbstractWarningRecord>();
resourceData.addChangeListener(this);
getCapability(OutlineCapability.class).setOutlineWidth(2);
if (!hasCapability(OutlineCapability.class)) {
getCapability(OutlineCapability.class).setOutlineWidth(2);
}
color = getCapability((ColorableCapability.class)).getColor();
this.entryMap = new ConcurrentHashMap<String, WarningEntry>();
}

View file

@ -0,0 +1,7 @@
<?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

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>gov.noaa.nws.crh.edex.grib.decoderpostprocessor</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

@ -0,0 +1,15 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Gribpostprocessor
Bundle-SymbolicName: gov.noaa.nws.crh.edex.grib.decoderpostprocessor
Bundle-Version: 1.0.0.qualifier
Bundle-Vendor: CRH
Require-Bundle: com.raytheon.edex.common,
com.raytheon.edex.plugin.grib,
com.raytheon.uf.common.dataplugin,
com.raytheon.uf.common.dataplugin.grid,
com.raytheon.uf.common.parameter,
com.raytheon.uf.edex.plugin.grid,
com.raytheon.uf.common.datastorage,
javax.measure
Bundle-RequiredExecutionEnvironment: JavaSE-1.6

View file

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

View file

@ -0,0 +1,208 @@
package gov.noaa.nws.crh.edex.grib.decoderpostprocessor;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import com.raytheon.edex.plugin.grib.exception.GribException;
import com.raytheon.uf.common.dataplugin.PluginException;
import com.raytheon.uf.common.dataplugin.grid.GridConstants;
import com.raytheon.uf.common.dataplugin.grid.GridRecord;
import com.raytheon.uf.common.dataquery.db.QueryParam.QueryOperand;
import com.raytheon.uf.edex.database.DataAccessLayerException;
import com.raytheon.uf.edex.database.query.DatabaseQuery;
import com.raytheon.uf.edex.plugin.grid.dao.GridDao;
/**
* Grib post processor implementation to generate 1-hr precipitation grids from
* the cycling (1-hr, 2-hr, 3-hr, 1-hr, 2-hr, 3-hr, etc.) precip grids in the
* NAM Nest output.
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------- -------- ----------- --------------------------
* Sep 05, 2014 M. Foster Initial Creation
*
*
* </pre>
*
* @author matthew.foster
* @version 1.0
*/
public class NamNestPostProcessor extends OneHrPrecipGridProcessor {
@Override
public GridRecord[] process(GridRecord record) throws GribException {
// Post process the data if this is a Total Precipitation grid
if (record.getParameter().getAbbreviation().equals("TP2hr") ||
record.getParameter().getAbbreviation().equals("TP3hr")) {
return super.process(record);
}
return new GridRecord[] { record };
}
/**
* Retrieves a grid inventory for the provided datasetid and parameter
*
* @param datasetid
* The datasetid of the model being worked on
* @param parm
* The parameter being retrieved (e.g. TP3hr)
* @param refTime
* The refTime (cycle time) of the model
* @return A List of GridRecord
* @throws GribException
*/
@SuppressWarnings("unchecked")
protected List<GridRecord> getPrecipInventory(String datasetid,
String parm, Date refTime) throws GribException {
GridDao dao = null;
try {
dao = new GridDao();
} catch (PluginException e) {
throw new GribException("Error instantiating grib dao!", e);
}
DatabaseQuery query = new DatabaseQuery(GridRecord.class);
query.addQueryParam(GridConstants.PARAMETER_ABBREVIATION, parm);
query.addQueryParam(GridConstants.DATASET_ID, datasetid);
query.addQueryParam("dataTime.refTime", refTime);
query.addOrder("dataTime.fcstTime", true);
try {
return (List<GridRecord>) dao.queryByCriteria(query);
} catch (DataAccessLayerException e) {
throw new GribException(
String.format("Error getting Precip inventory for %s!",
datasetid), e);
}
}
/**
*
* @param refTime
* The reftime (cycle time) of the model being worked on
* @return List of Integer of the fcstTimes of the current 1hr precip
* inventory
* @throws GribException
*/
@SuppressWarnings("unchecked")
protected HashSet<Integer> getPrecip1hrInventory(String datasetId, Date refTime)
throws GribException {
GridDao dao = null;
try {
dao = new GridDao();
} catch (PluginException e) {
throw new GribException("Error instantiating grib dao!", e);
}
DatabaseQuery query = new DatabaseQuery(GridRecord.class);
query.addQueryParam(GridConstants.PARAMETER_ABBREVIATION, "TP1hr");
query.addQueryParam(GridConstants.DATASET_ID, datasetId,
QueryOperand.EQUALS);
query.addQueryParam("dataTime.refTime", refTime);
query.addReturnedField("dataTime.fcstTime");
query.setDistinct(true);
try {
return new HashSet<Integer>((List<Integer>) dao.queryByCriteria(query));
} catch (DataAccessLayerException e) {
throw new GribException(
"Error getting Precip inventory for NAMNest!", e);
}
}
/**
* Generates the 1 hour accumulated grid from the run accumulated
* precipitation grids. This function will look in the inventory and
* generate any 1 hr grids that can be generated.
*
* @param record
* The grib record for which to generate the 1 hour accumulated
* precipitation grid
* @return The generated 1-hr precipitation grids
* @throws GribException
*/
protected synchronized GridRecord[] generate1hrPrecipGrids(GridRecord record)
throws GribException {
List<GridRecord> currInventory;
List<GridRecord> prevInventory;
HashSet<Integer> precip1hrInventory;
if (record.getParameter().getAbbreviation().equals("TP3hr")) {
// Get an inventory of TP3hr grids
currInventory = getPrecipInventory(record.getDatasetId(), "TP3hr",
record.getDataTime().getRefTime());
// Get an inventory of TP2hr grids
prevInventory = getPrecipInventory(record.getDatasetId(), "TP2hr",
record.getDataTime().getRefTime());
// The current 1hr precip inventory
precip1hrInventory = getPrecip1hrInventory(record.getDatasetId(),
record.getDataTime().getRefTime());
} else if (record.getParameter().getAbbreviation().equals("TP2hr")) {
// Get an inventory of TP2hr grids
currInventory = getPrecipInventory(record.getDatasetId(), "TP2hr",
record.getDataTime().getRefTime());
// Get an inventory of TP1hr grids
prevInventory = getPrecipInventory(record.getDatasetId(), "TP1hr",
record.getDataTime().getRefTime());
precip1hrInventory = new HashSet<Integer>();
for (GridRecord rec : prevInventory) {
precip1hrInventory.add(rec.getDataTime().getFcstTime());
}
} else {
throw new GribException("Didn't get TP3hr or TP2hr grid");
}
// Adds the current record to the precip inventory
float[] currentData = (float[]) record.getMessageData();
record.setMessageData(currentData);
currInventory.add(record);
// Examine each grid in the inventory and generate the 1hr precipitation
// grid if possible
List<GridRecord> generatedRecords = new ArrayList<GridRecord>();
for (GridRecord currRecord : currInventory) {
// Check if the 1hr precipitation grid has already been produced
if (! precip1hrInventory.contains(currRecord.getDataTime()
.getFcstTime())) {
List<GridRecord> generated1hrPrecips = generate1hrPrecip(
currRecord, prevInventory);
for (GridRecord newRecord : generated1hrPrecips) {
// Add the generated grid to the current inventory
if (newRecord != null) {
precip1hrInventory.add(newRecord.getDataTime()
.getFcstTime());
generatedRecords.add(newRecord);
}
}
}
}
return generatedRecords.toArray(new GridRecord[] {});
}
/**
* Calculates the new data by subtracting the previous inventory data from
* the current data
*
* @param inventoryData
* The data from the previous precipitation record
* @param newData
* The data from the current precipitation record
*/
protected void calculatePrecipValues(float[] inventoryData, float[] newData) {
for (int i = 0; i < inventoryData.length; i++) {
newData[i] = newData[i] - inventoryData[i];
if (newData[i] < 0) {
newData[i] = 0;
}
}
}
}

View file

@ -0,0 +1,184 @@
package gov.noaa.nws.crh.edex.grib.decoderpostprocessor;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import com.raytheon.edex.plugin.grib.decoderpostprocessors.IDecoderPostProcessor;
import com.raytheon.edex.plugin.grib.exception.GribException;
import com.raytheon.uf.common.dataplugin.PluginException;
import com.raytheon.uf.common.dataplugin.grid.GridRecord;
import com.raytheon.uf.common.datastorage.records.FloatDataRecord;
import com.raytheon.uf.common.parameter.Parameter;
import com.raytheon.uf.common.time.DataTime;
import com.raytheon.uf.common.time.TimeRange;
import com.raytheon.uf.edex.plugin.grid.dao.GridDao;
/**
* Abstract class to generate 1-hour precip grids
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------- -------- ------------- --------------------------
* Sep 05, 2014 M. Foster Initial creation
*
* </pre>
*
* @author matthew.foster
* @version 1.0
*
*/
public abstract class OneHrPrecipGridProcessor implements IDecoderPostProcessor {
/** The number of seconds in 1 hour */
protected static final int SECONDS_IN_1_HR = 3600;
public GridRecord[] process(GridRecord record) throws GribException {
// Post process the data if this is a 2hr or 3hr precip accumulation
GridRecord[] newRecords = generate1hrPrecipGrids(record);
GridRecord[] retVal = new GridRecord[newRecords.length + 1];
retVal[0] = record;
for (int i = 1; i < retVal.length; i++) {
retVal[i] = newRecords[i - 1];
}
return retVal;
}
protected abstract GridRecord[] generate1hrPrecipGrids(GridRecord record)
throws GribException;
/**
* Generates the 1hr precipitation grid
*
* @param record
* The current record to clone and modify to produce the new 1hr
* grid
* @param precipInventory
* The current run accumulated grid inventory
* @return The generated 1hr precipitation grid
* @throws GribException
*/
protected List<GridRecord> generate1hrPrecip(GridRecord record,
List<GridRecord> precipInventory)
throws GribException {
List<GridRecord> tp1hrRecords = new ArrayList<GridRecord>();
int currentFcstTime = record.getDataTime().getFcstTime();
for (GridRecord rec : precipInventory) {
if (rec.getDataTime().getFcstTime() == (currentFcstTime - SECONDS_IN_1_HR)) {
tp1hrRecords.add(calculate1hrPrecip(rec, record));
}
}
return tp1hrRecords;
}
/**
* Generates the 1hr precipitation grid from the current grid and the
* previous grid
*
* @param inventoryRecord
* The previous grid from the inventory
* @param currentRecord
* The current grid
* @return The generated 1hr precipitation grid
* @throws GribException
*/
protected GridRecord calculate1hrPrecip(GridRecord inventoryRecord,
GridRecord currentRecord) throws GribException {
// Clone the current record and set the ID to 0 so Hibernate will
// recognize it as a new record
GridRecord tp1hrRecord = new GridRecord(currentRecord);
tp1hrRecord.setId(0);
if (currentRecord.getMessageData() == null) {
GridDao dao = null;
try {
dao = new GridDao();
currentRecord.setMessageData(((FloatDataRecord) dao
.getHDF5Data(currentRecord, -1)[0]).getFloatData());
} catch (PluginException e) {
throw new GribException("Error populating grib data!", e);
}
}
// Copy the data to the new record so the data from the original record
// does not get modified
float[] currentData = (float[]) currentRecord.getMessageData();
currentRecord.setMessageData(currentData);
float[] newData = new float[currentData.length];
System.arraycopy(currentData, 0, newData, 0, currentData.length);
tp1hrRecord.setMessageData(newData);
// Assign the new parameter abbreviation and cache it if necessary
Parameter param = new Parameter("TP1hr", "Precip Accum 1 hr",
currentRecord.getParameter().getUnit());
tp1hrRecord.setParameter(param);
tp1hrRecord.getInfo().setId(null);
// Change the data time to include the 1-hr time range
modifyDataTime(tp1hrRecord);
// Calculate the new data values
if (inventoryRecord != null) {
if (inventoryRecord.getMessageData() == null) {
GridDao dao = null;
try {
dao = new GridDao();
inventoryRecord
.setMessageData(((FloatDataRecord) dao.getHDF5Data(
inventoryRecord, 0)[0]).getFloatData());
} catch (PluginException e) {
throw new GribException("Error populating grib data!", e);
}
}
calculatePrecipValues((float[]) inventoryRecord.getMessageData(),
(float[]) tp1hrRecord.getMessageData());
}
return tp1hrRecord;
}
/**
* Calculates the new data by subtracting the previous inventory data from
* the current data
*
* @param inventoryData
* The data from the previous precipitation record
* @param newData
* The data from the current precipitation record
*/
protected abstract void calculatePrecipValues(float[] messageData,
float[] messageData2);
/**
* Modifies the DataTime of the provided record to include a 1hr time range
*
* @param record
* The record to modify the datatime for
*/
protected void modifyDataTime(GridRecord record) {
Calendar refTime = record.getDataTime().getRefTimeAsCalendar();
int fcstTime = record.getDataTime().getFcstTime();
// Calculate the start time by subtracting 1 hour from the reference
// time + forecast time
Calendar startTime = (Calendar) refTime.clone();
startTime.add(Calendar.SECOND, fcstTime - SECONDS_IN_1_HR);
// Calculate the end time by adding the reference time + forecast time
Calendar endTime = (Calendar) refTime.clone();
endTime.add(Calendar.SECOND, fcstTime);
TimeRange validPeriod = new TimeRange(startTime, endTime);
DataTime newDataTime = new DataTime(refTime, fcstTime, validPeriod);
// Reset the datauri since the datauri contains the DataTime
record.setDataTime(newDataTime);
record.setDataURI(null);
}
}

View file

@ -1,9 +1,9 @@
edex.root.directory=/awips2/edex
architecture=x86_64
includegen.filter=raytheon|noaa\.nws|noaa\.gsd
includegen.filter=raytheon|noaa\.nws|noaa\.gsd|gov\.nasa\.msfc|edu\.wisc\.ssec\.cimss
# AWIPSII core repositores required for build
# AWIPSII core repositories required for build
core.repositories=ufcore,ufcore-foss,AWIPS2_foss
# Note: currently, there is a limit of 99 plugin directories.
@ -22,6 +22,8 @@ dir.11=features
dir.12=viz
# directories from ufcore-foss
dir.13=lib
# CIMSS plug-in directory
dir.14=CIMSS
# the directory that contains the localization projects

View file

@ -71,12 +71,12 @@
<includes
id="com.raytheon.uf.edex.archive.feature"
version="0.0.0"/>
<!-- Comment out this include before checking in. This plugin only for debugging. -->
<!--
<includes
id="com.raytheon.uf.edex.archive.feeder.feature"
version="0.0.0"/>
version="0.0.0"/>
-->
<includes
@ -107,7 +107,7 @@
id="com.raytheon.uf.edex.ncep.feature"
version="0.0.0"/>
<!-- Uncomment to deploy the National Central Operations EDEX plugins locally -->
<!-- Uncomment to deploy the National Central Operations EDEX plugins locally -->
<!-- includes
id="com.raytheon.uf.edex.ncep.nco.feature"
version="0.0.0"/-->
@ -119,7 +119,7 @@
<includes
id="com.raytheon.uf.edex.ost.feature"
version="0.0.0"/>
<includes
id="com.raytheon.uf.edex.npp.feature"
version="0.0.0"/>
@ -136,4 +136,12 @@
id="com.raytheon.uf.edex.remote.script.feature"
version="0.0.0"/>
<includes
id="gov.nasa.msfc.sport.edex.sportlma.feature"
version="0.0.0"/>
<includes
id="edu.wisc.ssec.cimss.edex.convectprob.feature"
version="0.0.0"/>
</feature>

View file

@ -134,14 +134,15 @@ public class BinLightningDecoder extends AbstractDecoder {
private static DecryptedLightningValidator validator = new DecryptedLightningValidator() {
@Override
public boolean isValid(byte[] decryptedData) {
return BinLightningDecoderUtil.isKeepAliveRecord(decryptedData) == false
&& BinLightningDecoderUtil
.isLightningDataRecords(decryptedData) == false;
return BinLightningDecoderUtil.isKeepAliveRecord(decryptedData)
|| BinLightningDecoderUtil
.isLightningDataRecords(decryptedData);
/*
* use this if keep-alive record could be mixed with lightning
* records
*/
// return BinLigntningDecoderUtil.isValidMixedRecordData(decryptedData) == false
// return
// BinLigntningDecoderUtil.isValidMixedRecordData(decryptedData);
}
};

View file

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<aliasList caseSensitive="true" namespace="gfeParamInfo">
<alias base="MOSGuide-HI">mosGuideNDFD</alias>
<alias base="GFS217">gfs20km</alias>
<alias base="GFS215">gfs20km</alias>
<alias base="GFS20-PAC">gfs20km</alias>
@ -166,7 +167,7 @@
<alias base="OPCWave182">opcWave182</alias>
<alias base="MOSGuide">mosGuideNDFD</alias>
<alias base="MOSGuide-AK">mosGuideNDFD_AK</alias>
<alias base="GFSLAMPTstorm">lampNDFD</alias>
<alias base="GFSLAMPGrid">lampNDFD</alias>
<alias base="TPCSurgeProb">TPCSurgeProb</alias>
<alias base="TPCSurgeProb197">TPCSurgeProb</alias>
<alias base="TPCSurgeProb-AK">TPCSurgeProb</alias>

View file

@ -7,6 +7,7 @@
Jul 03, 2013 #2044 randerso Removed mappings from tpXXX to tp_XXX for RFCQPF
Mar 31, 2014 #2934 dgilling Updated params for pSurge2.0/PHISH data.
Jul 03, 2014 DR 14068 mfoster Added parameters for 3km AK-RTMA
Dec 15, 2014 DR 14024 jwatson Added parameters for 2.5km GFSLAMPGrid
-->
<aliasList caseSensitive="true" namespace="gfeParamName">
<alias base="AV">av</alias>
@ -132,6 +133,8 @@
<alias base="Cigc1">cigc1</alias>
<alias base="Cigc2">cigc2</alias>
<alias base="Cigc3">cigc3</alias>
<alias base="CLGTN">clgtn</alias>
<alias base="CONVP">convp</alias>
<alias base="CP2hr">cp2hr</alias>
<alias base="CPVV">cpvv</alias>
<alias base="CRAINc1">crainc1</alias>
@ -221,6 +224,8 @@
<alias base="Prob34">prob34</alias>
<alias base="Prob50">prob50</alias>
<alias base="Prob64">prob64</alias>
<alias base="PROCON">procon</alias>
<alias base="PROLGHT">prolght</alias>
<alias base="PTAM">ptam</alias>
<alias base="PTAN">ptan</alias>
<alias base="PTA">pta</alias>

View file

@ -390,6 +390,9 @@ ExtraWEPrecision = []
AstroTide = ("AstroTide", SCALAR, "ft", "Astro Tide", 20.0, -8.0, 1, NO)
StormSurge = ("StormSurge", SCALAR, "ft", "Storm Surge", 30.0, -5.0, 1, NO)
# Parm for Aviation/GFSLAMPGrid
ClgHgt=("ClgHgt",SCALAR,"ft","Ceiling Height",25000.0,-100.0,0,NO)
#---------------------------------------------------------------------------
#
# Weather configuration section
@ -1096,6 +1099,7 @@ NamDNG5 = ('NamDNG5', GRID, '', NO, NO, 2, 0)
TPCProb = ('TPCProb', GRID, '', NO, NO, 30, 0)
SREF = ('SREF', GRID, '', NO, NO, 3, 0)
ENPwave = ('ENPwave', GRID, '', NO, NO, 2, 0)
GFSLAMPGrid = ('GFSLAMPGrid', GRID, '', NO, NO, 3, 0)
#---------------------------------------------------------------------------
#
# D2D Model Database Version Specification
@ -1182,6 +1186,7 @@ elif SID == "HFO":
'WPHwave10',
'NPHwave4',
'GLOBHwave',
('MOSGuide-HI', 'MOSGuide'),
('nwpsCG1', 'nwpsCG1'),
('nwpsTrkngCG0', 'nwpsTrkngCG0'),
('GFS20-PAC', 'GFS20'),
@ -1294,6 +1299,7 @@ elif SID in CONUS_EAST_SITES:
'GLOBHwave',
'URMA25',
('GFS215', 'GFS20'),
'GFSLAMPGrid',
('FFG-ALR', 'FFGALR'),
('FFG-FWR', 'FFGFWR'),
('FFG-KRF', 'FFGKRF'),
@ -1369,6 +1375,7 @@ else: #######DCS3501 WEST_CONUS
'GLOBHwave',
'URMA25',
('GFS215', 'GFS20'),
'GFSLAMPGrid',
('FFG-ALR', 'FFGALR'),
('FFG-FWR', 'FFGFWR'),
('FFG-KRF', 'FFGKRF'),
@ -1547,6 +1554,7 @@ elif SID == "HFO":
# "gfsLR" : ["gfsLR"],
"RTMA": ['RTMA'],
"NamDNG5" : ["NamDNG5"],
"MOSGuide" : ['MOSGuide'],
"nwpsCG1" : ['nwpsCG1'],
"nwpsTrkngCG0" : ['nwpsTrkngCG0'],
}
@ -1631,6 +1639,7 @@ else:
# "WNAwave4" : ["WNAwave4"],
# "ENPwave": ["ENPwave"],
"ESTOFS" : ["ESTOFS"],
"GFSLAMPGrid" : ["GFSLAMPGrid"],
"nwpsCG1" : ['nwpsCG1'],
"nwpsTrkngCG0" : ['nwpsTrkngCG0'],
}
@ -1656,7 +1665,7 @@ D2DAccumulativeElements= {
"GFS80": ["tp", "cp"],
"GFS75": ["tp", "cp"],
"GFS190": ["tp", "cp"],
"HRRR": ["tp1hr", "crain", "csnow", "cfrzr", "cicep"],
"HRRR": ["tp", "crain", "csnow", "cfrzr", "cicep"],
"NAM95": ["tp", "cp"],
"NAM80": ["tp", "cp"],
"NAM40": ["tp", "cp"],
@ -1774,9 +1783,11 @@ localRTMAParms = []
localNamDNG5Parms = []
localSREFParms = []
localTPCProbParms = []
localHRRRParms = localESTOFSParms = []
localGFSLAMPGridParms = []
localHRRRParms = []
localESTOFSParms = []
localnwpsCG1Parms = []
localnwpsTrkngCG0Parms = []
localnwpsTrkngCG0Parms = []
localISCExtraParms = []
myOfficeType = SITES[GFESUITE_SITEID][5]
@ -1850,6 +1861,7 @@ if not BASELINE and siteImport('localConfig'):
localWNAwave10Parms = getattr(localConfig, 'parmsWNAwave10', localWNAwave10Parms)
localWNAwave4Parms = getattr(localConfig, 'parmsWNAwave4', localWNAwave4Parms)
localENPwaveParms = getattr(localConfig, 'parmsENPwave', localENPwaveParms)
localGFSLAMPGridParms = getattr(localConfig, 'parmsGFSLAMPGrid', localGFSLAMPGridParms)
#note that extraISCparms are not in the standard format. These
#are a list of ([p, p, p, p], officeType)
localISCExtraParms = getattr(localConfig, 'extraISCparms', localISCExtraParms)
@ -2041,6 +2053,10 @@ parmsGFS40 = [([SnowRatio], TC1)]
ENPwave_parms = [([WindWaveHeight, WaveHeight, SurfHeight, Wind], TC6),
([Swell, Swell2, Period, Period2], TC6)]
# GFSLAMPGrid
parmsGFSLAMPGrid=[([Temp, Td, serverConfig.Vis, ClgHgt],TC1)]
#---------------------------------------------------------------------------
# Databases for a site.
# list of (Database, [parms])
@ -2101,6 +2117,7 @@ DATABASES = [(Official, OFFICIALDBS + localParms),
(NamDNG5, NamDNG5PARMS + localNamDNG5Parms),
(TPCProb, TPCProbPARMS + localTPCProbParms),
(ENPwave, ENPwave_parms + localENPwaveParms),
(GFSLAMPGrid, GFSLAMPGridPARMS + localGFSLAMPGridParms),
(Test, OFFICIALDBS + localParms)] + localDBs
# Intersite coordination database parameter groupings, based on

View file

@ -1,76 +1,304 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<gridParamInfo xmlns:ns2="group">
<valtimeMINUSreftime>
<fcst>10800</fcst>
<fcst>14400</fcst>
<fcst>18000</fcst>
<fcst>21600</fcst>
<fcst>25200</fcst>
<fcst>28800</fcst>
<fcst>32400</fcst>
<fcst>36000</fcst>
<fcst>39600</fcst>
<fcst>43200</fcst>
<fcst>46800</fcst>
<fcst>50400</fcst>
<fcst>54000</fcst>
<fcst>57600</fcst>
<fcst>61200</fcst>
<fcst>64800</fcst>
<fcst>68400</fcst>
<fcst>72000</fcst>
<fcst>75600</fcst>
<fcst>79200</fcst>
<fcst>82800</fcst>
<fcst>86400</fcst>
<fcst>90000</fcst>
</valtimeMINUSreftime>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>ctstm</short_name>
<long_name>Categorical Thunder Storm</long_name>
<units>yn</units>
<udunits/>
<uiname>CategoricalTSTM</uiname>
<valid_range>0.0</valid_range>
<valid_range>1.0</valid_range>
<fillValue>-99999.0</fillValue>
<n3D>0</n3D>
<levelsDesc>SFC</levelsDesc>
<levels>
<level>SFC</level>
</levels>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>staticTopo</short_name>
<long_name>Topography</long_name>
<units>meters</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>thp</short_name>
<long_name>Thunderstorm Probability</long_name>
<units>%</units>
<udunits>percent</udunits>
<uiname>TstrmProb</uiname>
<valid_range>0.0</valid_range>
<valid_range>100.0</valid_range>
<fillValue>-99999.0</fillValue>
<n3D>0</n3D>
<levelsDesc>SFC</levelsDesc>
<levels>
<level>SFC</level>
</levels>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>staticSpacing</short_name>
<long_name>Grid spacing</long_name>
<units>meters</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>staticCoriolis</short_name>
<long_name>Coriolis parameter</long_name>
<units>/s</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<valtimeMINUSreftime>
<fcst>0</fcst>
<fcst>3600</fcst>
<fcst>7200</fcst>
<fcst>10800</fcst>
<fcst>14400</fcst>
<fcst>18000</fcst>
<fcst>21600</fcst>
<fcst>25200</fcst>
<fcst>28800</fcst>
<fcst>32400</fcst>
<fcst>36000</fcst>
<fcst>39600</fcst>
<fcst>43200</fcst>
<fcst>46800</fcst>
<fcst>50400</fcst>
<fcst>54000</fcst>
<fcst>57600</fcst>
<fcst>61200</fcst>
<fcst>64800</fcst>
<fcst>68400</fcst>
<fcst>72000</fcst>
<fcst>75600</fcst>
<fcst>79200</fcst>
<fcst>82800</fcst>
<fcst>86400</fcst>
<fcst>90000</fcst>
</valtimeMINUSreftime>
<gridParameterInfo xsi:type="parameterInfo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<short_name>tcc</short_name>
<long_name>Sky Cover</long_name>
<units>%</units>
<udunits>percent</udunits>
<uiname>totalCldCvr</uiname>
<valid_range>0.0</valid_range>
<valid_range>100.0</valid_range>
<fillValue>-99999.0</fillValue>
<n3D>0</n3D>
<levelsDesc>SFC</levelsDesc>
<levels>
<level>SFC</level>
</levels>
</gridParameterInfo>
<gridParameterInfo xsi:type="parameterInfo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<short_name>vis</short_name>
<long_name>visibility</long_name>
<units>m</units>
<udunits>meter</udunits>
<uiname>visibility</uiname>
<valid_range>0.0</valid_range>
<valid_range>5000.0</valid_range>
<fillValue>-99999.0</fillValue>
<n3D>1</n3D>
<levelsDesc>SFC</levelsDesc>
<levels>
<level>SFC</level>
</levels>
</gridParameterInfo>
<gridParameterInfo xsi:type="parameterInfo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<short_name>cc</short_name>
<long_name>Cloud Ceiling</long_name>
<units>m</units>
<udunits>meters</udunits>
<uiname>cloudCeiling</uiname>
<valid_range>0.0</valid_range>
<valid_range>10000.0</valid_range>
<fillValue>-99999.0</fillValue>
<n3D>0</n3D>
<levelsDesc>CLG</levelsDesc>
<levels>
<level>CLG</level>
</levels>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>procon</short_name>
<long_name>Convection Probability</long_name>
<units>%</units>
<udunits>percent</udunits>
<uiname>ConvProb</uiname>
<valid_range>0.0</valid_range>
<valid_range>100.0</valid_range>
<fillValue>-99999.0</fillValue>
<n3D>0</n3D>
<levelsDesc>SFC</levelsDesc>
<levels>
<level>SFC</level>
</levels>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>convp</short_name>
<long_name>Categorical Convection potential</long_name>
<units>yn</units>
<udunits/>
<uiname>CategoricalCONV</uiname>
<valid_range>0.0</valid_range>
<valid_range>8.0</valid_range>
<fillValue>-99999.0</fillValue>
<n3D>0</n3D>
<levelsDesc>SFC</levelsDesc>
<levels>
<level>SFC</level>
</levels>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>prolght</short_name>
<long_name>Lightning Probability</long_name>
<units>%</units>
<udunits>percent</udunits>
<uiname>LgtnProb</uiname>
<valid_range>0.0</valid_range>
<valid_range>100.0</valid_range>
<fillValue>-99999.0</fillValue>
<n3D>0</n3D>
<levelsDesc>SFC</levelsDesc>
<levels>
<level>SFC</level>
</levels>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>clgtn</short_name>
<long_name>Categorical Lightning potential</long_name>
<units>yn</units>
<udunits/>
<uiname>CategoricalLGTN</uiname>
<valid_range>0.0</valid_range>
<valid_range>8.0</valid_range>
<fillValue>-99999.0</fillValue>
<n3D>0</n3D>
<levelsDesc>SFC</levelsDesc>
<levels>
<level>SFC</level>
</levels>
</gridParameterInfo>
<gridParameterInfo xsi:type="parameterInfo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<short_name>dpt</short_name>
<long_name>Dewpoint Temperature</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<uiname>Td</uiname>
<valid_range>180.0</valid_range>
<valid_range>330.0</valid_range>
<fillValue>-99999.0</fillValue>
<n3D>1</n3D>
<levelsDesc>FHAG 2</levelsDesc>
<levels>
<level>FHAG2</level>
</levels>
</gridParameterInfo>
<gridParameterInfo xsi:type="parameterInfo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<short_name>dpterranl</short_name>
<long_name>Dewpoint Temperature error analysis</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<uiname>TdErrorAnalysis</uiname>
<valid_range>-330.0</valid_range>
<valid_range>330.0</valid_range>
<fillValue>-99999.0</fillValue>
<n3D>1</n3D>
<levelsDesc>FHAG 2</levelsDesc>
<levels>
<level>FHAG2</level>
</levels>
</gridParameterInfo>
<gridParameterInfo xsi:type="parameterInfo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<short_name>t</short_name>
<long_name>Temperature</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<uiname>T</uiname>
<valid_range>180.0</valid_range>
<valid_range>330.0</valid_range>
<fillValue>-99999.0</fillValue>
<n3D>1</n3D>
<levelsDesc>FHAG 2</levelsDesc>
<levels>
<level>FHAG2</level>
</levels>
</gridParameterInfo>
<gridParameterInfo xsi:type="parameterInfo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<short_name>terranl</short_name>
<long_name>Temperature error analysis</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<uiname>ErrorAnalysisT</uiname>
<valid_range>-330.0</valid_range>
<valid_range>330.0</valid_range>
<fillValue>-99999.0</fillValue>
<n3D>1</n3D>
<levelsDesc>FHAG 2</levelsDesc>
<levels>
<level>FHAG2</level>
</levels>
</gridParameterInfo>
<gridParameterInfo xsi:type="parameterInfo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<short_name>ws</short_name>
<long_name>Wind Speed</long_name>
<units>m/s</units>
<udunits>meter/sec</udunits>
<uiname>windSpeed</uiname>
<valid_range>-150.0</valid_range>
<valid_range>150.0</valid_range>
<fillValue>-99999.0</fillValue>
<n3D>1</n3D>
<levelsDesc>FHAG 10</levelsDesc>
<levels>
<level>FHAG10</level>
</levels>
</gridParameterInfo>
<gridParameterInfo xsi:type="parameterInfo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<short_name>wserranl</short_name>
<long_name>wind speed uncertainty</long_name>
<units>m/s</units>
<udunits>meter/sec</udunits>
<uiname>WSerranlind</uiname>
<valid_range>0.0</valid_range>
<valid_range>150.0</valid_range>
<fillValue>-99999.0</fillValue>
<n3D>1</n3D>
<levelsDesc>FHAG 10</levelsDesc>
<levels>
<level>FHAG10</level>
</levels>
</gridParameterInfo>
<gridParameterInfo xsi:type="parameterInfo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<short_name>wd</short_name>
<long_name>Wind direction (from which blowing)</long_name>
<units>deg</units>
<udunits>degrees</udunits>
<uiname>windDir</uiname>
<valid_range>0.0</valid_range>
<valid_range>360.0</valid_range>
<fillValue>-99999.0</fillValue>
<n3D>1</n3D>
<levelsDesc>FHAG 10</levelsDesc>
<levels>
<level>FHAG10</level>
</levels>
</gridParameterInfo>
<gridParameterInfo xsi:type="parameterInfo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<short_name>wderranl</short_name>
<long_name>wind dir uncertainty</long_name>
<units>deg</units>
<udunits>degrees</udunits>
<uiname>WDerranlind</uiname>
<valid_range>-360.0</valid_range>
<valid_range>360.0</valid_range>
<fillValue>-99999.0</fillValue>
<n3D>1</n3D>
<levelsDesc>FHAG 10</levelsDesc>
<levels>
<level>FHAG10</level>
</levels>
</gridParameterInfo>
<gridParameterInfo xsi:type="parameterInfo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<short_name>uw</short_name>
<long_name>u-component wind</long_name>
<units>m/s</units>
<udunits>meter/sec</udunits>
<uiname>uWind</uiname>
<valid_range>-150.0</valid_range>
<valid_range>150.0</valid_range>
<fillValue>-99999.0</fillValue>
<n3D>1</n3D>
<levelsDesc>FHAG 10</levelsDesc>
<levels>
<level>FHAG10</level>
</levels>
</gridParameterInfo>
<gridParameterInfo xsi:type="parameterInfo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<short_name>vw</short_name>
<long_name>v-component wind</long_name>
<units>m/s</units>
<udunits>meter/sec</udunits>
<uiname>vWind</uiname>
<valid_range>-150.0</valid_range>
<valid_range>150.0</valid_range>
<fillValue>-99999.0</fillValue>
<n3D>1</n3D>
<levelsDesc>FHAG 10</levelsDesc>
<levels>
<level>FHAG10</level>
</levels>
</gridParameterInfo>
<gridParameterInfo xsi:type="parameterInfo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<short_name>staticCoriolis</short_name>
<long_name>Coriolis parameter</long_name>
<units>/s</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<gridParameterInfo xsi:type="parameterInfo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<short_name>staticSpacing</short_name>
<long_name>Grid spacing</long_name>
<units>m</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<gridParameterInfo xsi:type="parameterInfo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<short_name>staticTopo</short_name>
<long_name>Topography</long_name>
<units>meters</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
</gridParamInfo>

View file

@ -0,0 +1,33 @@
################################################################################
# This file contains entries for the 2.5km Gridded LAMP database initialization.
#
# Author: Joshua Watson Created: 09/28/2011
# ERH Last Modified: 12/12/2014
#
################################################################################
# Import existing model database initialization parameters
from Init import *
class GFSLAMPForecaster(Forecaster):
def __init__(self):
Forecaster.__init__(self, "GFSLAMP","GFSLAMP")
def calcClgHgt(self, cc_CLG):
ceil = cc_CLG * 3.280839
ceil = where(less(cc_CLG, 0), -99., ceil)
return ceil
def calcVis(self, vis_SFC):
return (vis_SFC * 3.2808) / 5279.85564
def calcT(self, t_FHAG2):
return self.KtoF(t_FHAG2)
def calcTd(self, dpt_FHAG2):
return self.KtoF(dpt_FHAG2)
################################################################################
# Set this file up to run with SmartInitialization
def main():
GFSLAMPForecaster().run()

View file

@ -133,6 +133,8 @@ logHandler = UFStatusHandler.UFStatusHandler("com.raytheon.edex.plugin.grib", "E
# Apr 28, 2014 3084 bsteffen Use full grid for looking up parameter aliases.
# Aug 15, 2014 15699 MPorricelli Import GridUtil and update reference
# to GRID_FILL_VALUE
# Dec 15, 2014 DR16509 Matt Foster Changes in _decodePdsSection to accommodate
# EKDMOS
#
class GribDecoder():
@ -565,17 +567,23 @@ class GribDecoder():
#numMissingValues = pdsTemplate[22]
#statisticalProcess = pdsTemplate[23]
elif pdsTemplateNumber == 10:
elif pdsTemplateNumber == 6 or pdsTemplateNumber == 10:
# pdsTemplate 6 and 10 are used for percentile-based variables
# 6 is for instantaneous variables, 10 is for those that span
# a time range
parameterAbbreviation = parameterAbbreviation + str(pdsTemplate[15]) + "pct"
gribDict['parameterName'] = str(pdsTemplate[15]) +"th percentile " + gribDict['parameterName']
gribDict['endTime'] = self._convertToCalendar(pdsTemplate, 16)
#numTimeRanges = pdsTemplate[22]
#numMissingValues = pdsTemplate[23]
#statisticalProcess = pdsTemplate[24]
typeOfTimeInterval = pdsTemplate[25]
durationSecs = self._convertToSeconds(pdsTemplate[27], pdsTemplate[26])
if pdsTemplateNumber == 10:
# Add time range information for pdsTemplate 10
gribDict['endTime'] = self._convertToCalendar(pdsTemplate, 16)
#numTimeRanges = pdsTemplate[22]
#numMissingValues = pdsTemplate[23]
#statisticalProcess = pdsTemplate[24]
typeOfTimeInterval = pdsTemplate[25]
durationSecs = self._convertToSeconds(pdsTemplate[27], pdsTemplate[26])
if durationSecs is not None:

View file

@ -912,8 +912,13 @@
<dt>3</dt>
</info>
<info>
<title>GFSLAMP-Grid</title>
<datasetId>GFSLAMPTstorm</datasetId>
<title>HI-GriddedMOS</title>
<datasetId>MOSGuide-HI</datasetId>
<dt>3</dt>
</info>
<info>
<title>GFSLAMPGrid</title>
<datasetId>GFSLAMPGrid</datasetId>
<dt>1</dt>
</info>
<info>

View file

@ -52,12 +52,17 @@ TP_T170L42A-NCEP-MDL_1073x689_43200-0 TP12hr
ThP_T170L42A-NCEP-MDL_1073x689_43200-0 ThP12hr
ThP_T170L42A-NCEP-MDL_1073x689_21600-0 ThP6hr
ThP_T170L42A-NCEP-MDL_1073x689_10800-0 ThP3hr
// GFSLAMPGrid 2.5km
ThP_LAMP-NCEP-MDL_2145x1377_7200-0 PROLGHT2hr
// 2.5km MOSGuide
TP0.254mm_T170L42A-NCEP-MDL_2145x1377_21600-0 POP6hr
TP0.254mm_T170L42A-NCEP-MDL_2145x1377_43200-0 POP12hr
// MOSGuide Alaska
TP0.254mm_T170L42A-NCEP-MDL_1649x1105_21600-0 POP6hr
TP0.254mm_T170L42A-NCEP-MDL_1649x1105_43200-0 POP12hr
// MOSGuide Hawaii
TP0.254mm_T170L42A-NCEP-MDL_625x561_21600-0 POP6hr
TP0.254mm_T170L42A-NCEP-MDL_625x561_43200-0 POP12hr
// TPCWindProb wind speed probabilities
WS17.491m/s Prob34
WS25.722m/s Prob50

View file

@ -0,0 +1,37 @@
<?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.
-->
<mercatorGridCoverage>
<name>625561001</name>
<description>NDGD grid over - Hawaii (Mercator)</description>
<la1>14.3515</la1>
<lo1>-164.9695</lo1>
<firstGridPointCorner>LowerLeft</firstGridPointCorner>
<nx>625</nx>
<ny>561</ny>
<dx>2.5</dx>
<dy>2.5</dy>
<spacingUnit>km</spacingUnit>
<minorAxis>6371200.0</minorAxis>
<majorAxis>6371200.0</majorAxis>
<latin>20.0</latin>
<la2>26.8605</la2>
<lo2>-150.0402</lo2>
</mercatorGridCoverage>

View file

@ -3155,7 +3155,7 @@
<name>MOSGuide</name>
<center>7</center>
<subcenter>14</subcenter>
<grid>197</grid>
<grid>184</grid>
<process>
<id>96</id>
</process>
@ -3182,10 +3182,30 @@
</model>
<model>
<name>GFSLAMPTstorm</name>
<name>MOSGuide-HI</name>
<center>7</center>
<subcenter>14</subcenter>
<grid>197</grid>
<grid>625561001</grid>
<process>
<id>96</id>
</process>
</model>
<model>
<name>GFSLAMP5km</name>
<center>7</center>
<subcenter>14</subcenter>
<grid>197</grid>
<process>
<id>108</id>
</process>
</model>
<model>
<name>GFSLAMPGrid</name>
<center>7</center>
<subcenter>14</subcenter>
<grid>184</grid>
<process>
<id>108</id>
</process>

View file

@ -19,12 +19,12 @@
further_licensing_information.
-->
<subGridDef>
<modelNames>GFSLAMPTstorm</modelNames>
<referenceGrid>197</referenceGrid>
<nx>1000</nx>
<ny>689</ny>
<modelNames>GFSLAMPGrid</modelNames>
<referenceGrid>184</referenceGrid>
<nx>700</nx>
<ny>700</ny>
<!--
<centerLatitude>46.0</centerLatitude>
<centerLongitude>-95.5</centerLongitude>
-->
</subGridDef>
</subGridDef>

View file

@ -20,11 +20,11 @@
-->
<subGridDef>
<modelNames>MOSGuide</modelNames>
<referenceGrid>197</referenceGrid>
<nx>350</nx>
<ny>350</ny>
<referenceGrid>184</referenceGrid>
<nx>700</nx>
<ny>700</ny>
<!--
<centerLatitude>46.0</centerLatitude>
<centerLongitude>-95.5</centerLongitude>
-->
</subGridDef>
</subGridDef>

View file

@ -11,7 +11,7 @@
200:200:Significant Tornado probability:%:SIGTRNDPROB
201:201:Significant Hail probability:%:SIGHAILPROB
202:202:Significant Wind probability:%:SIGWINDPROB
203:203:Categorical Thunderstorm (1-yes, 0-no):categorical:CTSTM
203:203:Categorical Lightning:categorical:CLGHT
204:204:Number of mixed layers next to surface:integer:MIXLY
205:205:Flight Category::FLGHT
206:206:Confidence - Ceiling::CICEL
@ -25,12 +25,12 @@
214:214:Near IR, White Sky Albedo:%:NWSALB
215:215:Total Probability of Severe Thunderstorms (Days 2,3):%:PRSVR
216:216:Total Probability of Extreme Severe Thunderstorms (Days 2,3):%:PRSIGSV
217:217:Mean Icing Potential:mm:MEI
218:218:Maximum Icing Potential:mm:MAIP
219:219:Mean in-Cloud Turbulence Potential:mm:MECTP
220:220:Max in-Cloud Turbulence Potential:mm:MACTP
221:221:Mean Cloud Air Turbulence Potential:mm:MECAT
222:222:Maximum Cloud Air Turbulence Potential:mm:MACAT
217:217:Supercooled Large Droplet Icing:mm:SIPD
218:218:Radiative emissivity:mm:EPSR
219:219:Turbulence Potential Forecast Index::TPFI
220:220:Categorical Servre Thunderstorm::SVRTS
221:221:Probability of Convection:%:PROCON
222:222:Categorical Convection :categorical:CONVP
223:223:Cumulonimbus Horizontal Exten:%:CBHE
224:224:Pressure at Cumulonimbus Bas:Pa:PCBB
225:225:Pressure at Cumulonimbus To:Pa:PCBT

View file

@ -13,7 +13,7 @@
212:212:Low Cloud Bottom Level::LCBL
213:213:Low Cloud Top Level::LCTL
214:214:Low Cloud Layer::LCLY
215:215:Cloud Ceiling::CEIL
215:215:Cloud Ceiling::CLG
220:220:Planetary Boundary Layer:: PLBL
221:221:Layer Between Two Hybrid Levels::NONE
222:222:Middle Cloud Bottom Level::MCBL

View file

@ -171,5 +171,6 @@
#???|256 | 0 | 0.25 | 230 | PRE | Inst Precip Rate | Radial | y | | | | Z | | | | |63 |
166|0 |0 |0.0 |230 |ML |Melting Layer |{S} {T} Melting Layer |{S} {T} ML |Graphic|y | | | |Z | | | | |67 |
170|256 |0 |0.25 |230 |DAA |One Hour Unbiased Accum |{S} Dual Pol Unbiased One Hour Accum ({U}) |{S} DAA |Radial | | | | |0.01S| | | | |69 |in/100
500|8 |0 |0.463 |463 |HSR |Reflectivity |{S} Hybrid Scan Refl ({U}) |{S} HSR |Radial | | | | | | | | | |64 |dBZ
550|8 |0 |0.926 |111 |HSR |Reflectivity |{S} Hybrid Scan Refl ({U}) |{S} HSR |Radial | | | | | | | | | |64 |dBZ
196|0 |0 |0.0 | 50 |MBA |Microburst AMDA |{S} Microburst AMDA |{S} MBA |Graphic| | | | | | | | | |28 |
500|8 |0 |0.463 |463 | Z |Reflectivity |{S} Reflectivity ({U}) |{S} Z |Radial | | | | | | | | | |64 |dBZ
550|8 |0 |0.926 |111 | Z |Reflectivity |{S} Reflectivity ({U}) |{S} Z |Radial | | | | | | | | | |64 |dBZ

View file

@ -0,0 +1,259 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<colorMap>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.79607844" r="1.0"/>
<color a="1.0" b="0.0" g="0.79607844" r="1.0"/>
<color a="1.0" b="0.0" g="0.79607844" r="1.0"/>
<color a="1.0" b="0.0" g="0.79607844" r="1.0"/>
<color a="1.0" b="0.0" g="0.79607844" r="1.0"/>
<color a="1.0" b="0.0" g="0.79607844" r="1.0"/>
<color a="1.0" b="0.0" g="0.79607844" r="1.0"/>
<color a="1.0" b="0.0" g="0.79607844" r="1.0"/>
<color a="1.0" b="0.0" g="0.79607844" r="1.0"/>
<color a="1.0" b="0.0" g="0.79607844" r="1.0"/>
<color a="1.0" b="0.0" g="0.79607844" r="1.0"/>
<color a="1.0" b="0.0" g="0.79607844" r="1.0"/>
<color a="1.0" b="0.0" g="0.79607844" r="1.0"/>
<color a="1.0" b="0.0" g="0.79607844" r="1.0"/>
<color a="1.0" b="0.0" g="0.79607844" r="1.0"/>
<color a="1.0" b="0.0" g="0.79607844" r="1.0"/>
<color a="1.0" b="0.0" g="0.79607844" r="1.0"/>
<color a="1.0" b="0.0" g="0.79607844" r="1.0"/>
<color a="1.0" b="0.0" g="0.79607844" r="1.0"/>
<color a="1.0" b="0.0" g="0.79607844" r="1.0"/>
<color a="1.0" b="0.0" g="0.79607844" r="1.0"/>
<color a="1.0" b="0.0" g="0.79607844" r="1.0"/>
<color a="1.0" b="0.0" g="0.79607844" r="1.0"/>
<color a="1.0" b="0.0" g="0.79607844" r="1.0"/>
<color a="1.0" b="0.0" g="0.79607844" r="1.0"/>
<color a="1.0" b="0.0" g="0.79607844" r="1.0"/>
<color a="1.0" b="0.0" g="0.79607844" r="1.0"/>
<color a="1.0" b="0.0" g="0.79607844" r="1.0"/>
<color a="1.0" b="0.0" g="0.79607844" r="1.0"/>
<color a="1.0" b="0.0" g="0.79607844" r="1.0"/>
<color a="1.0" b="0.0" g="0.79607844" r="1.0"/>
<color a="1.0" b="0.0" g="0.79607844" r="1.0"/>
<color a="1.0" b="0.0" g="0.79607844" r="1.0"/>
<color a="1.0" b="0.0" g="0.79607844" r="1.0"/>
<color a="1.0" b="0.0" g="0.79607844" r="1.0"/>
<color a="1.0" b="0.0" g="0.79607844" r="1.0"/>
<color a="1.0" b="0.0" g="0.79607844" r="1.0"/>
<color a="1.0" b="0.0" g="0.79607844" r="1.0"/>
<color a="1.0" b="0.0" g="0.79607844" r="1.0"/>
<color a="1.0" b="0.0" g="0.79607844" r="1.0"/>
<color a="1.0" b="0.0" g="0.79607844" r="1.0"/>
<color a="1.0" b="0.0" g="0.79607844" r="1.0"/>
<color a="1.0" b="0.0" g="0.79607844" r="1.0"/>
<color a="1.0" b="0.0" g="0.79607844" r="1.0"/>
<color a="1.0" b="0.0" g="0.79607844" r="1.0"/>
<color a="1.0" b="0.0" g="0.79607844" r="1.0"/>
<color a="1.0" b="0.0" g="0.79607844" r="1.0"/>
<color a="1.0" b="0.0" g="0.79607844" r="1.0"/>
<color a="1.0" b="0.0" g="0.79607844" r="1.0"/>
<color a="1.0" b="0.0" g="0.79607844" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.52156866" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.52156866" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.52156866" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.52156866" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.52156866" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.52156866" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.52156866" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.52156866" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.52156866" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.52156866" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.52156866" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.52156866" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.52156866" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.52156866" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.52156866" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.52156866" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.52156866" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.52156866" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.52156866" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.52156866" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.52156866" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.52156866" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.52156866" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.52156866" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.52156866" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.52156866" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.52156866" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.52156866" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.52156866" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.52156866" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.52156866" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.52156866" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.52156866" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.52156866" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.52156866" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.52156866" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.52156866" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.52156866" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.52156866" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.52156866" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.52156866" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.52156866" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.52156866" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.52156866" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.52156866" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.52156866" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.52156866" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.52156866" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.52156866" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.52156866" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.52156866" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.52156866" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
<color a="1.0" b="0.019607844" g="0.17254902" r="1.0"/>
</colorMap>

View file

@ -0,0 +1,21 @@
<?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 abbreviation="CLGTN" name="Categorical Lightning Potential" unit=""/>

View file

@ -0,0 +1,21 @@
<?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 abbreviation="CLGTN" name="Categorical Lightning Potential" unit=""/>

View file

@ -0,0 +1,21 @@
<?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 abbreviation="CONVP" name="Categorical Convection Potential" unit=""/>

View file

@ -0,0 +1,21 @@
<?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 abbreviation="CONVP2hr" name="2hr Convection potential" unit="%"/>

View file

@ -0,0 +1,21 @@
<?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 abbreviation="PROCON" name="Probability of convection" unit="%"/>

View file

@ -0,0 +1,21 @@
<?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 abbreviation="PROCON2hr" name="2hr Convection probability" unit="%"/>

View file

@ -0,0 +1,21 @@
<?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 abbreviation="PROLGHT" name="Lightning probability" unit="%"/>

View file

@ -0,0 +1,21 @@
<?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 abbreviation="PROLGHT2hr" name="2hr Lightning probability" unit="%"/>

View file

@ -352,4 +352,15 @@
</list>
</constructor-arg>
</bean>
<bean factory-bean="radarPacketFactory" factory-method="registerGenericPacketType">
<constructor-arg
value="com.raytheon.uf.common.dataplugin.radar.level3.MBAPacket"
type="java.lang.Class" />
<constructor-arg>
<list>
<value>196</value>
</list>
</constructor-arg>
</bean>
</beans>

View file

@ -27,6 +27,7 @@ import com.raytheon.uf.common.dataplugin.radar.level3.SymbologyPacket;
import com.raytheon.uf.common.dataplugin.radar.level3.SymbologyPoint;
import com.raytheon.uf.common.dataplugin.radar.level3.DMDPacket.DMDAttributeIDs;
import com.raytheon.uf.common.dataplugin.radar.level3.GFMPacket.GFMAttributeIDs;
import com.raytheon.uf.common.dataplugin.radar.level3.MBAPacket.MBAAttributeIDs;
import com.raytheon.uf.common.dataplugin.radar.level3.StormIDPacket.StormIDPoint;
import com.raytheon.uf.common.dataplugin.radar.level3.generic.GenericDataComponent;
import com.raytheon.uf.common.serialization.ISerializableObject;
@ -44,6 +45,7 @@ import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement;
* ------------ ---------- ----------- --------------------------
* Feb 17, 2009 2000 askripsk Initial creation
* 03/04/2013 DCS51 zwang Handle GFM product
* 09/26/2014 DCS16776 zwang Handle AMDA product
*
* </pre>
*
@ -305,6 +307,11 @@ public class RadarDataPoint implements ISerializableObject {
stormID += ":";
stormID += deltaT;
}
// MBA
else if (type == 196) {
stormID = point.getValue(MBAAttributeIDs.DETECT_ID
.toString());
}
if (!"".equalsIgnoreCase(stormID)) {
this.stormID = stormID;

View file

@ -74,6 +74,7 @@ import com.raytheon.uf.common.dataplugin.radar.level3.HdaHailPacket.HdaHailPoint
import com.raytheon.uf.common.dataplugin.radar.level3.Layer;
import com.raytheon.uf.common.dataplugin.radar.level3.LinkedContourVectorPacket;
import com.raytheon.uf.common.dataplugin.radar.level3.LinkedVectorPacket;
import com.raytheon.uf.common.dataplugin.radar.level3.MBAPacket;
import com.raytheon.uf.common.dataplugin.radar.level3.MesocyclonePacket;
import com.raytheon.uf.common.dataplugin.radar.level3.MesocyclonePacket.MesocyclonePoint;
import com.raytheon.uf.common.dataplugin.radar.level3.SCITDataPacket;
@ -135,7 +136,7 @@ import com.vividsolutions.jts.geom.Coordinate;
* Dec 18, 2013 16002 kshrestha Added logic to match all dBZ values in
* the DHR with AWIPS1
* Jun 11, 2014 2061 bsteffen Remove IDecoderGettable
*
* Nov 06, 2014 16776 zwang Handle AMDA product
*
* </pre>
*
@ -1192,9 +1193,9 @@ public class RadarRecord extends PersistablePluginDataObject implements
if (needToConvert) {
Coordinate coor;
// for MIGFA, i/j unit is 1km, for other radar products, unit is
// for MIGFA and AMDA, i/j unit is 1km, for other radar products, unit is
// 1/4km
if (type == 140) {
if (type == 140 || type == 196) {
coor = convertStormLatLon(i * 4.0, j * 4.0);
} else {
coor = convertStormLatLon(i, j);
@ -1511,6 +1512,42 @@ public class RadarRecord extends PersistablePluginDataObject implements
currFeature, convertLatLon);
}
continue PACKET;
} else if (currPacket instanceof MBAPacket) {
// Need to get each component/feature out and located the
// thing
MBAPacket packet = (MBAPacket) currPacket;
// need to convert x/y to lon/lat
convertLatLon = true;
AreaComponent currFeature;
for (GenericDataComponent currComponent : packet
.getFeatures().values()) {
currFeature = (AreaComponent) currComponent;
// Calculate the center point of the MBA cell
double x, y;
double totalX = 0.0;
double totalY = 0.0;
double centerX = 0.0;
double centerY = 0.0;
int numP = currFeature.getPoints().size();
for (int kk = 0; kk < numP; kk++) {
x = currFeature.getPoints().get(kk).getCoordinate1();
y = currFeature.getPoints().get(kk).getCoordinate2();
totalX += x;
totalY += y;
}
if (numP != 0) {
centerX = totalX / (double)numP;
centerY = totalY / (double)numP;
}
addPacketData(centerX, centerY, type, RadarProductType.GENERIC,
currFeature, convertLatLon);
}
continue PACKET;
} else if (currPacket instanceof GenericDataPacket) {
// Generic Packet will contain most of the data for the
// product, so, in general, nothing probably needs to be

View file

@ -0,0 +1,226 @@
/**
* This software was developed and / or modified by Raytheon Company,
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
*
* U.S. EXPORT CONTROLLED TECHNICAL DATA
* This software product contains export-restricted data whose
* export/transfer/disclosure is restricted by U.S. law. Dissemination
* to non-U.S. persons whether in the United States or abroad requires
* an export license or other authorization.
*
* Contractor Name: Raytheon Company
* Contractor Address: 6825 Pine Street, Suite 340
* 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.radar.level3;
import java.io.DataInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import com.raytheon.uf.common.dataplugin.radar.level3.generic.GenericDataComponent;
import com.raytheon.uf.common.dataplugin.radar.level3.generic.GenericDataParameter;
import com.raytheon.uf.common.serialization.annotations.DynamicSerialize;
import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement;
/**
* This is a MBA (Microburst AMDA) centric version of the Generic Packet
*
* <pre>
*
* SOFTWARE HISTORY
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* 09/26/2014 DCS 16776 zwang Initial creation
*
* </pre>
*
* @author zwang
* @version 1.0
*/
@DynamicSerialize
public class MBAPacket extends GenericDataPacket {
public static enum MBAAttributeIDs {
DETECT_ID("detect_num"), DELTAV("deltav"), MAXWINDSPEED("maxWindSpeed"),
MAXSHEAR("maxShear"), CATEGORY("category");
private String name;
private MBAAttributeIDs(String name) {
this.name = name;
}
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param name
* the name to set
*/
public void setName(String name) {
this.name = name;
}
public static MBAAttributeIDs getAttribute(String name) {
for (MBAAttributeIDs id : MBAAttributeIDs.values()) {
if (name.equals(id.getName())) {
return id;
}
}
return null;
}
@Override
public String toString() {
return name;
}
}
public static enum MBACategory {
WindShear(0), Microburst(1), Macroburst(2), SpeedShear(3);
private final int catValue;
private MBACategory(int catValue) {
this.catValue = catValue;
}
/**
* @return the catValue
*/
public int getCatValue() {
return catValue;
}
public static String getCatName(int cat) {
for (MBACategory id : MBACategory.values()) {
if (cat == id.getCatValue()) {
return id.toString();
}
}
return null;
}
}
@DynamicSerializeElement
private List<String> featureIDs;
// Organizes the components/features based on DETECT_ID
@DynamicSerializeElement
private HashMap<String, GenericDataComponent> features;
@DynamicSerializeElement
private HashMap<String, GenericDataParameter> params;
public MBAPacket(int packetId, DataInputStream in) throws IOException {
super(packetId, in);
}
public MBAPacket() {
}
public String getValue(String featureID, MBAAttributeIDs attributeID) {
String rval = "";
rval = features.get(featureID).getValue(attributeID.toString());
return rval;
}
/**
* @return the featureIDs
*/
public List<String> getFeatureIDs() {
return featureIDs;
}
/**
* @param featureIDs
* the featureIDs to set
*/
public void setFeatureIDs(List<String> featureIDs) {
this.featureIDs = featureIDs;
}
/**
* @return the features
*/
public HashMap<String, GenericDataComponent> getFeatures() {
return features;
}
/**
* @param features
* the features to set
*/
public void setFeatures(HashMap<String, GenericDataComponent> features) {
this.features = features;
}
public GenericDataComponent getFeature(String eventID) {
GenericDataComponent rval = null;
rval = this.features.get(eventID);
return rval;
}
public HashMap<String, GenericDataParameter> getParams() {
return params;
}
public void setParams(HashMap<String, GenericDataParameter> params) {
this.params = params;
}
/**
* Converts the components to GFM Features and groups by gfmID
*/
private void groupFeatures() {
features = new HashMap<String, GenericDataComponent>();
featureIDs = new ArrayList<String>();
params = new HashMap<String, GenericDataParameter>();
String detectID = "";
for (GenericDataParameter param : parameters) {
params.put(param.getId(), param);
}
// Get the DETECT_ID out of each component
for (GenericDataComponent currFeature : components) {
// Loop through the values for the DETECT_ID
for (GenericDataParameter currParam : currFeature.getParameters()) {
if (currParam.getId().equalsIgnoreCase(
MBAAttributeIDs.DETECT_ID.toString()))
detectID = currParam.getValue();
}
features.put(detectID, currFeature);
featureIDs.add(detectID);
}
}
@Override
protected void init(DataInputStream in) throws IOException {
super.init(in);
// Relates all of the GFM feature based on the gfmID
groupFeatures();
}
@Override
public String toString() {
return super.toString();
}
}

View file

@ -0,0 +1,258 @@
<colorMap>
<color r = "0.0" g = "0.0" b = "0.0" a = "0.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "0.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "0.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "0.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "0.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "0.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "0.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "0.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "0.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "0.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "0.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "0.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "0.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "0.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "0.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "0.0" />
<color r = "0.611764705882" g = "0.611764705882" b = "0.611764705882" a = "1.0" />
<color r = "0.611764705882" g = "0.611764705882" b = "0.611764705882" a = "1.0" />
<color r = "0.611764705882" g = "0.611764705882" b = "0.611764705882" a = "1.0" />
<color r = "0.611764705882" g = "0.611764705882" b = "0.611764705882" a = "1.0" />
<color r = "0.611764705882" g = "0.611764705882" b = "0.611764705882" a = "1.0" />
<color r = "0.611764705882" g = "0.611764705882" b = "0.611764705882" a = "1.0" />
<color r = "0.611764705882" g = "0.611764705882" b = "0.611764705882" a = "1.0" />
<color r = "0.611764705882" g = "0.611764705882" b = "0.611764705882" a = "1.0" />
<color r = "0.611764705882" g = "0.611764705882" b = "0.611764705882" a = "1.0" />
<color r = "0.611764705882" g = "0.611764705882" b = "0.611764705882" a = "1.0" />
<color r = "0.611764705882" g = "0.611764705882" b = "0.611764705882" a = "1.0" />
<color r = "0.611764705882" g = "0.611764705882" b = "0.611764705882" a = "1.0" />
<color r = "0.611764705882" g = "0.611764705882" b = "0.611764705882" a = "1.0" />
<color r = "0.611764705882" g = "0.611764705882" b = "0.611764705882" a = "1.0" />
<color r = "0.611764705882" g = "0.611764705882" b = "0.611764705882" a = "1.0" />
<color r = "0.611764705882" g = "0.611764705882" b = "0.611764705882" a = "1.0" />
<color r = "0.462745098039" g = "0.462745098039" b = "0.462745098039" a = "1.0" />
<color r = "0.462745098039" g = "0.462745098039" b = "0.462745098039" a = "1.0" />
<color r = "0.462745098039" g = "0.462745098039" b = "0.462745098039" a = "1.0" />
<color r = "0.462745098039" g = "0.462745098039" b = "0.462745098039" a = "1.0" />
<color r = "0.462745098039" g = "0.462745098039" b = "0.462745098039" a = "1.0" />
<color r = "0.462745098039" g = "0.462745098039" b = "0.462745098039" a = "1.0" />
<color r = "0.462745098039" g = "0.462745098039" b = "0.462745098039" a = "1.0" />
<color r = "0.462745098039" g = "0.462745098039" b = "0.462745098039" a = "1.0" />
<color r = "0.462745098039" g = "0.462745098039" b = "0.462745098039" a = "1.0" />
<color r = "0.462745098039" g = "0.462745098039" b = "0.462745098039" a = "1.0" />
<color r = "0.462745098039" g = "0.462745098039" b = "0.462745098039" a = "1.0" />
<color r = "0.462745098039" g = "0.462745098039" b = "0.462745098039" a = "1.0" />
<color r = "0.462745098039" g = "0.462745098039" b = "0.462745098039" a = "1.0" />
<color r = "0.462745098039" g = "0.462745098039" b = "0.462745098039" a = "1.0" />
<color r = "0.462745098039" g = "0.462745098039" b = "0.462745098039" a = "1.0" />
<color r = "0.462745098039" g = "0.462745098039" b = "0.462745098039" a = "1.0" />
<color r = "1.0" g = "0.690196078431" b = "0.690196078431" a = "1.0" />
<color r = "1.0" g = "0.690196078431" b = "0.690196078431" a = "1.0" />
<color r = "1.0" g = "0.690196078431" b = "0.690196078431" a = "1.0" />
<color r = "1.0" g = "0.690196078431" b = "0.690196078431" a = "1.0" />
<color r = "1.0" g = "0.690196078431" b = "0.690196078431" a = "1.0" />
<color r = "1.0" g = "0.690196078431" b = "0.690196078431" a = "1.0" />
<color r = "1.0" g = "0.690196078431" b = "0.690196078431" a = "1.0" />
<color r = "1.0" g = "0.690196078431" b = "0.690196078431" a = "1.0" />
<color r = "1.0" g = "0.690196078431" b = "0.690196078431" a = "1.0" />
<color r = "1.0" g = "0.690196078431" b = "0.690196078431" a = "1.0" />
<color r = "1.0" g = "0.690196078431" b = "0.690196078431" a = "1.0" />
<color r = "1.0" g = "0.690196078431" b = "0.690196078431" a = "1.0" />
<color r = "1.0" g = "0.690196078431" b = "0.690196078431" a = "1.0" />
<color r = "1.0" g = "0.690196078431" b = "0.690196078431" a = "1.0" />
<color r = "1.0" g = "0.690196078431" b = "0.690196078431" a = "1.0" />
<color r = "1.0" g = "0.690196078431" b = "0.690196078431" a = "1.0" />
<color r = "0.0" g = "1.0" b = "1.0" a = "1.0" />
<color r = "0.0" g = "1.0" b = "1.0" a = "1.0" />
<color r = "0.0" g = "1.0" b = "1.0" a = "1.0" />
<color r = "0.0" g = "1.0" b = "1.0" a = "1.0" />
<color r = "0.0" g = "1.0" b = "1.0" a = "1.0" />
<color r = "0.0" g = "1.0" b = "1.0" a = "1.0" />
<color r = "0.0" g = "1.0" b = "1.0" a = "1.0" />
<color r = "0.0" g = "1.0" b = "1.0" a = "1.0" />
<color r = "0.0" g = "1.0" b = "1.0" a = "1.0" />
<color r = "0.0" g = "1.0" b = "1.0" a = "1.0" />
<color r = "0.0" g = "1.0" b = "1.0" a = "1.0" />
<color r = "0.0" g = "1.0" b = "1.0" a = "1.0" />
<color r = "0.0" g = "1.0" b = "1.0" a = "1.0" />
<color r = "0.0" g = "1.0" b = "1.0" a = "1.0" />
<color r = "0.0" g = "1.0" b = "1.0" a = "1.0" />
<color r = "0.0" g = "1.0" b = "1.0" a = "1.0" />
<color r = "0.0" g = "0.564705882353" b = "1.0" a = "1.0" />
<color r = "0.0" g = "0.564705882353" b = "1.0" a = "1.0" />
<color r = "0.0" g = "0.564705882353" b = "1.0" a = "1.0" />
<color r = "0.0" g = "0.564705882353" b = "1.0" a = "1.0" />
<color r = "0.0" g = "0.564705882353" b = "1.0" a = "1.0" />
<color r = "0.0" g = "0.564705882353" b = "1.0" a = "1.0" />
<color r = "0.0" g = "0.564705882353" b = "1.0" a = "1.0" />
<color r = "0.0" g = "0.564705882353" b = "1.0" a = "1.0" />
<color r = "0.0" g = "0.564705882353" b = "1.0" a = "1.0" />
<color r = "0.0" g = "0.564705882353" b = "1.0" a = "1.0" />
<color r = "0.0" g = "0.564705882353" b = "1.0" a = "1.0" />
<color r = "0.0" g = "0.564705882353" b = "1.0" a = "1.0" />
<color r = "0.0" g = "0.564705882353" b = "1.0" a = "1.0" />
<color r = "0.0" g = "0.564705882353" b = "1.0" a = "1.0" />
<color r = "0.0" g = "0.564705882353" b = "1.0" a = "1.0" />
<color r = "0.0" g = "0.564705882353" b = "1.0" a = "1.0" />
<color r = "0.0" g = "0.98431372549" b = "0.564705882353" a = "1.0" />
<color r = "0.0" g = "0.98431372549" b = "0.564705882353" a = "1.0" />
<color r = "0.0" g = "0.98431372549" b = "0.564705882353" a = "1.0" />
<color r = "0.0" g = "0.98431372549" b = "0.564705882353" a = "1.0" />
<color r = "0.0" g = "0.98431372549" b = "0.564705882353" a = "1.0" />
<color r = "0.0" g = "0.98431372549" b = "0.564705882353" a = "1.0" />
<color r = "0.0" g = "0.98431372549" b = "0.564705882353" a = "1.0" />
<color r = "0.0" g = "0.98431372549" b = "0.564705882353" a = "1.0" />
<color r = "0.0" g = "0.98431372549" b = "0.564705882353" a = "1.0" />
<color r = "0.0" g = "0.98431372549" b = "0.564705882353" a = "1.0" />
<color r = "0.0" g = "0.98431372549" b = "0.564705882353" a = "1.0" />
<color r = "0.0" g = "0.98431372549" b = "0.564705882353" a = "1.0" />
<color r = "0.0" g = "0.98431372549" b = "0.564705882353" a = "1.0" />
<color r = "0.0" g = "0.98431372549" b = "0.564705882353" a = "1.0" />
<color r = "0.0" g = "0.98431372549" b = "0.564705882353" a = "1.0" />
<color r = "0.0" g = "0.98431372549" b = "0.564705882353" a = "1.0" />
<color r = "0.0" g = "0.733333333333" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.733333333333" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.733333333333" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.733333333333" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.733333333333" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.733333333333" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.733333333333" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.733333333333" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.733333333333" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.733333333333" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.733333333333" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.733333333333" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.733333333333" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.733333333333" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.733333333333" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.733333333333" b = "0.0" a = "1.0" />
<color r = "0.81568627451" g = "0.81568627451" b = "0.376470588235" a = "1.0" />
<color r = "0.81568627451" g = "0.81568627451" b = "0.376470588235" a = "1.0" />
<color r = "0.81568627451" g = "0.81568627451" b = "0.376470588235" a = "1.0" />
<color r = "0.81568627451" g = "0.81568627451" b = "0.376470588235" a = "1.0" />
<color r = "0.81568627451" g = "0.81568627451" b = "0.376470588235" a = "1.0" />
<color r = "0.81568627451" g = "0.81568627451" b = "0.376470588235" a = "1.0" />
<color r = "0.81568627451" g = "0.81568627451" b = "0.376470588235" a = "1.0" />
<color r = "0.81568627451" g = "0.81568627451" b = "0.376470588235" a = "1.0" />
<color r = "0.81568627451" g = "0.81568627451" b = "0.376470588235" a = "1.0" />
<color r = "0.81568627451" g = "0.81568627451" b = "0.376470588235" a = "1.0" />
<color r = "0.81568627451" g = "0.81568627451" b = "0.376470588235" a = "1.0" />
<color r = "0.81568627451" g = "0.81568627451" b = "0.376470588235" a = "1.0" />
<color r = "0.81568627451" g = "0.81568627451" b = "0.376470588235" a = "1.0" />
<color r = "0.81568627451" g = "0.81568627451" b = "0.376470588235" a = "1.0" />
<color r = "0.81568627451" g = "0.81568627451" b = "0.376470588235" a = "1.0" />
<color r = "0.81568627451" g = "0.81568627451" b = "0.376470588235" a = "1.0" />
<color r = "0.823529411765" g = "0.517647058824" b = "0.517647058824" a = "1.0" />
<color r = "0.823529411765" g = "0.517647058824" b = "0.517647058824" a = "1.0" />
<color r = "0.823529411765" g = "0.517647058824" b = "0.517647058824" a = "1.0" />
<color r = "0.823529411765" g = "0.517647058824" b = "0.517647058824" a = "1.0" />
<color r = "0.823529411765" g = "0.517647058824" b = "0.517647058824" a = "1.0" />
<color r = "0.823529411765" g = "0.517647058824" b = "0.517647058824" a = "1.0" />
<color r = "0.823529411765" g = "0.517647058824" b = "0.517647058824" a = "1.0" />
<color r = "0.823529411765" g = "0.517647058824" b = "0.517647058824" a = "1.0" />
<color r = "0.823529411765" g = "0.517647058824" b = "0.517647058824" a = "1.0" />
<color r = "0.823529411765" g = "0.517647058824" b = "0.517647058824" a = "1.0" />
<color r = "0.823529411765" g = "0.517647058824" b = "0.517647058824" a = "1.0" />
<color r = "0.823529411765" g = "0.517647058824" b = "0.517647058824" a = "1.0" />
<color r = "0.823529411765" g = "0.517647058824" b = "0.517647058824" a = "1.0" />
<color r = "0.823529411765" g = "0.517647058824" b = "0.517647058824" a = "1.0" />
<color r = "0.823529411765" g = "0.517647058824" b = "0.517647058824" a = "1.0" />
<color r = "0.823529411765" g = "0.517647058824" b = "0.517647058824" a = "1.0" />
<color r = "1.0" g = "0.0" 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.0" 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.0" 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.0" 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.0" 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.0" 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.0" 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.0" b = "0.0" a = "1.0" />
<color r = "1.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.905882352941" g = "0.0" b = "1.0" a = "1.0" />
<color r = "0.905882352941" g = "0.0" b = "1.0" a = "1.0" />
<color r = "0.905882352941" g = "0.0" b = "1.0" a = "1.0" />
<color r = "0.905882352941" g = "0.0" b = "1.0" a = "1.0" />
<color r = "0.905882352941" g = "0.0" b = "1.0" a = "1.0" />
<color r = "0.905882352941" g = "0.0" b = "1.0" a = "1.0" />
<color r = "0.905882352941" g = "0.0" b = "1.0" a = "1.0" />
<color r = "0.905882352941" g = "0.0" b = "1.0" a = "1.0" />
<color r = "0.905882352941" g = "0.0" b = "1.0" a = "1.0" />
<color r = "0.905882352941" g = "0.0" b = "1.0" a = "1.0" />
<color r = "0.905882352941" g = "0.0" b = "1.0" a = "1.0" />
<color r = "0.905882352941" g = "0.0" b = "1.0" a = "1.0" />
<color r = "0.905882352941" g = "0.0" b = "1.0" a = "1.0" />
<color r = "0.905882352941" g = "0.0" b = "1.0" a = "1.0" />
<color r = "0.905882352941" g = "0.0" b = "1.0" a = "1.0" />
<color r = "0.905882352941" g = "0.0" b = "1.0" a = "1.0" />
<color r = "0.466666666667" g = "0.0" b = "0.490196078431" a = "1.0" />
<color r = "0.466666666667" g = "0.0" b = "0.490196078431" a = "1.0" />
<color r = "0.466666666667" g = "0.0" b = "0.490196078431" a = "1.0" />
<color r = "0.466666666667" g = "0.0" b = "0.490196078431" a = "1.0" />
<color r = "0.466666666667" g = "0.0" b = "0.490196078431" a = "1.0" />
<color r = "0.466666666667" g = "0.0" b = "0.490196078431" a = "1.0" />
<color r = "0.466666666667" g = "0.0" b = "0.490196078431" a = "1.0" />
<color r = "0.466666666667" g = "0.0" b = "0.490196078431" a = "1.0" />
<color r = "0.466666666667" g = "0.0" b = "0.490196078431" a = "1.0" />
<color r = "0.466666666667" g = "0.0" b = "0.490196078431" a = "1.0" />
<color r = "0.466666666667" g = "0.0" b = "0.490196078431" a = "1.0" />
<color r = "0.466666666667" g = "0.0" b = "0.490196078431" a = "1.0" />
<color r = "0.466666666667" g = "0.0" b = "0.490196078431" a = "1.0" />
<color r = "0.466666666667" g = "0.0" b = "0.490196078431" a = "1.0" />
<color r = "0.466666666667" g = "0.0" b = "0.490196078431" a = "1.0" />
<color r = "0.466666666667" g = "0.0" b = "0.490196078431" a = "1.0" />
</colorMap>

View file

@ -1,258 +1,259 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<colorMap>
<color r = "0.0" g = "0.0" b = "0.0" a = "0.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "0.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "0.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "0.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "0.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "0.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "0.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "0.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "0.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "0.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "0.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "0.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "0.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "0.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "0.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "0.0" />
<color r = "0.611764705882" g = "0.611764705882" b = "0.611764705882" a = "1.0" />
<color r = "0.611764705882" g = "0.611764705882" b = "0.611764705882" a = "1.0" />
<color r = "0.611764705882" g = "0.611764705882" b = "0.611764705882" a = "1.0" />
<color r = "0.611764705882" g = "0.611764705882" b = "0.611764705882" a = "1.0" />
<color r = "0.611764705882" g = "0.611764705882" b = "0.611764705882" a = "1.0" />
<color r = "0.611764705882" g = "0.611764705882" b = "0.611764705882" a = "1.0" />
<color r = "0.611764705882" g = "0.611764705882" b = "0.611764705882" a = "1.0" />
<color r = "0.611764705882" g = "0.611764705882" b = "0.611764705882" a = "1.0" />
<color r = "0.611764705882" g = "0.611764705882" b = "0.611764705882" a = "1.0" />
<color r = "0.611764705882" g = "0.611764705882" b = "0.611764705882" a = "1.0" />
<color r = "0.611764705882" g = "0.611764705882" b = "0.611764705882" a = "1.0" />
<color r = "0.611764705882" g = "0.611764705882" b = "0.611764705882" a = "1.0" />
<color r = "0.611764705882" g = "0.611764705882" b = "0.611764705882" a = "1.0" />
<color r = "0.611764705882" g = "0.611764705882" b = "0.611764705882" a = "1.0" />
<color r = "0.611764705882" g = "0.611764705882" b = "0.611764705882" a = "1.0" />
<color r = "0.611764705882" g = "0.611764705882" b = "0.611764705882" a = "1.0" />
<color r = "0.462745098039" g = "0.462745098039" b = "0.462745098039" a = "1.0" />
<color r = "0.462745098039" g = "0.462745098039" b = "0.462745098039" a = "1.0" />
<color r = "0.462745098039" g = "0.462745098039" b = "0.462745098039" a = "1.0" />
<color r = "0.462745098039" g = "0.462745098039" b = "0.462745098039" a = "1.0" />
<color r = "0.462745098039" g = "0.462745098039" b = "0.462745098039" a = "1.0" />
<color r = "0.462745098039" g = "0.462745098039" b = "0.462745098039" a = "1.0" />
<color r = "0.462745098039" g = "0.462745098039" b = "0.462745098039" a = "1.0" />
<color r = "0.462745098039" g = "0.462745098039" b = "0.462745098039" a = "1.0" />
<color r = "0.462745098039" g = "0.462745098039" b = "0.462745098039" a = "1.0" />
<color r = "0.462745098039" g = "0.462745098039" b = "0.462745098039" a = "1.0" />
<color r = "0.462745098039" g = "0.462745098039" b = "0.462745098039" a = "1.0" />
<color r = "0.462745098039" g = "0.462745098039" b = "0.462745098039" a = "1.0" />
<color r = "0.462745098039" g = "0.462745098039" b = "0.462745098039" a = "1.0" />
<color r = "0.462745098039" g = "0.462745098039" b = "0.462745098039" a = "1.0" />
<color r = "0.462745098039" g = "0.462745098039" b = "0.462745098039" a = "1.0" />
<color r = "0.462745098039" g = "0.462745098039" b = "0.462745098039" a = "1.0" />
<color r = "1.0" g = "0.690196078431" b = "0.690196078431" a = "1.0" />
<color r = "1.0" g = "0.690196078431" b = "0.690196078431" a = "1.0" />
<color r = "1.0" g = "0.690196078431" b = "0.690196078431" a = "1.0" />
<color r = "1.0" g = "0.690196078431" b = "0.690196078431" a = "1.0" />
<color r = "1.0" g = "0.690196078431" b = "0.690196078431" a = "1.0" />
<color r = "1.0" g = "0.690196078431" b = "0.690196078431" a = "1.0" />
<color r = "1.0" g = "0.690196078431" b = "0.690196078431" a = "1.0" />
<color r = "1.0" g = "0.690196078431" b = "0.690196078431" a = "1.0" />
<color r = "1.0" g = "0.690196078431" b = "0.690196078431" a = "1.0" />
<color r = "1.0" g = "0.690196078431" b = "0.690196078431" a = "1.0" />
<color r = "1.0" g = "0.690196078431" b = "0.690196078431" a = "1.0" />
<color r = "1.0" g = "0.690196078431" b = "0.690196078431" a = "1.0" />
<color r = "1.0" g = "0.690196078431" b = "0.690196078431" a = "1.0" />
<color r = "1.0" g = "0.690196078431" b = "0.690196078431" a = "1.0" />
<color r = "1.0" g = "0.690196078431" b = "0.690196078431" a = "1.0" />
<color r = "1.0" g = "0.690196078431" b = "0.690196078431" a = "1.0" />
<color r = "0.0" g = "1.0" b = "1.0" a = "1.0" />
<color r = "0.0" g = "1.0" b = "1.0" a = "1.0" />
<color r = "0.0" g = "1.0" b = "1.0" a = "1.0" />
<color r = "0.0" g = "1.0" b = "1.0" a = "1.0" />
<color r = "0.0" g = "1.0" b = "1.0" a = "1.0" />
<color r = "0.0" g = "1.0" b = "1.0" a = "1.0" />
<color r = "0.0" g = "1.0" b = "1.0" a = "1.0" />
<color r = "0.0" g = "1.0" b = "1.0" a = "1.0" />
<color r = "0.0" g = "1.0" b = "1.0" a = "1.0" />
<color r = "0.0" g = "1.0" b = "1.0" a = "1.0" />
<color r = "0.0" g = "1.0" b = "1.0" a = "1.0" />
<color r = "0.0" g = "1.0" b = "1.0" a = "1.0" />
<color r = "0.0" g = "1.0" b = "1.0" a = "1.0" />
<color r = "0.0" g = "1.0" b = "1.0" a = "1.0" />
<color r = "0.0" g = "1.0" b = "1.0" a = "1.0" />
<color r = "0.0" g = "1.0" b = "1.0" a = "1.0" />
<color r = "0.0" g = "0.564705882353" b = "1.0" a = "1.0" />
<color r = "0.0" g = "0.564705882353" b = "1.0" a = "1.0" />
<color r = "0.0" g = "0.564705882353" b = "1.0" a = "1.0" />
<color r = "0.0" g = "0.564705882353" b = "1.0" a = "1.0" />
<color r = "0.0" g = "0.564705882353" b = "1.0" a = "1.0" />
<color r = "0.0" g = "0.564705882353" b = "1.0" a = "1.0" />
<color r = "0.0" g = "0.564705882353" b = "1.0" a = "1.0" />
<color r = "0.0" g = "0.564705882353" b = "1.0" a = "1.0" />
<color r = "0.0" g = "0.564705882353" b = "1.0" a = "1.0" />
<color r = "0.0" g = "0.564705882353" b = "1.0" a = "1.0" />
<color r = "0.0" g = "0.564705882353" b = "1.0" a = "1.0" />
<color r = "0.0" g = "0.564705882353" b = "1.0" a = "1.0" />
<color r = "0.0" g = "0.564705882353" b = "1.0" a = "1.0" />
<color r = "0.0" g = "0.564705882353" b = "1.0" a = "1.0" />
<color r = "0.0" g = "0.564705882353" b = "1.0" a = "1.0" />
<color r = "0.0" g = "0.564705882353" b = "1.0" a = "1.0" />
<color r = "0.0" g = "0.98431372549" b = "0.564705882353" a = "1.0" />
<color r = "0.0" g = "0.98431372549" b = "0.564705882353" a = "1.0" />
<color r = "0.0" g = "0.98431372549" b = "0.564705882353" a = "1.0" />
<color r = "0.0" g = "0.98431372549" b = "0.564705882353" a = "1.0" />
<color r = "0.0" g = "0.98431372549" b = "0.564705882353" a = "1.0" />
<color r = "0.0" g = "0.98431372549" b = "0.564705882353" a = "1.0" />
<color r = "0.0" g = "0.98431372549" b = "0.564705882353" a = "1.0" />
<color r = "0.0" g = "0.98431372549" b = "0.564705882353" a = "1.0" />
<color r = "0.0" g = "0.98431372549" b = "0.564705882353" a = "1.0" />
<color r = "0.0" g = "0.98431372549" b = "0.564705882353" a = "1.0" />
<color r = "0.0" g = "0.98431372549" b = "0.564705882353" a = "1.0" />
<color r = "0.0" g = "0.98431372549" b = "0.564705882353" a = "1.0" />
<color r = "0.0" g = "0.98431372549" b = "0.564705882353" a = "1.0" />
<color r = "0.0" g = "0.98431372549" b = "0.564705882353" a = "1.0" />
<color r = "0.0" g = "0.98431372549" b = "0.564705882353" a = "1.0" />
<color r = "0.0" g = "0.98431372549" b = "0.564705882353" a = "1.0" />
<color r = "0.0" g = "0.733333333333" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.733333333333" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.733333333333" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.733333333333" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.733333333333" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.733333333333" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.733333333333" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.733333333333" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.733333333333" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.733333333333" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.733333333333" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.733333333333" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.733333333333" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.733333333333" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.733333333333" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.733333333333" b = "0.0" a = "1.0" />
<color r = "0.81568627451" g = "0.81568627451" b = "0.376470588235" a = "1.0" />
<color r = "0.81568627451" g = "0.81568627451" b = "0.376470588235" a = "1.0" />
<color r = "0.81568627451" g = "0.81568627451" b = "0.376470588235" a = "1.0" />
<color r = "0.81568627451" g = "0.81568627451" b = "0.376470588235" a = "1.0" />
<color r = "0.81568627451" g = "0.81568627451" b = "0.376470588235" a = "1.0" />
<color r = "0.81568627451" g = "0.81568627451" b = "0.376470588235" a = "1.0" />
<color r = "0.81568627451" g = "0.81568627451" b = "0.376470588235" a = "1.0" />
<color r = "0.81568627451" g = "0.81568627451" b = "0.376470588235" a = "1.0" />
<color r = "0.81568627451" g = "0.81568627451" b = "0.376470588235" a = "1.0" />
<color r = "0.81568627451" g = "0.81568627451" b = "0.376470588235" a = "1.0" />
<color r = "0.81568627451" g = "0.81568627451" b = "0.376470588235" a = "1.0" />
<color r = "0.81568627451" g = "0.81568627451" b = "0.376470588235" a = "1.0" />
<color r = "0.81568627451" g = "0.81568627451" b = "0.376470588235" a = "1.0" />
<color r = "0.81568627451" g = "0.81568627451" b = "0.376470588235" a = "1.0" />
<color r = "0.81568627451" g = "0.81568627451" b = "0.376470588235" a = "1.0" />
<color r = "0.81568627451" g = "0.81568627451" b = "0.376470588235" a = "1.0" />
<color r = "0.823529411765" g = "0.517647058824" b = "0.517647058824" a = "1.0" />
<color r = "0.823529411765" g = "0.517647058824" b = "0.517647058824" a = "1.0" />
<color r = "0.823529411765" g = "0.517647058824" b = "0.517647058824" a = "1.0" />
<color r = "0.823529411765" g = "0.517647058824" b = "0.517647058824" a = "1.0" />
<color r = "0.823529411765" g = "0.517647058824" b = "0.517647058824" a = "1.0" />
<color r = "0.823529411765" g = "0.517647058824" b = "0.517647058824" a = "1.0" />
<color r = "0.823529411765" g = "0.517647058824" b = "0.517647058824" a = "1.0" />
<color r = "0.823529411765" g = "0.517647058824" b = "0.517647058824" a = "1.0" />
<color r = "0.823529411765" g = "0.517647058824" b = "0.517647058824" a = "1.0" />
<color r = "0.823529411765" g = "0.517647058824" b = "0.517647058824" a = "1.0" />
<color r = "0.823529411765" g = "0.517647058824" b = "0.517647058824" a = "1.0" />
<color r = "0.823529411765" g = "0.517647058824" b = "0.517647058824" a = "1.0" />
<color r = "0.823529411765" g = "0.517647058824" b = "0.517647058824" a = "1.0" />
<color r = "0.823529411765" g = "0.517647058824" b = "0.517647058824" a = "1.0" />
<color r = "0.823529411765" g = "0.517647058824" b = "0.517647058824" a = "1.0" />
<color r = "0.823529411765" g = "0.517647058824" b = "0.517647058824" a = "1.0" />
<color r = "1.0" g = "0.0" 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.0" 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.0" 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.0" 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.0" 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.0" 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.0" 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.0" b = "0.0" a = "1.0" />
<color r = "1.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.0" g = "0.0" b = "0.0" a = "1.0" />
<color r = "0.905882352941" g = "0.0" b = "1.0" a = "1.0" />
<color r = "0.905882352941" g = "0.0" b = "1.0" a = "1.0" />
<color r = "0.905882352941" g = "0.0" b = "1.0" a = "1.0" />
<color r = "0.905882352941" g = "0.0" b = "1.0" a = "1.0" />
<color r = "0.905882352941" g = "0.0" b = "1.0" a = "1.0" />
<color r = "0.905882352941" g = "0.0" b = "1.0" a = "1.0" />
<color r = "0.905882352941" g = "0.0" b = "1.0" a = "1.0" />
<color r = "0.905882352941" g = "0.0" b = "1.0" a = "1.0" />
<color r = "0.905882352941" g = "0.0" b = "1.0" a = "1.0" />
<color r = "0.905882352941" g = "0.0" b = "1.0" a = "1.0" />
<color r = "0.905882352941" g = "0.0" b = "1.0" a = "1.0" />
<color r = "0.905882352941" g = "0.0" b = "1.0" a = "1.0" />
<color r = "0.905882352941" g = "0.0" b = "1.0" a = "1.0" />
<color r = "0.905882352941" g = "0.0" b = "1.0" a = "1.0" />
<color r = "0.905882352941" g = "0.0" b = "1.0" a = "1.0" />
<color r = "0.905882352941" g = "0.0" b = "1.0" a = "1.0" />
<color r = "0.466666666667" g = "0.0" b = "0.490196078431" a = "1.0" />
<color r = "0.466666666667" g = "0.0" b = "0.490196078431" a = "1.0" />
<color r = "0.466666666667" g = "0.0" b = "0.490196078431" a = "1.0" />
<color r = "0.466666666667" g = "0.0" b = "0.490196078431" a = "1.0" />
<color r = "0.466666666667" g = "0.0" b = "0.490196078431" a = "1.0" />
<color r = "0.466666666667" g = "0.0" b = "0.490196078431" a = "1.0" />
<color r = "0.466666666667" g = "0.0" b = "0.490196078431" a = "1.0" />
<color r = "0.466666666667" g = "0.0" b = "0.490196078431" a = "1.0" />
<color r = "0.466666666667" g = "0.0" b = "0.490196078431" a = "1.0" />
<color r = "0.466666666667" g = "0.0" b = "0.490196078431" a = "1.0" />
<color r = "0.466666666667" g = "0.0" b = "0.490196078431" a = "1.0" />
<color r = "0.466666666667" g = "0.0" b = "0.490196078431" a = "1.0" />
<color r = "0.466666666667" g = "0.0" b = "0.490196078431" a = "1.0" />
<color r = "0.466666666667" g = "0.0" b = "0.490196078431" a = "1.0" />
<color r = "0.466666666667" g = "0.0" b = "0.490196078431" a = "1.0" />
<color r = "0.466666666667" g = "0.0" b = "0.490196078431" a = "1.0" />
<color a="0.0" b="0.0" g="0.0" r="0.0"/>
<color a="0.0" b="0.0" g="0.0" r="0.0"/>
<color a="0.0" b="0.0" g="0.0" r="0.0"/>
<color a="0.0" b="0.0" g="0.0" r="0.0"/>
<color a="0.0" b="0.0" g="0.0" r="0.0"/>
<color a="0.0" b="0.0" g="0.0" r="0.0"/>
<color a="0.0" b="0.0" g="0.0" r="0.0"/>
<color a="0.0" b="0.0" g="0.0" r="0.0"/>
<color a="0.0" b="0.0" g="0.0" r="0.0"/>
<color a="0.0" b="0.0" g="0.0" r="0.0"/>
<color a="0.0" b="0.0" g="0.0" r="0.0"/>
<color a="0.0" b="0.0" g="0.0" r="0.0"/>
<color a="0.0" b="0.0" g="0.0" r="0.0"/>
<color a="0.0" b="0.0" g="0.0" r="0.0"/>
<color a="0.0" b="0.0" g="0.0" r="0.0"/>
<color a="0.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.6117647" g="0.6117647" r="0.6117647"/>
<color a="1.0" b="0.6117647" g="0.6117647" r="0.6117647"/>
<color a="1.0" b="0.6117647" g="0.6117647" r="0.6117647"/>
<color a="1.0" b="0.6117647" g="0.6117647" r="0.6117647"/>
<color a="1.0" b="0.6117647" g="0.6117647" r="0.6117647"/>
<color a="1.0" b="0.6117647" g="0.6117647" r="0.6117647"/>
<color a="1.0" b="0.6117647" g="0.6117647" r="0.6117647"/>
<color a="1.0" b="0.6117647" g="0.6117647" r="0.6117647"/>
<color a="1.0" b="0.6117647" g="0.6117647" r="0.6117647"/>
<color a="1.0" b="0.6117647" g="0.6117647" r="0.6117647"/>
<color a="1.0" b="0.6117647" g="0.6117647" r="0.6117647"/>
<color a="1.0" b="0.6117647" g="0.6117647" r="0.6117647"/>
<color a="1.0" b="0.6117647" g="0.6117647" r="0.6117647"/>
<color a="1.0" b="0.6117647" g="0.6117647" r="0.6117647"/>
<color a="1.0" b="0.6117647" g="0.6117647" r="0.6117647"/>
<color a="1.0" b="0.6117647" g="0.6117647" r="0.6117647"/>
<color a="1.0" b="0.4627451" g="0.4627451" r="0.4627451"/>
<color a="1.0" b="0.4627451" g="0.4627451" r="0.4627451"/>
<color a="1.0" b="0.4627451" g="0.4627451" r="0.4627451"/>
<color a="1.0" b="0.4627451" g="0.4627451" r="0.4627451"/>
<color a="1.0" b="0.4627451" g="0.4627451" r="0.4627451"/>
<color a="1.0" b="0.4627451" g="0.4627451" r="0.4627451"/>
<color a="1.0" b="0.4627451" g="0.4627451" r="0.4627451"/>
<color a="1.0" b="0.4627451" g="0.4627451" r="0.4627451"/>
<color a="1.0" b="0.4627451" g="0.4627451" r="0.4627451"/>
<color a="1.0" b="0.4627451" g="0.4627451" r="0.4627451"/>
<color a="1.0" b="0.4627451" g="0.4627451" r="0.4627451"/>
<color a="1.0" b="0.4627451" g="0.4627451" r="0.4627451"/>
<color a="1.0" b="0.4627451" g="0.4627451" r="0.4627451"/>
<color a="1.0" b="0.4627451" g="0.4627451" r="0.4627451"/>
<color a="1.0" b="0.4627451" g="0.4627451" r="0.4627451"/>
<color a="1.0" b="0.4627451" g="0.4627451" r="0.4627451"/>
<color a="1.0" b="0.6901961" g="0.6901961" r="1.0"/>
<color a="1.0" b="0.6901961" g="0.6901961" r="1.0"/>
<color a="1.0" b="0.6901961" g="0.6901961" r="1.0"/>
<color a="1.0" b="0.6901961" g="0.6901961" r="1.0"/>
<color a="1.0" b="0.6901961" g="0.6901961" r="1.0"/>
<color a="1.0" b="0.6901961" g="0.6901961" r="1.0"/>
<color a="1.0" b="0.6901961" g="0.6901961" r="1.0"/>
<color a="1.0" b="0.6901961" g="0.6901961" r="1.0"/>
<color a="1.0" b="0.6901961" g="0.6901961" r="1.0"/>
<color a="1.0" b="0.6901961" g="0.6901961" r="1.0"/>
<color a="1.0" b="0.6901961" g="0.6901961" r="1.0"/>
<color a="1.0" b="0.6901961" g="0.6901961" r="1.0"/>
<color a="1.0" b="0.6901961" g="0.6901961" r="1.0"/>
<color a="1.0" b="0.6901961" g="0.6901961" r="1.0"/>
<color a="1.0" b="0.6901961" g="0.6901961" r="1.0"/>
<color a="1.0" b="0.6901961" g="0.6901961" r="1.0"/>
<color a="1.0" b="1.0" g="1.0" r="0.0"/>
<color a="1.0" b="1.0" g="1.0" r="0.0"/>
<color a="1.0" b="1.0" g="1.0" r="0.0"/>
<color a="1.0" b="1.0" g="1.0" r="0.0"/>
<color a="1.0" b="1.0" g="1.0" r="0.0"/>
<color a="1.0" b="1.0" g="1.0" r="0.0"/>
<color a="1.0" b="1.0" g="1.0" r="0.0"/>
<color a="1.0" b="1.0" g="1.0" r="0.0"/>
<color a="1.0" b="1.0" g="1.0" r="0.0"/>
<color a="1.0" b="1.0" g="1.0" r="0.0"/>
<color a="1.0" b="1.0" g="1.0" r="0.0"/>
<color a="1.0" b="1.0" g="1.0" r="0.0"/>
<color a="1.0" b="1.0" g="1.0" r="0.0"/>
<color a="1.0" b="1.0" g="1.0" r="0.0"/>
<color a="1.0" b="1.0" g="1.0" r="0.0"/>
<color a="1.0" b="1.0" g="1.0" r="0.0"/>
<color a="1.0" b="1.0" g="0.5647059" r="0.0"/>
<color a="1.0" b="1.0" g="0.5647059" r="0.0"/>
<color a="1.0" b="1.0" g="0.5647059" r="0.0"/>
<color a="1.0" b="1.0" g="0.5647059" r="0.0"/>
<color a="1.0" b="1.0" g="0.5647059" r="0.0"/>
<color a="1.0" b="1.0" g="0.5647059" r="0.0"/>
<color a="1.0" b="1.0" g="0.5647059" r="0.0"/>
<color a="1.0" b="1.0" g="0.5647059" r="0.0"/>
<color a="1.0" b="1.0" g="0.5647059" r="0.0"/>
<color a="1.0" b="1.0" g="0.5647059" r="0.0"/>
<color a="1.0" b="1.0" g="0.5647059" r="0.0"/>
<color a="1.0" b="1.0" g="0.5647059" r="0.0"/>
<color a="1.0" b="1.0" g="0.5647059" r="0.0"/>
<color a="1.0" b="1.0" g="0.5647059" r="0.0"/>
<color a="1.0" b="1.0" g="0.5647059" r="0.0"/>
<color a="1.0" b="1.0" g="0.5647059" r="0.0"/>
<color a="1.0" b="0.5647059" g="0.9843137" r="0.0"/>
<color a="1.0" b="0.5647059" g="0.9843137" r="0.0"/>
<color a="1.0" b="0.5647059" g="0.9843137" r="0.0"/>
<color a="1.0" b="0.5647059" g="0.9843137" r="0.0"/>
<color a="1.0" b="0.5647059" g="0.9843137" r="0.0"/>
<color a="1.0" b="0.5647059" g="0.9843137" r="0.0"/>
<color a="1.0" b="0.5647059" g="0.9843137" r="0.0"/>
<color a="1.0" b="0.5647059" g="0.9843137" r="0.0"/>
<color a="1.0" b="0.5647059" g="0.9843137" r="0.0"/>
<color a="1.0" b="0.5647059" g="0.9843137" r="0.0"/>
<color a="1.0" b="0.5647059" g="0.9843137" r="0.0"/>
<color a="1.0" b="0.5647059" g="0.9843137" r="0.0"/>
<color a="1.0" b="0.5647059" g="0.9843137" r="0.0"/>
<color a="1.0" b="0.5647059" g="0.9843137" r="0.0"/>
<color a="1.0" b="0.5647059" g="0.9843137" r="0.0"/>
<color a="1.0" b="0.5647059" g="0.9843137" r="0.0"/>
<color a="1.0" b="0.0" g="0.73333335" r="0.0"/>
<color a="1.0" b="0.0" g="0.73333335" r="0.0"/>
<color a="1.0" b="0.0" g="0.73333335" r="0.0"/>
<color a="1.0" b="0.0" g="0.73333335" r="0.0"/>
<color a="1.0" b="0.0" g="0.73333335" r="0.0"/>
<color a="1.0" b="0.0" g="0.73333335" r="0.0"/>
<color a="1.0" b="0.0" g="0.73333335" r="0.0"/>
<color a="1.0" b="0.0" g="0.73333335" r="0.0"/>
<color a="1.0" b="0.0" g="0.73333335" r="0.0"/>
<color a="1.0" b="0.0" g="0.73333335" r="0.0"/>
<color a="1.0" b="0.0" g="0.73333335" r="0.0"/>
<color a="1.0" b="0.0" g="0.73333335" r="0.0"/>
<color a="1.0" b="0.0" g="0.73333335" r="0.0"/>
<color a="1.0" b="0.0" g="0.73333335" r="0.0"/>
<color a="1.0" b="0.0" g="0.73333335" r="0.0"/>
<color a="1.0" b="0.0" g="0.73333335" r="0.0"/>
<color a="1.0" b="0.3764706" g="0.8156863" r="0.8156863"/>
<color a="1.0" b="0.3764706" g="0.8156863" r="0.8156863"/>
<color a="1.0" b="0.3764706" g="0.8156863" r="0.8156863"/>
<color a="1.0" b="0.3764706" g="0.8156863" r="0.8156863"/>
<color a="1.0" b="0.3764706" g="0.8156863" r="0.8156863"/>
<color a="1.0" b="0.3764706" g="0.8156863" r="0.8156863"/>
<color a="1.0" b="0.3764706" g="0.8156863" r="0.8156863"/>
<color a="1.0" b="0.3764706" g="0.8156863" r="0.8156863"/>
<color a="1.0" b="0.3764706" g="0.8156863" r="0.8156863"/>
<color a="1.0" b="0.3764706" g="0.8156863" r="0.8156863"/>
<color a="1.0" b="0.3764706" g="0.8156863" r="0.8156863"/>
<color a="1.0" b="0.3764706" g="0.8156863" r="0.8156863"/>
<color a="1.0" b="0.3764706" g="0.8156863" r="0.8156863"/>
<color a="1.0" b="0.3764706" g="0.8156863" r="0.8156863"/>
<color a="1.0" b="0.3764706" g="0.8156863" r="0.8156863"/>
<color a="1.0" b="0.3764706" g="0.8156863" r="0.8156863"/>
<color a="1.0" b="0.5176471" g="0.5176471" r="0.8235294"/>
<color a="1.0" b="0.5176471" g="0.5176471" r="0.8235294"/>
<color a="1.0" b="0.5176471" g="0.5176471" r="0.8235294"/>
<color a="1.0" b="0.5176471" g="0.5176471" r="0.8235294"/>
<color a="1.0" b="0.5176471" g="0.5176471" r="0.8235294"/>
<color a="1.0" b="0.5176471" g="0.5176471" r="0.8235294"/>
<color a="1.0" b="0.5176471" g="0.5176471" r="0.8235294"/>
<color a="1.0" b="0.5176471" g="0.5176471" r="0.8235294"/>
<color a="1.0" b="0.5176471" g="0.5176471" r="0.8235294"/>
<color a="1.0" b="0.5176471" g="0.5176471" r="0.8235294"/>
<color a="1.0" b="0.5176471" g="0.5176471" r="0.8235294"/>
<color a="1.0" b="0.5176471" g="0.5176471" r="0.8235294"/>
<color a="1.0" b="0.5176471" g="0.5176471" r="0.8235294"/>
<color a="1.0" b="0.5176471" g="0.5176471" r="0.8235294"/>
<color a="1.0" b="0.5176471" g="0.5176471" r="0.8235294"/>
<color a="1.0" b="0.5176471" g="0.5176471" r="0.8235294"/>
<color a="1.0" b="0.0" g="0.0" r="1.0"/>
<color a="1.0" b="0.0" g="0.0" r="1.0"/>
<color a="1.0" b="0.0" g="0.0" r="1.0"/>
<color a="1.0" b="0.0" g="0.0" r="1.0"/>
<color a="1.0" b="0.0" g="0.0" r="1.0"/>
<color a="1.0" b="0.0" g="0.0" r="1.0"/>
<color a="1.0" b="0.0" g="0.0" r="1.0"/>
<color a="1.0" b="0.0" g="0.0" r="1.0"/>
<color a="1.0" b="0.0" g="0.0" r="1.0"/>
<color a="1.0" b="0.0" g="0.0" r="1.0"/>
<color a="1.0" b="0.0" g="0.0" r="1.0"/>
<color a="1.0" b="0.0" g="0.0" r="1.0"/>
<color a="1.0" b="0.0" g="0.0" r="1.0"/>
<color a="1.0" b="0.0" g="0.0" r="1.0"/>
<color a="1.0" b="0.0" g="0.0" r="1.0"/>
<color a="1.0" b="0.0" g="0.0" r="1.0"/>
<color a="1.0" b="0.078431375" g="0.078431375" r="0.627451"/>
<color a="1.0" b="0.078431375" g="0.078431375" r="0.627451"/>
<color a="1.0" b="0.078431375" g="0.078431375" r="0.627451"/>
<color a="1.0" b="0.078431375" g="0.078431375" r="0.627451"/>
<color a="1.0" b="0.078431375" g="0.078431375" r="0.627451"/>
<color a="1.0" b="0.078431375" g="0.078431375" r="0.627451"/>
<color a="1.0" b="0.078431375" g="0.078431375" r="0.627451"/>
<color a="1.0" b="0.078431375" g="0.078431375" r="0.627451"/>
<color a="1.0" b="0.078431375" g="0.078431375" r="0.627451"/>
<color a="1.0" b="0.078431375" g="0.078431375" r="0.627451"/>
<color a="1.0" b="0.078431375" g="0.078431375" r="0.627451"/>
<color a="1.0" b="0.078431375" g="0.078431375" r="0.627451"/>
<color a="1.0" b="0.078431375" g="0.078431375" r="0.627451"/>
<color a="1.0" b="0.078431375" g="0.078431375" r="0.627451"/>
<color a="1.0" b="0.078431375" g="0.078431375" r="0.627451"/>
<color a="1.0" b="0.078431375" g="0.078431375" r="0.627451"/>
<color a="1.0" b="0.0" g="1.0" r="1.0"/>
<color a="1.0" b="0.0" g="1.0" r="1.0"/>
<color a="1.0" b="0.0" g="1.0" r="1.0"/>
<color a="1.0" b="0.0" g="1.0" r="1.0"/>
<color a="1.0" b="0.0" g="1.0" r="1.0"/>
<color a="1.0" b="0.0" g="1.0" r="1.0"/>
<color a="1.0" b="0.0" g="1.0" r="1.0"/>
<color a="1.0" b="0.0" g="1.0" r="1.0"/>
<color a="1.0" b="0.0" g="1.0" r="1.0"/>
<color a="1.0" b="0.0" g="1.0" r="1.0"/>
<color a="1.0" b="0.0" g="1.0" r="1.0"/>
<color a="1.0" b="0.0" g="1.0" r="1.0"/>
<color a="1.0" b="0.0" g="1.0" r="1.0"/>
<color a="1.0" b="0.0" g="1.0" r="1.0"/>
<color a="1.0" b="0.0" g="1.0" r="1.0"/>
<color a="1.0" b="0.0" g="1.0" r="1.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="0.0" g="0.0" r="0.0"/>
<color a="1.0" b="1.0" g="0.0" r="0.90588236"/>
<color a="1.0" b="1.0" g="0.0" r="0.90588236"/>
<color a="1.0" b="1.0" g="0.0" r="0.90588236"/>
<color a="1.0" b="1.0" g="0.0" r="0.90588236"/>
<color a="1.0" b="1.0" g="0.0" r="0.90588236"/>
<color a="1.0" b="1.0" g="0.0" r="0.90588236"/>
<color a="1.0" b="1.0" g="0.0" r="0.90588236"/>
<color a="1.0" b="1.0" g="0.0" r="0.90588236"/>
<color a="1.0" b="1.0" g="0.0" r="0.90588236"/>
<color a="1.0" b="1.0" g="0.0" r="0.90588236"/>
<color a="1.0" b="1.0" g="0.0" r="0.90588236"/>
<color a="1.0" b="1.0" g="0.0" r="0.90588236"/>
<color a="1.0" b="1.0" g="0.0" r="0.90588236"/>
<color a="1.0" b="1.0" g="0.0" r="0.90588236"/>
<color a="1.0" b="1.0" g="0.0" r="0.90588236"/>
<color a="1.0" b="1.0" g="0.0" r="0.90588236"/>
<color a="1.0" b="0.49019608" g="0.0" r="0.46666667"/>
<color a="1.0" b="0.49019608" g="0.0" r="0.46666667"/>
<color a="1.0" b="0.49019608" g="0.0" r="0.46666667"/>
<color a="1.0" b="0.49019608" g="0.0" r="0.46666667"/>
<color a="1.0" b="0.49019608" g="0.0" r="0.46666667"/>
<color a="1.0" b="0.49019608" g="0.0" r="0.46666667"/>
<color a="1.0" b="0.49019608" g="0.0" r="0.46666667"/>
<color a="1.0" b="0.49019608" g="0.0" r="0.46666667"/>
<color a="1.0" b="0.49019608" g="0.0" r="0.46666667"/>
<color a="1.0" b="0.49019608" g="0.0" r="0.46666667"/>
<color a="1.0" b="0.49019608" g="0.0" r="0.46666667"/>
<color a="1.0" b="0.49019608" g="0.0" r="0.46666667"/>
<color a="1.0" b="0.49019608" g="0.0" r="0.46666667"/>
<color a="1.0" b="0.49019608" g="0.0" r="0.46666667"/>
<color a="1.0" b="0.49019608" g="0.0" r="0.46666667"/>
<color a="1.0" b="0.49019608" g="0.0" r="0.46666667"/>
</colorMap>

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