Merge branch 'master_14.4.1' into asm_14.4.1
Former-commit-id:07c742044d
[formerly07c742044d
[formerly 8f839ec64da04492e6cf109fdf47b95f08db5388]] Former-commit-id:de502a310b
Former-commit-id:7517728c42
This commit is contained in:
commit
a3c39c1a8d
210 changed files with 23780 additions and 1090 deletions
|
@ -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>
|
|
@ -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>
|
|
@ -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
|
|
@ -0,0 +1,4 @@
|
|||
source.. = src/
|
||||
output.. = bin/
|
||||
bin.includes = META-INF/,\
|
||||
.
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
|
@ -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>
|
17
CIMSS/edu.wisc.ssec.cimss.edex.convectprob.feature/.project
Normal file
17
CIMSS/edu.wisc.ssec.cimss.edex.convectprob.feature/.project
Normal 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>
|
|
@ -0,0 +1 @@
|
|||
bin.includes = feature.xml
|
|
@ -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>
|
13
CIMSS/edu.wisc.ssec.cimss.edex.plugin.convectprob/.classpath
Normal file
13
CIMSS/edu.wisc.ssec.cimss.edex.plugin.convectprob/.classpath
Normal 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>
|
28
CIMSS/edu.wisc.ssec.cimss.edex.plugin.convectprob/.project
Normal file
28
CIMSS/edu.wisc.ssec.cimss.edex.plugin.convectprob/.project
Normal 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>
|
|
@ -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
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
source.. = src/
|
||||
output.. = bin/
|
||||
bin.includes = META-INF/,\
|
||||
.,\
|
||||
res/
|
|
@ -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>
|
|
@ -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>
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<purgeRuleSet>
|
||||
<defaultRule>
|
||||
<versionsToKeep>60</versionsToKeep>
|
||||
</defaultRule>
|
||||
</purgeRuleSet>
|
|
@ -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>
|
17
CIMSS/edu.wisc.ssec.cimss.viz.convectprob.feature/.project
Normal file
17
CIMSS/edu.wisc.ssec.cimss.viz.convectprob.feature/.project
Normal 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>
|
|
@ -0,0 +1 @@
|
|||
bin.includes = feature.xml
|
|
@ -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>
|
7
CIMSS/edu.wisc.ssec.cimss.viz.convectprob/.classpath
Normal file
7
CIMSS/edu.wisc.ssec.cimss.viz.convectprob/.classpath
Normal 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>
|
28
CIMSS/edu.wisc.ssec.cimss.viz.convectprob/.project
Normal file
28
CIMSS/edu.wisc.ssec.cimss.viz.convectprob/.project
Normal 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>
|
|
@ -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
|
|
@ -0,0 +1,6 @@
|
|||
source.. = src/
|
||||
output.. = bin/
|
||||
bin.includes = META-INF/,\
|
||||
.,\
|
||||
plugin.xml,\
|
||||
localization/
|
|
@ -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>
|
39
CIMSS/edu.wisc.ssec.cimss.viz.convectprob/plugin.xml
Normal file
39
CIMSS/edu.wisc.ssec.cimss.viz.convectprob/plugin.xml
Normal 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>
|
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
5
RadarServer/com.raytheon.rcm.lib/src/com/raytheon/rcm/products/radarInfo.txt
Normal file → Executable file
5
RadarServer/com.raytheon.rcm.lib/src/com/raytheon/rcm/products/radarInfo.txt
Normal file → Executable 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
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -68,6 +68,7 @@ import com.raytheon.viz.core.graphing.xy.XYWindImageData;
|
|||
* May 07, 2010 bsteffen Initial creation
|
||||
* Feb 17, 2014 2661 bsteffen Use only u,v for vectors.
|
||||
* Jun 18, 2014 3242 njensen Overrode getEnsembleId()
|
||||
* Nov 19, 2014 5056 jing Added get arbitrary record
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -324,7 +325,7 @@ public class GridTimeSeriesAdapter extends
|
|||
dataPoint = new XYData(time, value);
|
||||
}
|
||||
}
|
||||
if (dataPoint != null){
|
||||
if (dataPoint != null) {
|
||||
data.add(dataPoint);
|
||||
}
|
||||
}
|
||||
|
@ -356,4 +357,20 @@ public class GridTimeSeriesAdapter extends
|
|||
public String getEnsembleId() {
|
||||
return ensembleId;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method gets an arbitrary record from the cache.
|
||||
*
|
||||
* @return - A grid record.
|
||||
*/
|
||||
public GridRecord getArbitraryRecord() {
|
||||
|
||||
synchronized (cache) {
|
||||
if (cache.keySet().isEmpty()) {
|
||||
return null;
|
||||
} else {
|
||||
return (GridRecord) cache.keySet().toArray()[0];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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"/>
|
||||
|
|
|
@ -100,6 +100,8 @@ import com.vividsolutions.jts.geom.Geometry;
|
|||
* Dec 19, 2013 DR 16795 D. Friedman Transform pixel coordinate in inspect
|
||||
* Jun 18, 2014 3242 njensen Added ensembleId to legend
|
||||
* Aug 15, 2014 3535 njensen Bigger inset map point
|
||||
* Nov 19, 2014 5056 jing added getAdapter method, and
|
||||
* changed getName to add level
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -134,7 +136,7 @@ public class TimeSeriesResource extends
|
|||
|
||||
protected CombineOperation combineOperation;
|
||||
|
||||
private Set<DataTime> dataTimes = new TreeSet<DataTime>();
|
||||
protected Set<DataTime> dataTimes = new TreeSet<DataTime>();
|
||||
|
||||
private Job dataRequestJob = new Job("Requesting Time Series Data") {
|
||||
|
||||
|
@ -255,6 +257,10 @@ public class TimeSeriesResource extends
|
|||
});
|
||||
}
|
||||
|
||||
public AbstractTimeSeriesAdapter<?> getAdapter() {
|
||||
return adapter;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void disposeInternal() {
|
||||
if (secondaryResource != null) {
|
||||
|
@ -485,22 +491,26 @@ public class TimeSeriesResource extends
|
|||
}
|
||||
|
||||
String levelKey = resourceData.getLevelKey();
|
||||
String levelUnit = levelKey.replaceAll("[^a-zA-Z]", "");
|
||||
boolean isHeight = levelUnit.equalsIgnoreCase("mb")
|
||||
|| levelUnit.equalsIgnoreCase("agl")
|
||||
|| levelUnit.contains("Agl");
|
||||
// String levelUnit = levelKey.replaceAll("[^a-zA-Z]", "");
|
||||
// boolean isHeight = levelUnit.equalsIgnoreCase("mb")
|
||||
// || levelUnit.equalsIgnoreCase("agl")
|
||||
// || levelUnit.contains("Agl");
|
||||
|
||||
// Make legend for point data
|
||||
StringBuilder sb = new StringBuilder(String.format("%s pt%s %s%s %s%s",
|
||||
source, resourceData.getPointLetter(), lat, y >= 0 ? "N" : "S",
|
||||
lon, x >= 0 ? "E" : "W"));
|
||||
// add level in x legend only if levelKey is not empty
|
||||
StringBuilder sb = new StringBuilder(String.format(
|
||||
"%s %s pt%s %s%s %s%s", source, levelKey != null ? levelKey
|
||||
: "", resourceData.getPointLetter(), lat, y >= 0 ? "N"
|
||||
: "S", lon, x >= 0 ? "E" : "W"));
|
||||
|
||||
if (stnID != null) {
|
||||
sb.append(" ").append(stnID);
|
||||
}
|
||||
if (!isHeight) {
|
||||
sb.append(" ").append(resourceData.getLevelKey());
|
||||
}
|
||||
|
||||
// if (!isHeight) {
|
||||
// sb.append(" ").append(resourceData.getLevelKey());
|
||||
// }
|
||||
|
||||
sb.append(String.format(" %s %s %s", adapter.getParameterName(),
|
||||
"TSer", units != null && units.equals("") == false ? "("
|
||||
+ units + ")" : ""));
|
||||
|
|
|
@ -23,6 +23,10 @@ package com.raytheon.viz.awipstools.ui.action;
|
|||
import org.eclipse.core.commands.AbstractHandler;
|
||||
import org.eclipse.core.commands.ExecutionEvent;
|
||||
import org.eclipse.core.commands.ExecutionException;
|
||||
import org.eclipse.swt.SWT;
|
||||
import org.eclipse.swt.widgets.Event;
|
||||
import org.eclipse.swt.widgets.Listener;
|
||||
import org.eclipse.swt.widgets.MessageBox;
|
||||
import org.eclipse.swt.widgets.Shell;
|
||||
import org.eclipse.ui.PlatformUI;
|
||||
|
||||
|
@ -30,9 +34,8 @@ 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.status.StatusConstants;
|
||||
import com.raytheon.viz.awipstools.Activator;
|
||||
import com.raytheon.viz.awipstools.ui.dialog.LAPSToolsDlg;
|
||||
import com.raytheon.viz.ui.EditorUtil;
|
||||
|
||||
/**
|
||||
* TODO Add Description
|
||||
|
@ -43,7 +46,9 @@ import com.raytheon.viz.awipstools.ui.dialog.LAPSToolsDlg;
|
|||
*
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
*
|
||||
* May 2009 # bsteffen Initial creation
|
||||
* Nov 2013 # mccaslin Only one GUI dialog at a time
|
||||
* Oct 2014 # mccaslin Improved error handeling
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -53,15 +58,59 @@ import com.raytheon.viz.awipstools.ui.dialog.LAPSToolsDlg;
|
|||
public class LapsToolsAction extends AbstractHandler {
|
||||
private static final transient IUFStatusHandler statusHandler = UFStatus.getHandler(LapsToolsAction.class);
|
||||
|
||||
/**
|
||||
* LAPS Tools dialog.
|
||||
*/
|
||||
private static LAPSToolsDlg lapsToolsDlg = null;
|
||||
|
||||
public static LAPSToolsDlg getLapsToolsDlg() {
|
||||
return lapsToolsDlg;
|
||||
}
|
||||
|
||||
public Object execute(ExecutionEvent arg0) throws ExecutionException {
|
||||
Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow()
|
||||
.getShell();
|
||||
try {
|
||||
new LAPSToolsDlg(shell).open();
|
||||
} catch (VizException e) {
|
||||
statusHandler.handle(Priority.PROBLEM,
|
||||
"Error: Cannot open LAPS Tools", e);
|
||||
|
||||
if (lapsToolsDlg == null) {
|
||||
try {
|
||||
lapsToolsDlg = new LAPSToolsDlg(shell);
|
||||
lapsToolsDlg.addListener(SWT.Dispose, new Listener() {
|
||||
@Override
|
||||
public void handleEvent(Event event) {
|
||||
lapsToolsDlg = null;
|
||||
}
|
||||
});
|
||||
|
||||
if (lapsToolsDlg.isLapsInstalled()) {
|
||||
lapsToolsDlg.open();
|
||||
} else {
|
||||
String whatLapsIs ="LAPS data assimilation system, system requirements: " +
|
||||
"\n\to LAPS v2.0 installed" +
|
||||
"\n\to EDEX 'SITE' file containing LAPS domain, i.e. domain.xml" +
|
||||
"\n\n\n(Sorry LAPS does not work in the ADAM implementation of AWIPS.)";
|
||||
//Note: Go through the LAPS v2.0 Scripting Interface first, if you find that LAPS is not installed.
|
||||
|
||||
MessageBox mb = new MessageBox(EditorUtil.getActiveEditor().getSite().getShell(), SWT.ICON_WARNING | SWT.OK);
|
||||
mb.setText("Cannot open LAPS V2.0 Tools GUI");
|
||||
mb.setMessage(whatLapsIs);
|
||||
mb.open();
|
||||
lapsToolsDlg = null;
|
||||
|
||||
//int val = mb.open();
|
||||
//if (val == SWT.OK) {
|
||||
// AlertViz Customization Update
|
||||
//return false;
|
||||
//}
|
||||
|
||||
}
|
||||
|
||||
} catch (VizException e) {
|
||||
statusHandler.handle(Priority.PROBLEM,
|
||||
"Error: Cannot open LAPS V2.0 Tools GUI", e);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,7 +1,11 @@
|
|||
package com.raytheon.viz.awipstools.ui.action;
|
||||
|
||||
import java.awt.geom.Point2D;
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
import org.eclipse.jface.dialogs.MessageDialog;
|
||||
import org.eclipse.swt.widgets.Shell;
|
||||
import org.geotools.referencing.GeodeticCalculator;
|
||||
|
||||
import com.vividsolutions.jts.geom.Coordinate;
|
||||
|
@ -19,24 +23,24 @@ public class LapsToolsData {
|
|||
|
||||
private Double gridSpacing;
|
||||
|
||||
private Double dp;
|
||||
|
||||
private Double lowp;
|
||||
|
||||
private Double lat;
|
||||
|
||||
private Double lat2;
|
||||
|
||||
private Double lon;
|
||||
|
||||
private Coordinate[] corners;
|
||||
|
||||
|
||||
private Envelope cwaArea;
|
||||
|
||||
private Envelope validArea;
|
||||
|
||||
private Envelope validAreaOrig;
|
||||
|
||||
private Envelope validAreaDefault;
|
||||
|
||||
private Envelope gridArea;
|
||||
|
||||
private String areaCoverageString;
|
||||
|
||||
private Boolean belowLimits;
|
||||
|
||||
public Coordinate getGridCenter() {
|
||||
return gridCenter;
|
||||
}
|
||||
|
@ -61,22 +65,38 @@ public class LapsToolsData {
|
|||
return gridSpacing;
|
||||
}
|
||||
|
||||
public Double getDp() {
|
||||
return dp;
|
||||
}
|
||||
public String getAreaCoverageString() {
|
||||
double nxDist = getNx()*getGridSpacing()/1000;
|
||||
double nyDist = getNy()*getGridSpacing()/1000;
|
||||
double areaCoverage = nxDist * nyDist;
|
||||
this.areaCoverageString = String.format("%.1f km by %.1f km = %.2f km2",
|
||||
nxDist, nyDist, areaCoverage);
|
||||
double maximumArea = 14140140.;
|
||||
double minimumArea = 150000.;
|
||||
|
||||
public Double getLowp() {
|
||||
return lowp;
|
||||
}
|
||||
if(areaCoverage > maximumArea) {
|
||||
System.out.print("LAPS Tools Data: problem with this domain exceeding the RUC 236 background\n");
|
||||
MessageDialog.openWarning(getShell(), "Domain Size Error",
|
||||
"The size of new domain would exceed the maximum limits \n\tdefined by model background (the RAP40 grid).\n");
|
||||
} else if(areaCoverage < minimumArea) {
|
||||
System.out.print("LAPS Tools Data: problem with this domain coverage area being smaller than the CWA coverage area\n");
|
||||
MessageDialog.openWarning(getShell(), "Domain Size Error",
|
||||
"The size of new domain area would LESS than the minimum limits \n\tdefined by the CWA coverage area.");
|
||||
}
|
||||
|
||||
public Double getLat() {
|
||||
|
||||
return areaCoverageString;
|
||||
}
|
||||
|
||||
private Shell getShell() {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
public Double getLat() {
|
||||
return lat;
|
||||
}
|
||||
|
||||
public Double getLat2() {
|
||||
return lat2;
|
||||
}
|
||||
|
||||
public Double getLon() {
|
||||
return lon;
|
||||
}
|
||||
|
@ -85,22 +105,57 @@ public class LapsToolsData {
|
|||
return cwaArea;
|
||||
}
|
||||
|
||||
public void setLimits(Boolean belowLimits) {
|
||||
this.belowLimits = belowLimits;
|
||||
}
|
||||
|
||||
public Boolean getLimits() {
|
||||
return belowLimits;
|
||||
}
|
||||
|
||||
public Envelope getValidArea() {
|
||||
if (validArea == null) {
|
||||
double halfHeight = Math.abs(corners[3].x - corners[0].x) / 2;
|
||||
double halfWidth = Math.abs(corners[0].y - corners[3].y) / 2;
|
||||
double cwa_dist_lat = halfHeight - cwaArea.getHeight() / 2;
|
||||
double cwa_dist_lon = halfWidth - cwaArea.getWidth() / 2;
|
||||
double buffer = .1; // tenth of a degree buffer around CWA (in km)
|
||||
double cosBuffer = Math.abs(2*Math.cos(cwaArea.centre().y));
|
||||
double cwa_dist_lat = Math.abs(cwaArea.getHeight() / 2) + (2 * buffer);
|
||||
double cwa_dist_lon = Math.abs(cwaArea.getWidth() / 2) + (2 * buffer * cosBuffer);
|
||||
validArea = new Envelope(cwaArea.centre());
|
||||
validArea.expandBy(cwa_dist_lon, cwa_dist_lat);
|
||||
validArea.expandBy(cwa_dist_lon, cwa_dist_lat);
|
||||
|
||||
double z = Math.abs(cwaArea.getHeight() / cwaArea.getWidth()) ;
|
||||
System.out.print("LAPS Tools Data: cwa height = "+cwaArea.getHeight()+"\n");
|
||||
System.out.print("cwa width = "+cwaArea.getWidth()+"\n");
|
||||
System.out.print("z ratio = "+z+"\n");
|
||||
}
|
||||
return validArea;
|
||||
}
|
||||
|
||||
public Envelope getValidAreaOrig() {
|
||||
if (validAreaOrig == null) {
|
||||
double cwa_dist_lat = Math.abs(cwaArea.getHeight() / 2);
|
||||
double cwa_dist_lon = Math.abs(cwaArea.getWidth() / 2);
|
||||
validAreaOrig = new Envelope(cwaArea.centre());
|
||||
validAreaOrig.expandBy(cwa_dist_lon, cwa_dist_lat);
|
||||
}
|
||||
return validAreaOrig;
|
||||
}
|
||||
|
||||
public Envelope getValidAreaDefault() {
|
||||
if (validAreaDefault == null) {
|
||||
double buffer = 1; // half degree buffer around CWA (in km)
|
||||
double cosBuffer = Math.abs(2*Math.cos(cwaArea.centre().y));
|
||||
double cwa_dist_lat = Math.abs(cwaArea.getHeight() / 2) + (2 * buffer);
|
||||
double cwa_dist_lon = Math.abs(cwaArea.getWidth() / 2) + (2 * buffer * cosBuffer);
|
||||
validAreaDefault = new Envelope(cwaArea.centre());
|
||||
validAreaDefault.expandBy(cwa_dist_lon, cwa_dist_lat);
|
||||
}
|
||||
return validAreaDefault;
|
||||
}
|
||||
|
||||
public Envelope getGridArea() {
|
||||
if (gridArea == null) {
|
||||
double width = gridSpacing * nx;
|
||||
double height = gridSpacing * ny;
|
||||
double width = getGridSpacing() * nx;
|
||||
double height = getGridSpacing() * ny;
|
||||
GeodeticCalculator gc = new GeodeticCalculator();
|
||||
gc.setStartingGeographicPoint(gridCenter.x, gridCenter.y);
|
||||
gc.setDirection(0.0, height / 2);
|
||||
|
@ -129,16 +184,7 @@ public class LapsToolsData {
|
|||
}
|
||||
return gridArea;
|
||||
}
|
||||
|
||||
public Coordinate[] getCorners() {
|
||||
return corners;
|
||||
}
|
||||
|
||||
public void setCorners(Coordinate[] corners) {
|
||||
validArea = null;
|
||||
this.corners = corners;
|
||||
}
|
||||
|
||||
|
||||
public void setCwaArea(Envelope cwaArea) {
|
||||
validArea = null;
|
||||
this.cwaArea = cwaArea;
|
||||
|
@ -178,24 +224,71 @@ public class LapsToolsData {
|
|||
this.nz = nz;
|
||||
}
|
||||
|
||||
public void setDp(Double dp) {
|
||||
this.dp = dp;
|
||||
}
|
||||
|
||||
public void setLowp(Double lowp) {
|
||||
this.lowp = lowp;
|
||||
}
|
||||
|
||||
public void setLat(Double lat) {
|
||||
this.lat = lat;
|
||||
}
|
||||
|
||||
public void setLat2(Double lat2) {
|
||||
this.lat2 = lat2;
|
||||
}
|
||||
|
||||
public void setLon(Double lon) {
|
||||
this.lon = lon;
|
||||
}
|
||||
|
||||
//LAPS domain.xml has <domain> tags and <NX_L> tags, etc
|
||||
@XmlRootElement(name="domain", namespace="")
|
||||
public static class LapsDomain {
|
||||
|
||||
private Integer nx;
|
||||
private Integer ny;
|
||||
private Integer nz;
|
||||
private Double gridSpacing;
|
||||
private Double lat;
|
||||
private Double lon;
|
||||
|
||||
public int getNx() {
|
||||
return nx;
|
||||
}
|
||||
@XmlElement(name = "NX_L")
|
||||
public void setNx(int nx) {
|
||||
this.nx = nx;
|
||||
}
|
||||
|
||||
public int getNy() {
|
||||
return ny;
|
||||
}
|
||||
@XmlElement(name = "NY_L")
|
||||
public void setNy(int ny) {
|
||||
this.ny = ny;
|
||||
}
|
||||
|
||||
public int getNz() {
|
||||
return nz;
|
||||
}
|
||||
@XmlElement(name = "NK_LAPS")
|
||||
public void setNz(int nz) {
|
||||
this.nz = nz;
|
||||
}
|
||||
|
||||
public Double getGridSpacing() {
|
||||
return gridSpacing;
|
||||
}
|
||||
@XmlElement(name = "GRID_SPACING_M")
|
||||
public void setGridSpacing(Double gridSpacing) {
|
||||
this.gridSpacing = gridSpacing;
|
||||
}
|
||||
|
||||
public Double getGridCenLat() {
|
||||
return lat;
|
||||
}
|
||||
@XmlElement(name = "GRID_CEN_LAT")
|
||||
public void setGridCenLat(Double lat) {
|
||||
this.lat = lat;
|
||||
}
|
||||
|
||||
public Double getGridCenLon() {
|
||||
return lon;
|
||||
}
|
||||
@XmlElement(name = "GRID_CEN_LON")
|
||||
public void setGridCenLon(Double lon) {
|
||||
this.lon = lon;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,12 +4,7 @@ import java.io.BufferedReader;
|
|||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileReader;
|
||||
import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.OutputStreamWriter;
|
||||
import java.io.Reader;
|
||||
import java.io.Writer;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
|
@ -17,28 +12,41 @@ import java.util.HashMap;
|
|||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.xml.bind.JAXB;
|
||||
import javax.xml.bind.JAXBContext;
|
||||
import javax.xml.bind.JAXBException;
|
||||
import javax.xml.bind.Unmarshaller;
|
||||
|
||||
import com.raytheon.uf.common.dataquery.requests.RequestConstraint;
|
||||
import com.raytheon.uf.common.geospatial.SpatialException;
|
||||
import com.raytheon.uf.common.geospatial.SpatialQueryFactory;
|
||||
import com.raytheon.uf.common.geospatial.SpatialQueryResult;
|
||||
import com.raytheon.uf.common.localization.IPathManager;
|
||||
import com.raytheon.uf.common.localization.LocalizationContext;
|
||||
import com.raytheon.uf.common.localization.LocalizationContext.LocalizationLevel;
|
||||
import com.raytheon.uf.common.localization.LocalizationContext.LocalizationType;
|
||||
import com.raytheon.uf.common.localization.LocalizationFile;
|
||||
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.time.SimulatedTime;
|
||||
import com.raytheon.uf.viz.core.exception.VizException;
|
||||
import com.raytheon.uf.viz.core.localization.LocalizationManager;
|
||||
import com.vividsolutions.jts.geom.Coordinate;
|
||||
import com.raytheon.viz.awipstools.ui.action.LapsToolsData.LapsDomain;
|
||||
import com.vividsolutions.jts.geom.Envelope;
|
||||
|
||||
/**
|
||||
* This class performs all the filesystem and server input/output for the laps
|
||||
* tools. This implementation was ported as directly as possible from awips1,
|
||||
* and is not necessarily a good design for multiprocess and multisystem
|
||||
* communication.
|
||||
* This class no longer performs all the file system, server input/output for laps.
|
||||
* LAPS support scripts now conduct the localization process.
|
||||
*
|
||||
* <pre>
|
||||
*
|
||||
* SOFTWARE HISTORY
|
||||
*
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
*
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* May 2009 # bsteffen Initial creation
|
||||
* Nov 2013 # mccaslin New design approach, changed from OS calls to file io, read xml code, etc
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -47,331 +55,147 @@ import com.vividsolutions.jts.geom.Coordinate;
|
|||
*/
|
||||
public class LapsToolsIO {
|
||||
|
||||
private static final String SERVER_STATUS_CMD_FRMT = "%s uname -n";
|
||||
private static final transient IUFStatusHandler statusHandler = UFStatus.getHandler(LapsToolsIO.class);
|
||||
|
||||
private static final String TIMESTAMP_CMD_FRMT = "%s %s/etc/fxalogdir.pl";
|
||||
|
||||
private static final String SURFACE_LOG_CMD_FRMT = "%s %s/sfc.pl -l%s -rlaps_sfc";
|
||||
|
||||
private static final String OTHER_LOG_CMD_FRMT = "%s %s/%s %s";
|
||||
|
||||
private static final String CHANGE_CENTER_CMD_FMT = "%s/etc/change-center.pl %s";
|
||||
|
||||
private static final String WINDOW_DOMAIN_CMD_FMT = "%s/etc/window_domain_rt.pl -w laps -i %s -s %s -t %s -c";
|
||||
|
||||
private static final String RELOCALIZE_CMD_FMT = "%s/etc/wfo-relocalization.pl";
|
||||
|
||||
private static final String FINALIZE_CMD_FMT = "/awips/fxa/bin/fxaAnnounce '%s' SYSTEM SIGNIFICANT; rm %s";
|
||||
|
||||
private static String serverName;
|
||||
|
||||
private static File lapsRoot;
|
||||
|
||||
private static File scriptDir;
|
||||
|
||||
private static String execCmd;
|
||||
|
||||
private static File nest7grid;
|
||||
|
||||
private static File nest7grid_template;
|
||||
|
||||
private static File nest7grid_orig;
|
||||
private static final String WHATGOTIN_FILE_FRMT = "%s/%s.wgi";
|
||||
|
||||
private static File fxaData;
|
||||
|
||||
private static File lapsLogs;
|
||||
|
||||
private static List<String> whatgotinFiles;
|
||||
|
||||
private static List<String> dataChoices;
|
||||
|
||||
private static List<String> dataScripts;
|
||||
|
||||
private static File cornerPointFile;
|
||||
|
||||
private static File lockFile;
|
||||
|
||||
|
||||
static {
|
||||
// TODO all this configuration should be customizable by the user.
|
||||
serverName = "px1f";
|
||||
// --- For what got in log files ---
|
||||
if (System.getenv("FXA_DATA") == null) {
|
||||
fxaData = new File("/awips/fxa");
|
||||
fxaData = new File("/data/fxa");
|
||||
} else {
|
||||
fxaData = new File(System.getenv("FXA_DATA"));
|
||||
}
|
||||
if (System.getenv("LAPSROOT") == null) {
|
||||
lapsRoot = new File(fxaData + "/laps");
|
||||
} else {
|
||||
lapsRoot = new File(System.getenv("LAPSROOT"));
|
||||
}
|
||||
scriptDir = new File(lapsRoot + "/etc");
|
||||
execCmd = "ssh -q " + serverName;
|
||||
dataChoices = Arrays.asList("Surface", "Wind", "Humidity", "Clouds",
|
||||
"Temperature");
|
||||
dataScripts = Arrays.asList("sfc.pl", "wind3d.pl", "hum3d.pl",
|
||||
"cloud.pl", "temp.pl");
|
||||
nest7grid = new File(fxaData + "/laps/static/nest7grid.parms");
|
||||
nest7grid_orig = new File(fxaData + "/laps_data/static/nest7grid.parms");
|
||||
nest7grid_template = new File(fxaData + "/laps_domain/nest7grid.parms");
|
||||
cornerPointFile = new File(fxaData + "/laps/static/corners.dat");
|
||||
lockFile = new File(fxaData + "/laps_domain/lock_laps_ui");
|
||||
lapsLogs = new File(fxaData + "/laps/log/wgi");
|
||||
whatgotinFiles = Arrays.asList("sfc", "wind", "lq3driver", "cloud", "temp");
|
||||
dataChoices = Arrays.asList("Surface Analysis",
|
||||
"Wind Analysis",
|
||||
"Humidity Analysis",
|
||||
"Cloud Analysis",
|
||||
"Temperature Analysis");
|
||||
}
|
||||
|
||||
public static Collection<String> getDataChoices() {
|
||||
return dataChoices;
|
||||
}
|
||||
|
||||
public static void lockLaps() throws VizException {
|
||||
if (lockFile.exists()) {
|
||||
throw new VizException(
|
||||
"Sorry, but LAPS tool is currently processing another request and will not be available until the current process has completed.");
|
||||
}
|
||||
// For some reason awips1 doesn't actually lock it until you localize
|
||||
}
|
||||
|
||||
public static void unlockLaps() {
|
||||
if (lockFile.exists()) {
|
||||
lockFile.delete();
|
||||
}
|
||||
}
|
||||
|
||||
public static String getFailover() throws IOException,
|
||||
InterruptedException, VizException {
|
||||
Process p = null;
|
||||
try {
|
||||
p = Runtime.getRuntime().exec(
|
||||
String.format(SERVER_STATUS_CMD_FRMT, execCmd));
|
||||
int status = p.waitFor();
|
||||
String result = readOutput(p);
|
||||
|
||||
if (status == 0) {
|
||||
// Success getting to machine
|
||||
String actual_name = result.split("-")[0];
|
||||
if (!serverName.replaceAll("f$", "").equals(actual_name)) {
|
||||
// Failover state
|
||||
return String
|
||||
.format("Note: %s is running in a failover state. LAPS log files may not yet be available.",
|
||||
serverName);
|
||||
}
|
||||
} else {
|
||||
throw new VizException(
|
||||
String.format(
|
||||
"Sorry, error getting to %s system. The LAPS Tools GUI is not available.",
|
||||
serverName));
|
||||
}
|
||||
} finally {
|
||||
if (p != null) {
|
||||
p.destroy();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static String getLogs(String type) throws IOException,
|
||||
InterruptedException {
|
||||
Process tsProcess = null;
|
||||
Process logProcess = null;
|
||||
try {
|
||||
tsProcess = Runtime.getRuntime().exec(
|
||||
String.format(TIMESTAMP_CMD_FRMT, execCmd, lapsRoot));
|
||||
tsProcess.waitFor();
|
||||
String timeStamp = readOutput(tsProcess);
|
||||
String cmd = null;
|
||||
if (type.equals("Surface")) {
|
||||
cmd = String.format(SURFACE_LOG_CMD_FRMT, execCmd, scriptDir,
|
||||
timeStamp);
|
||||
} else {
|
||||
cmd = String.format(OTHER_LOG_CMD_FRMT, execCmd, scriptDir,
|
||||
dataScripts.get(dataChoices.indexOf(type)), timeStamp);
|
||||
}
|
||||
logProcess = Runtime.getRuntime().exec(cmd);
|
||||
logProcess.waitFor();
|
||||
String result = readOutput(logProcess);
|
||||
return result;
|
||||
} finally {
|
||||
if (tsProcess != null) {
|
||||
tsProcess.destroy();
|
||||
}
|
||||
if (logProcess != null) {
|
||||
logProcess.destroy();
|
||||
}
|
||||
}
|
||||
VizException {
|
||||
String wgiFile = String.format(WHATGOTIN_FILE_FRMT, lapsLogs,
|
||||
whatgotinFiles.get(dataChoices.indexOf(type)));
|
||||
String resultIO = loadWhatGotInFile(wgiFile, type);
|
||||
return (resultIO);
|
||||
}
|
||||
|
||||
private static String loadWhatGotInFile(String wfile, String type)
|
||||
throws IOException {
|
||||
BufferedReader reader;
|
||||
StringBuilder output = new StringBuilder();
|
||||
File file = new File(wfile);
|
||||
|
||||
try {
|
||||
reader = new BufferedReader(new FileReader(file));
|
||||
} catch (FileNotFoundException e) {
|
||||
String arg = String.format("*** Cannot find expected log file for %s." +
|
||||
"\n*** File %s ....does not appear to exist.\n\n",
|
||||
type, file.getAbsolutePath());
|
||||
output.append(arg);
|
||||
return output.toString();
|
||||
}
|
||||
String line;
|
||||
int lineNumber = 0;
|
||||
while ((line = reader.readLine()) != null) {
|
||||
String arg = String.format("%04d: %s%n", ++lineNumber, line);
|
||||
output.append(arg);
|
||||
}
|
||||
reader.close();
|
||||
return output.toString();
|
||||
}
|
||||
|
||||
public static LapsToolsData loadData() throws IOException, VizException,
|
||||
SpatialException {
|
||||
LapsToolsData data = new LapsToolsData();
|
||||
LapsToolsIO.readParmsFile(data);
|
||||
LapsToolsIO.readCornerPointsFile(data);
|
||||
LapsToolsIO.readCountyWarningArea(data);
|
||||
if(LapsToolsIO.readXmlFile(data)) {
|
||||
LapsToolsIO.readCountyWarningArea(data);
|
||||
} else {
|
||||
data = null;
|
||||
}
|
||||
return data;
|
||||
}
|
||||
|
||||
public static String getLocalizationQuestion() {
|
||||
String date = new SimpleDateFormat("HH:mm").format(SimulatedTime
|
||||
.getSystemTime().getTime());
|
||||
return String
|
||||
.format("Are you sure you want to localize? \n- The procedure takes five minutes. Consider that it is %s and LAPS runs at 20 after the hour. \n\n- Localization runs remotely on %s. The LAPS Tools will be unavailable until the relocalization is complete, which will be noted in the AlertViz window.",
|
||||
date, serverName);
|
||||
|
||||
public static boolean readXmlFile(LapsToolsData data)
|
||||
throws IOException, VizException {
|
||||
|
||||
IPathManager pm = PathManagerFactory.getPathManager();
|
||||
LocalizationContext lc = pm.getContext(LocalizationType.COMMON_STATIC,
|
||||
LocalizationLevel.SITE);
|
||||
LocalizationFile xmlLocalizationFile = pm.getLocalizationFile(lc, "LAPS/domain" +
|
||||
".xml");
|
||||
if(!xmlLocalizationFile.exists()) return false;
|
||||
|
||||
LapsDomain domain = new LapsDomain();
|
||||
try {
|
||||
JAXBContext jaxbContext = JAXBContext.newInstance(LapsDomain.class);
|
||||
//unmarshal XML file to java object
|
||||
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
|
||||
domain = (LapsDomain) jaxbUnmarshaller.unmarshal(xmlLocalizationFile.getFile());
|
||||
|
||||
} catch (JAXBException e) {
|
||||
throw new VizException("xml is unreadable: "+e.getLocalizedMessage());
|
||||
}
|
||||
|
||||
data.setNx(domain.getNx());
|
||||
data.setNy(domain.getNy());
|
||||
data.setNz(domain.getNz());
|
||||
data.setGridSpacing(domain.getGridSpacing());
|
||||
data.setGridCenterLon(domain.getGridCenLon());
|
||||
data.setGridCenterLat(domain.getGridCenLat());
|
||||
return true;
|
||||
}
|
||||
|
||||
public static void localize(LapsToolsData data) throws IOException,
|
||||
InterruptedException {
|
||||
if (!lockFile.getParentFile().exists()) {
|
||||
lockFile.getParentFile().mkdir();
|
||||
}
|
||||
if (!lockFile.exists()) {
|
||||
lockFile.createNewFile();
|
||||
}
|
||||
if (!nest7grid_template.getParentFile().exists()) {
|
||||
nest7grid_template.getParentFile().mkdir();
|
||||
}
|
||||
Writer writer = new FileWriter(nest7grid_template);
|
||||
writer.write(" &lapsparms_nl\n");
|
||||
writer.write(String.format(" GRID_CEN_LAT_CMN=%s,\n",
|
||||
data.getGridCenter().y));
|
||||
writer.write(String.format(" GRID_CEN_LON_CMN=%s,\n",
|
||||
data.getGridCenter().x));
|
||||
writer.write(String.format(" NX_L_CMN=%s,\n", data.getNx()));
|
||||
writer.write(String.format(" NY_L_CMN=%s,\n", data.getNy()));
|
||||
writer.write(String.format(" NK_LAPS=%s,\n", data.getNz()));
|
||||
writer.write("/\n");
|
||||
writer.close();
|
||||
String centerPoints = data.getGridCenter().y + " "
|
||||
+ data.getGridCenter().x;
|
||||
|
||||
String dir = lapsRoot.getAbsolutePath();
|
||||
String templateDir = nest7grid_template.getParent();
|
||||
String msg = "LAPS localization is finished.";
|
||||
// execute the command in a shell to achieve proper IO redirection to
|
||||
// laps_ui.log
|
||||
Process p = null;
|
||||
try {
|
||||
p = Runtime.getRuntime().exec("/bin/sh");
|
||||
writer = new OutputStreamWriter(p.getOutputStream());
|
||||
writer.write(execCmd);
|
||||
writer.write(" \"");
|
||||
writer.write(String
|
||||
.format(CHANGE_CENTER_CMD_FMT, dir, centerPoints));
|
||||
writer.write("; ");
|
||||
writer.write(String.format(WINDOW_DOMAIN_CMD_FMT, dir, dir, dir,
|
||||
templateDir));
|
||||
writer.write("; ");
|
||||
writer.write(String.format(RELOCALIZE_CMD_FMT, dir));
|
||||
writer.write("; ");
|
||||
writer.write(String.format(FINALIZE_CMD_FMT, msg, lockFile));
|
||||
writer.write("\"");
|
||||
writer.write(" >& /tmp/laps_ui.log &");
|
||||
writer.write("\n");
|
||||
writer.close();
|
||||
|
||||
// Don't wait for the process to finish.
|
||||
final Process process = p;
|
||||
|
||||
Thread t = new Thread(new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
process.waitFor();
|
||||
} catch (InterruptedException e) {
|
||||
// Ignore
|
||||
} finally {
|
||||
process.destroy();
|
||||
}
|
||||
}
|
||||
});
|
||||
// Let the Thread do the destroy when process is finished.
|
||||
p = null;
|
||||
t.start();
|
||||
} finally {
|
||||
if (p != null) {
|
||||
p.destroy();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void readParmsFile(LapsToolsData data) throws IOException,
|
||||
VizException {
|
||||
loadFileParms(nest7grid, data);
|
||||
}
|
||||
|
||||
public static void readDefaultParmsFile(LapsToolsData data)
|
||||
public static void defaultDomain(LapsToolsData data)
|
||||
throws IOException, VizException {
|
||||
if (!nest7grid_orig.isFile()) {
|
||||
loadFileParms(nest7grid_orig, data);
|
||||
}
|
||||
loadFileParms(nest7grid_orig, data);
|
||||
}
|
||||
double distance = 111; //111 km per 1 degree
|
||||
double gridSpacingDefault = 3500.;
|
||||
double dim = 200;
|
||||
double N = dim * dim;
|
||||
|
||||
Envelope shapeArea = data.getValidAreaOrig();
|
||||
double widthY = Math.abs(shapeArea.getHeight() * distance);
|
||||
double widthX = Math.abs( (shapeArea.getWidth() * distance) * (Math.cos(shapeArea.centre().x) ) );
|
||||
double aspectRatio = widthY / widthX;
|
||||
double buffer = 0.5;
|
||||
int nX = (int) (Math.sqrt(N/aspectRatio) + buffer);
|
||||
int nY = (int) ((aspectRatio * nX) + buffer);
|
||||
|
||||
System.out.print("LAPS Tools IO:\nheight = "+shapeArea.getHeight()+ " width = "+shapeArea.getWidth());
|
||||
System.out.print("\naspect ratio = "+aspectRatio);
|
||||
System.out.print("\nnX = "+nX+", nY = "+nY+"\n");
|
||||
|
||||
private static void loadFileParms(File file, LapsToolsData data)
|
||||
throws VizException, IOException {
|
||||
BufferedReader reader;
|
||||
try {
|
||||
reader = new BufferedReader(new FileReader(file));
|
||||
} catch (FileNotFoundException e) {
|
||||
throw new VizException(String.format(
|
||||
"LAPS Tools GUI cannot run. %s does not exist.",
|
||||
file.getAbsolutePath()), e);
|
||||
}
|
||||
int index = 0;
|
||||
for (String line = reader.readLine(); line != null; line = reader
|
||||
.readLine()) {
|
||||
index += 1;
|
||||
if (index == 1 || line.length() < 3 || line.startsWith("c")
|
||||
|| line.startsWith(" &")) {
|
||||
// Ignore comments, short lines and the first line, because
|
||||
// Awips1 does
|
||||
} else {
|
||||
line = line.trim();
|
||||
line = line.replaceAll(",$", "");
|
||||
String[] halves = line.split("=");
|
||||
String var = halves[0].toLowerCase().trim();
|
||||
if (var.equals("grid_cen_lon_cmn")) {
|
||||
data.setGridCenterLon(Double.valueOf(halves[1].trim()));
|
||||
} else if (var.equals("grid_cen_lat_cmn")) {
|
||||
data.setGridCenterLat(Double.valueOf(halves[1].trim()));
|
||||
} else if (var.equals("grid_spacing_m_cmn")) {
|
||||
data.setGridSpacing(Double.valueOf(halves[1].trim()));
|
||||
} else if (var.equals("nx_l_cmn")) {
|
||||
data.setNx(Integer.valueOf(halves[1].trim()));
|
||||
} else if (var.equals("ny_l_cmn")) {
|
||||
data.setNy(Integer.valueOf(halves[1].trim()));
|
||||
} else if (var.equals("standard_latitude")) {
|
||||
data.setLat(Double.valueOf(halves[1].trim()));
|
||||
} else if (var.equals("standard_latitude2")) {
|
||||
data.setLat2(Double.valueOf(halves[1].trim()));
|
||||
} else if (var.equals("standard_longitude")) {
|
||||
data.setLon(Double.valueOf(halves[1].trim()));
|
||||
} else if (var.equals("nk_laps")) {
|
||||
data.setNz(Integer.valueOf(halves[1].trim()));
|
||||
} else if (var.equals("pressure_interval_l")) {
|
||||
data.setDp(Double.valueOf(halves[1].trim()));
|
||||
} else if (var.equals("pressure_bottom_l")) {
|
||||
data.setLowp(Double.valueOf(halves[1].trim()));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void readCornerPointsFile(LapsToolsData data)
|
||||
throws VizException, NumberFormatException, IOException {
|
||||
BufferedReader reader;
|
||||
try {
|
||||
reader = new BufferedReader(new FileReader(cornerPointFile));
|
||||
} catch (FileNotFoundException e) {
|
||||
throw new VizException(String.format(
|
||||
"LAPS Tools GUI cannot run. %s does not exist.",
|
||||
cornerPointFile.getAbsolutePath()), e);
|
||||
}
|
||||
|
||||
Coordinate[] corners = new Coordinate[4];
|
||||
int count = 0;
|
||||
for (String line = reader.readLine(); line != null; line = reader
|
||||
.readLine()) {
|
||||
corners[count] = new Coordinate(Double.valueOf(line.trim().split(
|
||||
" ", 2)[0].trim()), Double.valueOf(line.trim()
|
||||
.split(" ", 2)[1].trim()));
|
||||
count += 1;
|
||||
}
|
||||
data.setCorners(corners);
|
||||
reader.close();
|
||||
LapsDomain domain = new LapsDomain();
|
||||
domain.setNx(nX);
|
||||
domain.setNy(nY);
|
||||
domain.setNz(43);
|
||||
domain.setGridSpacing(gridSpacingDefault);
|
||||
domain.setGridCenLon(data.getCwaCenter().x);
|
||||
domain.setGridCenLat(data.getCwaCenter().y);
|
||||
|
||||
data.setNx(domain.getNx());
|
||||
data.setNy(domain.getNy());
|
||||
data.setNz(domain.getNz());
|
||||
data.setGridSpacing(domain.getGridSpacing());
|
||||
data.setGridCenterLon(data.getCwaCenter().x);
|
||||
data.setGridCenterLat(data.getCwaCenter().y);
|
||||
}
|
||||
|
||||
private static void readCountyWarningArea(LapsToolsData data)
|
||||
|
@ -385,18 +209,31 @@ public class LapsToolsIO {
|
|||
return;
|
||||
}
|
||||
data.setCwaArea(result[0].geometry.getEnvelopeInternal());
|
||||
}
|
||||
|
||||
public static String getWriteXmlQuestion() {
|
||||
String date = new SimpleDateFormat("HH:mm").format(SimulatedTime
|
||||
.getSystemTime().getTime());
|
||||
return String.format("Are you sure you want write domain.xml?" +
|
||||
"\nNote: Its %s and LAPS runs at ~20 minutes after the hour.",date);
|
||||
}
|
||||
|
||||
private static String readOutput(Process p) throws IOException,
|
||||
InterruptedException {
|
||||
StringBuilder output = new StringBuilder();
|
||||
char[] buf = new char[10];
|
||||
Reader reader = new InputStreamReader(p.getInputStream());
|
||||
for (int count = 0; count != -1; count = reader.read(buf)) {
|
||||
output.append(buf, 0, count);
|
||||
}
|
||||
reader.close();
|
||||
return output.toString();
|
||||
public static void writeXmlFile(LapsToolsData data) throws IOException,
|
||||
InterruptedException, VizException {
|
||||
|
||||
IPathManager pm = PathManagerFactory.getPathManager();
|
||||
LocalizationContext lc = pm.getContext(LocalizationType.COMMON_STATIC,
|
||||
LocalizationLevel.SITE);
|
||||
LocalizationFile xmlLocalizationFile = pm.getLocalizationFile(lc, "LAPS/domain-output" +
|
||||
".xml");
|
||||
LapsDomain lapsdomain = new LapsDomain();
|
||||
lapsdomain.setNx(data.getNx());
|
||||
lapsdomain.setNy(data.getNy());
|
||||
lapsdomain.setNz(data.getNz());
|
||||
lapsdomain.setGridSpacing(data.getGridSpacing());
|
||||
lapsdomain.setGridCenLat(data.getGridCenter().y);
|
||||
lapsdomain.setGridCenLon(data.getGridCenter().x);
|
||||
//marshal java object to XML file
|
||||
JAXB.marshal(lapsdomain, xmlLocalizationFile.getFile());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -31,11 +31,14 @@ import org.eclipse.swt.layout.GridLayout;
|
|||
import org.eclipse.swt.widgets.Button;
|
||||
import org.eclipse.swt.widgets.Combo;
|
||||
import org.eclipse.swt.widgets.Composite;
|
||||
import org.eclipse.swt.widgets.Event;
|
||||
import org.eclipse.swt.widgets.Group;
|
||||
import org.eclipse.swt.widgets.Label;
|
||||
import org.eclipse.swt.widgets.Layout;
|
||||
import org.eclipse.swt.widgets.Listener;
|
||||
import org.eclipse.swt.widgets.Menu;
|
||||
import org.eclipse.swt.widgets.MenuItem;
|
||||
import org.eclipse.swt.widgets.MessageBox;
|
||||
import org.eclipse.swt.widgets.Shell;
|
||||
import org.eclipse.swt.widgets.Spinner;
|
||||
|
||||
|
@ -50,8 +53,6 @@ import com.raytheon.uf.viz.core.exception.VizException;
|
|||
import com.raytheon.uf.viz.core.rsc.LoadProperties;
|
||||
import com.raytheon.uf.viz.core.rsc.capabilities.EditableCapability;
|
||||
import com.raytheon.uf.viz.core.rsc.tools.GenericToolsResourceData;
|
||||
import com.raytheon.uf.viz.core.status.StatusConstants;
|
||||
import com.raytheon.viz.awipstools.Activator;
|
||||
import com.raytheon.viz.awipstools.ui.action.LapsToolsData;
|
||||
import com.raytheon.viz.awipstools.ui.action.LapsToolsIO;
|
||||
import com.raytheon.viz.awipstools.ui.layer.LapsToolLayer;
|
||||
|
@ -68,7 +69,7 @@ import com.raytheon.viz.ui.editor.IMultiPaneEditor;
|
|||
*
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
*
|
||||
* Nov 2013 # mccaslin Improved layout, more user friendly, no system calls
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -76,6 +77,7 @@ import com.raytheon.viz.ui.editor.IMultiPaneEditor;
|
|||
* @version 1.0
|
||||
*/
|
||||
public class LAPSToolsDlg extends CaveSWTDialog {
|
||||
|
||||
private static final transient IUFStatusHandler statusHandler = UFStatus.getHandler(LAPSToolsDlg.class);
|
||||
|
||||
private final LapsToolsData data;
|
||||
|
@ -85,6 +87,8 @@ public class LAPSToolsDlg extends CaveSWTDialog {
|
|||
*/
|
||||
private Composite mainComp;
|
||||
|
||||
public final String DIALOG_TITLE = "LAPS V2.0 Tools";
|
||||
|
||||
/**
|
||||
* Label indicating which tool is selected.
|
||||
*/
|
||||
|
@ -93,14 +97,19 @@ public class LAPSToolsDlg extends CaveSWTDialog {
|
|||
/**
|
||||
* Current Analysis string.
|
||||
*/
|
||||
private final String dataUsedByAnalysis = "Data Used by Current Analysis";
|
||||
private final String dataUsedByAnalysis = "What-got-in to the Current Analysis Product";
|
||||
|
||||
/**
|
||||
* Configure Analysis string.
|
||||
*/
|
||||
private final String configureAnalysis = "Configure Analysis Domain";
|
||||
private final String configureAnalysis = "View or Redefine Analysis Domain";
|
||||
|
||||
/**
|
||||
* Flag indicating if LAPS 2.0 is installed.
|
||||
*/
|
||||
private boolean isLapsInstalled = false;
|
||||
|
||||
/**
|
||||
* Flag indicating which tool is active.
|
||||
*/
|
||||
private boolean isDataUsedByAnalysis = true;
|
||||
|
@ -130,19 +139,13 @@ public class LAPSToolsDlg extends CaveSWTDialog {
|
|||
*/
|
||||
private Font selectToolLabelFont;
|
||||
|
||||
/*
|
||||
/**
|
||||
* Spinner controls
|
||||
*/
|
||||
private Spinner cenLatSpnr;
|
||||
|
||||
private Spinner cenLonSpnr;
|
||||
|
||||
private Spinner latSpnr;
|
||||
|
||||
private Spinner lat2Spnr;
|
||||
|
||||
private Spinner lonSpnr;
|
||||
|
||||
private Spinner nxSpnr;
|
||||
|
||||
private Spinner nySpnr;
|
||||
|
@ -151,31 +154,31 @@ public class LAPSToolsDlg extends CaveSWTDialog {
|
|||
|
||||
private Spinner nzSpnr;
|
||||
|
||||
private Spinner dpPaSpnr;
|
||||
|
||||
private Spinner lowPaSpnr;
|
||||
|
||||
/*
|
||||
/**
|
||||
* Settings buttons
|
||||
*/
|
||||
private Button defaultBtn;
|
||||
|
||||
private Button resetBtn;
|
||||
|
||||
/*
|
||||
* LAPS Relocator buttons.
|
||||
/**
|
||||
* LAPS display domain buttons.
|
||||
*/
|
||||
private Button loadBtn;
|
||||
|
||||
private Button applyBtn;
|
||||
|
||||
private Button localizeLapsBtn;
|
||||
private Button writeDomainBtn;
|
||||
|
||||
/**
|
||||
* Stack layout.
|
||||
*/
|
||||
private StackLayout stackLayout;
|
||||
|
||||
private MessageBox areaDialog;
|
||||
|
||||
private Label areaStrLbl;
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
|
@ -185,18 +188,19 @@ public class LAPSToolsDlg extends CaveSWTDialog {
|
|||
*/
|
||||
public LAPSToolsDlg(Shell parent) throws VizException {
|
||||
super(parent, SWT.DIALOG_TRIM);
|
||||
setText(DIALOG_TITLE);
|
||||
|
||||
try {
|
||||
LapsToolsIO.lockLaps();
|
||||
String failover = LapsToolsIO.getFailover();
|
||||
if (failover != null) {
|
||||
MessageDialog.openInformation(shell,
|
||||
"LAPS is running in failover.", failover);
|
||||
}
|
||||
this.data = LapsToolsIO.loadData();
|
||||
if(data==null){
|
||||
isLapsInstalled = false;
|
||||
} else {
|
||||
isLapsInstalled = true;
|
||||
}
|
||||
|
||||
} catch (VizException e) {
|
||||
MessageDialog
|
||||
.openInformation(shell, "LAPS Tools GUI is not available.",
|
||||
.openInformation(shell, "LAPS Tools GUI cannot run.",
|
||||
e.getLocalizedMessage());
|
||||
throw e;
|
||||
} catch (Exception e) {
|
||||
|
@ -226,7 +230,6 @@ public class LAPSToolsDlg extends CaveSWTDialog {
|
|||
protected void initializeComponents(Shell shell) {
|
||||
selectToolLabelFont = new Font(this.getDisplay(), "Sans", 10, SWT.BOLD
|
||||
| SWT.ITALIC);
|
||||
|
||||
mainComp = new Composite(shell, SWT.NONE);
|
||||
GridLayout gl = new GridLayout(1, true);
|
||||
gl.marginHeight = 2;
|
||||
|
@ -237,6 +240,11 @@ public class LAPSToolsDlg extends CaveSWTDialog {
|
|||
|
||||
createMenus();
|
||||
createMainControls();
|
||||
|
||||
// create dialog with OK and cancel button and info icon
|
||||
areaDialog =
|
||||
new MessageBox(shell, SWT.ICON_INFORMATION | SWT.OK);
|
||||
areaDialog.setText("Size of LAPS Domain");
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -344,18 +352,27 @@ public class LAPSToolsDlg extends CaveSWTDialog {
|
|||
// Create the Help menu item with a Help "dropdown" menu
|
||||
Menu helpMenu = new Menu(menuBar);
|
||||
helpMenuItem.setMenu(helpMenu);
|
||||
|
||||
|
||||
// create dialog with OK and cancel button and info icon
|
||||
final MessageBox dialog =
|
||||
new MessageBox(shell, SWT.ICON_INFORMATION | SWT.OK);
|
||||
dialog.setText("About LAPS details");
|
||||
dialog.setMessage("For additional detailed information about LAPS Tools go to the URL" +
|
||||
"\n\t http://laps.noaa.gov/awipsii/");
|
||||
|
||||
// ------------------------------------------------------
|
||||
// Create all the items in the Help dropdown menu
|
||||
// ------------------------------------------------------
|
||||
|
||||
// Administration menu item
|
||||
// Administration menu item
|
||||
MenuItem aboutMI = new MenuItem(helpMenu, SWT.NONE);
|
||||
aboutMI.setText("About...");
|
||||
aboutMI.setText("About LAPS...");
|
||||
aboutMI.addSelectionListener(new SelectionAdapter() {
|
||||
public void widgetSelected(SelectionEvent event) {
|
||||
dialog.open();
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -399,24 +416,36 @@ public class LAPSToolsDlg extends CaveSWTDialog {
|
|||
true, false));
|
||||
|
||||
Composite controlComp = new Composite(currentAnalysisComp, SWT.NONE);
|
||||
controlComp.setLayout(new GridLayout(3, false));
|
||||
|
||||
controlComp.setLayout(new GridLayout(4, false));
|
||||
controlComp.setLayoutData(new GridData(SWT.CENTER, SWT.DEFAULT, true,
|
||||
false));
|
||||
|
||||
Label selectTypeLbl = new Label(controlComp, SWT.NONE);
|
||||
selectTypeLbl.setText("Select Type: ");
|
||||
selectTypeLbl.setText("What got into the: ");
|
||||
|
||||
Combo typeCbo = new Combo(controlComp, SWT.DROP_DOWN | SWT.READ_ONLY);
|
||||
populateTypeCombo(typeCbo);
|
||||
typeCbo.select(0);
|
||||
typeCbo.addSelectionListener(new SelectionAdapter() {
|
||||
@Override
|
||||
public void widgetSelected(SelectionEvent e) {
|
||||
Combo c = (Combo) e.widget;
|
||||
typeAction((c.getItem(c.getSelectionIndex())));
|
||||
if(c.getSelectionIndex() == 0 && c.getItem(0) == "-- Select a Type --") {
|
||||
//no action
|
||||
} else if(c.getSelectionIndex() != 0 && c.getItem(0) == "-- Select a Type --") {
|
||||
c.remove(0);
|
||||
typeAction((c.getItem(c.getSelectionIndex())));
|
||||
} else {
|
||||
typeAction((c.getItem(c.getSelectionIndex())));
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
typeCbo.select(0);
|
||||
typeCbo.setToolTipText("Select one of the options to see what got into this LAPS product." );
|
||||
|
||||
Label blank = new Label(controlComp, SWT.NONE);
|
||||
blank.setText(" ");
|
||||
|
||||
Button clearBtn = new Button(controlComp, SWT.PUSH);
|
||||
clearBtn.setText(" Clear ");
|
||||
clearBtn.addSelectionListener(new SelectionAdapter() {
|
||||
|
@ -425,12 +454,13 @@ public class LAPSToolsDlg extends CaveSWTDialog {
|
|||
clearAction();
|
||||
}
|
||||
});
|
||||
|
||||
clearBtn.setToolTipText("Clear screen.");
|
||||
|
||||
GridData gd = new GridData(SWT.FILL, SWT.DEFAULT, true, false);
|
||||
gd.widthHint = 500;
|
||||
gd.heightHint = 300;
|
||||
stText = new StyledText(currentAnalysisComp, SWT.BORDER | SWT.MULTI
|
||||
| SWT.V_SCROLL | SWT.H_SCROLL);
|
||||
| SWT.V_SCROLL | SWT.H_SCROLL | SWT.Deactivate);
|
||||
stText.setLayoutData(gd);
|
||||
}
|
||||
|
||||
|
@ -448,21 +478,25 @@ public class LAPSToolsDlg extends CaveSWTDialog {
|
|||
|
||||
createProjectionGroup();
|
||||
createGridGroup();
|
||||
createAreaGroup();
|
||||
createSettingsLapsGroups();
|
||||
populateSpinners();
|
||||
|
||||
GridData gd = new GridData(SWT.CENTER, SWT.DEFAULT, true, false);
|
||||
gd.widthHint = 180;
|
||||
gd.verticalIndent = 15;
|
||||
localizeLapsBtn = new Button(configureAnalysisComp, SWT.PUSH);
|
||||
localizeLapsBtn.setText("Localize LAPS");
|
||||
localizeLapsBtn.setLayoutData(gd);
|
||||
localizeLapsBtn.addSelectionListener(new SelectionAdapter() {
|
||||
writeDomainBtn = new Button(configureAnalysisComp, SWT.PUSH);
|
||||
writeDomainBtn.setText("Write file");
|
||||
writeDomainBtn.setLayoutData(gd);
|
||||
writeDomainBtn.addSelectionListener(new SelectionAdapter() {
|
||||
@Override
|
||||
public void widgetSelected(SelectionEvent e) {
|
||||
localizeLapsAction();
|
||||
writeXmlfileAction();
|
||||
}
|
||||
});
|
||||
writeDomainBtn.setToolTipText("Write LAPS domain.xml file AND Exit.\n" +
|
||||
"This step will cause scripts to run that redefine the LAPS domain.\n" +
|
||||
"Next cycle of the analysis will show the change in domain made here." );
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -480,7 +514,7 @@ public class LAPSToolsDlg extends CaveSWTDialog {
|
|||
*/
|
||||
gd = new GridData(120, SWT.DEFAULT);
|
||||
Label projectionStrLbl = new Label(projectionGroup, SWT.CENTER);
|
||||
projectionStrLbl.setText("PolarStr");
|
||||
projectionStrLbl.setText("Polar Stereographic");
|
||||
projectionStrLbl.setLayoutData(gd);
|
||||
|
||||
/*
|
||||
|
@ -533,62 +567,6 @@ public class LAPSToolsDlg extends CaveSWTDialog {
|
|||
cenLonSpnr.setIncrement(1000);
|
||||
cenLonSpnr.setLayoutData(gd);
|
||||
|
||||
// 3 Filler Label
|
||||
new Label(projectionGroup, SWT.NONE);
|
||||
new Label(projectionGroup, SWT.NONE);
|
||||
new Label(projectionGroup, SWT.NONE);
|
||||
|
||||
/*
|
||||
* Lat
|
||||
*/
|
||||
gd = new GridData(SWT.RIGHT, SWT.CENTER, false, true);
|
||||
Label latLbl = new Label(projectionGroup, SWT.NONE);
|
||||
latLbl.setText("Lat: ");
|
||||
latLbl.setLayoutData(gd);
|
||||
|
||||
gd = new GridData(50, SWT.DEFAULT);
|
||||
latSpnr = new Spinner(projectionGroup, SWT.BORDER);
|
||||
latSpnr.setDigits(4);
|
||||
latSpnr.setMinimum(-900000);
|
||||
latSpnr.setMaximum(900000);
|
||||
latSpnr.setIncrement(1000);
|
||||
latSpnr.setEnabled(false);
|
||||
latSpnr.setLayoutData(gd);
|
||||
|
||||
/*
|
||||
* Lat2
|
||||
*/
|
||||
gd = new GridData(SWT.RIGHT, SWT.CENTER, false, true);
|
||||
Label lat2Lbl = new Label(projectionGroup, SWT.NONE);
|
||||
lat2Lbl.setText("Lat2: ");
|
||||
lat2Lbl.setLayoutData(gd);
|
||||
|
||||
gd = new GridData(50, SWT.DEFAULT);
|
||||
lat2Spnr = new Spinner(projectionGroup, SWT.BORDER);
|
||||
lat2Spnr.setDigits(4);
|
||||
lat2Spnr.setMinimum(-900000);
|
||||
lat2Spnr.setMaximum(900000);
|
||||
lat2Spnr.setIncrement(1000);
|
||||
lat2Spnr.setEnabled(false);
|
||||
lat2Spnr.setLayoutData(gd);
|
||||
|
||||
/*
|
||||
* Lon
|
||||
*/
|
||||
gd = new GridData(SWT.RIGHT, SWT.CENTER, false, true);
|
||||
gd.widthHint = 60;
|
||||
Label lonLbl = new Label(projectionGroup, SWT.RIGHT);
|
||||
lonLbl.setText("Lon: ");
|
||||
lonLbl.setLayoutData(gd);
|
||||
|
||||
gd = new GridData(50, SWT.DEFAULT);
|
||||
lonSpnr = new Spinner(projectionGroup, SWT.BORDER);
|
||||
lonSpnr.setDigits(4);
|
||||
lonSpnr.setMinimum(-1800000);
|
||||
lonSpnr.setMaximum(1800000);
|
||||
lonSpnr.setIncrement(1000);
|
||||
lonSpnr.setEnabled(false);
|
||||
lonSpnr.setLayoutData(gd);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -622,12 +600,42 @@ public class LAPSToolsDlg extends CaveSWTDialog {
|
|||
gd = new GridData(50, SWT.DEFAULT);
|
||||
nxSpnr = new Spinner(gridGroup, SWT.BORDER);
|
||||
nxSpnr.setDigits(0);
|
||||
nxSpnr.setMinimum(1);
|
||||
nxSpnr.setMaximum(100);
|
||||
nxSpnr.setMinimum(61);
|
||||
nxSpnr.setMaximum(301);
|
||||
nxSpnr.setIncrement(1);
|
||||
nxSpnr.setEnabled(false);
|
||||
nxSpnr.setEnabled(true);
|
||||
nxSpnr.setLayoutData(gd);
|
||||
|
||||
nxSpnr.addListener(SWT.Verify, new Listener() {
|
||||
@Override
|
||||
public void handleEvent(Event event) {
|
||||
data.setNx(nxSpnr.getSelection());
|
||||
areaStrLbl.setText(data.getAreaCoverageString());
|
||||
}
|
||||
});
|
||||
/*nxSpnr.addFocusListener(new FocusListener() {
|
||||
@Override
|
||||
public void focusGained(FocusEvent e) {
|
||||
data.setNx(nxSpnr.getSelection());
|
||||
//areaStrLbl.setText(data.getAreaCoverageString());
|
||||
}
|
||||
@Override
|
||||
public void focusLost(FocusEvent e) {
|
||||
data.setNx(nxSpnr.getSelection());
|
||||
areaStrLbl.setText(data.getAreaCoverageString());
|
||||
}
|
||||
});
|
||||
nxSpnr.addSelectionListener(new SelectionListener() {
|
||||
@Override
|
||||
public void widgetSelected(SelectionEvent e) {
|
||||
data.setNx(nxSpnr.getSelection());
|
||||
areaStrLbl.setText(data.getAreaCoverageString());
|
||||
}
|
||||
@Override
|
||||
public void widgetDefaultSelected(SelectionEvent e) {
|
||||
}
|
||||
});
|
||||
*/
|
||||
|
||||
/*
|
||||
* Ny
|
||||
*/
|
||||
|
@ -641,16 +649,34 @@ public class LAPSToolsDlg extends CaveSWTDialog {
|
|||
gd = new GridData(50, SWT.DEFAULT);
|
||||
nySpnr = new Spinner(gridGroup, SWT.BORDER);
|
||||
nySpnr.setDigits(0);
|
||||
nySpnr.setMinimum(1);
|
||||
nySpnr.setMaximum(100);
|
||||
nySpnr.setMinimum(61);
|
||||
nySpnr.setMaximum(301);
|
||||
nySpnr.setIncrement(1);
|
||||
nySpnr.setEnabled(false);
|
||||
nySpnr.setEnabled(true);
|
||||
nySpnr.setLayoutData(gd);
|
||||
|
||||
nySpnr.addListener(SWT.Verify, new Listener() {
|
||||
@Override
|
||||
public void handleEvent(Event event) {
|
||||
data.setNy(nySpnr.getSelection());
|
||||
areaStrLbl.setText(data.getAreaCoverageString());
|
||||
}
|
||||
});
|
||||
/*nySpnr.addSelectionListener(new SelectionListener() {
|
||||
@Override
|
||||
public void widgetSelected(SelectionEvent e) {
|
||||
data.setNy(nySpnr.getSelection());
|
||||
areaStrLbl.setText(data.getAreaCoverageString());
|
||||
}
|
||||
@Override
|
||||
public void widgetDefaultSelected(SelectionEvent e) {
|
||||
}
|
||||
});
|
||||
*/
|
||||
/*
|
||||
* Dx(m)
|
||||
*/
|
||||
gd = new GridData(SWT.RIGHT, SWT.CENTER, false, true);
|
||||
gd.horizontalIndent = 5;
|
||||
gd.widthHint = 60;
|
||||
Label dxmLbl = new Label(gridGroup, SWT.RIGHT);
|
||||
dxmLbl.setText("Dx(m): ");
|
||||
|
@ -659,12 +685,29 @@ public class LAPSToolsDlg extends CaveSWTDialog {
|
|||
gd = new GridData(50, SWT.DEFAULT);
|
||||
dxmSpnr = new Spinner(gridGroup, SWT.BORDER);
|
||||
dxmSpnr.setDigits(0);
|
||||
dxmSpnr.setMinimum(1000);
|
||||
dxmSpnr.setMaximum(100000);
|
||||
dxmSpnr.setIncrement(1000);
|
||||
dxmSpnr.setEnabled(false);
|
||||
dxmSpnr.setMaximum(12500);
|
||||
dxmSpnr.setIncrement(500);
|
||||
dxmSpnr.setEnabled(true);
|
||||
dxmSpnr.setLayoutData(gd);
|
||||
|
||||
dxmSpnr.setMinimum(1000);
|
||||
dxmSpnr.addListener(SWT.Verify, new Listener() {
|
||||
@Override
|
||||
public void handleEvent(Event event) {
|
||||
data.setGridSpacing((double) dxmSpnr.getSelection());
|
||||
areaStrLbl.setText(data.getAreaCoverageString());
|
||||
}
|
||||
});
|
||||
/*dxmSpnr.addSelectionListener(new SelectionListener() {
|
||||
@Override
|
||||
public void widgetSelected(SelectionEvent e) {
|
||||
data.setGridSpacing((double) dxmSpnr.getSelection());
|
||||
areaStrLbl.setText(data.getAreaCoverageString());
|
||||
}
|
||||
@Override
|
||||
public void widgetDefaultSelected(SelectionEvent e) {
|
||||
}
|
||||
});
|
||||
*/
|
||||
/*
|
||||
* Vertical label
|
||||
*/
|
||||
|
@ -690,39 +733,28 @@ public class LAPSToolsDlg extends CaveSWTDialog {
|
|||
nzSpnr.setEnabled(false);
|
||||
nzSpnr.setLayoutData(gd);
|
||||
|
||||
/*
|
||||
* Dp(Pa)
|
||||
*/
|
||||
gd = new GridData(SWT.RIGHT, SWT.CENTER, false, true);
|
||||
Label dppaLbl = new Label(gridGroup, SWT.NONE);
|
||||
dppaLbl.setText("Dp(Pa): ");
|
||||
dppaLbl.setLayoutData(gd);
|
||||
}
|
||||
|
||||
gd = new GridData(50, SWT.DEFAULT);
|
||||
dpPaSpnr = new Spinner(gridGroup, SWT.BORDER);
|
||||
dpPaSpnr.setDigits(0);
|
||||
dpPaSpnr.setMinimum(0);
|
||||
dpPaSpnr.setMaximum(200);
|
||||
dpPaSpnr.setIncrement(10);
|
||||
dpPaSpnr.setEnabled(false);
|
||||
dpPaSpnr.setLayoutData(gd);
|
||||
/**
|
||||
* Create the area group.
|
||||
*/
|
||||
private void createAreaGroup() {
|
||||
GridData gd = new GridData(SWT.FILL, SWT.DEFAULT, true, false);
|
||||
Group gridGroup = new Group(configureAnalysisComp, SWT.NONE);
|
||||
gridGroup.setLayout(new GridLayout(1, false));
|
||||
gridGroup.setLayoutData(gd);
|
||||
gridGroup.setText(" Area of Coverage ");
|
||||
|
||||
|
||||
/*
|
||||
* Low(Pa)
|
||||
* Calculated Area label
|
||||
*/
|
||||
gd = new GridData(SWT.RIGHT, SWT.CENTER, false, true);
|
||||
Label lowPaLbl = new Label(gridGroup, SWT.RIGHT);
|
||||
lowPaLbl.setText("Low(Pa): ");
|
||||
lowPaLbl.setLayoutData(gd);
|
||||
|
||||
gd = new GridData(50, SWT.DEFAULT);
|
||||
lowPaSpnr = new Spinner(gridGroup, SWT.BORDER);
|
||||
lowPaSpnr.setDigits(0);
|
||||
lowPaSpnr.setMinimum(0);
|
||||
lowPaSpnr.setMaximum(1050);
|
||||
lowPaSpnr.setIncrement(10);
|
||||
lowPaSpnr.setEnabled(false);
|
||||
lowPaSpnr.setLayoutData(gd);
|
||||
gd = new GridData(500, SWT.DEFAULT);
|
||||
gd.widthHint = 500;
|
||||
gd.horizontalIndent = 25;
|
||||
areaStrLbl = new Label(gridGroup, SWT.HORIZONTAL);
|
||||
areaStrLbl.setLayoutData(gd);
|
||||
areaStrLbl.setText(data.getAreaCoverageString());
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -736,8 +768,7 @@ public class LAPSToolsDlg extends CaveSWTDialog {
|
|||
|
||||
Composite groupComp = new Composite(configureAnalysisComp, SWT.NONE);
|
||||
groupComp.setLayout(gl);
|
||||
groupComp
|
||||
.setLayoutData(new GridData(SWT.FILL, SWT.DEFAULT, true, false));
|
||||
groupComp.setLayoutData(new GridData(SWT.FILL, SWT.DEFAULT, true, false));
|
||||
|
||||
/*
|
||||
* Settings
|
||||
|
@ -759,6 +790,8 @@ public class LAPSToolsDlg extends CaveSWTDialog {
|
|||
setDefaultDomain();
|
||||
}
|
||||
});
|
||||
//defaultBtn.setToolTipText("Set to the default");
|
||||
defaultBtn.setToolTipText("Reset all variables to values so that the LAPS domain will fully include the CWA area");
|
||||
|
||||
gd = new GridData(SWT.CENTER, SWT.DEFAULT, true, false);
|
||||
gd.widthHint = buttonWidth;
|
||||
|
@ -769,10 +802,10 @@ public class LAPSToolsDlg extends CaveSWTDialog {
|
|||
@Override
|
||||
public void widgetSelected(SelectionEvent e) {
|
||||
resetDomain();
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
resetBtn.setToolTipText("Set to the values that you started with" );
|
||||
|
||||
/*
|
||||
* LAPS Relocator
|
||||
*/
|
||||
|
@ -780,12 +813,12 @@ public class LAPSToolsDlg extends CaveSWTDialog {
|
|||
Group lapsRelocatorGroup = new Group(groupComp, SWT.NONE);
|
||||
lapsRelocatorGroup.setLayout(new GridLayout(2, true));
|
||||
lapsRelocatorGroup.setLayoutData(gd);
|
||||
lapsRelocatorGroup.setText(" LAPS Relocator ");
|
||||
lapsRelocatorGroup.setText(" LAPS Domain Viewer and Relocator ");
|
||||
|
||||
gd = new GridData(SWT.CENTER, SWT.DEFAULT, true, false);
|
||||
gd.widthHint = buttonWidth;
|
||||
loadBtn = new Button(lapsRelocatorGroup, SWT.PUSH);
|
||||
loadBtn.setText("Load");
|
||||
loadBtn.setText("Load in display");
|
||||
loadBtn.setLayoutData(gd);
|
||||
loadBtn.addSelectionListener(new SelectionAdapter() {
|
||||
@Override
|
||||
|
@ -793,11 +826,13 @@ public class LAPSToolsDlg extends CaveSWTDialog {
|
|||
loadAction();
|
||||
}
|
||||
});
|
||||
loadBtn.setToolTipText("Load the grid info into the display." +
|
||||
"\nRelocate the domain by selecting and moving the grid center.");
|
||||
|
||||
gd = new GridData(SWT.CENTER, SWT.DEFAULT, true, false);
|
||||
gd.widthHint = buttonWidth;
|
||||
applyBtn = new Button(lapsRelocatorGroup, SWT.PUSH);
|
||||
applyBtn.setText("Apply");
|
||||
applyBtn.setText("Apply changes");
|
||||
applyBtn.setLayoutData(gd);
|
||||
applyBtn.setEnabled(false);
|
||||
applyBtn.addSelectionListener(new SelectionAdapter() {
|
||||
|
@ -806,6 +841,8 @@ public class LAPSToolsDlg extends CaveSWTDialog {
|
|||
applyAction();
|
||||
}
|
||||
});
|
||||
applyBtn.setToolTipText("Fill the selectors with new values, if you" +
|
||||
"\nmoved the domain by relocating the center point." );
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -842,16 +879,18 @@ public class LAPSToolsDlg extends CaveSWTDialog {
|
|||
}
|
||||
|
||||
private void populateTypeCombo(Combo combo) {
|
||||
for (String choice : LapsToolsIO.getDataChoices()) {
|
||||
combo.add("-- Select a Type --");
|
||||
for (String choice : LapsToolsIO.getDataChoices()) {
|
||||
combo.add(choice);
|
||||
}
|
||||
}
|
||||
|
||||
private void typeAction(String type) {
|
||||
try {
|
||||
stText.append("Begin "+type+"\n");
|
||||
stText.append(LapsToolsIO.getLogs(type));
|
||||
stText.append("\n");
|
||||
stText.append("__________________________________________\n");
|
||||
stText.append("End of "+type);
|
||||
stText.append("\n__________________________________________\n\n");
|
||||
stText.setTopIndex(stText.getLineCount());
|
||||
} catch (Exception ex) {
|
||||
statusHandler.handle(Priority.PROBLEM,
|
||||
|
@ -860,25 +899,23 @@ public class LAPSToolsDlg extends CaveSWTDialog {
|
|||
}
|
||||
|
||||
private void populateSpinners() {
|
||||
configureSpinner(latSpnr, data.getGridCenter().y);
|
||||
configureSpinner(lat2Spnr, data.getLat2());
|
||||
configureSpinner(lonSpnr, data.getLon());
|
||||
configureSpinner(cenLatSpnr, data.getGridCenter().y, data
|
||||
.getValidArea().getMinY(), data.getValidArea().getMaxY());
|
||||
configureSpinner(cenLonSpnr, data.getGridCenter().x, data
|
||||
.getValidArea().getMinX(), data.getValidArea().getMaxX());
|
||||
configureSpinner(cenLatSpnr, data.getGridCenter().y,
|
||||
data.getValidArea().getMinY(), data.getValidArea().getMaxY());
|
||||
configureSpinner(cenLonSpnr, data.getGridCenter().x,
|
||||
data.getValidArea().getMinX(), data.getValidArea().getMaxX());
|
||||
configureSpinner(nxSpnr, data.getNx());
|
||||
configureSpinner(nySpnr, data.getNy());
|
||||
configureSpinner(dxmSpnr, data.getGridSpacing());
|
||||
configureSpinner(nzSpnr, data.getNz());
|
||||
configureSpinner(dpPaSpnr, data.getDp());
|
||||
configureSpinner(lowPaSpnr, data.getLowp());
|
||||
}
|
||||
|
||||
private void readSpinners() {
|
||||
public void readSpinners() {
|
||||
data.setGridCenterLat(readSpinner(cenLatSpnr));
|
||||
data.setLat(readSpinner(cenLatSpnr));
|
||||
data.setGridCenterLon(readSpinner(cenLonSpnr));
|
||||
data.setNx(nxSpnr.getSelection());
|
||||
data.setNy(nySpnr.getSelection());
|
||||
data.setGridSpacing(readSpinner(dxmSpnr));
|
||||
}
|
||||
|
||||
private Double readSpinner(Spinner spinner) {
|
||||
|
@ -909,10 +946,10 @@ public class LAPSToolsDlg extends CaveSWTDialog {
|
|||
private void setDefaultDomain() {
|
||||
boolean ok = MessageDialog
|
||||
.openConfirm(getShell(), "Confirm Exit",
|
||||
"This will reset all variables to the default WFO localization values.");
|
||||
"This will reset all variables to values so that the LAPS domain will fully includes the CWA area.");
|
||||
if (ok) {
|
||||
try {
|
||||
LapsToolsIO.readDefaultParmsFile(data);
|
||||
LapsToolsIO.defaultDomain(data);
|
||||
} catch (Exception e) {
|
||||
statusHandler.handle(Priority.PROBLEM,
|
||||
e.getLocalizedMessage(), e);
|
||||
|
@ -925,10 +962,10 @@ public class LAPSToolsDlg extends CaveSWTDialog {
|
|||
private void resetDomain() {
|
||||
boolean ok = MessageDialog
|
||||
.openConfirm(getShell(), "Confirm Exit",
|
||||
"This will reset all variables to the existing localization values.");
|
||||
"This will reset all variables to values of the existing LAPS domain.");
|
||||
if (ok) {
|
||||
try {
|
||||
LapsToolsIO.readParmsFile(data);
|
||||
LapsToolsIO.readXmlFile(data);
|
||||
} catch (Exception e) {
|
||||
statusHandler.handle(Priority.PROBLEM,
|
||||
e.getLocalizedMessage(), e);
|
||||
|
@ -938,13 +975,26 @@ public class LAPSToolsDlg extends CaveSWTDialog {
|
|||
}
|
||||
|
||||
private void applyAction() {
|
||||
if(data.getLimits()) {
|
||||
System.out.print("LAPS Tools Dlg: problem with domain not covering CWA");
|
||||
boolean yes = MessageDialog
|
||||
.openQuestion(getShell(), "Domain Size Error",
|
||||
"The size of the LAPS domain does not cover the entire CWA." +
|
||||
"\nWould you like to move and recenter domain?" +
|
||||
"\n\n(Answering 'No' will allow you to reedit text values, instead.)");
|
||||
if(yes){ return; }
|
||||
}
|
||||
cenLatSpnr.setEnabled(true);
|
||||
cenLonSpnr.setEnabled(true);
|
||||
nxSpnr.setEnabled(true);
|
||||
nySpnr.setEnabled(true);
|
||||
dxmSpnr.setEnabled(true);
|
||||
|
||||
applyBtn.setEnabled(false);
|
||||
loadBtn.setEnabled(true);
|
||||
resetBtn.setEnabled(true);
|
||||
defaultBtn.setEnabled(true);
|
||||
localizeLapsBtn.setEnabled(true);
|
||||
writeDomainBtn.setEnabled(true);
|
||||
populateSpinners();
|
||||
|
||||
IDisplayPaneContainer container = EditorUtil.getActiveVizContainer();
|
||||
|
@ -961,15 +1011,19 @@ public class LAPSToolsDlg extends CaveSWTDialog {
|
|||
}
|
||||
}
|
||||
|
||||
private void loadAction() {
|
||||
private void loadAction() {
|
||||
cenLatSpnr.setEnabled(false);
|
||||
cenLonSpnr.setEnabled(false);
|
||||
nxSpnr.setEnabled(false);
|
||||
nySpnr.setEnabled(false);
|
||||
dxmSpnr.setEnabled(false);
|
||||
applyBtn.setEnabled(true);
|
||||
loadBtn.setEnabled(false);
|
||||
resetBtn.setEnabled(false);
|
||||
defaultBtn.setEnabled(false);
|
||||
localizeLapsBtn.setEnabled(false);
|
||||
writeDomainBtn.setEnabled(false);
|
||||
readSpinners();
|
||||
|
||||
GenericToolsResourceData<LapsToolLayer> rd = new GenericToolsResourceData<LapsToolLayer>(
|
||||
LapsToolLayer.DEFAULT_NAME, LapsToolLayer.class);
|
||||
|
||||
|
@ -999,13 +1053,13 @@ public class LAPSToolsDlg extends CaveSWTDialog {
|
|||
}
|
||||
}
|
||||
|
||||
private void localizeLapsAction() {
|
||||
private void writeXmlfileAction() {
|
||||
if (MessageDialog.openQuestion(getShell(), "Confirmation",
|
||||
LapsToolsIO.getLocalizationQuestion())) {
|
||||
LapsToolsIO.getWriteXmlQuestion())) {
|
||||
try {
|
||||
LapsToolsIO.localize(data);
|
||||
statusHandler.handle(Priority.SIGNIFICANT,
|
||||
"Initiated LAPS Localization");
|
||||
LapsToolsIO.writeXmlFile(data);
|
||||
statusHandler.handle(Priority.INFO, //SIGNIFICANT
|
||||
"Write EDEX domain.xml file. This action will initiated a LAPS Localization process.");
|
||||
close();
|
||||
} catch (Exception e) {
|
||||
statusHandler.handle(Priority.PROBLEM,
|
||||
|
@ -1013,4 +1067,9 @@ public class LAPSToolsDlg extends CaveSWTDialog {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isLapsInstalled() {
|
||||
return isLapsInstalled;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -25,12 +25,16 @@ import java.util.Arrays;
|
|||
|
||||
import org.eclipse.jface.action.IMenuManager;
|
||||
import org.eclipse.swt.graphics.RGB;
|
||||
import org.opengis.referencing.crs.CoordinateReferenceSystem;
|
||||
|
||||
import com.raytheon.uf.viz.core.DrawableCircle;
|
||||
import com.raytheon.uf.viz.core.DrawableString;
|
||||
import com.raytheon.uf.viz.core.IDisplayPaneContainer;
|
||||
import com.raytheon.uf.viz.core.IExtent;
|
||||
import com.raytheon.uf.viz.core.IGraphicsTarget;
|
||||
//import com.raytheon.uf.viz.core.IGraphicsTarget.HorizontalAlignment;
|
||||
import com.raytheon.uf.viz.core.IGraphicsTarget.LineStyle;
|
||||
//import com.raytheon.uf.viz.core.IGraphicsTarget.TextStyle;
|
||||
import com.raytheon.uf.viz.core.drawables.IWireframeShape;
|
||||
import com.raytheon.uf.viz.core.drawables.PaintProperties;
|
||||
import com.raytheon.uf.viz.core.exception.VizException;
|
||||
|
@ -56,6 +60,8 @@ import com.vividsolutions.jts.geom.Envelope;
|
|||
* bsteffen Intial creation.
|
||||
* 07-21-14 #3412 mapeters Updated deprecated drawCircle call.
|
||||
* 07-29-14 #3465 mapeters Updated deprecated drawString() calls.
|
||||
* Nov 2013 # mccaslin Draw more graphical boxes: for CWA, previous domain, etc
|
||||
|
||||
* </pre>
|
||||
*
|
||||
* @author bsteffen
|
||||
|
@ -72,10 +78,16 @@ public class LapsToolLayer extends AbstractMovableToolLayer<Coordinate>
|
|||
|
||||
private final AbstractRightClickAction moveElementAction;
|
||||
|
||||
private IWireframeShape validShapeOrig;
|
||||
|
||||
private IWireframeShape validShape;
|
||||
|
||||
private IWireframeShape gridShape;
|
||||
|
||||
private RGB labelColor;
|
||||
|
||||
public static String centerLabel = "Center Point";
|
||||
|
||||
public LapsToolLayer(GenericToolsResourceData<LapsToolLayer> resourceData,
|
||||
LoadProperties loadProperties) {
|
||||
super(resourceData, loadProperties, false);
|
||||
|
@ -129,31 +141,74 @@ public class LapsToolLayer extends AbstractMovableToolLayer<Coordinate>
|
|||
protected void paintInternal(IGraphicsTarget target,
|
||||
PaintProperties paintProps) throws VizException {
|
||||
super.paintInternal(target, paintProps);
|
||||
|
||||
Envelope shapeArea = data.getValidArea();
|
||||
if (validShape == null) {
|
||||
validShape = target.createWireframeShape(false, descriptor);
|
||||
Coordinate[] coords = new Coordinate[5];
|
||||
Envelope area = data.getValidArea();
|
||||
coords[0] = new Coordinate(area.getMinX(), area.getMinY());
|
||||
coords[1] = new Coordinate(area.getMinX(), area.getMaxY());
|
||||
coords[2] = new Coordinate(area.getMaxX(), area.getMaxY());
|
||||
coords[3] = new Coordinate(area.getMaxX(), area.getMinY());
|
||||
|
||||
coords[0] = new Coordinate(shapeArea.getMinX(), shapeArea.getMinY());
|
||||
coords[1] = new Coordinate(shapeArea.getMinX(), shapeArea.getMaxY());
|
||||
coords[2] = new Coordinate(shapeArea.getMaxX(), shapeArea.getMaxY());
|
||||
coords[3] = new Coordinate(shapeArea.getMaxX(), shapeArea.getMinY());
|
||||
coords[4] = coords[0];
|
||||
validShape.addLineSegment(coords);
|
||||
}
|
||||
|
||||
Envelope shapeArea2 = data.getValidAreaOrig();
|
||||
if (validShapeOrig == null) {
|
||||
validShapeOrig = target.createWireframeShape(false, descriptor);
|
||||
Coordinate[] coords = new Coordinate[5];
|
||||
coords[0] = new Coordinate(shapeArea2.getMinX(), shapeArea2.getMinY());
|
||||
coords[1] = new Coordinate(shapeArea2.getMinX(), shapeArea2.getMaxY());
|
||||
coords[2] = new Coordinate(shapeArea2.getMaxX(), shapeArea2.getMaxY());
|
||||
coords[3] = new Coordinate(shapeArea2.getMaxX(), shapeArea2.getMinY());
|
||||
coords[4] = coords[0];
|
||||
validShapeOrig.addLineSegment(coords);
|
||||
}
|
||||
|
||||
Envelope gridArea = data.getGridArea();
|
||||
if (gridShape == null) {
|
||||
gridShape = target.createWireframeShape(false, descriptor);
|
||||
Coordinate[] coords = new Coordinate[5];
|
||||
Envelope area = data.getGridArea();
|
||||
coords[0] = new Coordinate(area.getMinX(), area.getMinY());
|
||||
coords[1] = new Coordinate(area.getMinX(), area.getMaxY());
|
||||
coords[2] = new Coordinate(area.getMaxX(), area.getMaxY());
|
||||
coords[3] = new Coordinate(area.getMaxX(), area.getMinY());
|
||||
|
||||
coords[0] = new Coordinate(gridArea.getMinX(), gridArea.getMinY());
|
||||
coords[1] = new Coordinate(gridArea.getMinX(), gridArea.getMaxY());
|
||||
coords[2] = new Coordinate(gridArea.getMaxX(), gridArea.getMaxY());
|
||||
coords[3] = new Coordinate(gridArea.getMaxX(), gridArea.getMinY());
|
||||
coords[4] = coords[0];
|
||||
gridShape.addLineSegment(coords);
|
||||
}
|
||||
|
||||
//Test domain sizes
|
||||
data.setLimits(false);
|
||||
if (gridArea.getMinX() > shapeArea.getMinX()) {
|
||||
data.setLimits(true);
|
||||
} if (gridArea.getMaxX() < shapeArea.getMaxX()) {
|
||||
data.setLimits(true);
|
||||
} if (gridArea.getMinY() > shapeArea.getMinY()) {
|
||||
data.setLimits(true);
|
||||
} if (gridArea.getMaxY() < shapeArea.getMaxY()) {
|
||||
data.setLimits(true);
|
||||
}
|
||||
|
||||
RGB color = getCapability(ColorableCapability.class).getColor();
|
||||
RGB color2 = color;
|
||||
|
||||
// Projected grid domain too small, below the limits of the CWA...
|
||||
if (data.getLimits()) {
|
||||
color2 = new RGB ( 250, 40, 40);
|
||||
labelColor = color2;
|
||||
centerLabel = "[Center point]\nFull CWA is NOT covered by domain";
|
||||
} else {
|
||||
labelColor = color;
|
||||
centerLabel = "Center point";
|
||||
}
|
||||
|
||||
target.drawWireframeShape(validShape, color, 1, LineStyle.DASHED_LARGE);
|
||||
target.drawWireframeShape(gridShape, color, 1, LineStyle.SOLID);
|
||||
target.drawWireframeShape(gridShape, color2, 1, LineStyle.SOLID);
|
||||
RGB gray = new RGB ( 90, 90, 90);
|
||||
target.drawWireframeShape(validShapeOrig, gray, 1, LineStyle.DASH_DOTTED);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -171,11 +226,15 @@ public class LapsToolLayer extends AbstractMovableToolLayer<Coordinate>
|
|||
circle.radius = radius;
|
||||
circle.basics.color = color;
|
||||
target.drawCircle(circle);
|
||||
//14.1.1 and earlier: target.drawCircle(center[0], center[1], 0, radius, color, 1);
|
||||
double labelLoc[] = target.getPointOnCircle(center[0], center[1], 0.0,
|
||||
radius, 0);
|
||||
DrawableString string = new DrawableString("center point", color);
|
||||
//DrawableString string = new DrawableString("center point", color);
|
||||
DrawableString string = new DrawableString(centerLabel, labelColor);
|
||||
string.setCoordinates(labelLoc[0], labelLoc[1]);
|
||||
target.drawStrings(string);
|
||||
//14.1.1 and earlier: target.drawString(null, centerLabel, labelLoc[0], labelLoc[1], 0.0,
|
||||
// TextStyle.NORMAL, labelColor, HorizontalAlignment.LEFT, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -248,6 +307,10 @@ public class LapsToolLayer extends AbstractMovableToolLayer<Coordinate>
|
|||
validShape.dispose();
|
||||
validShape = null;
|
||||
}
|
||||
if (validShapeOrig != null) {
|
||||
validShapeOrig.dispose();
|
||||
validShapeOrig = null;
|
||||
}
|
||||
if (gridShape != null) {
|
||||
gridShape.dispose();
|
||||
gridShape = null;
|
||||
|
@ -255,5 +318,54 @@ public class LapsToolLayer extends AbstractMovableToolLayer<Coordinate>
|
|||
issueRefresh();
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
@see
|
||||
* com.raytheon.uf.viz.core.rsc.AbstractVizResource#project(org.opengis.
|
||||
* referencing.crs.CoordinateReferenceSystem)
|
||||
*/
|
||||
|
||||
public void project(CoordinateReferenceSystem crs) throws VizException {
|
||||
if (validShape != null) {
|
||||
validShape.dispose();
|
||||
validShape = null;
|
||||
}
|
||||
if (validShapeOrig != null) {
|
||||
validShapeOrig.dispose();
|
||||
validShapeOrig = null;
|
||||
}
|
||||
if (gridShape != null) {
|
||||
gridShape.dispose();
|
||||
gridShape = null;
|
||||
}
|
||||
issueRefresh();
|
||||
}
|
||||
|
||||
protected void drawUpperLeftCornerLabel(IGraphicsTarget target,
|
||||
PaintProperties paintProps, String label) throws VizException {
|
||||
// TODO this screen location code is borrowed from MPELegendResource...
|
||||
// should it be put into a shared class, possibly a paint
|
||||
// properties method?
|
||||
IExtent screenExtent = paintProps.getView().getExtent();
|
||||
double scale = (screenExtent.getHeight() / paintProps.getCanvasBounds().height);
|
||||
DrawableString tmpDS = new DrawableString("0", new RGB(100, 100, 100));
|
||||
tmpDS.font = null;
|
||||
double textHeight = target.getStringsBounds(tmpDS).getHeight() * scale;
|
||||
double padding = 3 * scale;
|
||||
double textSpace = textHeight + padding;
|
||||
double cmapHeight = textHeight * 1.25;
|
||||
double legendHeight = cmapHeight + 2.0 * textSpace + 2.0 * padding;
|
||||
double y1 = screenExtent.getMinY() + legendHeight * 2.5;
|
||||
double x1 = screenExtent.getMinX() + padding * 10.0;
|
||||
DrawableString string = new DrawableString(label, this.getCapability(
|
||||
ColorableCapability.class).getColor());
|
||||
string.basics.x = x1;
|
||||
string.basics.y = y1;
|
||||
string.font = null;
|
||||
//string.textStyle = IGraphicsTarget.TextStyle.NORMAL;
|
||||
//string.horizontalAlignment = HorizontalAlignment.LEFT;
|
||||
target.drawStrings(string);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -131,6 +131,7 @@ import com.vividsolutions.jts.geom.Coordinate;
|
|||
* Feb 28, 2014 2791 bsteffen Switch all data to use data source.
|
||||
* Aug 21, 2014 DR 17313 jgerth Implements ImageProvider
|
||||
* Oct 07, 2014 3668 bclement Renamed requestJob to requestRunner
|
||||
* Dec 09, 2014 5056 jing Added data access interfaces
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -150,7 +151,7 @@ public abstract class AbstractGridResource<T extends AbstractResourceData>
|
|||
private static final double VECTOR_DENSITY_FACTOR = 1.875;
|
||||
|
||||
private static final int IMAGE_TILE_SIZE = 1024;
|
||||
|
||||
|
||||
public static final String INTERROGATE_VALUE = "value";
|
||||
|
||||
public static final String INTERROGATE_UNIT = "unit";
|
||||
|
@ -643,7 +644,7 @@ public abstract class AbstractGridResource<T extends AbstractResourceData>
|
|||
public abstract List<GeneralGridData> getData(DataTime time,
|
||||
List<PluginDataObject> pdos) throws VizException;
|
||||
|
||||
protected List<GeneralGridData> requestData(DataTime time) {
|
||||
public List<GeneralGridData> requestData(DataTime time) {
|
||||
synchronized (requestRunner) {
|
||||
List<GeneralGridData> data = this.dataMap.get(time);
|
||||
if (data == null) {
|
||||
|
@ -968,25 +969,29 @@ public abstract class AbstractGridResource<T extends AbstractResourceData>
|
|||
return new ArrayList<PluginDataObject>(list);
|
||||
}
|
||||
|
||||
public Collection<DrawableImage> getImages(IGraphicsTarget target, PaintProperties paintProps) throws VizException {
|
||||
public Collection<DrawableImage> getImages(IGraphicsTarget target,
|
||||
PaintProperties paintProps) throws VizException {
|
||||
if (getCapability(DisplayTypeCapability.class).getDisplayType() != DisplayType.IMAGE) {
|
||||
throw new VizException("Grid resource not configured for image rendering");
|
||||
throw new VizException(
|
||||
"Grid resource not configured for image rendering");
|
||||
}
|
||||
Collection<IRenderable> renderables = getOrCreateRenderables(target, paintProps);
|
||||
Collection<IRenderable> renderables = getOrCreateRenderables(target,
|
||||
paintProps);
|
||||
if (renderables.isEmpty()) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
List<DrawableImage> images = new ArrayList<DrawableImage>();
|
||||
for (IRenderable renderable : renderables) {
|
||||
images.addAll(((TileSetRenderable)renderable).getImagesToRender(target, paintProps));
|
||||
images.addAll(((TileSetRenderable) renderable).getImagesToRender(
|
||||
target, paintProps));
|
||||
}
|
||||
return images;
|
||||
}
|
||||
|
||||
protected Collection<IRenderable> getOrCreateRenderables(
|
||||
IGraphicsTarget target, PaintProperties paintProps)
|
||||
throws VizException {
|
||||
throws VizException {
|
||||
DataTime time = paintProps.getDataTime();
|
||||
if (time == null) {
|
||||
time = getTimeForResource();
|
||||
|
|
|
@ -55,6 +55,8 @@ import com.raytheon.uf.viz.datacube.DataCubeContainer;
|
|||
* Sep 24, 2013 2404 bclement match criteria built using GridStyleUtil
|
||||
* Jan 14, 2014 2661 bsteffen Switch vectors to u,v only.
|
||||
* May 05, 2014 3026 mpduff Made getCurrentGribRecord() public
|
||||
* Nov 19, 2014 5056 jing changed access modifier on getAnyGridRecord
|
||||
* from private to public
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -159,7 +161,7 @@ public class GridResource<T extends AbstractResourceData> extends
|
|||
return (GridRecord) pdos.get(0);
|
||||
}
|
||||
|
||||
protected GridRecord getAnyGridRecord() {
|
||||
public GridRecord getAnyGridRecord() {
|
||||
GridRecord record = getCurrentGridRecord();
|
||||
if (record == null) {
|
||||
for (DataTime time : getDataTimes()) {
|
||||
|
|
|
@ -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" />
|
||||
|
|
|
@ -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>
|
|
@ -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>
|
|
@ -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" />
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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) })
|
||||
|
|
|
@ -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.
|
||||
*/
|
||||
|
|
|
@ -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
|
||||
*/
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -142,12 +142,20 @@ public class VbSource {
|
|||
|
||||
@Override
|
||||
public boolean equals(Object that) {
|
||||
return that instanceof VbSource ? this.key.equals(((VbSource) that)
|
||||
.getKey()) : false;
|
||||
|
||||
if (that instanceof VbSource) {
|
||||
if ((this.key.equals(((VbSource) that).getKey()) && (this
|
||||
.getCategory().compareTo(((VbSource) that).getCategory()) == 0))) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return key.hashCode();
|
||||
String newKey = key.concat(category);
|
||||
return newKey.hashCode();
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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>();
|
||||
}
|
||||
|
|
|
@ -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>
|
28
crh/gov.noaa.nws.crh.edex.grib.decoderpostprocessor/.project
Normal file
28
crh/gov.noaa.nws.crh.edex.grib.decoderpostprocessor/.project
Normal 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>
|
|
@ -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
|
|
@ -0,0 +1,4 @@
|
|||
source.. = src/
|
||||
output.. = bin/
|
||||
bin.includes = META-INF/,\
|
||||
.
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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()
|
|
@ -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:
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -1,17 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<polarStereoGridCoverage>
|
||||
<name>400</name>
|
||||
<description>LAPS Grid</description>
|
||||
<firstGridPointCorner>LowerLeft</firstGridPointCorner>
|
||||
<minorAxis>6367470.0</minorAxis>
|
||||
<majorAxis>6367470.0</majorAxis>
|
||||
<nx>125</nx>
|
||||
<ny>125</ny>
|
||||
<la1>39.432804</la1>
|
||||
<lo1>-75.739328</lo1>
|
||||
<lov>-72.208576</lov>
|
||||
<lad>42.274424</lad>
|
||||
<dx>5</dx>
|
||||
<dy>5</dy>
|
||||
<spacingUnit>km</spacingUnit>
|
||||
</polarStereoGridCoverage>
|
|
@ -18,19 +18,20 @@
|
|||
See_the_AWIPS_II_Master_Rights_File_("Master_Rights_File.pdf")_for
|
||||
further_licensing_information.
|
||||
-->
|
||||
<polarStereoGridCoverage>
|
||||
<name>87</name>
|
||||
<description>U.S. Area; used in MAPS/RUC (60km at 40N) (N. Hem.
|
||||
polar stereographic)</description>
|
||||
<la1>22.8756</la1>
|
||||
<lo1>-120.4911</lo1>
|
||||
<mercatorGridCoverage>
|
||||
<name>625561001</name>
|
||||
<description>NDGD grid over - Hawaii (Mercator)</description>
|
||||
<la1>14.3515</la1>
|
||||
<lo1>-164.9695</lo1>
|
||||
<firstGridPointCorner>LowerLeft</firstGridPointCorner>
|
||||
<nx>81</nx>
|
||||
<ny>62</ny>
|
||||
<dx>68.153</dx>
|
||||
<dy>68.153</dy>
|
||||
<nx>625</nx>
|
||||
<ny>561</ny>
|
||||
<dx>2.5</dx>
|
||||
<dy>2.5</dy>
|
||||
<spacingUnit>km</spacingUnit>
|
||||
<minorAxis>6371229.0</minorAxis>
|
||||
<majorAxis>6371229.0</majorAxis>
|
||||
<lov>-105.0</lov>
|
||||
</polarStereoGridCoverage>
|
||||
<minorAxis>6371200.0</minorAxis>
|
||||
<majorAxis>6371200.0</majorAxis>
|
||||
<latin>20.0</latin>
|
||||
<la2>26.8605</la2>
|
||||
<lo2>-150.0402</lo2>
|
||||
</mercatorGridCoverage>
|
|
@ -28,7 +28,6 @@
|
|||
<name>LAPS</name>
|
||||
<center>59</center>
|
||||
<subcenter>0</subcenter>
|
||||
<grid>400</grid>
|
||||
<process>
|
||||
<id>103</id>
|
||||
</process>
|
||||
|
@ -36,4 +35,4 @@
|
|||
|
||||
<!-- END SUBCENTER 0 -->
|
||||
|
||||
</gribModelSet>
|
||||
</gribModelSet>
|
||||
|
|
|
@ -1509,7 +1509,6 @@
|
|||
<name>MSAS</name>
|
||||
<center>7</center>
|
||||
<subcenter>0</subcenter>
|
||||
<grid>87</grid>
|
||||
<process>
|
||||
<id>100</id>
|
||||
</process>
|
||||
|
@ -3155,7 +3154,7 @@
|
|||
<name>MOSGuide</name>
|
||||
<center>7</center>
|
||||
<subcenter>14</subcenter>
|
||||
<grid>197</grid>
|
||||
<grid>184</grid>
|
||||
<process>
|
||||
<id>96</id>
|
||||
</process>
|
||||
|
@ -3182,10 +3181,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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
5
edexOsgi/com.raytheon.edex.plugin.radar/utility/common_static/base/radarInfo.txt
Normal file → Executable file
5
edexOsgi/com.raytheon.edex.plugin.radar/utility/common_static/base/radarInfo.txt
Normal file → Executable 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
|
||||
|
|
|
@ -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>
|
|
@ -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=""/>
|
|
@ -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=""/>
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue