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
[formerlyb0e5c758dc
[formerly 388fb201c6914d9ec7986a1017df57e5e2de0633]] Former-commit-id:b0e5c758dc
Former-commit-id:bb6628c17f
This commit is contained in:
commit
cdb89b5d29
6813 changed files with 467894 additions and 1058129 deletions
|
@ -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>
|
||||||
|
|
|
@ -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" />
|
||||||
|
|
|
@ -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.*/**"/>
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
|
@ -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;
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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];
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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());
|
||||||
|
|
10
RadarServer/com.raytheon.rcm.server/src/com/raytheon/rcm/server/Awips2Endpoint.java
Executable file → Normal file
10
RadarServer/com.raytheon.rcm.server/src/com/raytheon/rcm/server/Awips2Endpoint.java
Executable file → Normal 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];
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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__':
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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 = []
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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">
|
||||||
|
|
|
@ -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">
|
||||||
|
|
|
@ -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">
|
||||||
|
|
|
@ -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">
|
||||||
|
|
|
@ -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) + \
|
||||||
|
|
|
@ -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")
|
||||||
|
|
||||||
|
|
|
@ -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)
|
|
||||||
|
|
|
@ -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):
|
||||||
|
|
|
@ -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)
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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!
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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 =
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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>
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
|
@ -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>
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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
Loading…
Add table
Reference in a new issue