Merge branch 'master_13.4.1' into master_13.5.1

Conflicts (solved by taking all of 13.4.1-14):
	cave/com.raytheon.viz.gfe/src/com/raytheon/viz/gfe/dialogs/ProductScriptsDialog.java
	cave/com.raytheon.viz.texteditor/src/com/raytheon/viz/texteditor/dialogs/TextEditorDialog.java
	cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gis/PolygonUtil.java
	cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gui/WarngenLayer.java
	cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gui/WarngenUIState.java
	cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/template/TemplateRunner.java
	rpms/awips2.core/Installer.ldm/component.spec
	rpms/build/i386/build.sh


Former-commit-id: 2fc7f80939 [formerly b0e5c758dc [formerly 388fb201c6914d9ec7986a1017df57e5e2de0633]]
Former-commit-id: b0e5c758dc
Former-commit-id: bb6628c17f
This commit is contained in:
Steve Harris 2013-06-10 15:07:59 -04:00
commit cdb89b5d29
6813 changed files with 467894 additions and 1058129 deletions

View file

@ -4,7 +4,7 @@
<comment></comment> <comment></comment>
<projects> <projects>
<project>org.apache.activemq</project> <project>org.apache.activemq</project>
<project>org.apache.tools.bzip2</project> <project>org.itadaki.bzip2</project>
<project>RadarServer</project> <project>RadarServer</project>
<project>RadarServerWithMQ</project> <project>RadarServerWithMQ</project>
</projects> </projects>

View file

@ -26,7 +26,7 @@
This build script expects the following projects to exist at the same This build script expects the following projects to exist at the same
level as this project's folder. com.raytheon.rcm.lib level as this project's folder. com.raytheon.rcm.lib
com.raytheon.rcm.server com.raytheon.rcm.server.mq com.raytheon.rcm.server com.raytheon.rcm.server.mq
com.raytheon.rcm.tools org.apache.tools.bzip2 The projects must be com.raytheon.rcm.tools org.itadaki.bzip2 The projects must be
built before running this script. built before running this script.
--> -->
&substitute-targets; &substitute-targets;
@ -133,7 +133,7 @@
<include name="**/spring-context*.jar" /> <include name="**/spring-context*.jar" />
<include name="**/quartz-all*.jar" /> <include name="**/quartz-all*.jar" />
</fileset> </fileset>
<fileset dir="../org.apache.tools.bzip2" includes="**/*.jar" /> <fileset dir="../org.itadaki.bzip2" includes="**/*.jar" />
</copy> </copy>
<delete dir="bin" /> <delete dir="bin" />

View file

@ -72,7 +72,7 @@
<fileset dir="${buildDirectory}/../../" includes="com.raytheon.rcm*/**"/> <fileset dir="${buildDirectory}/../../" includes="com.raytheon.rcm*/**"/>
</copy> </copy>
<copy todir="${buildDirectory}/plugins"> <copy todir="${buildDirectory}/plugins">
<fileset dir="${buildDirectory}/../../" includes="org.apache.tools.bzip2*/**"/> <fileset dir="${buildDirectory}/../../" includes="org.itadaki.bzip2*/**"/>
</copy> </copy>
<copy todir="${buildDirectory}/plugins"> <copy todir="${buildDirectory}/plugins">
<fileset dir="${buildDirectory}/../../" includes="org.apache.*/**"/> <fileset dir="${buildDirectory}/../../" includes="org.apache.*/**"/>

View file

@ -78,7 +78,7 @@
version="0.0.0"/> version="0.0.0"/>
<plugin <plugin
id="org.apache.tools.bzip2" id="org.itadaki.bzip2"
download-size="0" download-size="0"
install-size="0" install-size="0"
version="0.0.0" version="0.0.0"

View file

@ -27,6 +27,21 @@ import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.Scanner; import java.util.Scanner;
/**
* TODO Add Description
*
* <pre>
*
* SOFTWARE HISTORY
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* 03/07/2013 DR15495 zwang Load elevation info for SSSS radars
*
* </pre>
*
* @author dfriedman
* @version 1.0
*/
public class ElevationInfo { public class ElevationInfo {
// TODO: check all handling of -1/null vcp // TODO: check all handling of -1/null vcp
@ -90,6 +105,15 @@ public class ElevationInfo {
fs.close(); fs.close();
} }
// Load SSSS radar elevation lists
s = ElevationInfo.class.getResourceAsStream("ssssElevationLists.txt");
fs = new Scanner(s);
try {
Loader.loadSsssElevationInfo(fs, staticInfo);
} finally {
fs.close();
}
s = ElevationInfo.class.getResourceAsStream("tdwrElevations.txt"); s = ElevationInfo.class.getResourceAsStream("tdwrElevations.txt");
fs = new Scanner(s); fs = new Scanner(s);
try { try {

View file

@ -39,6 +39,21 @@ import com.raytheon.rcm.products.ElevationInfo.VCPInfo;
import com.raytheon.rcm.products.RadarProduct.Format; import com.raytheon.rcm.products.RadarProduct.Format;
import com.raytheon.rcm.products.RadarProduct.Param; import com.raytheon.rcm.products.RadarProduct.Param;
/**
* TODO Add Description
*
* <pre>
*
* SOFTWARE HISTORY
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* 03/07/2013 DR15495 zwang Load elevation info for SSSS radars
*
* </pre>
*
* @author dfriedman
* @version 1.0
*/
public class Loader { public class Loader {
static List<RadarProduct> loadRadarInfoData(Scanner fs) { static List<RadarProduct> loadRadarInfoData(Scanner fs) {
@ -216,6 +231,43 @@ public class Loader {
} }
} }
public static void loadSsssElevationInfo(Scanner fs,
HashMap<Sel, int[]> staticInfo) {
Pattern p = Pattern.compile("^k*VCP(\\d+)$");
while (fs.hasNext()) {
String line = fs.nextLine();
Scanner ls = new Scanner(line);
if (skipComments(ls))
continue;
try {
String radarID = ls.next();
String id = ls.next();
int vcp = 0;
ls.next(); // Unused op mode
int nElevs = ls.nextInt();
int[] elevs = new int[nElevs];
for (int i = 0; i < elevs.length; ++i)
elevs[i] = (int) (ls.nextDouble() * 10.0);
Matcher m = p.matcher(id);
if (m.matches())
vcp = Integer.parseInt(m.group(1));
else if (id.equals("OTR"))
vcp = ElevationInfo.OTR_OR_RMR_CODE;
else
/* RMR is the same as OTR. We do not care about the TDWR
* entries, we will use the radar-specific one. Actually,
* we shouldn't bother with VCP80 and VCP90 either (TODO: ?)
*/
continue;
Sel sel = new Sel(radarID, vcp);
staticInfo.put(sel, elevs);
} catch (NoSuchElementException e) {
// TODO:
}
}
}
public static void loadTdwrElevationInfo(Scanner fs, public static void loadTdwrElevationInfo(Scanner fs,
HashMap<Sel, int[]> staticInfo) { HashMap<Sel, int[]> staticInfo) {
ArrayList<Integer> elevs = new ArrayList<Integer>(25); ArrayList<Integer> elevs = new ArrayList<Integer>(25);

View file

@ -123,6 +123,7 @@
136|256 | 0 | 4.0 | 0 | SO | SuperOb (SO) | SuperOb | | | | | | | | | |82 136|256 | 0 | 4.0 | 0 | SO | SuperOb (SO) | SuperOb | | | | | | | | | |82
137| 16 | 9 | 1.0 | 230 | ULR | User Selectable Lyr Refl (ULR)| Radial | | | | | | | | | |88 137| 16 | 9 | 1.0 | 230 | ULR | User Selectable Lyr Refl (ULR)| Radial | | | | | | | | | |88
139| 0 | 0 | 0.0 | 230 | MRU | Rapid Update Mesocyclone (MRU)| Graphic | y | | | | | | | | |91 139| 0 | 0 | 0.0 | 230 | MRU | Rapid Update Mesocyclone (MRU)| Graphic | y | | | | | | | | |91
140| 0 | 0 | 0.0 | 230 | GFM | Gust Front MIGFA (GFM) | Generic | | | | | | | | | |28
141| 0 | 0 | 0.0 | 230 | MD | Mesocyclone (MD) | Graphic | | | | | | | | | |92 141| 0 | 0 | 0.0 | 230 | MD | Mesocyclone (MD) | Graphic | | | | | | | | | |92
143| 0 | 0 | 0.0 | 230 | TRU | TVS Rapid Update (TRU) | Graphic | y | | | | | | | | |93 143| 0 | 0 | 0.0 | 230 | TRU | TVS Rapid Update (TRU) | Graphic | y | | | | | | | | |93
149| 0 | 0 | 0.0 | 230 | DMD | Digital Meso Detection (DMD) | Generic | y | | | | | | | | |94 149| 0 | 0 | 0.0 | 230 | DMD | Digital Meso Detection (DMD) | Generic | y | | | | | | | | |94

View file

@ -0,0 +1,28 @@
#This file stores elevation lists for SSSS radars
#This file stores the elevation angle lists for the OTR, RPS and RMR.
#
#The format is,
#radarID, List-Name type number-of-values value1 value2... valueN
#radarID: klgx is the only radar for now
#List-Name: Name for a angle set. It can be OTR, RMR or VCPxx.
#type: Type of the list. for VCP is the storm or clear-air. For the OTR and
# RMR is none.
#number-of-values: How many angles is in this list.
#valuen: A elevation angle value.
#
#Keep one list one line!
# klgx
#For the OTR of WSR-88D
klgx OTR none 40 0.2 0.5 0.9 1.3 1.5 1.8 2.1 2.4 2.5 2.9 3.1 3.4 3.5 3.8 4.0 4.3 4.5 4.8 5.1 5.3 6.0 6.1 6.2 6.4 7.5 7.7 8.0 8.7 9.7 9.9 10.0 12.0 12.2 12.5 14.0 14.6 15.5 15.6 16.7 19.5
#For RMR of WSR-88D
klgx RMR none 40 0.2 0.5 0.9 1.3 1.5 1.8 2.1 2.4 2.5 2.9 3.1 3.4 3.5 3.8 4.0 4.3 4.5 4.8 5.1 5.3 6.0 6.1 6.2 6.4 7.5 7.7 8.0 8.7 9.7 9.9 10.0 12.0 12.2 12.5 14.0 14.6 15.5 15.6 16.7 19.5
#For RPS of WSR-88D
klgx VCP11 storm 15 0.2 0.5 1.5 2.4 3.4 4.3 5.3 6.2 7.5 8.7 10.0 12.0 14.0 16.7 19.5
klgx VCP12 storm 15 0.2 0.5 0.9 1.3 1.8 2.4 3.1 4.0 5.1 6.4 8.0 10.0 12.5 15.6 19.5
klgx VCP21 storm 10 0.2 0.5 1.5 2.4 3.4 4.3 6.0 9.9 14.6 19.5
klgx VCP121 storm 10 0.2 0.5 1.5 2.4 3.4 4.3 6.0 9.9 14.6 19.5
klgx VCP211 storm 15 0.2 0.5 1.5 2.4 3.4 4.3 5.3 6.2 7.5 8.7 10.0 12.0 14.0 16.7 19.5
klgx VCP212 storm 15 0.2 0.5 0.9 1.3 1.8 2.4 3.1 4.0 5.1 6.4 8.0 10.0 12.5 15.6 19.5
klgx VCP221 storm 10 0.2 0.5 1.5 2.4 3.4 4.3 6.0 9.9 14.6 19.5
klgx VCP31 clear-air 6 0.2 0.5 1.5 2.5 3.5 4.5
klgx VCP32 clear-air 6 0.2 0.5 1.5 2.5 3.5 4.5

View file

@ -30,9 +30,29 @@ import com.raytheon.rcm.products.ProductInfo.Selector;
import com.raytheon.rcm.products.RadarProduct; import com.raytheon.rcm.products.RadarProduct;
import com.raytheon.rcm.products.RadarProduct.Param; import com.raytheon.rcm.products.RadarProduct.Param;
/**
* Representation of an RPS list
*
* <pre>
*
* SOFTWARE HISTORY
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* 2009-04-22 #1693 D. Friedman Initial checkin
* ...
* 2013-01-31 DR 15458 D. Friedman Define UNSPECIFIED_VCP
* </pre>
*
*/
@XmlRootElement @XmlRootElement
@XmlAccessorType(XmlAccessType.PROPERTY) @XmlAccessorType(XmlAccessType.PROPERTY)
public class RpsList implements Cloneable { public class RpsList implements Cloneable {
/**
* Indicates an a list that is appropriate for any VCP or an unspecified
* VCP.
*/
public static final int UNSPECIFIED_VCP = -1;
/* just a guess of what will be useful... */ /* just a guess of what will be useful... */
protected int opMode; protected int opMode;
protected int vcp; protected int vcp;

View file

@ -7,7 +7,6 @@ Export-Package: com.raytheon.rcm.mqsrvr
Require-Bundle: com.raytheon.rcm.server;bundle-version="1.0.0", Require-Bundle: com.raytheon.rcm.server;bundle-version="1.0.0",
org.apache.activemq;bundle-version="5.2.0", org.apache.activemq;bundle-version="5.2.0",
com.raytheon.rcm.lib;bundle-version="1.0.0", com.raytheon.rcm.lib;bundle-version="1.0.0",
org.apache.tools.bzip2;bundle-version="1.0.0",
javax.jms;bundle-version="1.0.0", javax.jms;bundle-version="1.0.0",
org.apache.qpid;bundle-version="1.0.0" org.apache.qpid;bundle-version="1.0.0",
Import-Package: org.apache.tools.bzip2 org.itadaki.bzip2;bundle-version="0.9.1"

View file

@ -43,7 +43,7 @@ import javax.jms.Session;
import javax.jms.TextMessage; import javax.jms.TextMessage;
import org.apache.qpid.client.AMQConnectionFactory; import org.apache.qpid.client.AMQConnectionFactory;
import org.apache.tools.bzip2.CBZip2InputStream; import org.itadaki.bzip2.BZip2InputStream;
import com.raytheon.rcm.config.EndpointConfig; import com.raytheon.rcm.config.EndpointConfig;
import com.raytheon.rcm.config.awips1.Awips1ProdDistInfoBuilder; import com.raytheon.rcm.config.awips1.Awips1ProdDistInfoBuilder;
@ -659,11 +659,7 @@ public class DataArchiveEndpoint extends RadarEventAdapter {
try { try {
InputStream ins = new ByteArrayInputStream(msg, 120, InputStream ins = new ByteArrayInputStream(msg, 120,
msg.length - 120); msg.length - 120);
char c1 = (char) ins.read(); ins = new BZip2InputStream(ins, false);
char c2 = (char) ins.read();
if (c1 != 'B' || c2 != 'Z')
throw new IOException("Not a bzip2 stream");
ins = new CBZip2InputStream(ins);
// ByteArrayOutputStream outs = new // ByteArrayOutputStream outs = new
// ByteArrayOutputStream(uncompressedSize); // ByteArrayOutputStream(uncompressedSize);
uncompressed = new byte[uncompressedSize]; uncompressed = new byte[uncompressedSize];

View file

@ -13,10 +13,9 @@ Export-Package: com.raytheon.rcm.coll,
com.raytheon.rcm.rpsmgr, com.raytheon.rcm.rpsmgr,
com.raytheon.rcm.server com.raytheon.rcm.server
Require-Bundle: com.raytheon.rcm.lib;bundle-version="1.0.0", Require-Bundle: com.raytheon.rcm.lib;bundle-version="1.0.0",
org.apache.tools.bzip2;bundle-version="1.0.0",
org.apache.commons.logging;bundle-version="1.0.4", org.apache.commons.logging;bundle-version="1.0.4",
org.springframework;bundle-version="2.5.6" org.springframework;bundle-version="2.5.6",
org.itadaki.bzip2;bundle-version="0.9.1"
Import-Package: com.raytheon.uf.common.util, Import-Package: com.raytheon.uf.common.util,
org.apache.log4j, org.apache.log4j,
org.apache.tools.bzip2,
org.junit org.junit

View file

@ -58,6 +58,20 @@ import com.raytheon.rcm.server.StatusManager.RadarStatus;
/* TODO: Log PRR messages for requests the mgr sent? (RPSHandler::handlePRR) /* TODO: Log PRR messages for requests the mgr sent? (RPSHandler::handlePRR)
*/ */
/**
* Manages current RPS lists and requests for changes to RPS lists.
*
* <pre>
*
* SOFTWARE HISTORY
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* 2009-04-22 #1693 D. Friedman Initial checkin
* ...
* 2013-01-31 DR 15458 D. Friedman Explicitly handle UNSPECIFIED_VCP.
* </pre>
*
*/
public class RPSListManager extends RadarEventAdapter { public class RPSListManager extends RadarEventAdapter {
// All RPS list requests will use this for the sequence number. // All RPS list requests will use this for the sequence number.
@ -149,7 +163,7 @@ public class RPSListManager extends RadarEventAdapter {
RadarStatus status = radarServer.getStatusManager().getRadarStatus( RadarStatus status = radarServer.getStatusManager().getRadarStatus(
radarID); radarID);
int opMode; int opMode;
int vcp; int currentVCP;
int[] gsmCuts; int[] gsmCuts;
try { try {
byte[] msg = status.getCurrentGSM(); byte[] msg = status.getCurrentGSM();
@ -157,7 +171,7 @@ public class RPSListManager extends RadarEventAdapter {
return "Not connected or no status information received yet"; return "Not connected or no status information received yet";
GSM gsm = GSM.decode(msg); GSM gsm = GSM.decode(msg);
opMode = gsm.opMode; opMode = gsm.opMode;
vcp = gsm.vcp; currentVCP = gsm.vcp;
gsmCuts = gsm.cuts; gsmCuts = gsm.cuts;
} catch (RuntimeException e) { } catch (RuntimeException e) {
Log.errorf("Error reading GSM: %s", e); Log.errorf("Error reading GSM: %s", e);
@ -165,23 +179,22 @@ public class RPSListManager extends RadarEventAdapter {
return "Error getting radar status"; return "Error getting radar status";
} }
int[] cuts = ElevationInfo.getInstance().getScanElevations(radarID, vcp); int[] cuts = ElevationInfo.getInstance().getScanElevations(radarID, currentVCP);
if (cuts == null && Util.getRadarType(rc) == RadarType.WSR) if (cuts == null && Util.getRadarType(rc) == RadarType.WSR)
cuts = gsmCuts; cuts = gsmCuts;
// TODO: INVALID_VCP if (list.getVcp() != RpsList.UNSPECIFIED_VCP && list.getVcp() != currentVCP) {
if (list.getVcp() > 0 && list.getVcp() != vcp) {
if (store) if (store)
return null; // TODO: Should warn instead. return null; // TODO: Should warn instead.
else else
return String.format("RPS list for VCP %d. Current VCP is %d", return String.format("RPS list for VCP %d. Current VCP is %d",
list.getVcp(), vcp); list.getVcp(), currentVCP);
} }
list = (RpsList) list.clone(); list = (RpsList) list.clone();
list.setVcp(vcp); list.setVcp(currentVCP);
list = getMergedRpsListForRadar(rc, opMode, vcp, cuts, list); list = getMergedRpsListForRadar(rc, opMode, currentVCP, cuts, list);
if (list != null) { if (list != null) {
// TODO: Should persist this // TODO: Should persist this
currentRpsLists.put(rc.getRadarID(), (RpsList) list.clone()); currentRpsLists.put(rc.getRadarID(), (RpsList) list.clone());

View file

@ -27,15 +27,15 @@ import java.io.InputStream;
import java.nio.BufferUnderflowException; import java.nio.BufferUnderflowException;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import org.apache.tools.bzip2.CBZip2InputStream; import org.itadaki.bzip2.BZip2InputStream;
import com.raytheon.rcm.event.ConfigEvent; import com.raytheon.rcm.event.ConfigEvent;
import com.raytheon.rcm.event.RadarEvent; import com.raytheon.rcm.event.RadarEvent;
import com.raytheon.rcm.event.RadarEventAdapter; import com.raytheon.rcm.event.RadarEventAdapter;
import com.raytheon.rcm.message.GraphicProduct; import com.raytheon.rcm.message.GraphicProduct;
import com.raytheon.rcm.message.GraphicProduct.PDB;
import com.raytheon.rcm.message.Message; import com.raytheon.rcm.message.Message;
import com.raytheon.rcm.message.MessageFormatException; import com.raytheon.rcm.message.MessageFormatException;
import com.raytheon.rcm.message.GraphicProduct.PDB;
/** /**
* A radar server component that delivers radar products to an EDEX file * A radar server component that delivers radar products to an EDEX file
@ -172,11 +172,7 @@ public class Awips2Endpoint extends RadarEventAdapter {
try { try {
InputStream ins = new ByteArrayInputStream(msg, 120, InputStream ins = new ByteArrayInputStream(msg, 120,
msg.length - 120); msg.length - 120);
char c1 = (char) ins.read(); ins = new BZip2InputStream(ins, false);
char c2 = (char) ins.read();
if (c1 != 'B' || c2 != 'Z')
throw new IOException("Not a bzip2 stream");
ins = new CBZip2InputStream(ins);
// ByteArrayOutputStream outs = new // ByteArrayOutputStream outs = new
// ByteArrayOutputStream(uncompressedSize); // ByteArrayOutputStream(uncompressedSize);
uncompressed = new byte[uncompressedSize]; uncompressed = new byte[uncompressedSize];

View file

@ -2,6 +2,6 @@
<?eclipse-pydev version="1.0"?> <?eclipse-pydev version="1.0"?>
<pydev_project> <pydev_project>
<pydev_property name="org.python.pydev.PYTHON_PROJECT_VERSION">python 2.5</pydev_property> <pydev_property name="org.python.pydev.PYTHON_PROJECT_VERSION">python 2.7</pydev_property>
<pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">Default</pydev_property> <pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">Default</pydev_property>
</pydev_project> </pydev_project>

View file

@ -228,6 +228,8 @@
<var name="cave.arch" value="arch.x86" /> <var name="cave.arch" value="arch.x86" />
<extractCAVEini <extractCAVEini
zip.file="${buildDirectory}/${buildLabel}/${buildId}-linux.gtk.x86.zip" /> zip.file="${buildDirectory}/${buildLabel}/${buildId}-linux.gtk.x86.zip" />
<!-- add the Xss jvm parameter to the 32-bit CAVE -->
<echo file="/tmp/cave/cave.ini" append="true" message="-Xss512k" />
<antcall target="generateDynamicCAVE" /> <antcall target="generateDynamicCAVE" />
<!-- Update the 32-bit CAVE zip file --> <!-- Update the 32-bit CAVE zip file -->
<zip destfile="${buildDirectory}/${buildLabel}/${buildId}-linux.gtk.x86.zip" <zip destfile="${buildDirectory}/${buildLabel}/${buildId}-linux.gtk.x86.zip"

View file

@ -232,14 +232,6 @@
<param name="feature" <param name="feature"
value="com.raytheon.uf.viz.ncep.dataplugins.feature" /> value="com.raytheon.uf.viz.ncep.dataplugins.feature" />
</antcall> </antcall>
<antcall target="p2.build.repo">
<param name="feature"
value="com.raytheon.uf.viz.ncep.displays.feature" />
</antcall>
<antcall target="p2.build.repo">
<param name="feature"
value="com.raytheon.uf.viz.ncep.nsharp.feature" />
</antcall>
<antcall target="p2.build.repo"> <antcall target="p2.build.repo">
<param name="feature" <param name="feature"
value="com.raytheon.viz.avnfps.feature" /> value="com.raytheon.viz.avnfps.feature" />
@ -252,6 +244,14 @@
<param name="feature" <param name="feature"
value="com.raytheon.uf.viz.d2d.xy.feature" /> value="com.raytheon.uf.viz.d2d.xy.feature" />
</antcall> </antcall>
<antcall target="p2.build.repo">
<param name="feature"
value="com.raytheon.uf.viz.ncep.displays.feature" />
</antcall>
<antcall target="p2.build.repo">
<param name="feature"
value="com.raytheon.uf.viz.ncep.nsharp.feature" />
</antcall>
<antcall target="p2.build.repo"> <antcall target="p2.build.repo">
<param name="feature" <param name="feature"
value="com.raytheon.uf.viz.d2d.nsharp.feature" /> value="com.raytheon.uf.viz.d2d.nsharp.feature" />
@ -304,6 +304,10 @@
<param name="feature" <param name="feature"
value="com.raytheon.uf.viz.gisdatastore.feature" /> value="com.raytheon.uf.viz.gisdatastore.feature" />
</antcall> </antcall>
<antcall target="p2.build.repo">
<param name="feature"
value="com.raytheon.viz.dataaccess.feature" />
</antcall>
<antcall target="cleanup.features" /> <antcall target="cleanup.features" />
</target> </target>

View file

@ -1,19 +1,19 @@
## ##
# This software was developed and / or modified by Raytheon Company, # This software was developed and / or modified by Raytheon Company,
# pursuant to Contract DG133W-05-CQ-1067 with the US Government. # pursuant to Contract DG133W-05-CQ-1067 with the US Government.
# #
# U.S. EXPORT CONTROLLED TECHNICAL DATA # U.S. EXPORT CONTROLLED TECHNICAL DATA
# This software product contains export-restricted data whose # This software product contains export-restricted data whose
# export/transfer/disclosure is restricted by U.S. law. Dissemination # export/transfer/disclosure is restricted by U.S. law. Dissemination
# to non-U.S. persons whether in the United States or abroad requires # to non-U.S. persons whether in the United States or abroad requires
# an export license or other authorization. # an export license or other authorization.
# #
# Contractor Name: Raytheon Company # Contractor Name: Raytheon Company
# Contractor Address: 6825 Pine Street, Suite 340 # Contractor Address: 6825 Pine Street, Suite 340
# Mail Stop B8 # Mail Stop B8
# Omaha, NE 68106 # Omaha, NE 68106
# 402.291.0100 # 402.291.0100
# #
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for # See the AWIPS II Master Rights File ("Master Rights File.pdf") for
# further licensing information. # further licensing information.
## ##
@ -140,10 +140,20 @@
# Relationship Type: In Response to # Relationship Type: In Response to
# Status: TEST # Status: TEST
# Title: AvnFPS: Lack of customization in QC check # Title: AvnFPS: Lack of customization in QC check
# #
#**
#*
#*
#* <pre>
#* SOFTWARE HISTORY
#* Date Ticket# Engineer Description
#* ------------ ---------- ----------- --------------------------
#* Initial creation.
#* Mar 07, 2013 1735 rferrel Changes to obtain grid data for a list of sites.
##
# #
import logging, os, time, ConfigParser import logging, os, time, ConfigParser
import Avn, AvnLib, AvnParser import Avn, AvnLib, AvnParser, JUtil, cPickle
import PointDataView, GfeValues import PointDataView, GfeValues
_Missing = '' _Missing = ''
@ -157,7 +167,7 @@ _Keys = ['Temp', 'DwptT', 'WDir', 'WSpd', 'WGust', 'Obvis', 'Vsby', \
'Ints2', 'Prob2', 'PTyp3', 'Ints3', 'Prob3'] 'Ints2', 'Prob2', 'PTyp3', 'Ints3', 'Prob3']
_NumHours = 36 _NumHours = 36
Parameters = ['Sky', 'T', 'Td', 'Wind', 'WindGust', 'PoP', 'Wx', 'WindGust'] Parameters = ['Sky', 'T', 'Td', 'Wind', 'WindGust', 'PoP', 'Wx']
Translate = { 'Sky':'Sky', 'Temp':'T', 'DwptT':'Td', 'WDir':'WindDir', 'WSpd':'WindSpd', 'WGust':'WindGust', Translate = { 'Sky':'Sky', 'Temp':'T', 'DwptT':'Td', 'WDir':'WindDir', 'WSpd':'WindSpd', 'WGust':'WindGust',
'PoP1h':'PoP', 'Obvis':'Wx', 'PoP':'PoP', 'Tstm':'Wx', 'Tint':'Wx', 'PTyp1':'Wx', 'Prob1':'Wx', 'Ints1':'Wx', 'PoP1h':'PoP', 'Obvis':'Wx', 'PoP':'PoP', 'Tstm':'Wx', 'Tint':'Wx', 'PTyp1':'Wx', 'Prob1':'Wx', 'Ints1':'Wx',
@ -294,7 +304,6 @@ def _cvt(itime, d):
def _getData(pdc, firstTime): def _getData(pdc, firstTime):
organizedData = {} organizedData = {}
data = [] data = []
pdc = None
if pdc is not None : if pdc is not None :
for i in range(pdc.getCurrentSz()): for i in range(pdc.getCurrentSz()):
jpdv = pdc.readRandom(i) jpdv = pdc.readRandom(i)
@ -444,8 +453,11 @@ def _readPrbConf():
prb_conf['after9hr'][wx] = conf.getint('after9hr',wx) prb_conf['after9hr'][wx] = conf.getint('after9hr',wx)
return prb_conf return prb_conf
def makeData(siteID, timeSeconds): def makeData(siteID, timeSeconds):
data = retrieveData(siteID, timeSeconds) data = retrieveData(siteID, timeSeconds)
return formatData(siteID, timeSeconds, data)
def formatData(siteID, timeSeconds, data):
if data is None or data['issuetime'] < time.time() - 86400: if data is None or data['issuetime'] < time.time() - 86400:
msg = 'Grid data is not available' msg = 'Grid data is not available'
_Logger.info(msg) _Logger.info(msg)
@ -492,34 +504,57 @@ def makeTable(siteID, timeSeconds):
msg = 'Grid data for %s is not available', siteID msg = 'Grid data for %s is not available', siteID
raise Avn.AvnError(msg) raise Avn.AvnError(msg)
def retrieveData(siteID, timeSeconds, parameters=Parameters):
results = _retrieveMapData([siteID], timeSeconds, parameters)
return results[siteID]
def retrieveData(siteID, timeSeconds): def retrieveMapData(siteIDs, timeSeconds, parameters=Parameters):
r = _retrieveMapData(siteIDs, timeSeconds, parameters=Parameters)
results = {}
for siteID in siteIDs:
results[siteID] = cPickle.dumps(r[siteID])
return JUtil.pyDictToJavaMap(results)
def _retrieveMapData(siteIDs, timeSeconds, parameters=Parameters):
import JUtil
from com.raytheon.uf.common.dataplugin.gfe.request import GetPointDataRequest from com.raytheon.uf.common.dataplugin.gfe.request import GetPointDataRequest
from com.vividsolutions.jts.geom import Coordinate from com.vividsolutions.jts.geom import Coordinate
from com.raytheon.viz.aviation.guidance import GuidanceUtil from com.raytheon.viz.aviation.guidance import GuidanceUtil
from com.raytheon.uf.viz.core.localization import LocalizationManager from com.raytheon.uf.viz.core.localization import LocalizationManager
config = AvnParser.getTafSiteCfg(siteID)
lat = config['geography']['lat']
lon = config['geography']['lon']
gfeSiteId = LocalizationManager.getInstance().getCurrentSite() gfeSiteId = LocalizationManager.getInstance().getCurrentSite()
task = GetPointDataRequest() task = GetPointDataRequest()
task.setSiteID(gfeSiteId); task.setSiteID(gfeSiteId);
c = Coordinate(float(lon), float(lat))
task.setCoordinate(c)
task.setNumberHours(_NumHours)
task.setStartTime(long(timeSeconds * 1000))
for p in Parameters:
task.addParameter(p)
db = gfeSiteId + '_GRID__Official_00000000_0000' db = gfeSiteId + '_GRID__Official_00000000_0000'
task.setDatabaseID(db) task.setDatabaseID(db)
pdc = GuidanceUtil.getGFEPointData(task) for siteID in siteIDs:
data = _getData(pdc, timeSeconds * 1000) config = AvnParser.getTafSiteCfg(siteID)
if data is None : lat = config['geography']['lat']
_Logger.info('Data not available for %s', siteID) lon = config['geography']['lon']
return data c = Coordinate(float(lon), float(lat))
task.addCoordinate(c)
task.setNumberHours(_NumHours)
task.setStartTime(long(timeSeconds * 1000))
for p in parameters:
task.addParameter(p)
pdcs = GuidanceUtil.getGFEPointsData(task)
results = {}
if pdcs is None :
for siteId in siteIDs:
_Logger.info('Data not available for %s', siteID)
results[siteID] = None
return results
i = 0
for siteID in siteIDs:
pdc = pdcs.getContainer(i)
if i < pdcs.getSize() :
++i
data = _getData(pdc, timeSeconds * 1000)
if data is None:
_Logger.info('Data not available for %s', siteID)
results[siteID] = data
return results
############################################################################### ###############################################################################
if __name__ == '__main__': if __name__ == '__main__':

View file

@ -1,19 +1,19 @@
## ##
# This software was developed and / or modified by Raytheon Company, # This software was developed and / or modified by Raytheon Company,
# pursuant to Contract DG133W-05-CQ-1067 with the US Government. # pursuant to Contract DG133W-05-CQ-1067 with the US Government.
# #
# U.S. EXPORT CONTROLLED TECHNICAL DATA # U.S. EXPORT CONTROLLED TECHNICAL DATA
# This software product contains export-restricted data whose # This software product contains export-restricted data whose
# export/transfer/disclosure is restricted by U.S. law. Dissemination # export/transfer/disclosure is restricted by U.S. law. Dissemination
# to non-U.S. persons whether in the United States or abroad requires # to non-U.S. persons whether in the United States or abroad requires
# an export license or other authorization. # an export license or other authorization.
# #
# Contractor Name: Raytheon Company # Contractor Name: Raytheon Company
# Contractor Address: 6825 Pine Street, Suite 340 # Contractor Address: 6825 Pine Street, Suite 340
# Mail Stop B8 # Mail Stop B8
# Omaha, NE 68106 # Omaha, NE 68106
# 402.291.0100 # 402.291.0100
# #
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for # See the AWIPS II Master Rights File ("Master Rights File.pdf") for
# further licensing information. # further licensing information.
## ##
@ -125,10 +125,20 @@
# IFPS grids monitoring module # IFPS grids monitoring module
# Author: George Trojan, SAIC/MDL, August 2003 # Author: George Trojan, SAIC/MDL, August 2003
# last update: 04/20/06 # last update: 04/20/06
#**
#*
#*
#* <pre>
#* SOFTWARE HISTORY
#* Date Ticket# Engineer Description
#* ------------ ---------- ----------- --------------------------
#* Initial creation.
#* Mar 07, 2013 1735 rferrel Use SiteGridManager to limit calls to server.
##
import logging, time import logging, time, cPickle
import Avn, AvnLib, Globals, GridData, MonitorP, TafDecoder, TafGen import Avn, AvnLib, Globals, GridData, MonitorP, TafDecoder, TafGen, JUtil
from com.raytheon.viz.aviation.monitor import SiteGridManager
_Logger = logging.getLogger(Avn.CATEGORY) _Logger = logging.getLogger(Avn.CATEGORY)
############################################################################## ##############################################################################
@ -142,7 +152,21 @@ class Monitor(MonitorP.Monitor):
def __makeData(self, t): def __makeData(self, t):
try: try:
data = GridData.makeData(self.info['ident'], t) siteID = self.info['ident']
timeSeconds = long(t)
if SiteGridManager.needData(timeSeconds) :
siteIDs = JUtil.javaStringListToPylist(SiteGridManager.getSiteIDs())
containersMap = GridData.retrieveMapData(siteIDs, timeSeconds)
SiteGridManager.setContainersMap(containersMap)
return None
o = SiteGridManager.getData(siteID, timeSeconds)
if o is None :
return None
ndata = cPickle.loads(o)
data = GridData.formatData(siteID, timeSeconds, ndata)
bbb = 'RRA' bbb = 'RRA'
tc=TafGen.TafGen('grid',data,bbb) tc=TafGen.TafGen('grid',data,bbb)
taf=tc.createTaf(False) taf=tc.createTaf(False)

View file

@ -35,6 +35,7 @@ _Logger = logging.getLogger(Avn.CATEGORY)
# Date Ticket# Engineer Description # Date Ticket# Engineer Description
# ------------ ---------- ----------- -------------------------- # ------------ ---------- ----------- --------------------------
# 07/22/09 njensen Initial Creation. # 07/22/09 njensen Initial Creation.
# 02/13/2013 1549 rferrel Change to properly display grid data.
# #
# #
# #
@ -307,6 +308,7 @@ def tafgen(siteObjs, model, format='short', routine = False, highlightFlightCat=
return tafWithHeader return tafWithHeader
def __makeHeader(model, data): def __makeHeader(model, data):
#print '__makeHeader data: ', data
if data and data['itime'] and data['itime']['value']: if data and data['itime'] and data['itime']['value']:
date = time.strftime('%m/%d/%y %H%M UTC', time.gmtime(data['itime']['value'])) date = time.strftime('%m/%d/%y %H%M UTC', time.gmtime(data['itime']['value']))
else: else:
@ -460,12 +462,12 @@ def gridgenRetrieve(siteID):
d = (requestTime, data) d = (requestTime, data)
o['data'] = d o['data'] = d
obj = pickle.dumps(o) obj = pickle.dumps(o)
# print 'return gridgenRetrieve - siteID, data', siteID, d #print 'return gridgenRetrieve - siteID, data', siteID, d
return obj return obj
def gridgen(siteObjs, format='short', routine=False, highlightFlightCat=True): def gridgen(siteObjs, format='short', routine=False, highlightFlightCat=True):
siteObjs = JUtil.javaStringListToPylist(siteObjs) siteObjs = JUtil.javaStringListToPylist(siteObjs)
# print 'GuidanceEntry:gridgen format, highlightFlightCat:', format, highlightFlightCat #print 'GuidanceEntry:gridgen format, highlightFlightCat:', format, highlightFlightCat
currentTime = time.gmtime() currentTime = time.gmtime()
requestTime = time.mktime((currentTime[0], currentTime[1], currentTime[2], currentTime[3], requestTime = time.mktime((currentTime[0], currentTime[1], currentTime[2], currentTime[3],
0, 0, currentTime[6], currentTime[7], currentTime[8])) - time.timezone 0, 0, currentTime[6], currentTime[7], currentTime[8])) - time.timezone
@ -496,9 +498,12 @@ def gridgen(siteObjs, format='short', routine=False, highlightFlightCat=True):
o = pickle.loads(siteObj) o = pickle.loads(siteObj)
siteID = o['siteID'] siteID = o['siteID']
cacheRequestTime, data = o['data'] cacheRequestTime, data = o['data']
if data is not None :
data = data.values()[0]
if not firstSiteID: if not firstSiteID:
firstSiteID = siteID firstSiteID = siteID
# print 'gridgen siteID, cacheRequestTime, data: ', cacheRequestTime, data #print 'gridgen siteID, cacheRequestTime, data: ', siteID, cacheRequestTime, data
if cacheRequestTime != requestTime: if cacheRequestTime != requestTime:
cacheList.append('++Cache out of date :%s' % siteID) cacheList.append('++Cache out of date :%s' % siteID)
if data: if data:

View file

@ -1,19 +1,19 @@
## ##
# This software was developed and / or modified by Raytheon Company, # This software was developed and / or modified by Raytheon Company,
# pursuant to Contract DG133W-05-CQ-1067 with the US Government. # pursuant to Contract DG133W-05-CQ-1067 with the US Government.
# #
# U.S. EXPORT CONTROLLED TECHNICAL DATA # U.S. EXPORT CONTROLLED TECHNICAL DATA
# This software product contains export-restricted data whose # This software product contains export-restricted data whose
# export/transfer/disclosure is restricted by U.S. law. Dissemination # export/transfer/disclosure is restricted by U.S. law. Dissemination
# to non-U.S. persons whether in the United States or abroad requires # to non-U.S. persons whether in the United States or abroad requires
# an export license or other authorization. # an export license or other authorization.
# #
# Contractor Name: Raytheon Company # Contractor Name: Raytheon Company
# Contractor Address: 6825 Pine Street, Suite 340 # Contractor Address: 6825 Pine Street, Suite 340
# Mail Stop B8 # Mail Stop B8
# Omaha, NE 68106 # Omaha, NE 68106
# 402.291.0100 # 402.291.0100
# #
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for # See the AWIPS II Master Rights File ("Master Rights File.pdf") for
# further licensing information. # further licensing information.
## ##
@ -48,6 +48,16 @@
# Title: AvnFPS: Incorrect file permission on ISH files # Title: AvnFPS: Incorrect file permission on ISH files
# #
# #
#**
#*
#*
#* <pre>
#* SOFTWARE HISTORY
#* Date Ticket# Engineer Description
#* ------------ ---------- ----------- --------------------------
#* Initial creation.
#* Mar 25, 2013 1735 rferrel Retrieve only the last 24 hours of acars records.
##
from com.raytheon.viz.aviation.monitor import LlwsManager from com.raytheon.viz.aviation.monitor import LlwsManager
import logging, os, time import logging, os, time
@ -86,6 +96,10 @@ def writeLLWS(ident, data):
_Logger.error('Cannot write LLWS file for %s', ident) _Logger.error('Cannot write LLWS file for %s', ident)
def retrieve(siteID, info): def retrieve(siteID, info):
from datetime import timedelta
day = timedelta(days=1)
secondsPerDay = day.total_seconds()
msPerSecond = 1000.0
th = LLWSThread.Server(info) th = LLWSThread.Server(info)
t = 0 t = 0
d = {} d = {}
@ -96,12 +110,17 @@ def retrieve(siteID, info):
profilerIds = th.processProfilerData(siteID) profilerIds = th.processProfilerData(siteID)
for profilerId in profilerIds: for profilerId in profilerIds:
try : try :
shear = th.genShear(siteID, profilerId) shear = th.genShear(siteID, profilerId)
d[profilerId] = shear d[profilerId] = shear
except LLWSThread.InValid: except LLWSThread.InValid:
pass pass
acarsRec = LlwsManager.getAcarsRecord(siteID, 0) # This gets all acarsRec in the database since 0 retrieves from the epoch.
# This may be ok if database is purged frequently.
# How far back should it go 1, 6, 12, 24 hours?
# acarsRec = LlwsManager.getAcarsRecord(siteID, 0)
refTime = long((time.time() - secondsPerDay) * msPerSecond)
acarsRec = LlwsManager.getAcarsRecord(siteID, refTime)
if acarsRec: if acarsRec:
acarsId = siteID[1:] acarsId = siteID[1:]
th.processAcarsData(acarsId,acarsRec) th.processAcarsData(acarsId,acarsRec)
@ -111,7 +130,7 @@ def retrieve(siteID, info):
except LLWSThread.InValid: except LLWSThread.InValid:
pass pass
else: else:
_Logger.info('Missing ACARS Sounding data for %s.', siteID) _Logger.info('Missing ACARS Sounding data for %s.', siteID)
radars = info['sites']['radars'] radars = info['sites']['radars']
for radar in radars: for radar in radars:
vwp = LlwsManager.getVerticalWindProfile(radar, 0) vwp = LlwsManager.getVerticalWindProfile(radar, 0)

View file

@ -95,7 +95,6 @@ class Monitor(MonitorP.Monitor):
def __compare(self, taf): def __compare(self, taf):
now = time.time() now = time.time()
text, maxval = [], -1.0 text, maxval = [], -1.0
#data = Globals.DRC.getLLWS(self.info['ident'])
data = LLWSData.retrieve(self.info['ident'], self.info) data = LLWSData.retrieve(self.info['ident'], self.info)
if data is None: if data is None:
data = [] data = []

View file

@ -159,6 +159,17 @@
# Status: CLOSED # Status: CLOSED
# Title: AvnFPS: AvnFPS regression based lightning forecast to use LAMP # Title: AvnFPS: AvnFPS regression based lightning forecast to use LAMP
# #
#**
#*
#*
#* <pre>
#* SOFTWARE HISTORY
#* Date Ticket# Engineer Description
#* ------------ ---------- ----------- --------------------------
#* Initial creation.
#* Mar 25, 2013 1735 rferrel __initializeLLWSDictsLists now reads cfg data only for
#* desired site instead of all sites. So it is O(n) instead of O(n**2)
##
# #
import logging, os, Queue, re, time, math, sys import logging, os, Queue, re, time, math, sys
import Avn, AvnParser, LLWSData, MetarData import Avn, AvnParser, LLWSData, MetarData
@ -184,7 +195,6 @@ class Server(object):
__TimeOut = 10.0 __TimeOut = 10.0
def __init__(self, info): def __init__(self, info):
#self.name = info['name']
self.profilerList = [] self.profilerList = []
self.radarList = [] self.radarList = []
self.metarList = [] self.metarList = []
@ -207,7 +217,8 @@ class Server(object):
rList = [] rList = []
aList = [] aList = []
for m in AvnParser.getTafHeaders(): m = info['ident']
if m is not None:
siteDict = AvnParser.getTafSiteCfg(m) siteDict = AvnParser.getTafSiteCfg(m)
try: try:
radars = siteDict['sites']['radars'] radars = siteDict['sites']['radars']
@ -226,17 +237,16 @@ class Server(object):
except KeyError: except KeyError:
acars = [] acars = []
if profilers == [] and radars == [] and acars == []: if len(profilers) > 0 or len(radars) > 0 or len(acars) > 0 :
continue #
# # This TAF site needs to be monitored
# This TAF site needs to be monitored self.metarList.append(m)
self.metarList.append(m) self.siteVWPsDict[m] = [radars,profilers,radar_cutoff,profiler_cutoff]
self.siteVWPsDict[m] = [radars,profilers,radar_cutoff,profiler_cutoff] self.acarsDict[m] = [acars]
self.acarsDict[m] = [acars] #
# pList.extend(profilers)
pList.extend(profilers) rList.extend(radars)
rList.extend(radars) aList.extend(acars)
aList.extend(acars)
# #
# Find all unique radars and profilers to monitor # Find all unique radars and profilers to monitor
self.profilerList = dict.fromkeys(pList).keys() self.profilerList = dict.fromkeys(pList).keys()

View file

@ -32,6 +32,7 @@ import ForecastPointDataRetrieve, NoDataException
# ------------ ---------- ----------- -------------------------- # ------------ ---------- ----------- --------------------------
# 09/15/09 njensen Initial Creation. # 09/15/09 njensen Initial Creation.
# 26APR2012 14688 rferrel Use ForecastPointDataRetrieve. # 26APR2012 14688 rferrel Use ForecastPointDataRetrieve.
# 03APR2013 1735 rferrel Limit retrieval for forecast times to the number used.
# #
# #
# #
@ -39,23 +40,24 @@ import ForecastPointDataRetrieve, NoDataException
PARAMETERS = ['tstorm2hr', 'stationId', 'refTime', 'fcstHr'] PARAMETERS = ['tstorm2hr', 'stationId', 'refTime', 'fcstHr']
LOOK_AHEAD = 3 # hours LOOK_AHEAD = 3 # hours
SEC_PER_HOUR = 60*60
_Logger = logging.getLogger(Avn.CATEGORY) _Logger = logging.getLogger(Avn.CATEGORY)
def retrieve(siteID): def retrieve(siteID):
try: try:
pdc = ForecastPointDataRetrieve.retrieve('bufrmosLAMP', siteID, PARAMETERS) pdc = ForecastPointDataRetrieve.retrieve('bufrmosLAMP', siteID, PARAMETERS, forecastTimesLimit=3)
except NoDataException.NoDataException: except NoDataException.NoDataException:
return None return None
pots = [] pots = []
try: try:
# assume pdc[0] is 0 hour and not used in the forecast. # assume pdc[0] is 0 hour and not used in the forecast.
vtime = pdc[1]['refTime'] / 1000.0 + LOOK_AHEAD*3600 vtime = pdc[1]['refTime'] / 1000.0 + LOOK_AHEAD*SEC_PER_HOUR
for n in range(1, LOOK_AHEAD): for n in range(1, LOOK_AHEAD):
pdv = pdc[n] pdv = pdc[n]
pots.append(pdv['tstorm2hr']) pots.append(pdv['tstorm2hr'])
data = max([x for x in pots if 0<= x <= 100] + [0]) data = max([x for x in pots if 0 <= x <= 100] + [0])
return {'from': vtime-LOOK_AHEAD*3600, 'to': vtime, 'prob': min(data, 100)} return {'from': vtime-LOOK_AHEAD*SEC_PER_HOUR, 'to': vtime, 'prob': min(data, 100)}
except KeyError: except KeyError:
return None return None

View file

@ -22,8 +22,7 @@
<displayList> <displayList>
<displays xsi:type="d2DMapRenderableDisplay" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <displays xsi:type="d2DMapRenderableDisplay" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<descriptor xsi:type="mapDescriptor"> <descriptor xsi:type="mapDescriptor">
<resource> <resource>
<resourceType>PLAN_VIEW</resourceType>
<loadProperties loadWithoutData="false"> <loadProperties loadWithoutData="false">
<capabilities> <capabilities>
<capability xsi:type="colorMapCapability"> <capability xsi:type="colorMapCapability">
@ -31,6 +30,7 @@
</capability> </capability>
<capability xsi:type="imagingCapability" interpolationState="false" brightness="1.0" contrast="1.0" alpha="1.0"/> <capability xsi:type="imagingCapability" interpolationState="false" brightness="1.0" contrast="1.0" alpha="1.0"/>
</capabilities> </capabilities>
<resourceType>PLAN_VIEW</resourceType>
<perspectiveProperty xsi:type="d2dLoadProperties" overlayMatchTolerance="1"/> <perspectiveProperty xsi:type="d2dLoadProperties" overlayMatchTolerance="1"/>
</loadProperties> </loadProperties>
<properties isSystemResource="false" isBlinking="false" isMapLayer="false" isHoverOn="false" isVisible="true"> <properties isSystemResource="false" isBlinking="false" isMapLayer="false" isHoverOn="false" isVisible="true">

View file

@ -22,10 +22,10 @@
<displayList> <displayList>
<displays xsi:type="d2DMapRenderableDisplay" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <displays xsi:type="d2DMapRenderableDisplay" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<descriptor xsi:type="mapDescriptor"> <descriptor xsi:type="mapDescriptor">
<resource> <resource>
<resourceType>PLAN_VIEW</resourceType>
<loadProperties xsi:type="gridLoadProperties" <loadProperties xsi:type="gridLoadProperties"
displayType="CONTOUR" > displayType="CONTOUR" >
<resourceType>PLAN_VIEW</resourceType>
</loadProperties> </loadProperties>
<properties isSystemResource="false" isBlinking="false" isMapLayer="false" isHoverOn="false" <properties isSystemResource="false" isBlinking="false" isMapLayer="false" isHoverOn="false"
isVisible="true"> isVisible="true">

View file

@ -22,8 +22,7 @@
<displayList> <displayList>
<displays xsi:type="d2DMapRenderableDisplay" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <displays xsi:type="d2DMapRenderableDisplay" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<descriptor xsi:type="mapDescriptor"> <descriptor xsi:type="mapDescriptor">
<resource> <resource>
<resourceType>PLAN_VIEW</resourceType>
<loadProperties loadWithoutData="true"> <loadProperties loadWithoutData="true">
<capabilities> <capabilities>
<capability xsi:type="colorMapCapability"> <capability xsi:type="colorMapCapability">
@ -31,6 +30,7 @@
</capability> </capability>
<capability xsi:type="imagingCapability" interpolationState="false" brightness="1.0" contrast="1.0" alpha="1.0"/> <capability xsi:type="imagingCapability" interpolationState="false" brightness="1.0" contrast="1.0" alpha="1.0"/>
</capabilities> </capabilities>
<resourceType>PLAN_VIEW</resourceType>
<perspectiveProperty xsi:type="d2dLoadProperties" overlayMatchTolerance="1"/> <perspectiveProperty xsi:type="d2dLoadProperties" overlayMatchTolerance="1"/>
</loadProperties> </loadProperties>
<properties isSystemResource="false" isBlinking="false" isMapLayer="false" isHoverOn="false" isVisible="true"> <properties isSystemResource="false" isBlinking="false" isMapLayer="false" isHoverOn="false" isVisible="true">

View file

@ -22,8 +22,7 @@
<displayList> <displayList>
<displays xsi:type="d2DMapRenderableDisplay" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <displays xsi:type="d2DMapRenderableDisplay" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<descriptor xsi:type="mapDescriptor"> <descriptor xsi:type="mapDescriptor">
<resource> <resource>
<resourceType>PLAN_VIEW</resourceType>
<loadProperties loadWithoutData="true"> <loadProperties loadWithoutData="true">
<capabilities> <capabilities>
<capability xsi:type="colorMapCapability"> <capability xsi:type="colorMapCapability">
@ -31,6 +30,7 @@
</capability> </capability>
<capability xsi:type="imagingCapability" interpolationState="false" brightness="1.0" contrast="1.0" alpha="1.0"/> <capability xsi:type="imagingCapability" interpolationState="false" brightness="1.0" contrast="1.0" alpha="1.0"/>
</capabilities> </capabilities>
<resourceType>PLAN_VIEW</resourceType>
<perspectiveProperty xsi:type="d2dLoadProperties" overlayMatchTolerance="1"/> <perspectiveProperty xsi:type="d2dLoadProperties" overlayMatchTolerance="1"/>
</loadProperties> </loadProperties>
<properties isSystemResource="false" isBlinking="false" isMapLayer="false" isHoverOn="false" isVisible="true"> <properties isSystemResource="false" isBlinking="false" isMapLayer="false" isHoverOn="false" isVisible="true">

View file

@ -167,30 +167,17 @@ class Procedure (SmartScript.SmartScript):
# any grids. We need to do this because the GFE caches the original # any grids. We need to do this because the GFE caches the original
# version of all grids and there's no way yet to turn this off. # version of all grids and there's no way yet to turn this off.
minTDict = {}
maxTDict = {}
tDict = {}
tdDict = {}
minTRList = self.getWEInventory("MinT") minTRList = self.getWEInventory("MinT")
for tr in minTRList: minTDict = self.getGrids(MODEL, "MinT", LEVEL, minTRList, mode = "First")
grid = self.getGrids(MODEL, "MinT", LEVEL, tr, mode = "First")
minTDict[tr] = grid
maxTRList = self.getWEInventory("MaxT") maxTRList = self.getWEInventory("MaxT")
for tr in maxTRList: maxTDict = self.getGrids(MODEL, "MaxT", LEVEL, maxTRList, mode = "First")
grid = self.getGrids(MODEL, "MaxT", LEVEL, tr, mode = "First")
maxTDict[tr] = grid
TTRList = self.getWEInventory("T") TTRList = self.getWEInventory("T")
for tr in TTRList: tDict = self.getGrids(MODEL, "T", LEVEL, TTRList, mode = "First")
grid = self.getGrids(MODEL, "T", LEVEL, tr, mode = "First")
tDict[tr] = grid
TdTRList = self.getWEInventory("Td") TdTRList = self.getWEInventory("Td")
for tr in TdTRList: tdDict = self.getGrids(MODEL, "Td", LEVEL, TdTRList, mode = "First")
grid = self.getGrids(MODEL, "Td", LEVEL, tr, mode = "First")
tdDict[tr] = grid
# get the all locks by other users, so we can detect they are locked # get the all locks by other users, so we can detect they are locked
# before attempting to modify them # before attempting to modify them
@ -274,8 +261,7 @@ class Procedure (SmartScript.SmartScript):
if checkOnly: if checkOnly:
self.createGrid(MODEL, "MaxLessThanMin", "SCALAR", mask.astype('float32'), self.createGrid(MODEL, "MaxLessThanMin", "SCALAR", mask.astype('float32'),
maxTR, minAllowedValue=0.0, maxAllowedValue= 1.0, maxTR, minAllowedValue=0.0, maxAllowedValue= 1.0)
units="", descriptiveName="")
else: # force the change else: # force the change
if maxTR in maxTLocks: if maxTR in maxTLocks:
msg = "Can't modify MaxT grid at " + str(maxTR) + \ msg = "Can't modify MaxT grid at " + str(maxTR) + \

View file

@ -1,19 +1,19 @@
## ##
# This software was developed and / or modified by Raytheon Company, # This software was developed and / or modified by Raytheon Company,
# pursuant to Contract DG133W-05-CQ-1067 with the US Government. # pursuant to Contract DG133W-05-CQ-1067 with the US Government.
# #
# U.S. EXPORT CONTROLLED TECHNICAL DATA # U.S. EXPORT CONTROLLED TECHNICAL DATA
# This software product contains export-restricted data whose # This software product contains export-restricted data whose
# export/transfer/disclosure is restricted by U.S. law. Dissemination # export/transfer/disclosure is restricted by U.S. law. Dissemination
# to non-U.S. persons whether in the United States or abroad requires # to non-U.S. persons whether in the United States or abroad requires
# an export license or other authorization. # an export license or other authorization.
# #
# Contractor Name: Raytheon Company # Contractor Name: Raytheon Company
# Contractor Address: 6825 Pine Street, Suite 340 # Contractor Address: 6825 Pine Street, Suite 340
# Mail Stop B8 # Mail Stop B8
# Omaha, NE 68106 # Omaha, NE 68106
# 402.291.0100 # 402.291.0100
# #
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for # See the AWIPS II Master Rights File ("Master Rights File.pdf") for
# further licensing information. # further licensing information.
## ##
@ -31,6 +31,12 @@
# Author: Tom LeFebvre # Author: Tom LeFebvre
# Contributor: Pablo Santos # Contributor: Pablo Santos
# ---------------------------------------------------------------------------- # ----------------------------------------------------------------------------
# SOFTWARE HISTORY
# Date Ticket# Engineer Description
# ------------ ---------- ----------- --------------------------
# 3/6/2013 15658 ryu Merge in change from AWIPS I DR 21414, which fixed
# makeMaxWindGrid() for when center is outside domain.
# Mar 13, 2013 1793 bsteffen Performance improvements for TCMWindTool
# The MenuItems list defines the GFE menu item(s) under which the # The MenuItems list defines the GFE menu item(s) under which the
# Procedure is to appear. # Procedure is to appear.
@ -1104,8 +1110,6 @@ class Procedure (SmartScript.SmartScript):
# fetches and returns all of the wind grids specified by the model # fetches and returns all of the wind grids specified by the model
# name. Should be called before any new wind grids are created # name. Should be called before any new wind grids are created
def getBackgroundGrids(self, modelName): def getBackgroundGrids(self, modelName):
bgDict = {}
siteID = self.getSiteID() siteID = self.getSiteID()
if modelName == "Fcst": if modelName == "Fcst":
level = "SFC" level = "SFC"
@ -1121,9 +1125,8 @@ class Procedure (SmartScript.SmartScript):
inv = self.getWEInventory(modelName, elementName, level) inv = self.getWEInventory(modelName, elementName, level)
for tr in inv: bgDict = self.getGrids(modelName, elementName, level, inv,
bgDict[tr] = self.getGrids(modelName, elementName, level, mode="First")
tr, mode="First")
return bgDict return bgDict
def secondsToYYYYMMDDHH(self, baseTime): def secondsToYYYYMMDDHH(self, baseTime):
@ -1309,10 +1312,9 @@ class Procedure (SmartScript.SmartScript):
# inside RMW gets a linear slope to largest of max wind forecasts # inside RMW gets a linear slope to largest of max wind forecasts
if inRadius <= 1.0: if inRadius <= 1.0:
dSdR = (outSpeed - inSpeed) / (outRadius - inRadius) dSdR = (outSpeed - inSpeed) / (outRadius - inRadius)
grid = where(mask, inSpeed + (dSdR * distanceGrid), grid) grid[mask] = inSpeed + (dSdR * distanceGrid[mask])
else: # outside RMW else: # outside RMW
grid = where(mask, inSpeed * power((inRadius / distanceGrid), exponent), grid[mask] = inSpeed * power((inRadius / distanceGrid[mask]), exponent)
grid)
# grid = clip(grid, 0.0, 200.0) # grid = clip(grid, 0.0, 200.0)
dirGrid = self.makeDirectionGrid(latGrid, lonGrid, center[0], center[1]) dirGrid = self.makeDirectionGrid(latGrid, lonGrid, center[0], center[1])
@ -1336,52 +1338,16 @@ class Procedure (SmartScript.SmartScript):
startTime = interpFcstList[0]["validTime"] startTime = interpFcstList[0]["validTime"]
endTime = startTime + (123 * 3600) # 123 hours later endTime = startTime + (123 * 3600) # 123 hours later
fcstIndex = 0
while fcstIndex < len(interpFcstList)-1:
f1 = interpFcstList[fcstIndex]
f2 = interpFcstList[fcstIndex + 1]
f1Time = interpFcstList[fcstIndex]['validTime']
f2Time = interpFcstList[fcstIndex + 1]['validTime']
print "Interpolating from:", time.asctime(time.gmtime(f1Time)), \
"to", time.asctime(time.gmtime(f2Time))
lat1, lon1 = f1['centerLocation']
lat2, lon2 = f2['centerLocation']
x1, y1 = self.getGridCell(lat1, lon1)
x2, y2 = self.getGridCell(lat2, lon2)
if x1 is None or y1 is None or x2 is None or y2 is None:
fcstIndex += 1
continue
dx = abs(x2 - x1)
dy = abs(y2 - y1)
dmax = max(dx, dy)
newInterval = float(interval) / dmax
newFcstList = self.interpolateWindFcst(f1, f2, newInterval)
print "Created", len(newFcstList), "new wind forecasts."
for f in newFcstList:
mag, dir = self.makeRankine(f, latGrid, lonGrid, pieSlices, radiiFactor)
maxWindGrid = where(greater(mag, maxWindGrid), mag, maxWindGrid)
fcstIndex += 1
if f2["validTime"] >= endTime:
break
start = AbsTime.AbsTime(startTime) start = AbsTime.AbsTime(startTime)
end = AbsTime.AbsTime(endTime) end = AbsTime.AbsTime(endTime)
timeRange = TimeRange.TimeRange(start, end) timeRange = TimeRange.TimeRange(start, end)
# Used getGrids to calculate the maximum wind grid.
#
# Fetch the max of the wind grids just generated as this is very fast.
maxWindGrid, maxDirGrid = self.getGrids("Fcst", "Wind", "SFC", timeRange, mode="Max")
maxWindGrid = self.smoothGrid(maxWindGrid, 3) maxWindGrid = self.smoothGrid(maxWindGrid, 3)
self.createGrid("Fcst", "TCMMaxWindComposite", "SCALAR", maxWindGrid, timeRange, self.createGrid("Fcst", "TCMMaxWindComposite", "SCALAR", maxWindGrid, timeRange,
@ -1485,7 +1451,7 @@ class Procedure (SmartScript.SmartScript):
# # Use this method to fetch a product from the text database # # Use this method to fetch a product from the text database
if productID == "preTCM": if productID == "preTCM":
textProduct = self.getTextProductFromFile("/tmp/Irene.txt") textProduct = self.getTextProductFromFile("/tmp/Isaac.txt")
decoder = TCMDecoder() decoder = TCMDecoder()
decoder.decodeTCMProduct(textProduct, self.dialogEyeDiameter) decoder.decodeTCMProduct(textProduct, self.dialogEyeDiameter)
fcstList = decoder.getFcstList() fcstList = decoder.getFcstList()
@ -1588,14 +1554,6 @@ class Procedure (SmartScript.SmartScript):
# get the lat, lon grids # get the lat, lon grids
latGrid, lonGrid = self.getLatLonGrids() latGrid, lonGrid = self.getLatLonGrids()
# interpolate through forecast period to very high resolution and make
# a composite maxWind grid from those wind grids
if maxwindswath is "Yes":
t1 = time.time()
self.makeMaxWindGrid(interpFcstList, interval, latGrid, lonGrid, pieSlices,
radiiFactor)
print time.time() - t1, "seconds to generate Max wind composite."
# make a grid for each interpolate forecast # make a grid for each interpolate forecast
gridCount = 0 gridCount = 0
for f in interpFcstList: for f in interpFcstList:
@ -1621,6 +1579,14 @@ class Procedure (SmartScript.SmartScript):
print "TCMWindTool:", productID, "- Generated",gridCount, \ print "TCMWindTool:", productID, "- Generated",gridCount, \
"out of", len(interpFcstList), "grids", time.asctime(time.gmtime(timeRange.startTime().unixTime())) "out of", len(interpFcstList), "grids", time.asctime(time.gmtime(timeRange.startTime().unixTime()))
# interpolate through forecast period to very high resolution and make
# a composite maxWind grid from those wind grids
if maxwindswath is "Yes":
t1 = time.time()
self.makeMaxWindGrid(interpFcstList, interval, latGrid, lonGrid, pieSlices,
radiiFactor)
print time.time() - t1, "seconds to generate Max wind composite."
if msg != "": if msg != "":
self.statusBarMsg(msg, "S") self.statusBarMsg(msg, "S")

View file

@ -32,6 +32,13 @@
# 2005/07/29 - Version 0.1 - updated grid database structure # 2005/07/29 - Version 0.1 - updated grid database structure
# 2006/11/06 - Version 1.0 - no changes - just part of BOIVerify upgrade # 2006/11/06 - Version 1.0 - no changes - just part of BOIVerify upgrade
# 2007/10/25 - Version 2.0 - no changes - just part of BOIVerify upgrade # 2007/10/25 - Version 2.0 - no changes - just part of BOIVerify upgrade
#
# SOFTWARE HISTORY
#
# Date Ticket# Engineer Description
# ------------ ---------- ----------- --------------------------
# 1/30/13 15536 ryu Made necessary changes to get tool to run
#
# ---------------------------------------------------------------------------- # ----------------------------------------------------------------------------
ToolType = "numeric" ToolType = "numeric"
WeatherElementEdited = "None" WeatherElementEdited = "None"
@ -75,10 +82,11 @@ class Tool (SmartScript.SmartScript):
processVarList=ProcessVariableList.ProcessVariableList( processVarList=ProcessVariableList.ProcessVariableList(
"Pick Model",VList,varReturn) "Pick Model",VList,varReturn)
status=processVarList.status() status=processVarList.status()
if status != "Ok": if status.lower() != "ok":
self.docancel=1 self.docancel=1
return return
self.modelName=varReturn["Model:"] self.modelName=varReturn["Model:"]
# #
# Remove any current VER grids from gridManager # Remove any current VER grids from gridManager
# #
@ -86,7 +94,7 @@ class Tool (SmartScript.SmartScript):
parmList = self._dbss.getParmManager().getDisplayedParms() parmList = self._dbss.getParmManager().getDisplayedParms()
for parm in parmList: for parm in parmList:
pid=parm.getParmID() pid=parm.getParmID()
pmodel = pid.getDbID().getModelId() pmodel = pid.getDbId().getModelId()
name=pid.getParmName() name=pid.getParmName()
level=pid.getParmLevel() level=pid.getParmLevel()
if pmodel == "Ver": if pmodel == "Ver":
@ -102,7 +110,7 @@ class Tool (SmartScript.SmartScript):
def execute(self,WEname,GridTimeRange): def execute(self,WEname,GridTimeRange):
"Show history of grids over time" "Show history of grids over time"
self.VU.logMsg(" executing for time:%s"%GridTimeRange) self.VU.logMsg(" executing for time:%s"%GridTimeRange)
mutableModel=self.mutableID().model() mutableModel=self.mutableID().modelName()
tomorrow=time.time()+86400 tomorrow=time.time()+86400
parm=WEname parm=WEname
self.VU.logMsg(" running for parm:%s"%parm) self.VU.logMsg(" running for parm:%s"%parm)
@ -111,7 +119,7 @@ class Tool (SmartScript.SmartScript):
# Get the color table and range for the parm # Get the color table and range for the parm
# #
(self.parmUnits,self.parmPrecision,self.parmMinval,self.parmMaxval, (self.parmUnits,self.parmPrecision,self.parmMinval,self.parmMaxval,
self.parmColorTable,self.parmDisplayMinval, self.parmRateFlag,self.parmColorTable,self.parmDisplayMinval,
self.parmDisplayMaxval)=self.getParmInfo(mutableModel,WEname) self.parmDisplayMaxval)=self.getParmInfo(mutableModel,WEname)
# #
# Get start/end of current timerange and get verification # Get start/end of current timerange and get verification
@ -124,6 +132,7 @@ class Tool (SmartScript.SmartScript):
# Loop over verification model records # Loop over verification model records
# #
for rec in recs: for rec in recs:
rec = int(rec)
self.VU.logMsg("rec=%d"%rec) self.VU.logMsg("rec=%d"%rec)
# #
# read grid - clip to min/max for this parm # read grid - clip to min/max for this parm
@ -159,16 +168,19 @@ class Tool (SmartScript.SmartScript):
self.parmMaxval,self.parmUnits) self.parmMaxval,self.parmUnits)
self.setActiveElement("Ver",parmname,"SFC",GridTimeRange, self.setActiveElement("Ver",parmname,"SFC",GridTimeRange,
self.parmColorTable,(self.parmDisplayMinval, self.parmColorTable,(float(self.parmDisplayMinval),
self.parmDisplayMaxval),0) float(self.parmDisplayMaxval)),0)
return return
#==================================================================
#
# getParmInfo - get information on a parm (units, precision, minval,
# maxval, colortablename, displayminval, displaymaxval)
# from the database specified
#
def getParmInfo(self,mutableModel,parm): def getParmInfo(self,mutableModel,parm):
units="units"
precision=0
minval=0
maxval=100
rateflag=0
colorTable="Gridded Data"
displayMinval=0
displayMaxval=100
parm=self.getParm(mutableModel,parm,"SFC") parm=self.getParm(mutableModel,parm,"SFC")
if parm is not None: if parm is not None:
parmInfo = parm.getGridInfo() parmInfo = parm.getGridInfo()
@ -176,15 +188,11 @@ class Tool (SmartScript.SmartScript):
precision=parmInfo.getPrecision() precision=parmInfo.getPrecision()
minval=parmInfo.getMinValue() minval=parmInfo.getMinValue()
maxval=parmInfo.getMaxValue() maxval=parmInfo.getMaxValue()
rateflag=parmInfo.isRateParm()
colorTable="Gridded Data"
displayMinval=0
displayMaxval=100
from com.raytheon.viz.gfe.rsc import DiscreteDisplayUtil from com.raytheon.viz.gfe.rsc import DiscreteDisplayUtil
ctInfo = DiscreteDisplayUtil.buildColorMapParameters(parm) ctInfo = DiscreteDisplayUtil.buildColorMapParameters(parm)
if ctInfo is not None: if ctInfo is not None:
colorTable = ctInfo.getColorMapName() colorTable = ctInfo.getColorMapName()
displayMinval = ctInfo.getColorMapMin() displayMinval = ctInfo.getColorMapMin()
displayMaxVal = ctInfo.getColorMapMax() displayMaxval = ctInfo.getColorMapMax()
return(units,precision,minval,maxval,rateflag,colorTable,displayMinval,displayMaxval)
return(units,precision,minval,maxval,colorTable,displayMinval,displayMaxval)

View file

@ -88,11 +88,17 @@ def executeFromJava(databaseID, site, username, dataMgr, forecastList, logFile,
site = str(site) site = str(site)
databaseID = str(databaseID) databaseID = str(databaseID)
username = str(username) username = str(username)
logger.info("TextFormatter Starting")
startTime = time.time()
logger.info("Text Formatter Starting")
forecasts = runFormatter(databaseID=databaseID, site=site, forecastList=forecastList, testMode=testMode, forecasts = runFormatter(databaseID=databaseID, site=site, forecastList=forecastList, testMode=testMode,
cmdLineVarDict=cmdLineVarDict, vtecMode=vtecMode, username=username, cmdLineVarDict=cmdLineVarDict, vtecMode=vtecMode, username=username,
dataMgr=dataMgr, drtTime=drtTime) dataMgr=dataMgr, drtTime=drtTime)
elapsedTime = (time.time() - startTime)*1000
logger.info("Text Formatter Finished, took: %d ms",elapsedTime)
RedirectLogging.restore() RedirectLogging.restore()
return forecasts return forecasts
@ -286,7 +292,6 @@ def runFormatter(databaseID, site, forecastList, cmdLineVarDict, vtecMode,
# This also means that you may not import any new modules after this # This also means that you may not import any new modules after this
# point!!!!!!!!!!!!!!! # point!!!!!!!!!!!!!!!
logger.info("Text Formatter Finished")
return forecasts return forecasts
def getAbsTime(timeStr): def getAbsTime(timeStr):

View file

@ -1,19 +1,19 @@
## ##
# This software was developed and / or modified by Raytheon Company, # This software was developed and / or modified by Raytheon Company,
# pursuant to Contract DG133W-05-CQ-1067 with the US Government. # pursuant to Contract DG133W-05-CQ-1067 with the US Government.
# #
# U.S. EXPORT CONTROLLED TECHNICAL DATA # U.S. EXPORT CONTROLLED TECHNICAL DATA
# This software product contains export-restricted data whose # This software product contains export-restricted data whose
# export/transfer/disclosure is restricted by U.S. law. Dissemination # export/transfer/disclosure is restricted by U.S. law. Dissemination
# to non-U.S. persons whether in the United States or abroad requires # to non-U.S. persons whether in the United States or abroad requires
# an export license or other authorization. # an export license or other authorization.
# #
# Contractor Name: Raytheon Company # Contractor Name: Raytheon Company
# Contractor Address: 6825 Pine Street, Suite 340 # Contractor Address: 6825 Pine Street, Suite 340
# Mail Stop B8 # Mail Stop B8
# Omaha, NE 68106 # Omaha, NE 68106
# 402.291.0100 # 402.291.0100
# #
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for # See the AWIPS II Master Rights File ("Master Rights File.pdf") for
# further licensing information. # further licensing information.
## ##
@ -175,7 +175,7 @@ class TextUtils:
# Return 1 if any of the searchKeys are found in subkeys # Return 1 if any of the searchKeys are found in subkeys
wxSize = len(subkeys) wxSize = len(subkeys)
wxStr = "" wxStr = ""
for x in range(wxSize): for x in range(wxSize):
wxStr += str(subkeys[x]) wxStr += str(subkeys[x])
if x < wxSize - 1: if x < wxSize - 1:
wxStr += '^' wxStr += '^'
@ -253,7 +253,7 @@ class TextUtils:
return 0.0 return 0.0
countAbove = 0 countAbove = 0
for histSample in parmHisto.histoSamples(): for histSample in parmHisto.histoSamples():
for histPair in histSample.histogram(): for histPair in histSample.histogram():
if histPair.value().scalar() > value: if histPair.value().scalar() > value:
countAbove = countAbove + histPair.count() countAbove = countAbove + histPair.count()
@ -418,7 +418,7 @@ class TextUtils:
if index == -1: if index == -1:
name = parmNameAndLevel name = parmNameAndLevel
level = "SFC" level = "SFC"
parm = ParmID(name,databaseID,level) parm = ParmID(name,databaseID,level)
else: else:
name = parmNameAndLevel[0:index] name = parmNameAndLevel[0:index]
level = parmNameAndLevel[index+1:] level = parmNameAndLevel[index+1:]
@ -674,11 +674,11 @@ class TextUtils:
def getPreviousProduct(self, productID, searchString="", version=0): def getPreviousProduct(self, productID, searchString="", version=0):
# gets a previous product from the AWIPS database # gets a previous product from the AWIPS database
from com.raytheon.viz.gfe.core import DataManager
from com.raytheon.viz.gfe.product import TextDBUtil from com.raytheon.viz.gfe.product import TextDBUtil
opMode = DataManager.getCurrentInstance().getOpMode().name() == "OPERATIONAL" # DR 15703 - always retrieve operational products
opMode = True
previousProduct = TextDBUtil.retrieveProduct(productID, version, opMode) previousProduct = TextDBUtil.retrieveProduct(productID, version, opMode)
previousProduct = string.strip(previousProduct) previousProduct = string.strip(previousProduct)

View file

@ -30,6 +30,8 @@
# Date Ticket# Engineer Description # Date Ticket# Engineer Description
# ------------ ---------- ----------- -------------------------- # ------------ ---------- ----------- --------------------------
# 11/05/08 njensen Initial Creation. # 11/05/08 njensen Initial Creation.
# 01/17/13 1486 dgilling Re-factor based on
# RollbackMasterInterface.
# #
# #
# #
@ -37,15 +39,13 @@
import sys import sys
import Exceptions import Exceptions
import MasterInterface import RollbackMasterInterface
from com.raytheon.uf.common.localization import PathManagerFactory
class ProcedureInterface(MasterInterface.MasterInterface): class ProcedureInterface(RollbackMasterInterface.RollbackMasterInterface):
def __init__(self, scriptPath): def __init__(self, scriptPath):
MasterInterface.MasterInterface.__init__(self) super(ProcedureInterface, self).__init__(scriptPath)
self.importModules(scriptPath) self.importModules()
self.pathMgr = PathManagerFactory.getPathManager()
self.menuToProcMap = {} self.menuToProcMap = {}
for script in self.scripts: for script in self.scripts:
@ -72,26 +72,20 @@ class ProcedureInterface(MasterInterface.MasterInterface):
return scriptList return scriptList
def addModule(self, moduleName): def addModule(self, moduleName):
MasterInterface.MasterInterface.addModule(self, moduleName) super(ProcedureInterface, self).addModule(moduleName)
self.__mapMenuList(moduleName) self.__mapMenuList(moduleName)
def removeModule(self, moduleName): def removeModule(self, moduleName):
MasterInterface.MasterInterface.removeModule(self, moduleName) super(ProcedureInterface, self).removeModule(moduleName)
for key in self.menuToProcMap: for key in self.menuToProcMap:
procList = self.menuToProcMap.get(key) procList = self.menuToProcMap.get(key)
if moduleName in procList: if moduleName in procList:
procList.remove(moduleName) procList.remove(moduleName)
self.menuToProcMap[key] = procList self.menuToProcMap[key] = procList
if self.pathMgr.getStaticLocalizationFile("gfe/userPython/procedures/" + moduleName + ".py") is not None: # in-case we removed just an override, let's
self.addModule(moduleName) # check to see if another script with the same name exists
if sys.modules.has_key(moduleName):
self.__mapMenuList(moduleName)
def getStartupErrors(self):
from java.util import ArrayList
errorList = ArrayList()
for err in self.getImportErrors():
errorList.add(str(err))
return errorList
def getMethodArgNames(self, moduleName, className, methodName): def getMethodArgNames(self, moduleName, className, methodName):
from java.util import ArrayList from java.util import ArrayList
@ -133,10 +127,5 @@ class ProcedureInterface(MasterInterface.MasterInterface):
# wasn't in list # wasn't in list
pass pass
MasterInterface.MasterInterface.reloadModule(self, moduleName) super(ProcedureInterface, self).reloadModule(moduleName)
self.__mapMenuList(moduleName) self.__mapMenuList(moduleName)

View file

@ -2,19 +2,19 @@
## ##
# This software was developed and / or modified by Raytheon Company, # This software was developed and / or modified by Raytheon Company,
# pursuant to Contract DG133W-05-CQ-1067 with the US Government. # pursuant to Contract DG133W-05-CQ-1067 with the US Government.
# #
# U.S. EXPORT CONTROLLED TECHNICAL DATA # U.S. EXPORT CONTROLLED TECHNICAL DATA
# This software product contains export-restricted data whose # This software product contains export-restricted data whose
# export/transfer/disclosure is restricted by U.S. law. Dissemination # export/transfer/disclosure is restricted by U.S. law. Dissemination
# to non-U.S. persons whether in the United States or abroad requires # to non-U.S. persons whether in the United States or abroad requires
# an export license or other authorization. # an export license or other authorization.
# #
# Contractor Name: Raytheon Company # Contractor Name: Raytheon Company
# Contractor Address: 6825 Pine Street, Suite 340 # Contractor Address: 6825 Pine Street, Suite 340
# Mail Stop B8 # Mail Stop B8
# Omaha, NE 68106 # Omaha, NE 68106
# 402.291.0100 # 402.291.0100
# #
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for # See the AWIPS II Master Rights File ("Master Rights File.pdf") for
# further licensing information. # further licensing information.
## ##
@ -119,7 +119,7 @@ nnn = r'(?:[A-Z]{2}[ZC])?\d{3}'
purge = r'(?P<purgeT>\d{6})-' purge = r'(?P<purgeT>\d{6})-'
ugc = r'\n(?P<uhdr>' + r'[A-Z]{2}[Z|C](?:(?:\d{3})|(?:ALL))' + r'(?:[->]\n?' + nnn + \ ugc = r'\n(?P<uhdr>' + r'[A-Z]{2}[Z|C](?:(?:\d{3})|(?:ALL))' + r'(?:[->]\n?' + nnn + \
r')*-\n?' + purge + el + r')' r')*-\n?' + purge + el + r')'
cityh = r'-\n(?P<incc>(?:\s*\n)*(?:INCLUDING THE (?:CITIES|CITY) OF...)?)' cityh = r'(?<=-\n(?!.*-\n))(?P<incc>(?:.*\n))'
body = r'(?P<body>(?:^.*\n)*?)' body = r'(?P<body>(?:^.*\n)*?)'
#body = r'.*' #body = r'.*'
@ -192,20 +192,20 @@ class ProductParser:
#l = headline_re.finditer(str) #l = headline_re.finditer(str)
l = single_head_re.finditer(str) l = single_head_re.finditer(str)
for m in l: for m in l:
if m is not None: if m is not None:
#print 'phl m = ', m #print 'phl m = ', m
newstart = start + m.start() newstart = start + m.start()
m = headline_re.match(m.group(0)) m = headline_re.match(m.group(0))
if m is not None: if m is not None:
hdlns.append(self.dumpMatch(m, newstart)) hdlns.append(self.dumpMatch(m, newstart))
#print 'hdlns = ', hdlns #print 'hdlns = ', hdlns
rval['headInfo'] = hdlns rval['headInfo'] = hdlns
def dumpMatch(self, m, offset=0, rval=None): def dumpMatch(self, m, offset=0, rval=None):
if rval is None: if rval is None:
rval = {} rval = {}
#print 'dumpmatch m = ', m.groupdict() #print 'dumpmatch m = ', m.groupdict()
for k in m.groupdict().keys(): for k in m.groupdict().keys():
if m.start(k) != -1 and m.start(k) != m.end(k): if m.start(k) != -1 and m.start(k) != m.end(k):
@ -234,7 +234,7 @@ class ProductParser:
segs = [] segs = []
l = ugch_re.finditer(self._str) l = ugch_re.finditer(self._str)
for m in l: for m in l:
if m is not None: if m is not None:
m1 = cityh_re.search(self._str, m.end()) m1 = cityh_re.search(self._str, m.end())
@ -250,7 +250,7 @@ class ProductParser:
else: else:
continue continue
m4 = head_re.search(self._str, m.end(), m3.end()) m4 = head_re.search(self._str, m.end(), m3.end())
d = self.dumpMatch(m) d = self.dumpMatch(m)
d = self.dumpMatch(m2, rval=d) d = self.dumpMatch(m2, rval=d)
d = self.dumpMatch(m3, rval=d) d = self.dumpMatch(m3, rval=d)
@ -266,7 +266,7 @@ class ProductParser:
else: else:
d['city'] = (self.tkc(m2.start()), d['city'] = (self.tkc(m2.start()),
self.tkc(m2.start())) self.tkc(m2.start()))
if m4 is not None: if m4 is not None:
#print 'm4 = ', m4.group() #print 'm4 = ', m4.group()
d = self.dumpMatch(m4, rval=d) d = self.dumpMatch(m4, rval=d)
@ -284,7 +284,7 @@ class ProductParser:
rval['frames'] = frames rval['frames'] = frames
return rval return rval
def parseFromJava(self, text): def parseFromJava(self, text):
self._str = text self._str = text
self._ci = None self._ci = None
@ -295,13 +295,13 @@ class ProductParser:
lc.append(count) lc.append(count)
count += l count += l
self._totals = lc self._totals = lc
#print 'text START ----------------------' #print 'text START ----------------------'
#print text #print text
#print 'text END ------------------------' #print 'text END ------------------------'
result = self.parse() result = self.parse()
#print 'result = ', result #print 'result = ', result
return JUtil.pyDictToJavaMap(result) return JUtil.pyDictToJavaMap(result)

View file

@ -23,23 +23,35 @@
# any purpose. # any purpose.
# #
# SmartScript -- library of methods for Smart Tools and Procedures # SmartScript -- library of methods for Smart Tools and Procedures
# History
# Time Ticket# Developer Comments
# ----------------------------------------------------------------------
# 01/09/2012 DR15626 J. Zeng Add methods
# enableISCsend
# clientISCSendStatus
# manualSendISC_autoMode
# manualSendISC_manualMode
# #
# Author: hansen # Author: hansen
# ---------------------------------------------------------------------------- # ----------------------------------------------------------------------------
#
# SOFTWARE HISTORY
#
# Date Ticket# Engineer Description
# ------------ ---------- ----------- --------------------------
# 01/09/13 DR15626 J. Zeng Add methods
# enableISCsend
# clientISCSendStatus
# manualSendISC_autoMode
# manualSendISC_manualMode
# 01/30/13 1559 dgilling Fix TypeError in
# getGridCellSwath().
# Mar 13, 2013 1791 bsteffen Implement bulk getGrids to
# improve performance.
# Mar 13, 2013 1793 bsteffen Performance improvements for
# TCMWindTool
# Apr 24, 2013 1947 randerso Fix UVToMagDir to work with scalar arguments
# Cleaned up some constants
#
######################################################################## ########################################################################
import types, string, time, sys import types, string, time, sys
from math import * from math import *
from numpy import * from numpy import *
import os import os
import numpy import numpy
import math
import re import re
import jep import jep
import BaseTool, Exceptions import BaseTool, Exceptions
@ -52,6 +64,7 @@ from java.util import Date
from java.nio import FloatBuffer from java.nio import FloatBuffer
from com.raytheon.uf.common.time import SimulatedTime from com.raytheon.uf.common.time import SimulatedTime
from com.raytheon.uf.common.time import TimeRange as javaTimeRange
from com.raytheon.uf.common.dataplugin.gfe.grid import Grid2DByte from com.raytheon.uf.common.dataplugin.gfe.grid import Grid2DByte
from com.raytheon.uf.common.dataplugin.gfe.grid import Grid2DFloat from com.raytheon.uf.common.dataplugin.gfe.grid import Grid2DFloat
from com.raytheon.uf.common.dataplugin.gfe.discrete import DiscreteKey from com.raytheon.uf.common.dataplugin.gfe.discrete import DiscreteKey
@ -350,7 +363,10 @@ class SmartScript(BaseTool.BaseTool):
# e.g. "SFC", "MB350", "BL030" # e.g. "SFC", "MB350", "BL030"
# x, y: integer coordinates # x, y: integer coordinates
# timeRange: Must be a special time range object such as # timeRange: Must be a special time range object such as
# that passed in the argument list as GridTimeRange # that passed in the argument list as GridTimeRange or a list of time
# range objects. If it is a list than the return value will be a dict
# where the time range objects are keys and the result of getGrids
# for each time range is the value.
# mode: specifies how to handle the situation if multiple grids # mode: specifies how to handle the situation if multiple grids
# are found within the given time range: # are found within the given time range:
# "TimeWtAverage": return time-weighted Average value # "TimeWtAverage": return time-weighted Average value
@ -393,10 +409,19 @@ class SmartScript(BaseTool.BaseTool):
if isinstance(model, DatabaseID.DatabaseID): if isinstance(model, DatabaseID.DatabaseID):
model = model.modelIdentifier() model = model.modelIdentifier()
timeRangeList = None
if isinstance(timeRange, TimeRange.TimeRange): if isinstance(timeRange, TimeRange.TimeRange):
timeRange = timeRange.toJavaObj() timeRange = timeRange.toJavaObj()
elif isinstance(timeRange, list):
timeRangeList = timeRange
timeRangeArray = jep.jarray(len(timeRangeList), javaTimeRange)
for i in xrange(len(timeRangeList)):
tr = timeRangeList[i]
if isinstance(tr, TimeRange.TimeRange):
tr = tr.toJavaObj()
timeRangeArray[i] = tr
timeRange = timeRangeArray
# if cache: # if cache:
# for cModel, cElement, cLevel, cMostRecent, cRange, cMode, cResult in \ # for cModel, cElement, cLevel, cMostRecent, cRange, cMode, cResult in \
# self.__pythonGrids: # self.__pythonGrids:
@ -414,7 +439,17 @@ class SmartScript(BaseTool.BaseTool):
"NoData", "No Weather Element for " + exprName) "NoData", "No Weather Element for " + exprName)
else: else:
return None return None
result = self.__cycler.getCorrespondingResult(parm, timeRange, mode) result = self.__cycler.getCorrespondingResult(parm, timeRange, mode)
if timeRangeList is not None:
retVal = {}
for i in xrange(len(timeRangeList)):
iresult = self._getGridsResult(timeRangeList[i], noDataError, mode, exprName, result[i])
retVal[timeRangeList[i]] = iresult
return retVal
else:
return self._getGridsResult(timeRange, noDataError, mode, exprName, result)
def _getGridsResult(self, timeRange, noDataError, mode, exprName, result):
retVal = None retVal = None
if result is not None: if result is not None:
if len(result) == 0: if len(result) == 0:
@ -756,18 +791,26 @@ class SmartScript(BaseTool.BaseTool):
## Conversion methods ## Conversion methods
def UVToMagDir(self, u, v): def UVToMagDir(self, u, v):
RAD_TO_DEG = 57.29577951308232 RAD_TO_DEG = 180.0 / numpy.pi
# Sign change to make math to meteor. coords work # Sign change to make math to meteor. coords work
u = - u u = -u
v = - v v = -v
speed = numpy.sqrt(u * u + v * v) if type(u) is numpy.ndarray or type(v) is numpy.ndarray:
dir = numpy.arctan2(u, v) * RAD_TO_DEG speed = numpy.sqrt(u * u + v * v)
dir = numpy.where(numpy.greater_equal(dir, 360), dir - 360, dir) dir = numpy.arctan2(u, v) * RAD_TO_DEG
dir = numpy.where(numpy.less(dir, 0), dir + 360, dir) dir[numpy.greater_equal(dir, 360)] -= 360
dir[numpy.less(dir, 0)] += 360
else:
speed = math.sqrt(u * u + v * v)
dir = math.atan2(u, v) * RAD_TO_DEG
while dir < 0.0:
dir = dir + 360.0
while dir >= 360.0:
dir = dir - 360.0
return (speed, dir) return (speed, dir)
def MagDirToUV(self, mag, dir): def MagDirToUV(self, mag, dir):
DEG_TO_RAD = 0.017453292519943295 DEG_TO_RAD = numpy.pi / 180.0
# Note sign change for components so math to meteor. coords works # Note sign change for components so math to meteor. coords works
uw = - sin(dir * DEG_TO_RAD) * mag uw = - sin(dir * DEG_TO_RAD) * mag
vw = - cos(dir * DEG_TO_RAD) * mag vw = - cos(dir * DEG_TO_RAD) * mag
@ -775,7 +818,7 @@ class SmartScript(BaseTool.BaseTool):
def convertMsecToKts(self, value_Msec): def convertMsecToKts(self, value_Msec):
# Convert from meters/sec to Kts # Convert from meters/sec to Kts
return value_Msec * 1.944 return value_Msec * 3600.0 / 1852.0
def convertKtoF(self, t_K): def convertKtoF(self, t_K):
# Convert the temperature from Kelvin to Fahrenheit # Convert the temperature from Kelvin to Fahrenheit
@ -797,7 +840,7 @@ class SmartScript(BaseTool.BaseTool):
def convertFtToM(self, value_Ft): def convertFtToM(self, value_Ft):
# Convert the value in Feet to Meters # Convert the value in Feet to Meters
return value_Ft/3.28084 return value_Ft * 0.3048
######################################################################### #########################################################################
## Error Handling ## ## Error Handling ##
@ -1210,7 +1253,6 @@ class SmartScript(BaseTool.BaseTool):
# color. If "on" is 0, turn off the highlight. # color. If "on" is 0, turn off the highlight.
parm = self.getParm(model, element, level) parm = self.getParm(model, element, level)
from com.raytheon.viz.gfe.core.msgs import HighlightMsg from com.raytheon.viz.gfe.core.msgs import HighlightMsg
from com.raytheon.uf.common.time import TimeRange as javaTimeRange
trs = jep.jarray(1, javaTimeRange) trs = jep.jarray(1, javaTimeRange)
trs[0] = timeRange.toJavaObj() trs[0] = timeRange.toJavaObj()
@ -1553,8 +1595,6 @@ class SmartScript(BaseTool.BaseTool):
return self.__dataMgr.getSpatialDisplayManager().getActivatedParm() return self.__dataMgr.getSpatialDisplayManager().getActivatedParm()
def getGridCellSwath(self, editArea, cells): def getGridCellSwath(self, editArea, cells):
from com.raytheon.uf.common.dataplugin.gfe.reference import ReferenceID
from com.raytheon.uf.common.dataplugin.gfe.reference import ReferenceData
from com.raytheon.uf.common.dataplugin.gfe.reference import ReferenceData_CoordinateType as CoordinateType from com.raytheon.uf.common.dataplugin.gfe.reference import ReferenceData_CoordinateType as CoordinateType
# Returns an AFPS.ReferenceData swath of the given # Returns an AFPS.ReferenceData swath of the given
# number of cells around the given an edit area. # number of cells around the given an edit area.
@ -1569,10 +1609,10 @@ class SmartScript(BaseTool.BaseTool):
grid2DBit = self.getGridLoc().gridCellSwath( grid2DBit = self.getGridLoc().gridCellSwath(
polygon.getCoordinates(), float(cells), False) polygon.getCoordinates(), float(cells), False)
if grid2DB is not None: if grid2DB is not None:
grid2DB = grid2DB | grid2DBit grid2DB = grid2DB.orEquals(grid2DBit)
else: else:
grid2DB = grid2DBit grid2DB = grid2DBit
return ReferenceData(self.getGridLoc(), ReferenceID("test"), grid2DB) return self.getGridLoc().convertToReferenceData(grid2DB)
def getLatLon(self, x, y): def getLatLon(self, x, y):
# Get the latitude/longitude values for the given grid point # Get the latitude/longitude values for the given grid point

View file

@ -30,6 +30,8 @@
# Date Ticket# Engineer Description # Date Ticket# Engineer Description
# ------------ ---------- ----------- -------------------------- # ------------ ---------- ----------- --------------------------
# 10/21/08 njensen Initial Creation. # 10/21/08 njensen Initial Creation.
# 01/17/13 1486 dgilling Re-factor based on
# RollbackMasterInterface.
# #
# #
# #
@ -37,19 +39,17 @@
import sys import sys
import Exceptions import Exceptions
import MasterInterface import RollbackMasterInterface
from com.raytheon.uf.common.localization import PathManagerFactory
class SmartToolInterface(MasterInterface.MasterInterface): class SmartToolInterface(RollbackMasterInterface.RollbackMasterInterface):
def __init__(self, scriptPath): def __init__(self, scriptPath):
MasterInterface.MasterInterface.__init__(self) super(SmartToolInterface, self).__init__(scriptPath)
self.importModules(scriptPath) self.importModules()
self.parmToModuleMap = {'variableElement' : set()} self.parmToModuleMap = {'variableElement' : set()}
for script in self.scripts: for script in self.scripts:
self.__mapDisplayList(script) self.__mapDisplayList(script)
self.pathMgr = PathManagerFactory.getPathManager()
def __mapDisplayList(self, script): def __mapDisplayList(self, script):
if hasattr(sys.modules[script], "WeatherElementEdited"): if hasattr(sys.modules[script], "WeatherElementEdited"):
@ -137,20 +137,21 @@ class SmartToolInterface(MasterInterface.MasterInterface):
return argList return argList
def addModule(self, moduleName): def addModule(self, moduleName):
MasterInterface.MasterInterface.addModule(self, moduleName) super(SmartToolInterface, self).addModule(moduleName)
self.__mapDisplayList(moduleName) self.__mapDisplayList(moduleName)
def reloadModule(self, moduleName): def reloadModule(self, moduleName):
if sys.modules.has_key(moduleName): self.__removeModuleFromMap(moduleName)
self.__removeModuleFromMap(moduleName) super(SmartToolInterface, self).reloadModule(moduleName)
MasterInterface.MasterInterface.reloadModule(self, moduleName)
self.__mapDisplayList(moduleName) self.__mapDisplayList(moduleName)
def removeModule(self, moduleName): def removeModule(self, moduleName):
MasterInterface.MasterInterface.removeModule(self, moduleName) super(SmartToolInterface, self).removeModule(moduleName)
self.__removeModuleFromMap(moduleName) self.__removeModuleFromMap(moduleName)
if self.pathMgr.getStaticLocalizationFile("gfe/userPython/smartTools/" + moduleName + ".py") is not None: # in-case we removed just an override, let's
self.addModule(moduleName) # check to see if another script with the same name exists
if sys.modules.has_key(moduleName):
self.__mapDisplayList(moduleName)
def __removeModuleFromMap(self, moduleName): def __removeModuleFromMap(self, moduleName):
for parm in self.parmToModuleMap: for parm in self.parmToModuleMap:
@ -159,13 +160,6 @@ class SmartToolInterface(MasterInterface.MasterInterface):
toolList.remove(moduleName) toolList.remove(moduleName)
self.parmToModuleMap[parm] = toolList self.parmToModuleMap[parm] = toolList
def getStartupErrors(self):
from java.util import ArrayList
errorList = ArrayList()
for err in self.getImportErrors():
errorList.add(str(err))
return errorList
def runTool(self, moduleName, className, methodName, **kwargs): def runTool(self, moduleName, className, methodName, **kwargs):
try: try:
return self.runMethod(moduleName, className, methodName, **kwargs) return self.runMethod(moduleName, className, methodName, **kwargs)

View file

@ -9,15 +9,15 @@
! J.Carr/NCEP 7/98 changed contouring for the product ! J.Carr/NCEP 7/98 changed contouring for the product
! T. Lee/GSC 6/99 Increased omega contour range ! T. Lee/GSC 6/99 Increased omega contour range
! !
GLEVEL=4700:10000!700 !700 !850 !30:0 GLEVEL=4700:10000!700!700!850 !0:30
GVCORD=SGMA !PRES !PRES !PRES!pdly GVCORD=SGMA!PRES!PRES!PRES!pdly
SKIP= SKIP=
FILTER=y FILTER=y
SCALE=0 !3 !3 !0 SCALE=0!1!1 !0
GDPFUN=relh !sm9s(omeg)!sm9s(omeg) !tmpc !tmpc GDPFUN=relh!sm9s(omeg)!sm9s(omeg)!tmpc !tmpc
TYPE=f !c TYPE=f!c
CINT=0 !1/2 !-1;-2;-3;-5;-7;-9;-11;-13;-15;-17;-19;-21;-23;-25!200;0!200;0 CINT=0!1/2!-1;-2;-3;-5;-7;-9;-11;-13;-15;-17;-19;-21;-23;-25!200;0!200;0
LINE=0 !30/10/2!6/1/2 !2/1/2!20/1/2 LINE=0!30/10/2!6/1/2!2/1/2!20/1/2
FINT=50;70;90 FINT=50;70;90
FLINE=0;24;23;22 FLINE=0;24;23;22
HILO=0 HILO=0

View file

@ -7,15 +7,15 @@
! D.W.Plummer/NCEP 7/98 Changed contouring for the product ! D.W.Plummer/NCEP 7/98 Changed contouring for the product
! T. Lee/GSC 6/99 Increased omega contour range ! T. Lee/GSC 6/99 Increased omega contour range
! !
GLEVEL=4400:10000!700 !700 !850 !9950 GLEVEL=4400:10000!700!700!850!9950
GVCORD=SGMA !PRES !PRES !PRES!SGMA GVCORD=SGMA!PRES!PRES!PRES!SGMA
SKIP=1 SKIP=1
FILTER=y FILTER= y
SCALE=0 !3 !3 !0 SCALE=0!3!3!0
GDPFUN=relh !omeg!omeg !tmpc !tmpc GDPFUN=relh!omeg!omeg!tmpc!tmpc
TYPE=f !c TYPE=f!c
CINT=0 !1/1 !-1;-2;-3;-5;-7;-9;-11;-13;-15;-17;-19;-21;-23;-25!200;0!200;0 CINT=0!1/1!-1;-2;-3;-5;-7;-9;-11;-13;-15;-17;-19;-21;-23;-25!200;0!200;0
LINE=0 !30/10/3!6/1/2 !2/1/2!20/1/2 LINE=0!30/10/3!6/1/2!2/1/2!20/1/2
FINT=50;70;90 FINT=50;70;90
FLINE=0;24;23;22 FLINE=0;24;23;22
HILO=0 HILO=0

View file

@ -8,7 +8,7 @@ GLEVEL=150
GVCORD=pres GVCORD=pres
SKIP= SKIP=
FILTER=y FILTER=y
SCALE=3 !-1 SCALE=0 !-1
GDPFUN=knts((mag(wnd))) !sm9s(hght)!kntv(wnd) GDPFUN=knts((mag(wnd))) !sm9s(hght)!kntv(wnd)
TYPE=c/f !c !b TYPE=c/f !c !b
CINT=30;50;70;90;110;130;150 !12 CINT=30;50;70;90;110;130;150 !12

View file

@ -8,9 +8,9 @@ GLEVEL=200
GVCORD=PRES GVCORD=PRES
SKIP= SKIP=
FILTER=y FILTER=y
SCALE=0!0!5!5!-1 SCALE=0!0!5!5
GDPFUN=mag(kntv(wnd))!mag(kntv(wnd))!div(wnd)!div(wnd)!sm5s(hght) GDPFUN=mag(kntv(wnd))!mag(kntv(wnd))!div(wnd)!div(wnd)
TYPE=c!c/f!c/f!c!c TYPE=c!c/f!c/f!c
CINT=30;50!70;90;110;130;150;170;190!-11;-9;-7;-5;-3!2/3/18!12/720 CINT=30;50!70;90;110;130;150;170;190!-11;-9;-7;-5;-3!2/3/18!12/720
LINE=26!32//2!19/-2//2!20!1//2 LINE=26!32//2!19/-2//2!20!1//2
FINT=!70;90;110;130;150;170;190!3;5;7;9;11;13! FINT=!70;90;110;130;150;170;190!3;5;7;9;11;13!

View file

@ -17,7 +17,7 @@ FINT = .01;.1;.25;.5;.75;1;1.25;1.5;1.75;2;2.25;2.5;2.75;3;3.25;3.5;3.75;4
FLINE = 0;21-30;14-20;5 FLINE = 0;21-30;14-20;5
HILO = 31;0/x#2////y HILO = 31;0/x#2////y
HLSYM = 1.5 HLSYM = 1.5
!CLRBAR= 1 !CLRBAR = 1
WIND = 0 WIND = 0
TITLE = 1/-1/~ 24-HR OBS PRECIP (RFC, 40km avg) !0 TITLE = 1/-1/~ 24-HR OBS PRECIP (RFC, 40km avg) !0
COLORS = 2 COLORS = 2

View file

@ -17,7 +17,7 @@ FINT = .01;.10;.25;.5;1;1.5;2;2.5;3;3.5;4;4.5;5;6;8;10.0
FLINE = 0;11;18;8;6;25;21;22;7;30;4;24;20;17;15;14;31 FLINE = 0;11;18;8;6;25;21;22;7;30;4;24;20;17;15;14;31
HILO = 0 HILO = 0
HLSYM = 0 HLSYM = 0
!CLRBAR= 1//CL/0;.5/.75;.01 !CLRBAR = 1//CL/0;.5/.75;.01
WIND = WIND =
TITLE = 1/-1/COOPERATIVE RAINFALL REPORTS FOR 24 hrs ENDING 12 UTC: ~ TITLE = 1/-1/COOPERATIVE RAINFALL REPORTS FOR 24 hrs ENDING 12 UTC: ~
COLORS = COLORS =

View file

@ -20,7 +20,7 @@ HILO = 2;6/X;N/-99--4;4-99 ! 0
HLSYM = 0 HLSYM = 0
!CLRBAR = 1/V/LL!0 !CLRBAR = 1/V/LL!0
WIND = 6/.8/2/112 WIND = 6/.8/2/112
TITLE = 1/-1/~ @ WIND = AND RELATIVE VORTICITY!0 TITLE = 1/-1/~ @ WIND AND RELATIVE VORTICITY!0
COLORS = 2 COLORS = 2
MARKER = 2 MARKER = 2
GRDLBL = 5 GRDLBL = 5

View file

@ -20,7 +20,7 @@ HILO = !2;6/X;N/10-99;10-99!
HLSYM = 0 HLSYM = 0
!CLRBAR = 1 !CLRBAR = 1
WIND = 18/1/1 WIND = 18/1/1
TITLE = 5/0/~ @ HEIGHT, VORTICITY & VORTICITY ADV|~ @ HGHT & VORT ADV!0 TITLE = 5/0/~ @ HEIGHT, VORTICITY AND VORTICITY ADV|~ @ HGHT AND VORT ADV!0
COLORS = 2 COLORS = 2
MARKER = 2 MARKER = 2
GRDLBL = 5 GRDLBL = 5

View file

@ -0,0 +1,24 @@
!
! Restore File : 500mb_mean_hght
!
! Log:
!Archana 3/13 Initial creation
!
GLEVEL=500
GVCORD=pres
SKIP=
FILTER=y
SCALE=-1
GDPFUN=GHmean
TYPE=c
CINT=6
LINE=5/1/2/1
FINT=
FLINE=
HILO=
HLSYM=
WIND=
TITLE=5/-1/~ @ MEAN HEIGHT AT 500 mb!0
COLORS=2
MARKER=2
GRDLBL=5

View file

@ -20,7 +20,7 @@ HILO = 0!0!6/H#;L#
HLSYM = 0!0!1.5;1.5//22;22/2;2/hw HLSYM = 0!0!1.5;1.5//22;22/2;2/hw
!CLRBAR= 1/V/LL!0 !CLRBAR= 1/V/LL!0
WIND = 9/0.9/2/212 WIND = 9/0.9/2/212
TITLE = 1/-1/~ @ DEW POINT (>-8), WIND (KTS), AND HEIGHT!0 TITLE = 1/-1/~ @ DEW POINT (GREATER THAN -8), WIND (KTS), AND HEIGHT!0
COLORS = 2 COLORS = 2
MARKER = 2 MARKER = 2
GRDLBL = 5 GRDLBL = 5

View file

@ -6,7 +6,7 @@
! J.Carr/NCEP 6/97 changed boundary layer labels to comply with EMC ! J.Carr/NCEP 6/97 changed boundary layer labels to comply with EMC
! D.W.Plummer/NCEP 8/97 Added FILTER parameter and changed TEXT value ! D.W.Plummer/NCEP 8/97 Added FILTER parameter and changed TEXT value
! !
GLEVEL=700!700!700!850!850!30:0!30:0 GLEVEL=700!700!700!850!850!0:30!0:30
GVCORD=PRES!PRES!PRES!PRES!PRES!pdly!pdly GVCORD=PRES!PRES!PRES!PRES!PRES!pdly!pdly
SKIP= SKIP=
FILTER=y FILTER=y

View file

@ -7,7 +7,7 @@
! D.W.Plummer/NCEP 8/97 Added FILTER parameter and changed TEXT value ! D.W.Plummer/NCEP 8/97 Added FILTER parameter and changed TEXT value
! Archana/Chugach 9/2012 #866 Added CLRBAR ! Archana/Chugach 9/2012 #866 Added CLRBAR
! !
GLEVEL=700!700!700!850!850!30:0!30:0 GLEVEL=700!700!700!850!850!0:30!0:30
GVCORD=PRES!PRES!PRES!PRES!PRES!pdly!pdly GVCORD=PRES!PRES!PRES!PRES!PRES!pdly!pdly
SKIP= SKIP=
FILTER=y FILTER=y

View file

@ -8,9 +8,9 @@
! D.W.Plummer/NCEP 8/97 Added FILTER parameter ! D.W.Plummer/NCEP 8/97 Added FILTER parameter
! J. Carr/HPC 10/97 Moved from the standard directory because this ! J. Carr/HPC 10/97 Moved from the standard directory because this
! restore file did not apply to all the models ! restore file did not apply to all the models
! J. Carr/HPC 2/99 Changed 9823 sgma to 30:0 pdly ! J. Carr/HPC 2/99 Changed 9823 sgma to 0:30 pdly
! !
GLEVEL=850 !850 !30:0 !850 GLEVEL=850 !850 !0:30 !850
GVCORD=pres !pres !pdly !pres GVCORD=pres !pres !pdly !pres
SKIP= SKIP=
FILTER=y FILTER=y

View file

@ -7,9 +7,9 @@
! D.W.Plummer/NCEP 8/97 Added FILTER = parameter ! D.W.Plummer/NCEP 8/97 Added FILTER = parameter
! J. Carr/HPC 10/97 Moved from the standard directory because this ! J. Carr/HPC 10/97 Moved from the standard directory because this
! restore file did not apply to all the models ! restore file did not apply to all the models
! J. Carr/HPC 2/99 Changed 9823 sgma to 30:0 pdly ! J. Carr/HPC 2/99 Changed 9823 sgma to 0:30 pdly
! !
GLEVEL = 850 !850 !30:0 !850 GLEVEL = 850 !850 !0:30 !850
GVCORD = pres !pres !pdly !pres GVCORD = pres !pres !pdly !pres
SKIP = 0/1 SKIP = 0/1
FILTER=y FILTER=y
@ -22,7 +22,7 @@ FINT = 6;12;18;24;30;36
FLINE = 0;23;22;21;14;15;2 FLINE = 0;23;22;21;14;15;2
HILO = 0 !5/H#;L#!0 HILO = 0 !5/H#;L#!0
HLSYM = 0 !1;1//22;22/2;2/hw!0 HLSYM = 0 !1;1//22;22/2;2/hw!0
!CLRBAR= 1/V/LL!0 !CLRBAR = 1/V/LL!0
WIND = 16/0.9/2/211/0.5 WIND = 16/0.9/2/211/0.5
TITLE = 1/-1/~ @ MOISTURE TRANSPORT, HGHT, BL THTAE!0 TITLE = 1/-1/~ @ MOISTURE TRANSPORT, HGHT, BL THTAE!0
COLORS = 2 COLORS = 2

View file

@ -20,7 +20,7 @@ FLINE=0;23;22;30;14;2
HILO=0!0!6/H#;L# HILO=0!0!6/H#;L#
HLSYM=0!0!1.5;1.5//22;22/2;2/hw HLSYM=0!0!1.5;1.5//22;22/2;2/hw
WIND=9/0.9/2/112 WIND=9/0.9/2/112
TITLE=1/-1/~ @ DEW POINT (>-4), WIND (KTS), AND HEIGHT!0 TITLE=1/-1/~ @ DEW POINT (GREATER THAN -4), WIND (KTS), AND HEIGHT!0
COLORS=2 COLORS=2
MARKER=2 MARKER=2
GRDLBL=5 GRDLBL=5

View file

@ -18,7 +18,7 @@ FINT =
FLINE = FLINE =
HILO = 0 HILO = 0
HLSYM = 0 HLSYM = 0
!CLRBAR= 0 !CLRBAR = 0
WIND = 9/0.9/2/112 WIND = 9/0.9/2/112
TITLE = 1/-1/~ 850mb WIND (KTS) and PRECIP WATER TITLE = 1/-1/~ 850mb WIND (KTS) and PRECIP WATER
COLORS = 2 COLORS = 2

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AttributeSetGroup xmlns:ns2="http://www.example.org/productType">
<resource>AUTOSPE</resource>
<attrSetGroupName>standard</attrSetGroupName>
<attrSetNames>TP1hr</attrSetNames>
</AttributeSetGroup>

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AttributeSetGroup xmlns:ns2="http://www.example.org/productType" xmlns:ns3="group"> <AttributeSetGroup xmlns:ns2="http://www.example.org/productType">
<resource>AVIATION</resource> <resource>AVIATION</resource>
<attrSetGroupName>standard</attrSetGroupName> <attrSetGroupName>standard</attrSetGroupName>
<attrSetNames>icprb_6400,turb_6400,icsev_6400,sipd_6400</attrSetNames> <attrSetNames>ICIP</attrSetNames>
</AttributeSetGroup> </AttributeSetGroup>

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AttributeSetGroup xmlns:ns2="http://www.example.org/productType">
<resource>AVN</resource>
<attrSetGroupName>standard</attrSetGroupName>
<attrSetNames>500mb_hght</attrSetNames>
</AttributeSetGroup>

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AttributeSetGroup xmlns:ns2="http://www.example.org/productType">
<resource>AVN190AK</resource>
<attrSetGroupName>standard</attrSetGroupName>
<attrSetNames>500mb_hght</attrSetNames>
</AttributeSetGroup>

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AttributeSetGroup xmlns:ns2="http://www.example.org/productType">
<resource>AVN80PAC</resource>
<attrSetGroupName>standard</attrSetGroupName>
<attrSetNames>500mb_hght</attrSetNames>
</AttributeSetGroup>

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AttributeSetGroup xmlns:ns2="http://www.example.org/productType">
<resource>AVN80US</resource>
<attrSetGroupName>standard</attrSetGroupName>
<attrSetNames>500mb_hght</attrSetNames>
</AttributeSetGroup>

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AttributeSetGroup xmlns:ns2="http://www.example.org/productType">
<resource>CCPA</resource>
<attrSetGroupName>standard</attrSetGroupName>
<attrSetNames>precip_3hr</attrSetNames>
</AttributeSetGroup>

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AttributeSetGroup xmlns:ns2="http://www.example.org/productType">
<resource>CCPA2P5</resource>
<attrSetGroupName>standard</attrSetGroupName>
<attrSetNames>precip_3hr</attrSetNames>
</AttributeSetGroup>

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AttributeSetGroup xmlns:ns2="http://www.example.org/productType">
<resource>CCPA_US</resource>
<attrSetGroupName>standard</attrSetGroupName>
<attrSetNames>precip_3hr</attrSetNames>
</AttributeSetGroup>

View file

@ -2,6 +2,6 @@
<AttributeSetGroup xmlns:ns2="http://www.example.org/productType" xmlns:ns3="group"> <AttributeSetGroup xmlns:ns2="http://www.example.org/productType" xmlns:ns3="group">
<resource>CMC</resource> <resource>CMC</resource>
<attrSetGroupName>standard</attrSetGroupName> <attrSetGroupName>standard</attrSetGroupName>
<attrSetNames>1000-500_thkn,1000-850_thkn,1000mb_hght_tmp_wind,200mb_div_isotachs,200mb_hght_wind,250mb_ageo_div_isotachs,250mb_hght_wind,250mb_wind_and_rel_vort,300mb_div_isotachs,500mb_hght_absv,500mb_hght_absv_adv,500mb_hght_absv_wind,500mb_hght_color,500mb_hght_geoabsv,500mb_hght_wind,500mb_hght_tmp_wind,700mb_hght_rh_omega,700mb_hght_tmp_wind,850-700_thkn,850mb_hght_tmp_wind,pmsl,pmsl_thkn,pmsl_and_bl_wind_global,300-200mb_pv,400-200mb_pv,400-250mb_pv_global,500-250mb_pv,500-300mb_pv</attrSetNames> <attrSetNames>1000-500_thkn,1000-850_thkn,1000mb_hght_tmp_wind,200mb_div_isotachs,200mb_hght_wind,250mb_ageo_div_isotachs,250mb_hght_wind,250mb_wind_and_rel_vort,300mb_div_isotachs,500mb_hght_absv,500mb_hght_absv_adv,500mb_hght_absv_wnd,500mb_hght_color,500mb_hght_geoabsv,500mb_hght_wind,500mb_hght_tmp_wind,700mb_hght_rh_omega,700mb_hght_tmp_wind,850-700_thkn,850mb_hght_tmp_wind,pmsl,pmsl_thkn,pmsl_and_bl_wind_global,300-200mb_pv,400-200mb_pv,400-250mb_pv_global,500-250mb_pv,500-300mb_pv</attrSetNames>
<!-- attrSetNames>1000-500_thkn,1000-850_thkn,1000mb_hght_tmp_wind,200mb_div_isotachs,200mb_hght_wind,250mb_ageo_div_isotachs,250mb_hght_wind,250mb_wind_and_rel_vort,300mb_div_isotachs,300mb_hght_absv_adv,500mb_hght_absv,500mb_hght_absv_adv,500mb_hght_absv_wind,500mb_hght_color,500mb_hght_geoabsv,500mb_hght_wind,500mb_hght_tmp_wind,700mb_hght_rh_omega,700mb_hght_tmp_wind,850-700_thkn,850mb_hght_tmp_wind,pmsl,pmsl_thkn,pmsl_and_bl_wind_global,300-200mb_pv,400-200mb_pv,400-250mb_pv_global,500-250mb_pv,500-300mb_pv</attrSetNames> --> <!-- attrSetNames>1000-500_thkn,1000-850_thkn,1000mb_hght_tmp_wind,200mb_div_isotachs,200mb_hght_wind,250mb_ageo_div_isotachs,250mb_hght_wind,250mb_wind_and_rel_vort,300mb_div_isotachs,300mb_hght_absv_adv,500mb_hght_absv,500mb_hght_absv_adv,500mb_hght_absv_wind,500mb_hght_color,500mb_hght_geoabsv,500mb_hght_wind,500mb_hght_tmp_wind,700mb_hght_rh_omega,700mb_hght_tmp_wind,850-700_thkn,850mb_hght_tmp_wind,pmsl,pmsl_thkn,pmsl_and_bl_wind_global,300-200mb_pv,400-200mb_pv,400-250mb_pv_global,500-250mb_pv,500-300mb_pv</attrSetNames> -->
</AttributeSetGroup> </AttributeSetGroup>

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AttributeSetGroup xmlns:ns2="http://www.example.org/productType" xmlns:ns3="group"> <AttributeSetGroup xmlns:ns2="http://www.example.org/productType" xmlns:ns3="group">
<resource>CMC</resource> <resource>CMC</resource>
<attrSetGroupName>streamline</attrSetGroupName> <attrSetGroupName>streamlines</attrSetGroupName>
<attrSetNames>250mb_streamlines,500mb_streamlines,700mb_streamlines,850mb_streamlines,925mb_streamlines,1000mb_streamlines</attrSetNames> <attrSetNames>250mb_streamlines,500mb_streamlines,700mb_streamlines,850mb_streamlines,925mb_streamlines,1000mb_streamlines</attrSetNames>
</AttributeSetGroup> </AttributeSetGroup>

View file

@ -2,5 +2,5 @@
<AttributeSetGroup xmlns:ns2="http://www.example.org/productType" xmlns:ns3="group"> <AttributeSetGroup xmlns:ns2="http://www.example.org/productType" xmlns:ns3="group">
<resource>CMC</resource> <resource>CMC</resource>
<attrSetGroupName>tropical</attrSetGroupName> <attrSetGroupName>tropical</attrSetGroupName>
<attrSetNames>500mb_hght_absv,850-300mb_wind_shear,850mb_wind_pw_mm,bl_moisture_conv_thtae,bl_thte_wind_global,mlw_pmsl,pmsl_bl_temp_wind,pmsl_thkn_850mb_wind,pmsl_and_bl_wind_global,precip_water_mslp,precip_water_mslp_mm</attrSetNames> <attrSetNames>500mb_hght_absv,850-300mb_wind_shear,850mb_wind_pw_mm,bl_moisture_conv_thtae,bl_thte_wind_global,mlw_pmsl,pmsl_bl_temp_wind,pmsl_thkn_850mb_wind,pmsl_and_bl_wind_global,precip_water_mslp</attrSetNames>
</AttributeSetGroup> </AttributeSetGroup>

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AttributeSetGroup xmlns:ns2="http://www.example.org/productType">
<resource>CMCE</resource>
<attrSetGroupName>standard</attrSetGroupName>
<attrSetNames>200mb_hght_wind,500mb_hght_absv_wnd,500mb_hght_color,700mb_hght_tmp_wind,850mb_hght_tmp_wind,pmsl_1000-500thk</attrSetNames>
</AttributeSetGroup>

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AttributeSetGroup xmlns:ns2="http://www.example.org/productType">
<resource>CMCE_ENS</resource>
<attrSetGroupName>standard</attrSetGroupName>
<attrSetNames>500mb_hght</attrSetNames>
</AttributeSetGroup>

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AttributeSetGroup xmlns:ns2="http://www.example.org/productType">
<resource>CPCOUTLK80US</resource>
<attrSetGroupName>standard</attrSetGroupName>
<attrSetNames>prob_precip_above_normal</attrSetNames>
</AttributeSetGroup>

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AttributeSetGroup xmlns:ns2="http://www.example.org/productType">
<resource>DGEX_AK</resource>
<attrSetGroupName>standard</attrSetGroupName>
<attrSetNames>250mb_hght_wind,500mb_hght_absv_wnd,850mb_hght_tmp_wind,700mb_hght_tmp_wind</attrSetNames>
</AttributeSetGroup>

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AttributeSetGroup xmlns:ns2="http://www.example.org/productType">
<resource>DGEX_US</resource>
<attrSetGroupName>standard</attrSetGroupName>
<attrSetNames>pmsl_1000-500thk,500mb_hght_absv_wnd,700mb_hght_tmp_wind,850mb_hght_tmp_wind,850mb_thtae_advection,250mb_hght_wind</attrSetNames>
</AttributeSetGroup>

View file

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AttributeSetGroup xmlns:ns2="http://www.example.org/productType" xmlns:ns3="group">
<resource>EASTNMM</resource>
<attrSetGroupName>standard</attrSetGroupName>
<attrSetNames>500mb_hght_absv,500mb_hght_color,500mb_hght_wind</attrSetNames>
</AttributeSetGroup>

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AttributeSetGroup xmlns:ns2="http://www.example.org/productType">
<resource>ECMWFWAVE</resource>
<attrSetGroupName>standard</attrSetGroupName>
<attrSetNames>directional_width_of_wind_wave</attrSetNames>
</AttributeSetGroup>

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AttributeSetGroup xmlns:ns2="http://www.example.org/productType">
<resource>ECMWF_AF</resource>
<attrSetGroupName>standard</attrSetGroupName>
<attrSetNames>850mb_wind_and_rel_vort</attrSetNames>
</AttributeSetGroup>

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AttributeSetGroup xmlns:ns2="http://www.example.org/productType">
<resource>ECMWF_ATL</resource>
<attrSetGroupName>standard</attrSetGroupName>
<attrSetNames>850mb_tmp,500mb_hght</attrSetNames>
</AttributeSetGroup>

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AttributeSetGroup xmlns:ns2="http://www.example.org/productType">
<resource>ECMWF_ATL_EQ</resource>
<attrSetGroupName>standard</attrSetGroupName>
<attrSetNames>850mb_wind_and_rel_vort</attrSetNames>
</AttributeSetGroup>

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AttributeSetGroup xmlns:ns2="http://www.example.org/productType">
<resource>ECMWF_EPAC</resource>
<attrSetGroupName>standard</attrSetGroupName>
<attrSetNames>500mb_hght,850mb_tmp</attrSetNames>
</AttributeSetGroup>

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AttributeSetGroup xmlns:ns2="http://www.example.org/productType">
<resource>ECMWF_EPAC_EQ</resource>
<attrSetGroupName>standard</attrSetGroupName>
<attrSetNames>850mb_wind_and_rel_vort</attrSetNames>
</AttributeSetGroup>

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AttributeSetGroup xmlns:ns2="http://www.example.org/productType">
<resource>ECMWF_EU</resource>
<attrSetGroupName>standard</attrSetGroupName>
<attrSetNames>500mb_hght,850mb_tmp</attrSetNames>
</AttributeSetGroup>

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AttributeSetGroup xmlns:ns2="http://www.example.org/productType">
<resource>ECMWF_NH</resource>
<attrSetGroupName>standard</attrSetGroupName>
<attrSetNames>850mb_tmp,500mb_hght</attrSetNames>
</AttributeSetGroup>

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AttributeSetGroup xmlns:ns2="http://www.example.org/productType">
<resource>ECMWF_WPAC</resource>
<attrSetGroupName>standard</attrSetGroupName>
<attrSetNames>500mb_hght,850mb_tmp</attrSetNames>
</AttributeSetGroup>

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AttributeSetGroup xmlns:ns2="http://www.example.org/productType">
<resource>ECMWF_WPAC_EQ</resource>
<attrSetGroupName>standard</attrSetGroupName>
<attrSetNames>850mb_wind_and_rel_vort</attrSetNames>
</AttributeSetGroup>

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AttributeSetGroup xmlns:ns2="http://www.example.org/productType">
<resource>ESTOFS_PR</resource>
<attrSetGroupName>standard</attrSetGroupName>
<attrSetNames>extra_tropical_storm_surge</attrSetNames>
</AttributeSetGroup>

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AttributeSetGroup xmlns:ns2="http://www.example.org/productType">
<resource>ESTOFS_US</resource>
<attrSetGroupName>standard</attrSetGroupName>
<attrSetNames>extra_tropical_storm_surge</attrSetNames>
</AttributeSetGroup>

View file

@ -0,0 +1,23 @@
!
! Restore File :FFG0124hr
!
! Log:
!
GLEVEL=0
GVCORD=NONE
SKIP=
FILTER=y
SCALE=0
GDPFUN=FFG0124hr
TYPE=p
CINT=0
LINE=5/1/1
FINT=50;60;70;80;90
FLINE=0;29;28;27;26;0
HILO=
HLSYM=
WIND=18/1/1
TITLE=1/-1/~ FFG0124hr !0
COLORS=2
MARKER=2
GRDLBL=5

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AttributeSetGroup xmlns:ns2="http://www.example.org/productType">
<resource>FFG_ALR</resource>
<attrSetGroupName>standard</attrSetGroupName>
<attrSetNames>FFG0124hr</attrSetNames>
</AttributeSetGroup>

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AttributeSetGroup xmlns:ns2="http://www.example.org/productType">
<resource>FFG_TIR_HIRES</resource>
<attrSetGroupName>standard</attrSetGroupName>
<attrSetNames>ffg1224hr,FFG0124hr</attrSetNames>
</AttributeSetGroup>

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AttributeSetGroup xmlns:ns2="http://www.example.org/productType" xmlns:ns3="group"> <AttributeSetGroup xmlns:ns2="http://www.example.org/productType">
<resource>FNMOCWAVE</resource> <resource>FNMOCWAVE</resource>
<attrSetGroupName>exp_marine</attrSetGroupName> <attrSetGroupName>exp_marine</attrSetGroupName>
<attrSetNames>sig_wave_gridded_feet,sig_wave_gridded_feet_only,sig_wave_gridded_feet_dir,sig_wave_gridded_metersn,sig_wave_gridded_meters_only,sig_wave_gridded_meters_dir</attrSetNames> <attrSetNames>sig_wave_gridded_feet_only,sig_wave_gridded_feet_dir,sig_wave_gridded_meters_only,sig_wave_gridded_meters_dir</attrSetNames>
</AttributeSetGroup> </AttributeSetGroup>

View file

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AttributeSetGroup xmlns:ns2="http://www.example.org/productType" xmlns:ns3="group">
<resource>FNMOCWAVE</resource>
<attrSetGroupName>marine</attrSetGroupName>
<attrSetNames>sig_wave_gridded_feet,sig_wave_gridded_meters,sig_wave_cont_fill_feet,sig_wave_cont_fill_meters</attrSetNames>
</AttributeSetGroup>

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AttributeSetGroup xmlns:ns2="http://www.example.org/productType">
<resource>GDAS</resource>
<attrSetGroupName>standard</attrSetGroupName>
<attrSetNames>500mb_hght_absv_wnd,1000-500_thkn,250mb_ageo_div_isotachs</attrSetNames>
</AttributeSetGroup>

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AttributeSetGroup xmlns:ns2="http://www.example.org/productType" xmlns:ns3="group"> <AttributeSetGroup xmlns:ns2="http://www.example.org/productType">
<resource>GFS</resource> <resource>GFS</resource>
<attrSetGroupName>basic_wx</attrSetGroupName> <attrSetGroupName>basic_wx</attrSetGroupName>
<attrSetNames>1000-470mb_rh_rs_t_700mb_vv_global,1000-500mb_rh,200mb_vorticity_pw,250mb_vorticity_pw,300-700_q-vctrs_thkn,300mb_vorticity_pw,bl_thte_wind_global,ct_index_global,great_lakes_snow_global,great_lakes_snow2_global,lifted_index_global,pmsl_thkn_wind,pmsl_1000-850_thk_global,pmsl_bl_temp_wind,precip_6hr_1000-500_thkn,precip_type_global,precip_type_vv_global</attrSetNames> <attrSetNames>1000-470mb_rh_rs_t_700mb_vv_global,1000-500mb_rh,200mb_vorticity_pw,250mb_vorticity_pw,300-700_q-vctrs_thkn,300mb_vorticity_pw,bl_thte_wind_global,ct_index_global,great_lakes_snow_global,great_lakes_snow2_global,lifted_index_global,pmsl_thkn_wind,pmsl_1000-850_thk_global,pmsl_bl_temp_wind,precip_6hr_1000-500_thkn,precip_type_global,precip_type_vv_global,pmsl_thkn</attrSetNames>
</AttributeSetGroup> </AttributeSetGroup>

View file

@ -2,5 +2,5 @@
<AttributeSetGroup xmlns:ns2="http://www.example.org/productType" xmlns:ns3="group"> <AttributeSetGroup xmlns:ns2="http://www.example.org/productType" xmlns:ns3="group">
<resource>GFS</resource> <resource>GFS</resource>
<attrSetGroupName>marine</attrSetGroupName> <attrSetGroupName>marine</attrSetGroupName>
<attrSetNames>1000mb_hght_absv,500mb_hght_absv,850mb_hght_absv,bl_moisture_conv_thtae,pmsl_1000-850_thk_global.attr,pmsl_bl_temp_wind,pmsl_and_bl_wind_global,pmsl_and_bl_wind_global,precip_water_pmsl,stability_850mb_wnd_global,stability_950mb_wnd</attrSetNames> <attrSetNames>1000mb_hght_absv,500mb_hght_absv,850mb_hght_absv,bl_moisture_conv_thtae,pmsl_1000-850_thk_global,pmsl_bl_temp_wind,pmsl_and_bl_wind_global,pmsl_and_bl_wind_global,precip_water_pmsl,stability_850mb_wnd_global,stability_950mb_wnd</attrSetNames>
</AttributeSetGroup> </AttributeSetGroup>

View file

@ -2,5 +2,5 @@
<AttributeSetGroup xmlns:ns2="http://www.example.org/productType" xmlns:ns3="group"> <AttributeSetGroup xmlns:ns2="http://www.example.org/productType" xmlns:ns3="group">
<resource>GFS</resource> <resource>GFS</resource>
<attrSetGroupName>monochrome</attrSetGroupName> <attrSetGroupName>monochrome</attrSetGroupName>
<attrSetNames>bl_thte_wind_mono_global,pmsl_thkn_wind_mono_global.attr</attrSetNames> <attrSetNames>bl_thte_wind_mono_global,pmsl_thkn_wind_mono_global</attrSetNames>
</AttributeSetGroup> </AttributeSetGroup>

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AttributeSetGroup xmlns:ns2="http://www.example.org/productType" xmlns:ns3="group"> <AttributeSetGroup xmlns:ns2="http://www.example.org/productType">
<resource>GFS</resource> <resource>GFS</resource>
<attrSetGroupName>precip</attrSetGroupName> <attrSetGroupName>precip</attrSetGroupName>
<attrSetNames>precip_12hr,precip_12hr_mm,precip_24hr,precip_24hr_mm,precip_3-day,precip_4-day,precip_48hr,precip_5-day,precip_54hr,precip_60hr,precip_66hr,precip_6hr,precip_6hr_mslp,precip_6hr_mslp_sfchght,precip_6hr_mslphilo,precip_72hr,precip_78hr</attrSetNames> <attrSetNames>precip_12hr,precip_12hr_mm,precip_24hr,precip_24hr_mm,precip_3-day,precip_4-day,precip_48hr,precip_5-day,precip_54hr,precip_60hr,precip_66hr,precip_6hr,precip_6hr_mslp,precip_6hr_mslp_sfchght,precip_6hr_mslphilo,precip_72hr,precip_78hr</attrSetNames>

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AttributeSetGroup xmlns:ns2="http://www.example.org/productType" xmlns:ns3="group"> <AttributeSetGroup xmlns:ns2="http://www.example.org/productType">
<resource>GFS</resource> <resource>GFS</resource>
<attrSetGroupName>standard</attrSetGroupName> <attrSetGroupName>standard</attrSetGroupName>
<attrSetNames>1000-500_thkn,1000-850_thkn,1000mb_hght_tmp_wind,100mb_hght_wind,150mb_hght_wind,200mb_div_isotachs,200mb_hght_wind,250mb_ageo_div_isotachs,250mb_hght_wind,250mb_wind_and_rel_vort,300mb_div_isotachs,300mb_hght_absv_adv,300mb_hght_wind,300mb_hght_tmp_wind,500mb_hght_absv,500mb_hght_absv_adv,500mb_hght_absv_wnd,500mb_hght_color,500mb_hght_geoabsv,500mb_hght_wind,500mb_hght_tmp_wind,50mb_hght_wind,600mb_hght_rh_omega,700mb_hght_rh_omega,700mb_hght_tmp_wind,70mb_hght_wind,850-700_thkn,850mb_hght_tmp_wind,pmsl,pmsl_thkn,pmsl_and_bl_wind_global,300-200mb_pv,400-200mb_pv,400-250mb_pv_global,500-250mb_pv,500-300mb_pv</attrSetNames> <attrSetNames>1000-500_thkn,1000-850_thkn,1000mb_hght_tmp_wind,100mb_hght_wind,150mb_hght_wind,200mb_div_isotachs,200mb_hght_wind,250mb_ageo_div_isotachs,250mb_hght_wind,250mb_wind_and_rel_vort,300mb_div_isotachs,300mb_hght_absv_adv,300mb_hght_wind,300mb_hght_tmp_wind,500mb_hght_absv,500mb_hght_absv_adv,500mb_hght_absv_wnd,500mb_hght_color,500mb_hght_geoabsv,500mb_hght_wind,500mb_hght_tmp_wind,50mb_hght_wind,600mb_hght_rh_omega,700mb_hght_rh_omega,700mb_hght_tmp_wind,70mb_hght_wind,850-700_thkn,850mb_hght_tmp_wind,pmsl,pmsl_thkn,pmsl_and_bl_wind_global,300-200mb_pv,400-200mb_pv,400-250mb_pv_global,500-250mb_pv,500-300mb_pv,500mb_hght</attrSetNames>
</AttributeSetGroup> </AttributeSetGroup>

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AttributeSetGroup xmlns:ns2="http://www.example.org/productType">
<resource>GFS40US</resource>
<attrSetGroupName>standard</attrSetGroupName>
<attrSetNames>500mb_hght</attrSetNames>
</AttributeSetGroup>

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AttributeSetGroup xmlns:ns2="http://www.example.org/productType">
<resource>GFS95US</resource>
<attrSetGroupName>standard</attrSetGroupName>
<attrSetNames>500mb_hght</attrSetNames>
</AttributeSetGroup>

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AttributeSetGroup xmlns:ns2="http://www.example.org/productType">
<resource>GFSGUIDE</resource>
<attrSetGroupName>standard</attrSetGroupName>
<attrSetNames>iceg</attrSetNames>
</AttributeSetGroup>

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AttributeSetGroup xmlns:ns2="http://www.example.org/productType">
<resource>GFSLAMPTSTORM</resource>
<attrSetGroupName>standard</attrSetGroupName>
<attrSetNames>tstorm_prob_2hr</attrSetNames>
</AttributeSetGroup>

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AttributeSetGroup xmlns:ns2="http://www.example.org/productType">
<resource>GFS_AK</resource>
<attrSetGroupName>standard</attrSetGroupName>
<attrSetNames>500mb_hght</attrSetNames>
</AttributeSetGroup>

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AttributeSetGroup xmlns:ns2="http://www.example.org/productType">
<resource>GFS_GU</resource>
<attrSetGroupName>standard</attrSetGroupName>
<attrSetNames>surface_temperature</attrSetNames>
</AttributeSetGroup>

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