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: 388fb201c6914d9ec7986a1017df57e5e2de0633
This commit is contained in:
commit
b0e5c758dc
6813 changed files with 467894 additions and 1058129 deletions
|
@ -4,7 +4,7 @@
|
|||
<comment></comment>
|
||||
<projects>
|
||||
<project>org.apache.activemq</project>
|
||||
<project>org.apache.tools.bzip2</project>
|
||||
<project>org.itadaki.bzip2</project>
|
||||
<project>RadarServer</project>
|
||||
<project>RadarServerWithMQ</project>
|
||||
</projects>
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
This build script expects the following projects to exist at the same
|
||||
level as this project's folder. com.raytheon.rcm.lib
|
||||
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.
|
||||
-->
|
||||
&substitute-targets;
|
||||
|
@ -133,7 +133,7 @@
|
|||
<include name="**/spring-context*.jar" />
|
||||
<include name="**/quartz-all*.jar" />
|
||||
</fileset>
|
||||
<fileset dir="../org.apache.tools.bzip2" includes="**/*.jar" />
|
||||
<fileset dir="../org.itadaki.bzip2" includes="**/*.jar" />
|
||||
</copy>
|
||||
|
||||
<delete dir="bin" />
|
||||
|
|
|
@ -72,7 +72,7 @@
|
|||
<fileset dir="${buildDirectory}/../../" includes="com.raytheon.rcm*/**"/>
|
||||
</copy>
|
||||
<copy todir="${buildDirectory}/plugins">
|
||||
<fileset dir="${buildDirectory}/../../" includes="org.apache.tools.bzip2*/**"/>
|
||||
<fileset dir="${buildDirectory}/../../" includes="org.itadaki.bzip2*/**"/>
|
||||
</copy>
|
||||
<copy todir="${buildDirectory}/plugins">
|
||||
<fileset dir="${buildDirectory}/../../" includes="org.apache.*/**"/>
|
||||
|
|
|
@ -78,7 +78,7 @@
|
|||
version="0.0.0"/>
|
||||
|
||||
<plugin
|
||||
id="org.apache.tools.bzip2"
|
||||
id="org.itadaki.bzip2"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
|
|
|
@ -27,6 +27,21 @@ import java.util.HashMap;
|
|||
import java.util.HashSet;
|
||||
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 {
|
||||
// TODO: check all handling of -1/null vcp
|
||||
|
@ -90,6 +105,15 @@ public class ElevationInfo {
|
|||
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");
|
||||
fs = new Scanner(s);
|
||||
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.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 {
|
||||
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,
|
||||
HashMap<Sel, int[]> staticInfo) {
|
||||
ArrayList<Integer> elevs = new ArrayList<Integer>(25);
|
||||
|
|
|
@ -123,6 +123,7 @@
|
|||
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
|
||||
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
|
||||
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
|
||||
|
|
|
@ -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.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
|
||||
@XmlAccessorType(XmlAccessType.PROPERTY)
|
||||
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... */
|
||||
protected int opMode;
|
||||
protected int vcp;
|
||||
|
|
|
@ -7,7 +7,6 @@ Export-Package: com.raytheon.rcm.mqsrvr
|
|||
Require-Bundle: com.raytheon.rcm.server;bundle-version="1.0.0",
|
||||
org.apache.activemq;bundle-version="5.2.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",
|
||||
org.apache.qpid;bundle-version="1.0.0"
|
||||
Import-Package: org.apache.tools.bzip2
|
||||
org.apache.qpid;bundle-version="1.0.0",
|
||||
org.itadaki.bzip2;bundle-version="0.9.1"
|
||||
|
|
|
@ -43,7 +43,7 @@ import javax.jms.Session;
|
|||
import javax.jms.TextMessage;
|
||||
|
||||
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.awips1.Awips1ProdDistInfoBuilder;
|
||||
|
@ -659,11 +659,7 @@ public class DataArchiveEndpoint extends RadarEventAdapter {
|
|||
try {
|
||||
InputStream ins = new ByteArrayInputStream(msg, 120,
|
||||
msg.length - 120);
|
||||
char c1 = (char) ins.read();
|
||||
char c2 = (char) ins.read();
|
||||
if (c1 != 'B' || c2 != 'Z')
|
||||
throw new IOException("Not a bzip2 stream");
|
||||
ins = new CBZip2InputStream(ins);
|
||||
ins = new BZip2InputStream(ins, false);
|
||||
// ByteArrayOutputStream outs = new
|
||||
// ByteArrayOutputStream(uncompressedSize);
|
||||
uncompressed = new byte[uncompressedSize];
|
||||
|
|
|
@ -13,10 +13,9 @@ Export-Package: com.raytheon.rcm.coll,
|
|||
com.raytheon.rcm.rpsmgr,
|
||||
com.raytheon.rcm.server
|
||||
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.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,
|
||||
org.apache.log4j,
|
||||
org.apache.tools.bzip2,
|
||||
org.junit
|
||||
|
|
|
@ -58,6 +58,20 @@ import com.raytheon.rcm.server.StatusManager.RadarStatus;
|
|||
/* 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 {
|
||||
|
||||
// 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(
|
||||
radarID);
|
||||
int opMode;
|
||||
int vcp;
|
||||
int currentVCP;
|
||||
int[] gsmCuts;
|
||||
try {
|
||||
byte[] msg = status.getCurrentGSM();
|
||||
|
@ -157,7 +171,7 @@ public class RPSListManager extends RadarEventAdapter {
|
|||
return "Not connected or no status information received yet";
|
||||
GSM gsm = GSM.decode(msg);
|
||||
opMode = gsm.opMode;
|
||||
vcp = gsm.vcp;
|
||||
currentVCP = gsm.vcp;
|
||||
gsmCuts = gsm.cuts;
|
||||
} catch (RuntimeException e) {
|
||||
Log.errorf("Error reading GSM: %s", e);
|
||||
|
@ -165,23 +179,22 @@ public class RPSListManager extends RadarEventAdapter {
|
|||
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)
|
||||
cuts = gsmCuts;
|
||||
|
||||
// TODO: INVALID_VCP
|
||||
if (list.getVcp() > 0 && list.getVcp() != vcp) {
|
||||
if (list.getVcp() != RpsList.UNSPECIFIED_VCP && list.getVcp() != currentVCP) {
|
||||
if (store)
|
||||
return null; // TODO: Should warn instead.
|
||||
else
|
||||
return String.format("RPS list for VCP %d. Current VCP is %d",
|
||||
list.getVcp(), vcp);
|
||||
list.getVcp(), currentVCP);
|
||||
}
|
||||
|
||||
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) {
|
||||
// TODO: Should persist this
|
||||
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.ByteBuffer;
|
||||
|
||||
import org.apache.tools.bzip2.CBZip2InputStream;
|
||||
import org.itadaki.bzip2.BZip2InputStream;
|
||||
|
||||
import com.raytheon.rcm.event.ConfigEvent;
|
||||
import com.raytheon.rcm.event.RadarEvent;
|
||||
import com.raytheon.rcm.event.RadarEventAdapter;
|
||||
import com.raytheon.rcm.message.GraphicProduct;
|
||||
import com.raytheon.rcm.message.GraphicProduct.PDB;
|
||||
import com.raytheon.rcm.message.Message;
|
||||
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
|
||||
|
@ -172,11 +172,7 @@ public class Awips2Endpoint extends RadarEventAdapter {
|
|||
try {
|
||||
InputStream ins = new ByteArrayInputStream(msg, 120,
|
||||
msg.length - 120);
|
||||
char c1 = (char) ins.read();
|
||||
char c2 = (char) ins.read();
|
||||
if (c1 != 'B' || c2 != 'Z')
|
||||
throw new IOException("Not a bzip2 stream");
|
||||
ins = new CBZip2InputStream(ins);
|
||||
ins = new BZip2InputStream(ins, false);
|
||||
// ByteArrayOutputStream outs = new
|
||||
// ByteArrayOutputStream(uncompressedSize);
|
||||
uncompressed = new byte[uncompressedSize];
|
||||
|
|
|
@ -2,6 +2,6 @@
|
|||
<?eclipse-pydev version="1.0"?>
|
||||
|
||||
<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_project>
|
||||
|
|
|
@ -228,6 +228,8 @@
|
|||
<var name="cave.arch" value="arch.x86" />
|
||||
<extractCAVEini
|
||||
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" />
|
||||
<!-- Update the 32-bit CAVE zip file -->
|
||||
<zip destfile="${buildDirectory}/${buildLabel}/${buildId}-linux.gtk.x86.zip"
|
||||
|
|
|
@ -232,14 +232,6 @@
|
|||
<param name="feature"
|
||||
value="com.raytheon.uf.viz.ncep.dataplugins.feature" />
|
||||
</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">
|
||||
<param name="feature"
|
||||
value="com.raytheon.viz.avnfps.feature" />
|
||||
|
@ -252,6 +244,14 @@
|
|||
<param name="feature"
|
||||
value="com.raytheon.uf.viz.d2d.xy.feature" />
|
||||
</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">
|
||||
<param name="feature"
|
||||
value="com.raytheon.uf.viz.d2d.nsharp.feature" />
|
||||
|
@ -304,6 +304,10 @@
|
|||
<param name="feature"
|
||||
value="com.raytheon.uf.viz.gisdatastore.feature" />
|
||||
</antcall>
|
||||
<antcall target="p2.build.repo">
|
||||
<param name="feature"
|
||||
value="com.raytheon.viz.dataaccess.feature" />
|
||||
</antcall>
|
||||
|
||||
<antcall target="cleanup.features" />
|
||||
</target>
|
||||
|
|
|
@ -1,19 +1,19 @@
|
|||
##
|
||||
# This software was developed and / or modified by Raytheon Company,
|
||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
||||
#
|
||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
||||
#
|
||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
||||
# This software product contains export-restricted data whose
|
||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
||||
# to non-U.S. persons whether in the United States or abroad requires
|
||||
# an export license or other authorization.
|
||||
#
|
||||
# Contractor Name: Raytheon Company
|
||||
# Contractor Address: 6825 Pine Street, Suite 340
|
||||
# Mail Stop B8
|
||||
# Omaha, NE 68106
|
||||
# 402.291.0100
|
||||
#
|
||||
# Contractor Name: Raytheon Company
|
||||
# Contractor Address: 6825 Pine Street, Suite 340
|
||||
# Mail Stop B8
|
||||
# Omaha, NE 68106
|
||||
# 402.291.0100
|
||||
#
|
||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
||||
# further licensing information.
|
||||
##
|
||||
|
@ -140,10 +140,20 @@
|
|||
# Relationship Type: In Response to
|
||||
# Status: TEST
|
||||
# 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 Avn, AvnLib, AvnParser
|
||||
import Avn, AvnLib, AvnParser, JUtil, cPickle
|
||||
import PointDataView, GfeValues
|
||||
|
||||
_Missing = ''
|
||||
|
@ -157,7 +167,7 @@ _Keys = ['Temp', 'DwptT', 'WDir', 'WSpd', 'WGust', 'Obvis', 'Vsby', \
|
|||
'Ints2', 'Prob2', 'PTyp3', 'Ints3', 'Prob3']
|
||||
_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',
|
||||
'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):
|
||||
organizedData = {}
|
||||
data = []
|
||||
pdc = None
|
||||
if pdc is not None :
|
||||
for i in range(pdc.getCurrentSz()):
|
||||
jpdv = pdc.readRandom(i)
|
||||
|
@ -444,8 +453,11 @@ def _readPrbConf():
|
|||
prb_conf['after9hr'][wx] = conf.getint('after9hr',wx)
|
||||
return prb_conf
|
||||
|
||||
def makeData(siteID, timeSeconds):
|
||||
def makeData(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:
|
||||
msg = 'Grid data is not available'
|
||||
_Logger.info(msg)
|
||||
|
@ -492,34 +504,57 @@ def makeTable(siteID, timeSeconds):
|
|||
msg = 'Grid data for %s is not available', siteID
|
||||
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.vividsolutions.jts.geom import Coordinate
|
||||
from com.raytheon.viz.aviation.guidance import GuidanceUtil
|
||||
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()
|
||||
|
||||
task = GetPointDataRequest()
|
||||
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'
|
||||
task.setDatabaseID(db)
|
||||
pdc = GuidanceUtil.getGFEPointData(task)
|
||||
data = _getData(pdc, timeSeconds * 1000)
|
||||
if data is None :
|
||||
_Logger.info('Data not available for %s', siteID)
|
||||
return data
|
||||
|
||||
for siteID in siteIDs:
|
||||
config = AvnParser.getTafSiteCfg(siteID)
|
||||
lat = config['geography']['lat']
|
||||
lon = config['geography']['lon']
|
||||
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__':
|
||||
|
|
|
@ -1,19 +1,19 @@
|
|||
##
|
||||
# This software was developed and / or modified by Raytheon Company,
|
||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
||||
#
|
||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
||||
#
|
||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
||||
# This software product contains export-restricted data whose
|
||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
||||
# to non-U.S. persons whether in the United States or abroad requires
|
||||
# an export license or other authorization.
|
||||
#
|
||||
# Contractor Name: Raytheon Company
|
||||
# Contractor Address: 6825 Pine Street, Suite 340
|
||||
# Mail Stop B8
|
||||
# Omaha, NE 68106
|
||||
# 402.291.0100
|
||||
#
|
||||
# Contractor Name: Raytheon Company
|
||||
# Contractor Address: 6825 Pine Street, Suite 340
|
||||
# Mail Stop B8
|
||||
# Omaha, NE 68106
|
||||
# 402.291.0100
|
||||
#
|
||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
||||
# further licensing information.
|
||||
##
|
||||
|
@ -125,10 +125,20 @@
|
|||
# IFPS grids monitoring module
|
||||
# Author: George Trojan, SAIC/MDL, August 2003
|
||||
# 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 Avn, AvnLib, Globals, GridData, MonitorP, TafDecoder, TafGen
|
||||
|
||||
import logging, time, cPickle
|
||||
import Avn, AvnLib, Globals, GridData, MonitorP, TafDecoder, TafGen, JUtil
|
||||
from com.raytheon.viz.aviation.monitor import SiteGridManager
|
||||
_Logger = logging.getLogger(Avn.CATEGORY)
|
||||
|
||||
##############################################################################
|
||||
|
@ -142,7 +152,21 @@ class Monitor(MonitorP.Monitor):
|
|||
|
||||
def __makeData(self, t):
|
||||
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'
|
||||
tc=TafGen.TafGen('grid',data,bbb)
|
||||
taf=tc.createTaf(False)
|
||||
|
|
|
@ -35,6 +35,7 @@ _Logger = logging.getLogger(Avn.CATEGORY)
|
|||
# Date Ticket# Engineer Description
|
||||
# ------------ ---------- ----------- --------------------------
|
||||
# 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
|
||||
|
||||
def __makeHeader(model, data):
|
||||
#print '__makeHeader data: ', data
|
||||
if data and data['itime'] and data['itime']['value']:
|
||||
date = time.strftime('%m/%d/%y %H%M UTC', time.gmtime(data['itime']['value']))
|
||||
else:
|
||||
|
@ -460,12 +462,12 @@ def gridgenRetrieve(siteID):
|
|||
d = (requestTime, data)
|
||||
o['data'] = d
|
||||
obj = pickle.dumps(o)
|
||||
# print 'return gridgenRetrieve - siteID, data', siteID, d
|
||||
#print 'return gridgenRetrieve - siteID, data', siteID, d
|
||||
return obj
|
||||
|
||||
def gridgen(siteObjs, format='short', routine=False, highlightFlightCat=True):
|
||||
siteObjs = JUtil.javaStringListToPylist(siteObjs)
|
||||
# print 'GuidanceEntry:gridgen format, highlightFlightCat:', format, highlightFlightCat
|
||||
#print 'GuidanceEntry:gridgen format, highlightFlightCat:', format, highlightFlightCat
|
||||
currentTime = time.gmtime()
|
||||
requestTime = time.mktime((currentTime[0], currentTime[1], currentTime[2], currentTime[3],
|
||||
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)
|
||||
siteID = o['siteID']
|
||||
cacheRequestTime, data = o['data']
|
||||
if data is not None :
|
||||
data = data.values()[0]
|
||||
|
||||
if not firstSiteID:
|
||||
firstSiteID = siteID
|
||||
# print 'gridgen siteID, cacheRequestTime, data: ', cacheRequestTime, data
|
||||
#print 'gridgen siteID, cacheRequestTime, data: ', siteID, cacheRequestTime, data
|
||||
if cacheRequestTime != requestTime:
|
||||
cacheList.append('++Cache out of date :%s' % siteID)
|
||||
if data:
|
||||
|
|
|
@ -1,19 +1,19 @@
|
|||
##
|
||||
# This software was developed and / or modified by Raytheon Company,
|
||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
||||
#
|
||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
||||
#
|
||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
||||
# This software product contains export-restricted data whose
|
||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
||||
# to non-U.S. persons whether in the United States or abroad requires
|
||||
# an export license or other authorization.
|
||||
#
|
||||
# Contractor Name: Raytheon Company
|
||||
# Contractor Address: 6825 Pine Street, Suite 340
|
||||
# Mail Stop B8
|
||||
# Omaha, NE 68106
|
||||
# 402.291.0100
|
||||
#
|
||||
# Contractor Name: Raytheon Company
|
||||
# Contractor Address: 6825 Pine Street, Suite 340
|
||||
# Mail Stop B8
|
||||
# Omaha, NE 68106
|
||||
# 402.291.0100
|
||||
#
|
||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
||||
# further licensing information.
|
||||
##
|
||||
|
@ -48,6 +48,16 @@
|
|||
# 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
|
||||
import logging, os, time
|
||||
|
@ -86,6 +96,10 @@ def writeLLWS(ident, data):
|
|||
_Logger.error('Cannot write LLWS file for %s', ident)
|
||||
|
||||
def retrieve(siteID, info):
|
||||
from datetime import timedelta
|
||||
day = timedelta(days=1)
|
||||
secondsPerDay = day.total_seconds()
|
||||
msPerSecond = 1000.0
|
||||
th = LLWSThread.Server(info)
|
||||
t = 0
|
||||
d = {}
|
||||
|
@ -96,12 +110,17 @@ def retrieve(siteID, info):
|
|||
profilerIds = th.processProfilerData(siteID)
|
||||
for profilerId in profilerIds:
|
||||
try :
|
||||
shear = th.genShear(siteID, profilerId)
|
||||
d[profilerId] = shear
|
||||
except LLWSThread.InValid:
|
||||
pass
|
||||
shear = th.genShear(siteID, profilerId)
|
||||
d[profilerId] = shear
|
||||
except LLWSThread.InValid:
|
||||
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:
|
||||
acarsId = siteID[1:]
|
||||
th.processAcarsData(acarsId,acarsRec)
|
||||
|
@ -111,7 +130,7 @@ def retrieve(siteID, info):
|
|||
except LLWSThread.InValid:
|
||||
pass
|
||||
else:
|
||||
_Logger.info('Missing ACARS Sounding data for %s.', siteID)
|
||||
_Logger.info('Missing ACARS Sounding data for %s.', siteID)
|
||||
radars = info['sites']['radars']
|
||||
for radar in radars:
|
||||
vwp = LlwsManager.getVerticalWindProfile(radar, 0)
|
||||
|
|
|
@ -95,7 +95,6 @@ class Monitor(MonitorP.Monitor):
|
|||
def __compare(self, taf):
|
||||
now = time.time()
|
||||
text, maxval = [], -1.0
|
||||
#data = Globals.DRC.getLLWS(self.info['ident'])
|
||||
data = LLWSData.retrieve(self.info['ident'], self.info)
|
||||
if data is None:
|
||||
data = []
|
||||
|
|
|
@ -159,6 +159,17 @@
|
|||
# Status: CLOSED
|
||||
# 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 Avn, AvnParser, LLWSData, MetarData
|
||||
|
@ -184,7 +195,6 @@ class Server(object):
|
|||
__TimeOut = 10.0
|
||||
|
||||
def __init__(self, info):
|
||||
#self.name = info['name']
|
||||
self.profilerList = []
|
||||
self.radarList = []
|
||||
self.metarList = []
|
||||
|
@ -207,7 +217,8 @@ class Server(object):
|
|||
rList = []
|
||||
aList = []
|
||||
|
||||
for m in AvnParser.getTafHeaders():
|
||||
m = info['ident']
|
||||
if m is not None:
|
||||
siteDict = AvnParser.getTafSiteCfg(m)
|
||||
try:
|
||||
radars = siteDict['sites']['radars']
|
||||
|
@ -226,17 +237,16 @@ class Server(object):
|
|||
except KeyError:
|
||||
acars = []
|
||||
|
||||
if profilers == [] and radars == [] and acars == []:
|
||||
continue
|
||||
#
|
||||
# This TAF site needs to be monitored
|
||||
self.metarList.append(m)
|
||||
self.siteVWPsDict[m] = [radars,profilers,radar_cutoff,profiler_cutoff]
|
||||
self.acarsDict[m] = [acars]
|
||||
#
|
||||
pList.extend(profilers)
|
||||
rList.extend(radars)
|
||||
aList.extend(acars)
|
||||
if len(profilers) > 0 or len(radars) > 0 or len(acars) > 0 :
|
||||
#
|
||||
# This TAF site needs to be monitored
|
||||
self.metarList.append(m)
|
||||
self.siteVWPsDict[m] = [radars,profilers,radar_cutoff,profiler_cutoff]
|
||||
self.acarsDict[m] = [acars]
|
||||
#
|
||||
pList.extend(profilers)
|
||||
rList.extend(radars)
|
||||
aList.extend(acars)
|
||||
#
|
||||
# Find all unique radars and profilers to monitor
|
||||
self.profilerList = dict.fromkeys(pList).keys()
|
||||
|
|
|
@ -32,6 +32,7 @@ import ForecastPointDataRetrieve, NoDataException
|
|||
# ------------ ---------- ----------- --------------------------
|
||||
# 09/15/09 njensen Initial Creation.
|
||||
# 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']
|
||||
|
||||
LOOK_AHEAD = 3 # hours
|
||||
SEC_PER_HOUR = 60*60
|
||||
|
||||
_Logger = logging.getLogger(Avn.CATEGORY)
|
||||
|
||||
def retrieve(siteID):
|
||||
try:
|
||||
pdc = ForecastPointDataRetrieve.retrieve('bufrmosLAMP', siteID, PARAMETERS)
|
||||
def retrieve(siteID):
|
||||
try:
|
||||
pdc = ForecastPointDataRetrieve.retrieve('bufrmosLAMP', siteID, PARAMETERS, forecastTimesLimit=3)
|
||||
except NoDataException.NoDataException:
|
||||
return None
|
||||
pots = []
|
||||
try:
|
||||
# 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):
|
||||
pdv = pdc[n]
|
||||
pots.append(pdv['tstorm2hr'])
|
||||
data = max([x for x in pots if 0<= x <= 100] + [0])
|
||||
return {'from': vtime-LOOK_AHEAD*3600, 'to': vtime, 'prob': min(data, 100)}
|
||||
data = max([x for x in pots if 0 <= x <= 100] + [0])
|
||||
return {'from': vtime-LOOK_AHEAD*SEC_PER_HOUR, 'to': vtime, 'prob': min(data, 100)}
|
||||
except KeyError:
|
||||
return None
|
||||
|
||||
|
|
|
@ -22,8 +22,7 @@
|
|||
<displayList>
|
||||
<displays xsi:type="d2DMapRenderableDisplay" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<descriptor xsi:type="mapDescriptor">
|
||||
<resource>
|
||||
<resourceType>PLAN_VIEW</resourceType>
|
||||
<resource>
|
||||
<loadProperties loadWithoutData="false">
|
||||
<capabilities>
|
||||
<capability xsi:type="colorMapCapability">
|
||||
|
@ -31,6 +30,7 @@
|
|||
</capability>
|
||||
<capability xsi:type="imagingCapability" interpolationState="false" brightness="1.0" contrast="1.0" alpha="1.0"/>
|
||||
</capabilities>
|
||||
<resourceType>PLAN_VIEW</resourceType>
|
||||
<perspectiveProperty xsi:type="d2dLoadProperties" overlayMatchTolerance="1"/>
|
||||
</loadProperties>
|
||||
<properties isSystemResource="false" isBlinking="false" isMapLayer="false" isHoverOn="false" isVisible="true">
|
||||
|
|
|
@ -22,10 +22,10 @@
|
|||
<displayList>
|
||||
<displays xsi:type="d2DMapRenderableDisplay" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<descriptor xsi:type="mapDescriptor">
|
||||
<resource>
|
||||
<resourceType>PLAN_VIEW</resourceType>
|
||||
<resource>
|
||||
<loadProperties xsi:type="gridLoadProperties"
|
||||
displayType="CONTOUR" >
|
||||
<resourceType>PLAN_VIEW</resourceType>
|
||||
</loadProperties>
|
||||
<properties isSystemResource="false" isBlinking="false" isMapLayer="false" isHoverOn="false"
|
||||
isVisible="true">
|
||||
|
|
|
@ -22,8 +22,7 @@
|
|||
<displayList>
|
||||
<displays xsi:type="d2DMapRenderableDisplay" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<descriptor xsi:type="mapDescriptor">
|
||||
<resource>
|
||||
<resourceType>PLAN_VIEW</resourceType>
|
||||
<resource>
|
||||
<loadProperties loadWithoutData="true">
|
||||
<capabilities>
|
||||
<capability xsi:type="colorMapCapability">
|
||||
|
@ -31,6 +30,7 @@
|
|||
</capability>
|
||||
<capability xsi:type="imagingCapability" interpolationState="false" brightness="1.0" contrast="1.0" alpha="1.0"/>
|
||||
</capabilities>
|
||||
<resourceType>PLAN_VIEW</resourceType>
|
||||
<perspectiveProperty xsi:type="d2dLoadProperties" overlayMatchTolerance="1"/>
|
||||
</loadProperties>
|
||||
<properties isSystemResource="false" isBlinking="false" isMapLayer="false" isHoverOn="false" isVisible="true">
|
||||
|
|
|
@ -22,8 +22,7 @@
|
|||
<displayList>
|
||||
<displays xsi:type="d2DMapRenderableDisplay" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<descriptor xsi:type="mapDescriptor">
|
||||
<resource>
|
||||
<resourceType>PLAN_VIEW</resourceType>
|
||||
<resource>
|
||||
<loadProperties loadWithoutData="true">
|
||||
<capabilities>
|
||||
<capability xsi:type="colorMapCapability">
|
||||
|
@ -31,6 +30,7 @@
|
|||
</capability>
|
||||
<capability xsi:type="imagingCapability" interpolationState="false" brightness="1.0" contrast="1.0" alpha="1.0"/>
|
||||
</capabilities>
|
||||
<resourceType>PLAN_VIEW</resourceType>
|
||||
<perspectiveProperty xsi:type="d2dLoadProperties" overlayMatchTolerance="1"/>
|
||||
</loadProperties>
|
||||
<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
|
||||
# version of all grids and there's no way yet to turn this off.
|
||||
|
||||
minTDict = {}
|
||||
maxTDict = {}
|
||||
tDict = {}
|
||||
tdDict = {}
|
||||
|
||||
minTRList = self.getWEInventory("MinT")
|
||||
for tr in minTRList:
|
||||
grid = self.getGrids(MODEL, "MinT", LEVEL, tr, mode = "First")
|
||||
minTDict[tr] = grid
|
||||
minTDict = self.getGrids(MODEL, "MinT", LEVEL, minTRList, mode = "First")
|
||||
|
||||
maxTRList = self.getWEInventory("MaxT")
|
||||
for tr in maxTRList:
|
||||
grid = self.getGrids(MODEL, "MaxT", LEVEL, tr, mode = "First")
|
||||
maxTDict[tr] = grid
|
||||
maxTDict = self.getGrids(MODEL, "MaxT", LEVEL, maxTRList, mode = "First")
|
||||
|
||||
TTRList = self.getWEInventory("T")
|
||||
for tr in TTRList:
|
||||
grid = self.getGrids(MODEL, "T", LEVEL, tr, mode = "First")
|
||||
tDict[tr] = grid
|
||||
tDict = self.getGrids(MODEL, "T", LEVEL, TTRList, mode = "First")
|
||||
|
||||
TdTRList = self.getWEInventory("Td")
|
||||
for tr in TdTRList:
|
||||
grid = self.getGrids(MODEL, "Td", LEVEL, tr, mode = "First")
|
||||
tdDict[tr] = grid
|
||||
tdDict = self.getGrids(MODEL, "Td", LEVEL, TdTRList, mode = "First")
|
||||
|
||||
# get the all locks by other users, so we can detect they are locked
|
||||
# before attempting to modify them
|
||||
|
@ -274,8 +261,7 @@ class Procedure (SmartScript.SmartScript):
|
|||
|
||||
if checkOnly:
|
||||
self.createGrid(MODEL, "MaxLessThanMin", "SCALAR", mask.astype('float32'),
|
||||
maxTR, minAllowedValue=0.0, maxAllowedValue= 1.0,
|
||||
units="", descriptiveName="")
|
||||
maxTR, minAllowedValue=0.0, maxAllowedValue= 1.0)
|
||||
else: # force the change
|
||||
if maxTR in maxTLocks:
|
||||
msg = "Can't modify MaxT grid at " + str(maxTR) + \
|
||||
|
|
|
@ -1,19 +1,19 @@
|
|||
##
|
||||
# This software was developed and / or modified by Raytheon Company,
|
||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
||||
#
|
||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
||||
#
|
||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
||||
# This software product contains export-restricted data whose
|
||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
||||
# to non-U.S. persons whether in the United States or abroad requires
|
||||
# an export license or other authorization.
|
||||
#
|
||||
# Contractor Name: Raytheon Company
|
||||
# Contractor Address: 6825 Pine Street, Suite 340
|
||||
# Mail Stop B8
|
||||
# Omaha, NE 68106
|
||||
# 402.291.0100
|
||||
#
|
||||
# Contractor Name: Raytheon Company
|
||||
# Contractor Address: 6825 Pine Street, Suite 340
|
||||
# Mail Stop B8
|
||||
# Omaha, NE 68106
|
||||
# 402.291.0100
|
||||
#
|
||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
||||
# further licensing information.
|
||||
##
|
||||
|
@ -31,6 +31,12 @@
|
|||
# Author: Tom LeFebvre
|
||||
# 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
|
||||
# Procedure is to appear.
|
||||
|
@ -1104,8 +1110,6 @@ class Procedure (SmartScript.SmartScript):
|
|||
# fetches and returns all of the wind grids specified by the model
|
||||
# name. Should be called before any new wind grids are created
|
||||
def getBackgroundGrids(self, modelName):
|
||||
bgDict = {}
|
||||
|
||||
siteID = self.getSiteID()
|
||||
if modelName == "Fcst":
|
||||
level = "SFC"
|
||||
|
@ -1121,9 +1125,8 @@ class Procedure (SmartScript.SmartScript):
|
|||
|
||||
|
||||
inv = self.getWEInventory(modelName, elementName, level)
|
||||
for tr in inv:
|
||||
bgDict[tr] = self.getGrids(modelName, elementName, level,
|
||||
tr, mode="First")
|
||||
bgDict = self.getGrids(modelName, elementName, level, inv,
|
||||
mode="First")
|
||||
return bgDict
|
||||
|
||||
def secondsToYYYYMMDDHH(self, baseTime):
|
||||
|
@ -1309,10 +1312,9 @@ class Procedure (SmartScript.SmartScript):
|
|||
# inside RMW gets a linear slope to largest of max wind forecasts
|
||||
if inRadius <= 1.0:
|
||||
dSdR = (outSpeed - inSpeed) / (outRadius - inRadius)
|
||||
grid = where(mask, inSpeed + (dSdR * distanceGrid), grid)
|
||||
grid[mask] = inSpeed + (dSdR * distanceGrid[mask])
|
||||
else: # outside RMW
|
||||
grid = where(mask, inSpeed * power((inRadius / distanceGrid), exponent),
|
||||
grid)
|
||||
grid[mask] = inSpeed * power((inRadius / distanceGrid[mask]), exponent)
|
||||
# grid = clip(grid, 0.0, 200.0)
|
||||
dirGrid = self.makeDirectionGrid(latGrid, lonGrid, center[0], center[1])
|
||||
|
||||
|
@ -1336,52 +1338,16 @@ class Procedure (SmartScript.SmartScript):
|
|||
startTime = interpFcstList[0]["validTime"]
|
||||
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)
|
||||
end = AbsTime.AbsTime(endTime)
|
||||
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)
|
||||
|
||||
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
|
||||
if productID == "preTCM":
|
||||
textProduct = self.getTextProductFromFile("/tmp/Irene.txt")
|
||||
textProduct = self.getTextProductFromFile("/tmp/Isaac.txt")
|
||||
decoder = TCMDecoder()
|
||||
decoder.decodeTCMProduct(textProduct, self.dialogEyeDiameter)
|
||||
fcstList = decoder.getFcstList()
|
||||
|
@ -1588,14 +1554,6 @@ class Procedure (SmartScript.SmartScript):
|
|||
# get the lat, lon grids
|
||||
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
|
||||
gridCount = 0
|
||||
for f in interpFcstList:
|
||||
|
@ -1621,6 +1579,14 @@ class Procedure (SmartScript.SmartScript):
|
|||
print "TCMWindTool:", productID, "- Generated",gridCount, \
|
||||
"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 != "":
|
||||
self.statusBarMsg(msg, "S")
|
||||
|
||||
|
|
|
@ -32,6 +32,13 @@
|
|||
# 2005/07/29 - Version 0.1 - updated grid database structure
|
||||
# 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
|
||||
#
|
||||
# SOFTWARE HISTORY
|
||||
#
|
||||
# Date Ticket# Engineer Description
|
||||
# ------------ ---------- ----------- --------------------------
|
||||
# 1/30/13 15536 ryu Made necessary changes to get tool to run
|
||||
#
|
||||
# ----------------------------------------------------------------------------
|
||||
ToolType = "numeric"
|
||||
WeatherElementEdited = "None"
|
||||
|
@ -75,10 +82,11 @@ class Tool (SmartScript.SmartScript):
|
|||
processVarList=ProcessVariableList.ProcessVariableList(
|
||||
"Pick Model",VList,varReturn)
|
||||
status=processVarList.status()
|
||||
if status != "Ok":
|
||||
if status.lower() != "ok":
|
||||
self.docancel=1
|
||||
return
|
||||
self.modelName=varReturn["Model:"]
|
||||
|
||||
#
|
||||
# Remove any current VER grids from gridManager
|
||||
#
|
||||
|
@ -86,7 +94,7 @@ class Tool (SmartScript.SmartScript):
|
|||
parmList = self._dbss.getParmManager().getDisplayedParms()
|
||||
for parm in parmList:
|
||||
pid=parm.getParmID()
|
||||
pmodel = pid.getDbID().getModelId()
|
||||
pmodel = pid.getDbId().getModelId()
|
||||
name=pid.getParmName()
|
||||
level=pid.getParmLevel()
|
||||
if pmodel == "Ver":
|
||||
|
@ -102,7 +110,7 @@ class Tool (SmartScript.SmartScript):
|
|||
def execute(self,WEname,GridTimeRange):
|
||||
"Show history of grids over time"
|
||||
self.VU.logMsg(" executing for time:%s"%GridTimeRange)
|
||||
mutableModel=self.mutableID().model()
|
||||
mutableModel=self.mutableID().modelName()
|
||||
tomorrow=time.time()+86400
|
||||
parm=WEname
|
||||
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
|
||||
#
|
||||
(self.parmUnits,self.parmPrecision,self.parmMinval,self.parmMaxval,
|
||||
self.parmColorTable,self.parmDisplayMinval,
|
||||
self.parmRateFlag,self.parmColorTable,self.parmDisplayMinval,
|
||||
self.parmDisplayMaxval)=self.getParmInfo(mutableModel,WEname)
|
||||
#
|
||||
# Get start/end of current timerange and get verification
|
||||
|
@ -124,6 +132,7 @@ class Tool (SmartScript.SmartScript):
|
|||
# Loop over verification model records
|
||||
#
|
||||
for rec in recs:
|
||||
rec = int(rec)
|
||||
self.VU.logMsg("rec=%d"%rec)
|
||||
#
|
||||
# read grid - clip to min/max for this parm
|
||||
|
@ -159,16 +168,19 @@ class Tool (SmartScript.SmartScript):
|
|||
self.parmMaxval,self.parmUnits)
|
||||
|
||||
self.setActiveElement("Ver",parmname,"SFC",GridTimeRange,
|
||||
self.parmColorTable,(self.parmDisplayMinval,
|
||||
self.parmDisplayMaxval),0)
|
||||
self.parmColorTable,(float(self.parmDisplayMinval),
|
||||
float(self.parmDisplayMaxval)),0)
|
||||
return
|
||||
#==================================================================
|
||||
#
|
||||
# getParmInfo - get information on a parm (units, precision, minval,
|
||||
# maxval, colortablename, displayminval, displaymaxval)
|
||||
# from the database specified
|
||||
#
|
||||
|
||||
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")
|
||||
if parm is not None:
|
||||
parmInfo = parm.getGridInfo()
|
||||
|
@ -176,15 +188,11 @@ class Tool (SmartScript.SmartScript):
|
|||
precision=parmInfo.getPrecision()
|
||||
minval=parmInfo.getMinValue()
|
||||
maxval=parmInfo.getMaxValue()
|
||||
|
||||
colorTable="Gridded Data"
|
||||
displayMinval=0
|
||||
displayMaxval=100
|
||||
rateflag=parmInfo.isRateParm()
|
||||
from com.raytheon.viz.gfe.rsc import DiscreteDisplayUtil
|
||||
ctInfo = DiscreteDisplayUtil.buildColorMapParameters(parm)
|
||||
if ctInfo is not None:
|
||||
colorTable = ctInfo.getColorMapName()
|
||||
displayMinval = ctInfo.getColorMapMin()
|
||||
displayMaxVal = ctInfo.getColorMapMax()
|
||||
|
||||
return(units,precision,minval,maxval,colorTable,displayMinval,displayMaxval)
|
||||
colorTable = ctInfo.getColorMapName()
|
||||
displayMinval = ctInfo.getColorMapMin()
|
||||
displayMaxval = ctInfo.getColorMapMax()
|
||||
return(units,precision,minval,maxval,rateflag,colorTable,displayMinval,displayMaxval)
|
||||
|
|
|
@ -88,11 +88,17 @@ def executeFromJava(databaseID, site, username, dataMgr, forecastList, logFile,
|
|||
site = str(site)
|
||||
databaseID = str(databaseID)
|
||||
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,
|
||||
cmdLineVarDict=cmdLineVarDict, vtecMode=vtecMode, username=username,
|
||||
dataMgr=dataMgr, drtTime=drtTime)
|
||||
|
||||
elapsedTime = (time.time() - startTime)*1000
|
||||
logger.info("Text Formatter Finished, took: %d ms",elapsedTime)
|
||||
|
||||
RedirectLogging.restore()
|
||||
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
|
||||
# point!!!!!!!!!!!!!!!
|
||||
logger.info("Text Formatter Finished")
|
||||
return forecasts
|
||||
|
||||
def getAbsTime(timeStr):
|
||||
|
|
|
@ -1,19 +1,19 @@
|
|||
##
|
||||
# This software was developed and / or modified by Raytheon Company,
|
||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
||||
#
|
||||
#
|
||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
||||
# This software product contains export-restricted data whose
|
||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
||||
# to non-U.S. persons whether in the United States or abroad requires
|
||||
# an export license or other authorization.
|
||||
#
|
||||
#
|
||||
# Contractor Name: Raytheon Company
|
||||
# Contractor Address: 6825 Pine Street, Suite 340
|
||||
# Mail Stop B8
|
||||
# Omaha, NE 68106
|
||||
# 402.291.0100
|
||||
#
|
||||
#
|
||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
||||
# further licensing information.
|
||||
##
|
||||
|
@ -175,7 +175,7 @@ class TextUtils:
|
|||
# Return 1 if any of the searchKeys are found in subkeys
|
||||
wxSize = len(subkeys)
|
||||
wxStr = ""
|
||||
for x in range(wxSize):
|
||||
for x in range(wxSize):
|
||||
wxStr += str(subkeys[x])
|
||||
if x < wxSize - 1:
|
||||
wxStr += '^'
|
||||
|
@ -253,7 +253,7 @@ class TextUtils:
|
|||
return 0.0
|
||||
countAbove = 0
|
||||
|
||||
for histSample in parmHisto.histoSamples():
|
||||
for histSample in parmHisto.histoSamples():
|
||||
for histPair in histSample.histogram():
|
||||
if histPair.value().scalar() > value:
|
||||
countAbove = countAbove + histPair.count()
|
||||
|
@ -418,7 +418,7 @@ class TextUtils:
|
|||
if index == -1:
|
||||
name = parmNameAndLevel
|
||||
level = "SFC"
|
||||
parm = ParmID(name,databaseID,level)
|
||||
parm = ParmID(name,databaseID,level)
|
||||
else:
|
||||
name = parmNameAndLevel[0:index]
|
||||
level = parmNameAndLevel[index+1:]
|
||||
|
@ -674,11 +674,11 @@ class TextUtils:
|
|||
|
||||
def getPreviousProduct(self, productID, searchString="", version=0):
|
||||
# gets a previous product from the AWIPS database
|
||||
|
||||
from com.raytheon.viz.gfe.core import DataManager
|
||||
|
||||
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 = string.strip(previousProduct)
|
||||
|
||||
|
|
|
@ -30,6 +30,8 @@
|
|||
# Date Ticket# Engineer Description
|
||||
# ------------ ---------- ----------- --------------------------
|
||||
# 11/05/08 njensen Initial Creation.
|
||||
# 01/17/13 1486 dgilling Re-factor based on
|
||||
# RollbackMasterInterface.
|
||||
#
|
||||
#
|
||||
#
|
||||
|
@ -37,15 +39,13 @@
|
|||
|
||||
import sys
|
||||
import Exceptions
|
||||
import MasterInterface
|
||||
from com.raytheon.uf.common.localization import PathManagerFactory
|
||||
import RollbackMasterInterface
|
||||
|
||||
class ProcedureInterface(MasterInterface.MasterInterface):
|
||||
class ProcedureInterface(RollbackMasterInterface.RollbackMasterInterface):
|
||||
|
||||
def __init__(self, scriptPath):
|
||||
MasterInterface.MasterInterface.__init__(self)
|
||||
self.importModules(scriptPath)
|
||||
self.pathMgr = PathManagerFactory.getPathManager()
|
||||
super(ProcedureInterface, self).__init__(scriptPath)
|
||||
self.importModules()
|
||||
|
||||
self.menuToProcMap = {}
|
||||
for script in self.scripts:
|
||||
|
@ -72,26 +72,20 @@ class ProcedureInterface(MasterInterface.MasterInterface):
|
|||
return scriptList
|
||||
|
||||
def addModule(self, moduleName):
|
||||
MasterInterface.MasterInterface.addModule(self, moduleName)
|
||||
super(ProcedureInterface, self).addModule(moduleName)
|
||||
self.__mapMenuList(moduleName)
|
||||
|
||||
def removeModule(self, moduleName):
|
||||
MasterInterface.MasterInterface.removeModule(self, moduleName)
|
||||
super(ProcedureInterface, self).removeModule(moduleName)
|
||||
for key in self.menuToProcMap:
|
||||
procList = self.menuToProcMap.get(key)
|
||||
if moduleName in procList:
|
||||
procList.remove(moduleName)
|
||||
self.menuToProcMap[key] = procList
|
||||
if self.pathMgr.getStaticLocalizationFile("gfe/userPython/procedures/" + moduleName + ".py") is not None:
|
||||
self.addModule(moduleName)
|
||||
|
||||
|
||||
def getStartupErrors(self):
|
||||
from java.util import ArrayList
|
||||
errorList = ArrayList()
|
||||
for err in self.getImportErrors():
|
||||
errorList.add(str(err))
|
||||
return errorList
|
||||
# in-case we removed just an override, let's
|
||||
# check to see if another script with the same name exists
|
||||
if sys.modules.has_key(moduleName):
|
||||
self.__mapMenuList(moduleName)
|
||||
|
||||
def getMethodArgNames(self, moduleName, className, methodName):
|
||||
from java.util import ArrayList
|
||||
|
@ -133,10 +127,5 @@ class ProcedureInterface(MasterInterface.MasterInterface):
|
|||
# wasn't in list
|
||||
pass
|
||||
|
||||
MasterInterface.MasterInterface.reloadModule(self, moduleName)
|
||||
super(ProcedureInterface, self).reloadModule(moduleName)
|
||||
self.__mapMenuList(moduleName)
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -2,19 +2,19 @@
|
|||
##
|
||||
# This software was developed and / or modified by Raytheon Company,
|
||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
||||
#
|
||||
#
|
||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
||||
# This software product contains export-restricted data whose
|
||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
||||
# to non-U.S. persons whether in the United States or abroad requires
|
||||
# an export license or other authorization.
|
||||
#
|
||||
#
|
||||
# Contractor Name: Raytheon Company
|
||||
# Contractor Address: 6825 Pine Street, Suite 340
|
||||
# Mail Stop B8
|
||||
# Omaha, NE 68106
|
||||
# 402.291.0100
|
||||
#
|
||||
#
|
||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
||||
# further licensing information.
|
||||
##
|
||||
|
@ -119,7 +119,7 @@ nnn = r'(?:[A-Z]{2}[ZC])?\d{3}'
|
|||
purge = r'(?P<purgeT>\d{6})-'
|
||||
ugc = r'\n(?P<uhdr>' + r'[A-Z]{2}[Z|C](?:(?:\d{3})|(?:ALL))' + r'(?:[->]\n?' + nnn + \
|
||||
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'.*'
|
||||
|
@ -192,20 +192,20 @@ class ProductParser:
|
|||
#l = headline_re.finditer(str)
|
||||
l = single_head_re.finditer(str)
|
||||
for m in l:
|
||||
if m is not None:
|
||||
if m is not None:
|
||||
#print 'phl m = ', m
|
||||
newstart = start + m.start()
|
||||
m = headline_re.match(m.group(0))
|
||||
if m is not None:
|
||||
hdlns.append(self.dumpMatch(m, newstart))
|
||||
|
||||
|
||||
#print 'hdlns = ', hdlns
|
||||
rval['headInfo'] = hdlns
|
||||
|
||||
def dumpMatch(self, m, offset=0, rval=None):
|
||||
if rval is None:
|
||||
rval = {}
|
||||
|
||||
|
||||
#print 'dumpmatch m = ', m.groupdict()
|
||||
for k in m.groupdict().keys():
|
||||
if m.start(k) != -1 and m.start(k) != m.end(k):
|
||||
|
@ -234,7 +234,7 @@ class ProductParser:
|
|||
|
||||
segs = []
|
||||
l = ugch_re.finditer(self._str)
|
||||
|
||||
|
||||
for m in l:
|
||||
if m is not None:
|
||||
m1 = cityh_re.search(self._str, m.end())
|
||||
|
@ -250,7 +250,7 @@ class ProductParser:
|
|||
else:
|
||||
continue
|
||||
m4 = head_re.search(self._str, m.end(), m3.end())
|
||||
|
||||
|
||||
d = self.dumpMatch(m)
|
||||
d = self.dumpMatch(m2, rval=d)
|
||||
d = self.dumpMatch(m3, rval=d)
|
||||
|
@ -266,7 +266,7 @@ class ProductParser:
|
|||
else:
|
||||
d['city'] = (self.tkc(m2.start()),
|
||||
self.tkc(m2.start()))
|
||||
|
||||
|
||||
if m4 is not None:
|
||||
#print 'm4 = ', m4.group()
|
||||
d = self.dumpMatch(m4, rval=d)
|
||||
|
@ -284,7 +284,7 @@ class ProductParser:
|
|||
rval['frames'] = frames
|
||||
|
||||
return rval
|
||||
|
||||
|
||||
def parseFromJava(self, text):
|
||||
self._str = text
|
||||
self._ci = None
|
||||
|
@ -295,13 +295,13 @@ class ProductParser:
|
|||
lc.append(count)
|
||||
count += l
|
||||
self._totals = lc
|
||||
|
||||
|
||||
#print 'text START ----------------------'
|
||||
#print text
|
||||
#print 'text END ------------------------'
|
||||
|
||||
|
||||
result = self.parse()
|
||||
|
||||
|
||||
#print 'result = ', result
|
||||
|
||||
|
||||
return JUtil.pyDictToJavaMap(result)
|
||||
|
|
|
@ -23,23 +23,35 @@
|
|||
# any purpose.
|
||||
#
|
||||
# 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
|
||||
# ----------------------------------------------------------------------------
|
||||
#
|
||||
# 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
|
||||
from math import *
|
||||
from numpy import *
|
||||
import os
|
||||
import numpy
|
||||
import math
|
||||
import re
|
||||
import jep
|
||||
import BaseTool, Exceptions
|
||||
|
@ -52,6 +64,7 @@ from java.util import Date
|
|||
from java.nio import FloatBuffer
|
||||
|
||||
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 Grid2DFloat
|
||||
from com.raytheon.uf.common.dataplugin.gfe.discrete import DiscreteKey
|
||||
|
@ -350,7 +363,10 @@ class SmartScript(BaseTool.BaseTool):
|
|||
# e.g. "SFC", "MB350", "BL030"
|
||||
# x, y: integer coordinates
|
||||
# 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
|
||||
# are found within the given time range:
|
||||
# "TimeWtAverage": return time-weighted Average value
|
||||
|
@ -393,10 +409,19 @@ class SmartScript(BaseTool.BaseTool):
|
|||
|
||||
if isinstance(model, DatabaseID.DatabaseID):
|
||||
model = model.modelIdentifier()
|
||||
|
||||
|
||||
timeRangeList = None
|
||||
if isinstance(timeRange, TimeRange.TimeRange):
|
||||
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:
|
||||
# for cModel, cElement, cLevel, cMostRecent, cRange, cMode, cResult in \
|
||||
# self.__pythonGrids:
|
||||
|
@ -414,7 +439,17 @@ class SmartScript(BaseTool.BaseTool):
|
|||
"NoData", "No Weather Element for " + exprName)
|
||||
else:
|
||||
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
|
||||
if result is not None:
|
||||
if len(result) == 0:
|
||||
|
@ -756,18 +791,26 @@ class SmartScript(BaseTool.BaseTool):
|
|||
## Conversion methods
|
||||
|
||||
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
|
||||
u = - u
|
||||
v = - v
|
||||
speed = numpy.sqrt(u * u + v * v)
|
||||
dir = numpy.arctan2(u, v) * RAD_TO_DEG
|
||||
dir = numpy.where(numpy.greater_equal(dir, 360), dir - 360, dir)
|
||||
dir = numpy.where(numpy.less(dir, 0), dir + 360, dir)
|
||||
u = -u
|
||||
v = -v
|
||||
if type(u) is numpy.ndarray or type(v) is numpy.ndarray:
|
||||
speed = numpy.sqrt(u * u + v * v)
|
||||
dir = numpy.arctan2(u, v) * RAD_TO_DEG
|
||||
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)
|
||||
|
||||
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
|
||||
uw = - sin(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):
|
||||
# Convert from meters/sec to Kts
|
||||
return value_Msec * 1.944
|
||||
return value_Msec * 3600.0 / 1852.0
|
||||
|
||||
def convertKtoF(self, t_K):
|
||||
# Convert the temperature from Kelvin to Fahrenheit
|
||||
|
@ -797,7 +840,7 @@ class SmartScript(BaseTool.BaseTool):
|
|||
|
||||
def convertFtToM(self, value_Ft):
|
||||
# Convert the value in Feet to Meters
|
||||
return value_Ft/3.28084
|
||||
return value_Ft * 0.3048
|
||||
|
||||
#########################################################################
|
||||
## Error Handling ##
|
||||
|
@ -1210,7 +1253,6 @@ class SmartScript(BaseTool.BaseTool):
|
|||
# color. If "on" is 0, turn off the highlight.
|
||||
parm = self.getParm(model, element, level)
|
||||
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[0] = timeRange.toJavaObj()
|
||||
|
@ -1553,8 +1595,6 @@ class SmartScript(BaseTool.BaseTool):
|
|||
return self.__dataMgr.getSpatialDisplayManager().getActivatedParm()
|
||||
|
||||
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
|
||||
# Returns an AFPS.ReferenceData swath of the given
|
||||
# number of cells around the given an edit area.
|
||||
|
@ -1569,10 +1609,10 @@ class SmartScript(BaseTool.BaseTool):
|
|||
grid2DBit = self.getGridLoc().gridCellSwath(
|
||||
polygon.getCoordinates(), float(cells), False)
|
||||
if grid2DB is not None:
|
||||
grid2DB = grid2DB | grid2DBit
|
||||
grid2DB = grid2DB.orEquals(grid2DBit)
|
||||
else:
|
||||
grid2DB = grid2DBit
|
||||
return ReferenceData(self.getGridLoc(), ReferenceID("test"), grid2DB)
|
||||
return self.getGridLoc().convertToReferenceData(grid2DB)
|
||||
|
||||
def getLatLon(self, x, y):
|
||||
# Get the latitude/longitude values for the given grid point
|
||||
|
|
|
@ -30,6 +30,8 @@
|
|||
# Date Ticket# Engineer Description
|
||||
# ------------ ---------- ----------- --------------------------
|
||||
# 10/21/08 njensen Initial Creation.
|
||||
# 01/17/13 1486 dgilling Re-factor based on
|
||||
# RollbackMasterInterface.
|
||||
#
|
||||
#
|
||||
#
|
||||
|
@ -37,19 +39,17 @@
|
|||
|
||||
import sys
|
||||
import Exceptions
|
||||
import MasterInterface
|
||||
from com.raytheon.uf.common.localization import PathManagerFactory
|
||||
import RollbackMasterInterface
|
||||
|
||||
|
||||
class SmartToolInterface(MasterInterface.MasterInterface):
|
||||
class SmartToolInterface(RollbackMasterInterface.RollbackMasterInterface):
|
||||
|
||||
def __init__(self, scriptPath):
|
||||
MasterInterface.MasterInterface.__init__(self)
|
||||
self.importModules(scriptPath)
|
||||
super(SmartToolInterface, self).__init__(scriptPath)
|
||||
self.importModules()
|
||||
self.parmToModuleMap = {'variableElement' : set()}
|
||||
for script in self.scripts:
|
||||
self.__mapDisplayList(script)
|
||||
self.pathMgr = PathManagerFactory.getPathManager()
|
||||
|
||||
def __mapDisplayList(self, script):
|
||||
if hasattr(sys.modules[script], "WeatherElementEdited"):
|
||||
|
@ -137,20 +137,21 @@ class SmartToolInterface(MasterInterface.MasterInterface):
|
|||
return argList
|
||||
|
||||
def addModule(self, moduleName):
|
||||
MasterInterface.MasterInterface.addModule(self, moduleName)
|
||||
super(SmartToolInterface, self).addModule(moduleName)
|
||||
self.__mapDisplayList(moduleName)
|
||||
|
||||
def reloadModule(self, moduleName):
|
||||
if sys.modules.has_key(moduleName):
|
||||
self.__removeModuleFromMap(moduleName)
|
||||
MasterInterface.MasterInterface.reloadModule(self, moduleName)
|
||||
self.__removeModuleFromMap(moduleName)
|
||||
super(SmartToolInterface, self).reloadModule(moduleName)
|
||||
self.__mapDisplayList(moduleName)
|
||||
|
||||
def removeModule(self, moduleName):
|
||||
MasterInterface.MasterInterface.removeModule(self, moduleName)
|
||||
super(SmartToolInterface, self).removeModule(moduleName)
|
||||
self.__removeModuleFromMap(moduleName)
|
||||
if self.pathMgr.getStaticLocalizationFile("gfe/userPython/smartTools/" + moduleName + ".py") is not None:
|
||||
self.addModule(moduleName)
|
||||
# in-case we removed just an override, let's
|
||||
# check to see if another script with the same name exists
|
||||
if sys.modules.has_key(moduleName):
|
||||
self.__mapDisplayList(moduleName)
|
||||
|
||||
def __removeModuleFromMap(self, moduleName):
|
||||
for parm in self.parmToModuleMap:
|
||||
|
@ -159,13 +160,6 @@ class SmartToolInterface(MasterInterface.MasterInterface):
|
|||
toolList.remove(moduleName)
|
||||
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):
|
||||
try:
|
||||
return self.runMethod(moduleName, className, methodName, **kwargs)
|
||||
|
|
|
@ -9,15 +9,15 @@
|
|||
! J.Carr/NCEP 7/98 changed contouring for the product
|
||||
! T. Lee/GSC 6/99 Increased omega contour range
|
||||
!
|
||||
GLEVEL=4700:10000!700 !700 !850 !30:0
|
||||
GVCORD=SGMA !PRES !PRES !PRES!pdly
|
||||
GLEVEL=4700:10000!700!700!850 !0:30
|
||||
GVCORD=SGMA!PRES!PRES!PRES!pdly
|
||||
SKIP=
|
||||
FILTER=y
|
||||
SCALE=0 !3 !3 !0
|
||||
GDPFUN=relh !sm9s(omeg)!sm9s(omeg) !tmpc !tmpc
|
||||
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
|
||||
LINE=0 !30/10/2!6/1/2 !2/1/2!20/1/2
|
||||
SCALE=0!1!1 !0
|
||||
GDPFUN=relh!sm9s(omeg)!sm9s(omeg)!tmpc !tmpc
|
||||
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
|
||||
LINE=0!30/10/2!6/1/2!2/1/2!20/1/2
|
||||
FINT=50;70;90
|
||||
FLINE=0;24;23;22
|
||||
HILO=0
|
||||
|
|
|
@ -7,15 +7,15 @@
|
|||
! D.W.Plummer/NCEP 7/98 Changed contouring for the product
|
||||
! T. Lee/GSC 6/99 Increased omega contour range
|
||||
!
|
||||
GLEVEL=4400:10000!700 !700 !850 !9950
|
||||
GVCORD=SGMA !PRES !PRES !PRES!SGMA
|
||||
GLEVEL=4400:10000!700!700!850!9950
|
||||
GVCORD=SGMA!PRES!PRES!PRES!SGMA
|
||||
SKIP=1
|
||||
FILTER=y
|
||||
SCALE=0 !3 !3 !0
|
||||
GDPFUN=relh !omeg!omeg !tmpc !tmpc
|
||||
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
|
||||
LINE=0 !30/10/3!6/1/2 !2/1/2!20/1/2
|
||||
FILTER= y
|
||||
SCALE=0!3!3!0
|
||||
GDPFUN=relh!omeg!omeg!tmpc!tmpc
|
||||
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
|
||||
LINE=0!30/10/3!6/1/2!2/1/2!20/1/2
|
||||
FINT=50;70;90
|
||||
FLINE=0;24;23;22
|
||||
HILO=0
|
||||
|
|
|
@ -8,7 +8,7 @@ GLEVEL=150
|
|||
GVCORD=pres
|
||||
SKIP=
|
||||
FILTER=y
|
||||
SCALE=3 !-1
|
||||
SCALE=0 !-1
|
||||
GDPFUN=knts((mag(wnd))) !sm9s(hght)!kntv(wnd)
|
||||
TYPE=c/f !c !b
|
||||
CINT=30;50;70;90;110;130;150 !12
|
||||
|
|
|
@ -8,9 +8,9 @@ GLEVEL=200
|
|||
GVCORD=PRES
|
||||
SKIP=
|
||||
FILTER=y
|
||||
SCALE=0!0!5!5!-1
|
||||
GDPFUN=mag(kntv(wnd))!mag(kntv(wnd))!div(wnd)!div(wnd)!sm5s(hght)
|
||||
TYPE=c!c/f!c/f!c!c
|
||||
SCALE=0!0!5!5
|
||||
GDPFUN=mag(kntv(wnd))!mag(kntv(wnd))!div(wnd)!div(wnd)
|
||||
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
|
||||
LINE=26!32//2!19/-2//2!20!1//2
|
||||
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
|
||||
HILO = 31;0/x#2////y
|
||||
HLSYM = 1.5
|
||||
!CLRBAR= 1
|
||||
!CLRBAR = 1
|
||||
WIND = 0
|
||||
TITLE = 1/-1/~ 24-HR OBS PRECIP (RFC, 40km avg) !0
|
||||
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
|
||||
HILO = 0
|
||||
HLSYM = 0
|
||||
!CLRBAR= 1//CL/0;.5/.75;.01
|
||||
!CLRBAR = 1//CL/0;.5/.75;.01
|
||||
WIND =
|
||||
TITLE = 1/-1/COOPERATIVE RAINFALL REPORTS FOR 24 hrs ENDING 12 UTC: ~
|
||||
COLORS =
|
||||
|
|
|
@ -20,7 +20,7 @@ HILO = 2;6/X;N/-99--4;4-99 ! 0
|
|||
HLSYM = 0
|
||||
!CLRBAR = 1/V/LL!0
|
||||
WIND = 6/.8/2/112
|
||||
TITLE = 1/-1/~ @ WIND = AND RELATIVE VORTICITY!0
|
||||
TITLE = 1/-1/~ @ WIND AND RELATIVE VORTICITY!0
|
||||
COLORS = 2
|
||||
MARKER = 2
|
||||
GRDLBL = 5
|
||||
|
|
|
@ -20,7 +20,7 @@ HILO = !2;6/X;N/10-99;10-99!
|
|||
HLSYM = 0
|
||||
!CLRBAR = 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
|
||||
MARKER = 2
|
||||
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
|
||||
!CLRBAR= 1/V/LL!0
|
||||
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
|
||||
MARKER = 2
|
||||
GRDLBL = 5
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
! 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
|
||||
!
|
||||
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
|
||||
SKIP=
|
||||
FILTER=y
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
! D.W.Plummer/NCEP 8/97 Added FILTER parameter and changed TEXT value
|
||||
! 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
|
||||
SKIP=
|
||||
FILTER=y
|
||||
|
|
|
@ -8,9 +8,9 @@
|
|||
! D.W.Plummer/NCEP 8/97 Added FILTER parameter
|
||||
! J. Carr/HPC 10/97 Moved from the standard directory because this
|
||||
! 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
|
||||
SKIP=
|
||||
FILTER=y
|
||||
|
|
|
@ -7,9 +7,9 @@
|
|||
! D.W.Plummer/NCEP 8/97 Added FILTER = parameter
|
||||
! J. Carr/HPC 10/97 Moved from the standard directory because this
|
||||
! 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
|
||||
SKIP = 0/1
|
||||
FILTER=y
|
||||
|
@ -22,7 +22,7 @@ FINT = 6;12;18;24;30;36
|
|||
FLINE = 0;23;22;21;14;15;2
|
||||
HILO = 0 !5/H#;L#!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
|
||||
TITLE = 1/-1/~ @ MOISTURE TRANSPORT, HGHT, BL THTAE!0
|
||||
COLORS = 2
|
||||
|
|
|
@ -20,7 +20,7 @@ FLINE=0;23;22;30;14;2
|
|||
HILO=0!0!6/H#;L#
|
||||
HLSYM=0!0!1.5;1.5//22;22/2;2/hw
|
||||
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
|
||||
MARKER=2
|
||||
GRDLBL=5
|
||||
|
|
|
@ -18,7 +18,7 @@ FINT =
|
|||
FLINE =
|
||||
HILO = 0
|
||||
HLSYM = 0
|
||||
!CLRBAR= 0
|
||||
!CLRBAR = 0
|
||||
WIND = 9/0.9/2/112
|
||||
TITLE = 1/-1/~ 850mb WIND (KTS) and PRECIP WATER
|
||||
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"?>
|
||||
<AttributeSetGroup xmlns:ns2="http://www.example.org/productType" xmlns:ns3="group">
|
||||
<AttributeSetGroup xmlns:ns2="http://www.example.org/productType">
|
||||
<resource>AVIATION</resource>
|
||||
<attrSetGroupName>standard</attrSetGroupName>
|
||||
<attrSetNames>icprb_6400,turb_6400,icsev_6400,sipd_6400</attrSetNames>
|
||||
<attrSetNames>ICIP</attrSetNames>
|
||||
</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">
|
||||
<resource>CMC</resource>
|
||||
<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> -->
|
||||
</AttributeSetGroup>
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<AttributeSetGroup xmlns:ns2="http://www.example.org/productType" xmlns:ns3="group">
|
||||
<resource>CMC</resource>
|
||||
<attrSetGroupName>streamline</attrSetGroupName>
|
||||
<attrSetGroupName>streamlines</attrSetGroupName>
|
||||
<attrSetNames>250mb_streamlines,500mb_streamlines,700mb_streamlines,850mb_streamlines,925mb_streamlines,1000mb_streamlines</attrSetNames>
|
||||
</AttributeSetGroup>
|
|
@ -2,5 +2,5 @@
|
|||
<AttributeSetGroup xmlns:ns2="http://www.example.org/productType" xmlns:ns3="group">
|
||||
<resource>CMC</resource>
|
||||
<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>
|
|
@ -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"?>
|
||||
<AttributeSetGroup xmlns:ns2="http://www.example.org/productType" xmlns:ns3="group">
|
||||
<AttributeSetGroup xmlns:ns2="http://www.example.org/productType">
|
||||
<resource>FNMOCWAVE</resource>
|
||||
<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>
|
|
@ -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"?>
|
||||
<AttributeSetGroup xmlns:ns2="http://www.example.org/productType" xmlns:ns3="group">
|
||||
<AttributeSetGroup xmlns:ns2="http://www.example.org/productType">
|
||||
<resource>GFS</resource>
|
||||
<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>
|
||||
|
|
|
@ -2,5 +2,5 @@
|
|||
<AttributeSetGroup xmlns:ns2="http://www.example.org/productType" xmlns:ns3="group">
|
||||
<resource>GFS</resource>
|
||||
<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>
|
||||
|
|
|
@ -2,5 +2,5 @@
|
|||
<AttributeSetGroup xmlns:ns2="http://www.example.org/productType" xmlns:ns3="group">
|
||||
<resource>GFS</resource>
|
||||
<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>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<?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>
|
||||
<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>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?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>
|
||||
<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>
|
||||
|
|
|
@ -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