VLab Issue #4001 - NCEP EDEX and EDEX Common delivery for 14.2.1-n

Fixes for Vors, Ncuair, and pressure change

Change-Id: I11d77f5b359e3f73317a46ecf9addf81079c1616

Former-commit-id: a05e1a8190d28f3d09e373b8d8c5f46829bbc9e8
This commit is contained in:
Stephen Gilbert 2014-07-08 09:51:57 -04:00
parent 929305ce1d
commit 11d21bbe95
14 changed files with 3435 additions and 2708 deletions

View file

@ -313,7 +313,7 @@ COPY stns.VORS(PKEY, STATION_ID, STATION_NUM, NAME, STATE, COUNTRY, LATITUDE, LO
312,RBL,225,RED_BLUFF,CA,US,40.1,-122.24
313,SEA,243,SEATTLE,WA,US,47.44,-122.31
314,HUH,35,WHATCOM,WA,US,48.95,-122.58
315,PDX,208,PORTLAND,OR,US,45.58,-122.6
315,BTG,208,BATTLE_GROUND,WA,US,45.75,-122.59
316,PYE,371,POINT_REYES,CA,US,38.08,-122.87
317,OED,362,MEDFORD,OR,US,42.48,-122.91
318,EUG,93,EUGENE,OR,US,44.12,-123.22

View file

@ -0,0 +1,37 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
This_software_was_developed_and_/_or_modified_by_Raytheon_Company,
pursuant_to_Contract_DG133W-05-CQ-1067_with_the_US_Government.
U.S._EXPORT_CONTROLLED_TECHNICAL_DATA
This_software_product_contains_export-restricted_data_whose
export/transfer/disclosure_is_restricted_by_U.S._law._Dissemination
to_non-U.S._persons_whether_in_the_United_States_or_abroad_requires
an_export_license_or_other_authorization.
Contractor_Name:________Raytheon_Company
Contractor_Address:_____6825_Pine_Street,_Suite_340
________________________Mail_Stop_B8
________________________Omaha,_NE_68106
________________________402.291.0100
See_the_AWIPS_II_Master_Rights_File_("Master_Rights_File.pdf")_for
further_licensing_information.
-->
<lambertConformalGridCoverage>
<name>14731025001</name>
<description>HIRES - 5 km Western US</description>
<la1>12.19</la1>
<lo1>-133.459</lo1>
<firstGridPointCorner>LowerLeft</firstGridPointCorner>
<nx>1473</nx>
<ny>1025</ny>
<dx>5.079</dx>
<dy>5.079</dy>
<spacingUnit>km</spacingUnit>
<minorAxis>6371229.0</minorAxis>
<majorAxis>6371229.0</majorAxis>
<lov>-95.0</lov>
<latin1>25.</latin1>
<latin2>25.</latin2>
</lambertConformalGridCoverage>

View file

@ -1435,6 +1435,26 @@
</process>
</model>
<model>
<name>HiResW-NMM-US</name>
<center>7</center>
<subcenter>0</subcenter>
<grid>14731025001</grid>
<process>
<id>112</id>
</process>
</model>
<model>
<name>HiResW-ARW-US</name>
<center>7</center>
<subcenter>0</subcenter>
<grid>14731025001</grid>
<process>
<id>116</id>
</process>
</model>
<model>
<name>HiResW-NMM-East</name>
<center>7</center>

View file

@ -41,7 +41,7 @@ return query.execute()'''
if not ch.isGoodStatus():
print ch.formatResponse()
exit(1)
exit(1)
return self.__generateMap( ch.getContents() )
@ -147,19 +147,19 @@ query.addReturnedField("dataTime.refTime")
return query.execute()'''.format(atype,label)
service = '/services/pyproductjaxb'
host = os.getenv("DEFAULT_HOST", "localhost")
port = os.getenv("DEFAULT_PORT", "9581")
connection=str(host+":"+port)
ch = CH.CommHandler(connection,service)
ch.process(script)
service = '/services/pyproductjaxb'
host = os.getenv("DEFAULT_HOST", "localhost")
port = os.getenv("DEFAULT_PORT", "9581")
connection=str(host+":"+port)
ch = CH.CommHandler(connection,service)
ch.process(script)
if not ch.isGoodStatus():
if not ch.isGoodStatus():
print ch.formatResponse()
exit(1)
logger.debug( ch.getContents() )
return __parseResponse( ch.getContents() )
logger.debug( ch.getContents() )
return __parseResponse( ch.getContents() )
#
# Parses the XML response from the uEngine and extracts

View file

@ -16,7 +16,7 @@
* remove xml serialization as well *
* 10/2011 S. Gurung Added changes related to getting stid/lat/lon/elev
* from database instead of snstns.xml file
*
* 6/2014 T.Lee Added support XXAA, XXBB, XXCC, XXDD
* </pre>
*
* This code has been developed by the SIB for use in the AWIPS2 system.
@ -26,6 +26,12 @@
package gov.noaa.nws.ncep.common.dataplugin.ncuair.dao;
import gov.noaa.nws.ncep.common.dataplugin.ncuair.NcUairLiftedIndex;
import gov.noaa.nws.ncep.common.dataplugin.ncuair.NcUairMaxWind;
import gov.noaa.nws.ncep.common.dataplugin.ncuair.NcUairObsLevels;
import gov.noaa.nws.ncep.common.dataplugin.ncuair.NcUairRecord;
import gov.noaa.nws.ncep.common.dataplugin.ncuair.NcUairTropopause;
import java.io.File;
import java.util.HashMap;
import java.util.Iterator;
@ -37,109 +43,213 @@ import com.raytheon.uf.common.pointdata.PointDataContainer;
import com.raytheon.uf.common.pointdata.PointDataDescription;
import com.raytheon.uf.common.pointdata.PointDataView;
import gov.noaa.nws.ncep.common.dataplugin.ncuair.NcUairLiftedIndex;
import gov.noaa.nws.ncep.common.dataplugin.ncuair.NcUairMaxWind;
import gov.noaa.nws.ncep.common.dataplugin.ncuair.NcUairObsLevels;
import gov.noaa.nws.ncep.common.dataplugin.ncuair.NcUairTropopause;
import gov.noaa.nws.ncep.common.dataplugin.ncuair.NcUairRecord;
public class NcUairToPointData {
private static final String RAW_DATA = "RAWDATA";
private static final String RAW_DATA = "RAWDATA";
private static final String UTC = "UTC";
private static final String REPORT_TYPE = "REPORTTYPE";
private static final String STATION_ID = "STATIONID";
private static final String ISSUE_TIME = "ISSUETIME";
private static final String OBS_TIME = "OBSTIME";
private static final String OBS_TIME = "OBSTIME";
private static final String SYNOPTIC_TIME = "SYNOPTIME";
private static final String DATAURI = "DATAURI";
private static final String DATA_TYPE = "DATATYPE";
private static final String DATA_TYPE = "DATATYPE";
private static final String CORRECTION_INDICATOR = "CORR";
private static final String WMO_HEADER = "WMOHEADER";
private static final String STATION_NUMBER = "STNUM";
private static final String LATITUDE = "LATITUDE";
private static final String LONGITUDE = "LONGITUDE";
private static final String ELEVATION = "ELEVATION";
private static final String NIL = "NIL";
private static final String TTAA_PRES = "TTAA_PRES";
private static final String TTAA_TEMP = "TTAA_TEMP";
private static final String TTAA_DWPT = "TTAA_DWPT";
private static final String TTAA_DRCT = "TTAA_DRCT";
private static final String TTAA_SPED = "TTAA_SPED";
private static final String TTAA_HGHT = "TTAA_HGHT";
private static final String TTBB_PRES = "TTBB_PRES";
private static final String TTBB_TEMP = "TTBB_TEMP";
private static final String TTBB_DWPT = "TTBB_DWPT";
private static final String TTCC_PRES = "TTCC_PRES";
private static final String TTCC_TEMP = "TTCC_TEMP";
private static final String TTCC_DWPT = "TTCC_DWPT";
private static final String TTCC_DRCT = "TTCC_DRCT";
private static final String TTCC_SPED = "TTCC_SPED";
private static final String TTCC_HGHT = "TTCC_HGHT";
private static final String TTDD_PRES = "TTDD_PRES";
private static final String TTDD_TEMP = "TTDD_TEMP";
private static final String TTDD_DWPT = "TTDD_DWPT";
private static final String PPAA_PRES = "PPAA_PRES";
private static final String PPAA_TEMP = "PPAA_TEMP";
private static final String PPAA_DWPT = "PPAA_DWPT";
private static final String PPAA_DRCT = "PPAA_DRCT";
private static final String PPAA_SPED = "PPAA_SPED";
private static final String PPAA_DRCT = "PPAA_DRCT";
private static final String PPAA_SPED = "PPAA_SPED";
private static final String PPAA_HGHT = "PPAA_HGHT";
private static final String PPBB_DRCT = "PPBB_DRCT";
private static final String PPBB_SPED = "PPBB_SPED";
private static final String PPBB_HGHT = "PPBB_HGHT";
private static final String PPCC_PRES = "PPCC_PRES";
private static final String PPCC_TEMP = "PPCC_TEMP";
private static final String PPCC_DWPT = "PPCC_DWPT";
private static final String PPCC_DRCT = "PPCC_DRCT";
private static final String PPCC_SPED = "PPCC_SPED";
private static final String PPCC_HGHT = "PPCC_HGHT";
private static final String PPDD_DRCT = "PPDD_DRCT";
private static final String PPDD_SPED = "PPDD_SPED";
private static final String PPDD_HGHT = "PPDD_HGHT";
private static final String TROP_PRES = "TROP_PRES";
private static final String TROP_TEMP = "TROP_TEMP";
private static final String TROP_DWPT = "TROP_DWPT";
private static final String TROP_DRCT = "TROP_DRCT";
private static final String TROP_SPED = "TROP_SPED";
private static final String WMAX_PRES = "WMAX_PRES";
private static final String WMAX_DRCT = "WMAX_DRCT";
private static final String WMAX_SPED = "WMAX_SPED";
private static final String WMAX_LO_SHEAR = "WMAX_LO_SHEAR";
private static final String WMAX_HI_SHEAR = "WMAX_HI_SHEAR";
private static final String TTAA_LIFT = "TTAA_LIFT";
private static final String TTAA_LO_MEAN_DRCT = "TTAA_LO_MEAN_DRCT";
private static final String TTAA_LO_MEAN_SPED = "TTAA_LO_MEAN_SPED";
private static final String TTAA_HI_MEAN_DRCT = "TTAA_HI_MEAN_DRCT";
private static final String TTAA_HI_MEAN_SPED = "TTAA_HI_MEAN_SPED";
private static final String TTBB_LIFT = "TTBB_LIFT";
private static final String TTBB_LO_MEAN_DRCT = "TTBB_LO_MEAN_DRCT";
private static final String TTBB_LO_MEAN_SPED = "TTBB_LO_MEAN_SPED";
private static final String TTBB_HI_MEAN_DRCT = "TTBB_HI_MEAN_DRCT";
private static final String TTBB_HI_MEAN_SPED = "TTBB_HI_MEAN_SPED";
private enum REPORTTYPE {TTAA, TTBB, TTCC, TTDD, PPAA, PPBB, PPCC, PPDD,
UUAA, UUBB, UUCC, UUDD, XXAA, XXBB, XXCC, XXDD};
private static final String XXAA_PRES = "XXAA_PRES";
private static final String XXAA_TEMP = "XXAA_TEMP";
private static final String XXAA_DWPT = "XXAA_DWPT";
private static final String XXAA_DRCT = "XXAA_DRCT";
private static final String XXAA_SPED = "XXAA_SPED";
private static final String XXAA_HGHT = "XXAA_HGHT";
private static final String XXBB_PRES = "XXBB_PRES";
private static final String XXBB_TEMP = "XXBB_TEMP";
private static final String XXBB_DWPT = "XXBB_DWPT";
private static final String XXCC_PRES = "XXCC_PRES";
private static final String XXCC_TEMP = "XXCC_TEMP";
private static final String XXCC_DWPT = "XXCC_DWPT";
private static final String XXCC_DRCT = "XXCC_DRCT";
private static final String XXCC_SPED = "XXCC_SPED";
private static final String XXCC_HGHT = "XXCC_HGHT";
private static final String XXDD_PRES = "XXDD_PRES";
private static final String XXDD_TEMP = "XXDD_TEMP";
private static final String XXDD_DWPT = "XXDD_DWPT";
private enum REPORTTYPE {
TTAA, TTBB, TTCC, TTDD, PPAA, PPBB, PPCC, PPDD, UUAA, UUBB, UUCC, UUDD, XXAA, XXBB, XXCC, XXDD
};
/**
* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! It is important to
* keep this up to date or risk breaking backwards compatibility
* uu
* keep this up to date or risk breaking backwards compatibility uu
*/
private static final String[] ALL_PARAMS = { RAW_DATA, UTC, REPORT_TYPE, STATION_ID,
ISSUE_TIME, OBS_TIME, SYNOPTIC_TIME, DATAURI, DATA_TYPE, CORRECTION_INDICATOR,
WMO_HEADER, STATION_NUMBER, LATITUDE, LONGITUDE, ELEVATION, NIL,
TTAA_PRES, TTAA_TEMP, TTAA_DWPT, TTAA_DRCT, TTAA_SPED, TTAA_HGHT,
TTBB_PRES, TTBB_TEMP, TTBB_DWPT,
TTCC_PRES, TTCC_TEMP, TTCC_DWPT, TTCC_DRCT, TTCC_SPED, TTCC_HGHT,
TTDD_PRES, TTDD_TEMP, TTDD_DWPT,
PPAA_PRES, PPAA_TEMP, PPAA_DWPT, PPAA_DRCT, PPAA_SPED, PPAA_HGHT,
PPBB_DRCT, PPBB_SPED, PPBB_HGHT,
PPCC_PRES, PPCC_TEMP, PPCC_DWPT, PPCC_DRCT, PPCC_SPED, PPCC_HGHT,
PPDD_DRCT, PPDD_SPED, PPDD_HGHT,
TROP_PRES, TROP_TEMP, TROP_DWPT, TROP_DRCT, TROP_SPED, WMAX_PRES,
WMAX_DRCT, WMAX_SPED, WMAX_LO_SHEAR, WMAX_HI_SHEAR,
TTAA_LIFT, TTAA_LO_MEAN_DRCT, TTAA_LO_MEAN_SPED, TTAA_HI_MEAN_DRCT, TTAA_HI_MEAN_SPED,
TTBB_LIFT, TTBB_LO_MEAN_DRCT, TTBB_LO_MEAN_SPED, TTBB_HI_MEAN_DRCT, TTAA_HI_MEAN_SPED,};
private static final String[] ALL_PARAMS = { RAW_DATA, UTC, REPORT_TYPE,
STATION_ID, ISSUE_TIME, OBS_TIME, SYNOPTIC_TIME, DATAURI,
DATA_TYPE, CORRECTION_INDICATOR, WMO_HEADER, STATION_NUMBER,
LATITUDE, LONGITUDE, ELEVATION, NIL, TTAA_PRES, TTAA_TEMP,
TTAA_DWPT, TTAA_DRCT, TTAA_SPED, TTAA_HGHT, TTBB_PRES, TTBB_TEMP,
TTBB_DWPT, TTCC_PRES, TTCC_TEMP, TTCC_DWPT, TTCC_DRCT, TTCC_SPED,
TTCC_HGHT, TTDD_PRES, TTDD_TEMP, TTDD_DWPT, PPAA_PRES, PPAA_TEMP,
PPAA_DWPT, PPAA_DRCT, PPAA_SPED, PPAA_HGHT, PPBB_DRCT, PPBB_SPED,
PPBB_HGHT, PPCC_PRES, PPCC_TEMP, PPCC_DWPT, PPCC_DRCT, PPCC_SPED,
PPCC_HGHT, PPDD_DRCT, PPDD_SPED, PPDD_HGHT, TROP_PRES, TROP_TEMP,
TROP_DWPT, TROP_DRCT, TROP_SPED, WMAX_PRES, WMAX_DRCT, WMAX_SPED,
WMAX_LO_SHEAR, WMAX_HI_SHEAR, TTAA_LIFT, TTAA_LO_MEAN_DRCT,
TTAA_LO_MEAN_SPED, TTAA_HI_MEAN_DRCT, TTAA_HI_MEAN_SPED, TTBB_LIFT,
TTBB_LO_MEAN_DRCT, TTBB_LO_MEAN_SPED, TTBB_HI_MEAN_DRCT,
TTAA_HI_MEAN_SPED, XXAA_PRES, XXAA_TEMP, XXAA_DWPT, XXAA_DRCT,
XXAA_SPED, XXAA_HGHT, XXBB_PRES, XXBB_TEMP, XXBB_DWPT, XXCC_PRES,
XXCC_TEMP, XXCC_DWPT, XXCC_DRCT, XXCC_SPED, XXCC_HGHT, XXDD_PRES,
XXDD_TEMP, XXDD_DWPT };
public static final String ALL_PARAMS_LIST;
static {
@ -171,8 +281,9 @@ public class NcUairToPointData {
}
public PluginDataObject[] toPointData(PluginDataObject[] pdo) {
//long curTime = System.currentTimeMillis();
//System.out.println("H5 uair toPointData entered, pdo size = "+ pdo.length);
// long curTime = System.currentTimeMillis();
// System.out.println("H5 uair toPointData entered, pdo size = "+
// pdo.length);
if (pdo.length > 0) {
Map<File, PointDataContainer> pointMap = new HashMap<File, PointDataContainer>();
@ -181,7 +292,7 @@ public class NcUairToPointData {
continue;
File f = this.dao.getFullFilePath(p);
PointDataContainer pdc = pointMap.get(f);
if (pdc == null) {
pdc = PointDataContainer.build(this.pdd);
pointMap.put(f, pdc);
@ -189,310 +300,389 @@ public class NcUairToPointData {
NcUairRecord mr = (NcUairRecord) p;
PointDataView pdv = buildView(pdc, mr);
mr.setPointDataView(pdv);
}
}
//long enqueueTime = System.currentTimeMillis();
//double latency = (enqueueTime-curTime) ;
//System.out.println("H5 uair toPointData spend "+ latency);
// long enqueueTime = System.currentTimeMillis();
// double latency = (enqueueTime-curTime) ;
// System.out.println("H5 uair toPointData spend "+ latency);
return pdo;
}
private PointDataView buildView(PointDataContainer container,
NcUairRecord record) {
PointDataView pdv = container.append();
pdv.setString(STATION_ID, record.getStationId());
int maxManLevel = -1;
int maxSigTempLevel = -1;
int maxSigWindLevel = -1;
int maxWmaxLevel = -1;
int maxTropLevel = -1;
int maxMiscLevel = -1;
Dimension [] dims = pdd.dimensions;
for(Dimension d : dims) {
if("maxManLevel".equals(d.getDimensionName())) {
Dimension[] dims = pdd.dimensions;
for (Dimension d : dims) {
if ("maxManLevel".equals(d.getDimensionName())) {
maxManLevel = d.getDimensionLength();
}
if("maxSigTempLevel".equals(d.getDimensionName())) {
if ("maxSigTempLevel".equals(d.getDimensionName())) {
maxSigTempLevel = d.getDimensionLength();
}
if("maxSigWindLevel".equals(d.getDimensionName())) {
if ("maxSigWindLevel".equals(d.getDimensionName())) {
maxSigWindLevel = d.getDimensionLength();
}
if("maxWmaxLevel".equals(d.getDimensionName())) {
if ("maxWmaxLevel".equals(d.getDimensionName())) {
maxWmaxLevel = d.getDimensionLength();
}
if("maxTropLevel".equals(d.getDimensionName())) {
if ("maxTropLevel".equals(d.getDimensionName())) {
maxTropLevel = d.getDimensionLength();
}
if("maxMiscLevel".equals(d.getDimensionName())) {
if ("maxMiscLevel".equals(d.getDimensionName())) {
maxMiscLevel = d.getDimensionLength();
}
}
if (record.getCorr() != null) {
pdv.setString(CORRECTION_INDICATOR,record.getCorr());
pdv.setString(CORRECTION_INDICATOR, record.getCorr());
} else {
pdv.setString(CORRECTION_INDICATOR, "");
}
if (record.getLocation()!=null) {
pdv.setFloat(LATITUDE, (float) record.getLatitude());
pdv.setFloat(LONGITUDE, (float) record.getLongitude());
if(record.getElevation()!=null)
pdv.setFloat(ELEVATION, (float) record.getElevation());
if (record.getLocation() != null) {
pdv.setFloat(LATITUDE, (float) record.getLatitude());
pdv.setFloat(LONGITUDE, (float) record.getLongitude());
if (record.getElevation() != null)
pdv.setFloat(ELEVATION, (float) record.getElevation());
}
if(record.getObsTime()!=null)
pdv.setLong(OBS_TIME, record.getObsTime().getTime().getTime());
if(record.getSynopticTime()!=null)
pdv.setLong(SYNOPTIC_TIME, record.getSynopticTime().getTime().getTime());
if(record.getIssueTime()!=null)
pdv.setLong(ISSUE_TIME, record.getIssueTime().getTime().getTime());
pdv.setString(DATAURI, record.getDataURI());
pdv.setString(DATA_TYPE, record.getDataType());
if (record.getObsTime() != null)
pdv.setLong(OBS_TIME, record.getObsTime().getTime().getTime());
if (record.getSynopticTime() != null)
pdv.setLong(SYNOPTIC_TIME, record.getSynopticTime().getTime()
.getTime());
if (record.getIssueTime() != null)
pdv.setLong(ISSUE_TIME, record.getIssueTime().getTime().getTime());
pdv.setString(DATAURI, record.getDataURI());
pdv.setString(DATA_TYPE, record.getDataType());
pdv.setString(REPORT_TYPE, record.getReportType());
pdv.setString(WMO_HEADER, record.getWmoHeader());
pdv.setString(STATION_NUMBER, record.getStnum());
if(record.getNil()!=null)
pdv.setString(NIL, record.getNil().toString());
if (record.getNil() != null)
pdv.setString(NIL, record.getNil().toString());
pdv.setInt(UTC, record.getUTC());
pdv.setString(RAW_DATA, record.getBullMessage());
int index;
if ( record.getObsLevels() != null ) {
if (record.getObsLevels() != null) {
Iterator<NcUairObsLevels> sls = record.getObsLevels().iterator();
switch ( REPORTTYPE.valueOf(record.getDataType()) ) {
switch (REPORTTYPE.valueOf(record.getDataType())) {
case TTAA:
case UUAA:
case XXAA:
index = 0;
if (sls !=null ) {
while (sls.hasNext()) {
NcUairObsLevels sl = sls.next();
if ( sl.getPres() > 0 && index < maxManLevel ) {
pdv.setFloat(TTAA_PRES, sl.getPres(), index);
pdv.setFloat(TTAA_HGHT, sl.getHght(), index);
pdv.setFloat(TTAA_TEMP, sl.getTemp(), index);
pdv.setFloat(TTAA_DWPT, sl.getDwpt(), index);
pdv.setFloat(TTAA_DRCT, sl.getDrct(), index);
pdv.setFloat(TTAA_SPED, sl.getSped(), index);
index++;
}
}
pdv.setInt("numTTAA", index);
if (sls != null) {
while (sls.hasNext()) {
NcUairObsLevels sl = sls.next();
if (sl.getPres() > 0 && index < maxManLevel) {
pdv.setFloat(TTAA_PRES, sl.getPres(), index);
pdv.setFloat(TTAA_HGHT, sl.getHght(), index);
pdv.setFloat(TTAA_TEMP, sl.getTemp(), index);
pdv.setFloat(TTAA_DWPT, sl.getDwpt(), index);
pdv.setFloat(TTAA_DRCT, sl.getDrct(), index);
pdv.setFloat(TTAA_SPED, sl.getSped(), index);
index++;
}
}
pdv.setInt("numTTAA", index);
}
break;
case TTBB:
case XXAA:
index = 0;
if (sls != null) {
while (sls.hasNext()) {
NcUairObsLevels sl = sls.next();
if (sl.getPres() > 0 && index < maxManLevel) {
pdv.setFloat(XXAA_PRES, sl.getPres(), index);
pdv.setFloat(XXAA_HGHT, sl.getHght(), index);
pdv.setFloat(XXAA_TEMP, sl.getTemp(), index);
pdv.setFloat(XXAA_DWPT, sl.getDwpt(), index);
pdv.setFloat(XXAA_DRCT, sl.getDrct(), index);
pdv.setFloat(XXAA_SPED, sl.getSped(), index);
index++;
}
}
pdv.setInt("numXXAA", index);
}
break;
case TTBB:
case UUBB:
index = 0;
if (sls != null) {
while (sls.hasNext()) {
NcUairObsLevels sl = sls.next();
if (sl.getPres() > 0 && index < maxSigTempLevel) {
pdv.setFloat(TTBB_PRES, sl.getPres(), index);
pdv.setFloat(TTBB_TEMP, sl.getTemp(), index);
pdv.setFloat(TTBB_DWPT, sl.getDwpt(), index);
index++;
}
}
pdv.setInt("numTTBB", index);
}
break;
case XXBB:
index = 0;
if ( sls != null ) {
while (sls.hasNext() ) {
NcUairObsLevels sl = sls.next();
if ( sl.getPres() > 0 && index < maxSigTempLevel ) {
pdv.setFloat(TTBB_PRES, sl.getPres(), index);
pdv.setFloat(TTBB_TEMP, sl.getTemp(), index);
pdv.setFloat(TTBB_DWPT, sl.getDwpt(), index);
index++;
}
}
pdv.setInt("numTTBB", index);
}
break;
index = 0;
if (sls != null) {
while (sls.hasNext()) {
NcUairObsLevels sl = sls.next();
if (sl.getPres() > 0 && index < maxSigTempLevel) {
pdv.setFloat(XXBB_PRES, sl.getPres(), index);
pdv.setFloat(XXBB_TEMP, sl.getTemp(), index);
pdv.setFloat(XXBB_DWPT, sl.getDwpt(), index);
index++;
}
}
pdv.setInt("numXXBB", index);
}
break;
case TTCC:
case UUCC:
case XXCC:
index = 0;
if ( sls != null ) {
while (sls.hasNext() ) {
NcUairObsLevels sl = sls.next();
if ( sl.getPres() > 0 && index < maxManLevel ) {
pdv.setFloat(TTCC_PRES, sl.getPres(), index);
pdv.setFloat(TTCC_HGHT, sl.getHght(), index);
pdv.setFloat(TTCC_TEMP, sl.getTemp(), index);
pdv.setFloat(TTCC_DWPT, sl.getDwpt(), index);
pdv.setFloat(TTCC_DRCT, sl.getDrct(), index);
pdv.setFloat(TTCC_SPED, sl.getSped(), index);
index++;
}
}
pdv.setInt("numTTCC",index);
}
break;
index = 0;
if (sls != null) {
while (sls.hasNext()) {
NcUairObsLevels sl = sls.next();
if (sl.getPres() > 0 && index < maxManLevel) {
pdv.setFloat(TTCC_PRES, sl.getPres(), index);
pdv.setFloat(TTCC_HGHT, sl.getHght(), index);
pdv.setFloat(TTCC_TEMP, sl.getTemp(), index);
pdv.setFloat(TTCC_DWPT, sl.getDwpt(), index);
pdv.setFloat(TTCC_DRCT, sl.getDrct(), index);
pdv.setFloat(TTCC_SPED, sl.getSped(), index);
index++;
}
}
pdv.setInt("numTTCC", index);
}
break;
case XXCC:
index = 0;
if (sls != null) {
while (sls.hasNext()) {
NcUairObsLevels sl = sls.next();
if (sl.getPres() > 0 && index < maxManLevel) {
pdv.setFloat(XXCC_PRES, sl.getPres(), index);
pdv.setFloat(XXCC_HGHT, sl.getHght(), index);
pdv.setFloat(XXCC_TEMP, sl.getTemp(), index);
pdv.setFloat(XXCC_DWPT, sl.getDwpt(), index);
pdv.setFloat(XXCC_DRCT, sl.getDrct(), index);
pdv.setFloat(XXCC_SPED, sl.getSped(), index);
index++;
}
}
pdv.setInt("numXXCC", index);
}
break;
case TTDD:
case UUDD:
index = 0;
if (sls != null) {
while (sls.hasNext()) {
NcUairObsLevels sl = sls.next();
if (sl.getPres() > 0 && index < maxSigTempLevel) {
pdv.setFloat(TTDD_PRES, sl.getPres(), index);
pdv.setFloat(TTDD_TEMP, sl.getTemp(), index);
pdv.setFloat(TTDD_DWPT, sl.getDwpt(), index);
index++;
}
}
pdv.setInt("numTTDD", index);
}
break;
case XXDD:
index = 0;
if ( sls != null ) {
while (sls.hasNext() ) {
NcUairObsLevels sl = sls.next();
if ( sl.getPres() > 0 && index < maxSigTempLevel ) {
pdv.setFloat(TTDD_PRES, sl.getPres(), index);
pdv.setFloat(TTDD_TEMP, sl.getTemp(), index);
pdv.setFloat(TTDD_DWPT, sl.getDwpt(), index);
index++;
}
}
pdv.setInt("numTTDD", index);
}
break;
index = 0;
if (sls != null) {
while (sls.hasNext()) {
NcUairObsLevels sl = sls.next();
if (sl.getPres() > 0 && index < maxSigTempLevel) {
pdv.setFloat(XXDD_PRES, sl.getPres(), index);
pdv.setFloat(XXDD_TEMP, sl.getTemp(), index);
pdv.setFloat(XXDD_DWPT, sl.getDwpt(), index);
index++;
}
}
pdv.setInt("numXXDD", index);
}
break;
case PPAA:
index = 0;
if ( sls != null ) {
while (sls.hasNext()) {
NcUairObsLevels sl = sls.next();
if ( sl.getPres() > 0 && index < maxManLevel ) {
pdv.setFloat(PPAA_PRES, sl.getPres(), index);
pdv.setFloat(PPAA_HGHT, sl.getHght(), index);
pdv.setFloat(PPAA_TEMP, sl.getTemp(), index);
pdv.setFloat(PPAA_DWPT, sl.getDwpt(), index);
pdv.setFloat(PPAA_DRCT, sl.getDrct(), index);
pdv.setFloat(PPAA_SPED, sl.getSped(), index);
index++;
}
}
pdv.setInt("numPPAA", index);
}
break;
index = 0;
if (sls != null) {
while (sls.hasNext()) {
NcUairObsLevels sl = sls.next();
if (sl.getPres() > 0 && index < maxManLevel) {
pdv.setFloat(PPAA_PRES, sl.getPres(), index);
pdv.setFloat(PPAA_HGHT, sl.getHght(), index);
pdv.setFloat(PPAA_TEMP, sl.getTemp(), index);
pdv.setFloat(PPAA_DWPT, sl.getDwpt(), index);
pdv.setFloat(PPAA_DRCT, sl.getDrct(), index);
pdv.setFloat(PPAA_SPED, sl.getSped(), index);
index++;
}
}
pdv.setInt("numPPAA", index);
}
break;
case PPBB:
index = 0;
if ( sls != null ) {
while (sls.hasNext()) {
NcUairObsLevels sl = sls.next();
if ( sl.getHght() > 0 && index < maxSigWindLevel ) {
pdv.setFloat(PPBB_HGHT, sl.getHght(), index);
pdv.setFloat(PPBB_DRCT, sl.getDrct(), index);
pdv.setFloat(PPBB_SPED, sl.getSped(), index);
index++;
}
}
pdv.setInt ("numPPBB", index);
}
break;
index = 0;
if (sls != null) {
while (sls.hasNext()) {
NcUairObsLevels sl = sls.next();
if (sl.getHght() > 0 && index < maxSigWindLevel) {
pdv.setFloat(PPBB_HGHT, sl.getHght(), index);
pdv.setFloat(PPBB_DRCT, sl.getDrct(), index);
pdv.setFloat(PPBB_SPED, sl.getSped(), index);
index++;
}
}
pdv.setInt("numPPBB", index);
}
break;
case PPCC:
index = 0;
if (sls !=null ) {
while (sls.hasNext()) {
NcUairObsLevels sl = sls.next();
if ( (sl.getPres() > 0 || sl.getHght() > 0 ) && index < maxManLevel ) {
pdv.setFloat(PPCC_PRES, sl.getPres(), index);
pdv.setFloat(PPCC_HGHT, sl.getHght(), index);
pdv.setFloat(PPCC_TEMP, sl.getTemp(), index);
pdv.setFloat(PPCC_DWPT, sl.getDwpt(), index);
pdv.setFloat(PPCC_DRCT, sl.getDrct(), index);
pdv.setFloat(PPCC_SPED, sl.getSped(), index);
index++;
index = 0;
if (sls != null) {
while (sls.hasNext()) {
NcUairObsLevels sl = sls.next();
if ((sl.getPres() > 0 || sl.getHght() > 0)
&& index < maxManLevel) {
pdv.setFloat(PPCC_PRES, sl.getPres(), index);
pdv.setFloat(PPCC_HGHT, sl.getHght(), index);
pdv.setFloat(PPCC_TEMP, sl.getTemp(), index);
pdv.setFloat(PPCC_DWPT, sl.getDwpt(), index);
pdv.setFloat(PPCC_DRCT, sl.getDrct(), index);
pdv.setFloat(PPCC_SPED, sl.getSped(), index);
index++;
}
}
pdv.setInt("numPPCC", index);
}
break;
}
}
pdv.setInt ("numPPCC", index);
}
break;
case PPDD:
index = 0;
if (sls !=null ) {
while (sls.hasNext()) {
NcUairObsLevels sl = sls.next();
if ( sl.getHght() > 0 && index < maxSigWindLevel ) {
pdv.setFloat(PPDD_HGHT, sl.getHght(), index);
pdv.setFloat(PPDD_DRCT, sl.getDrct(), index);
pdv.setFloat(PPDD_SPED, sl.getSped(), index);
index++;
}
index = 0;
if (sls != null) {
while (sls.hasNext()) {
NcUairObsLevels sl = sls.next();
if (sl.getHght() > 0 && index < maxSigWindLevel) {
pdv.setFloat(PPDD_HGHT, sl.getHght(), index);
pdv.setFloat(PPDD_DRCT, sl.getDrct(), index);
pdv.setFloat(PPDD_SPED, sl.getSped(), index);
index++;
}
}
pdv.setInt ("numPPDD", index);
}
}
pdv.setInt("numPPDD", index);
}
}
}
}
if ( record.getTropopause () != null ) {
Iterator<NcUairTropopause> trops = record.getTropopause().iterator();
index = 0;
if (trops != null) {
while (trops.hasNext()) {
NcUairTropopause trop = trops.next();
if ( trop.getPres() > 0 && index < maxTropLevel ) {
pdv.setFloat(TROP_PRES, trop.getPres(), index);
pdv.setFloat(TROP_TEMP, trop.getTemp(), index);
pdv.setFloat(TROP_DWPT, trop.getDwpt(), index);
pdv.setFloat(TROP_DRCT, trop.getDrct(), index);
pdv.setFloat(TROP_SPED, trop.getSped(), index);
index++;
}
}
pdv.setInt ("numTrop", index);
}
}
if (record.getTropopause() != null) {
Iterator<NcUairTropopause> trops = record.getTropopause()
.iterator();
index = 0;
if (trops != null) {
while (trops.hasNext()) {
NcUairTropopause trop = trops.next();
if (trop.getPres() > 0 && index < maxTropLevel) {
pdv.setFloat(TROP_PRES, trop.getPres(), index);
pdv.setFloat(TROP_TEMP, trop.getTemp(), index);
pdv.setFloat(TROP_DWPT, trop.getDwpt(), index);
pdv.setFloat(TROP_DRCT, trop.getDrct(), index);
pdv.setFloat(TROP_SPED, trop.getSped(), index);
index++;
}
}
pdv.setInt("numTrop", index);
}
}
if (record.getMaxWind() != null ) {
Iterator<NcUairMaxWind> wmaxs = record.getMaxWind().iterator();
index = 0;
if (wmaxs != null) {
while (wmaxs.hasNext()) {
NcUairMaxWind wmax = wmaxs.next();
if ( wmax.getPres() > 0 && index < maxWmaxLevel ) {
pdv.setFloat(WMAX_PRES, wmax.getPres(), index);
pdv.setFloat(WMAX_DRCT, wmax.getDrct(), index);
pdv.setFloat(WMAX_SPED, wmax.getSped(), index);
pdv.setFloat(WMAX_LO_SHEAR, wmax.getLoShear(), index);
pdv.setFloat(WMAX_HI_SHEAR, wmax.getHiShear(), index);
index++;
}
}
pdv.setInt ("numWmax", index);
}
}
if (record.getMaxWind() != null) {
Iterator<NcUairMaxWind> wmaxs = record.getMaxWind().iterator();
index = 0;
if (wmaxs != null) {
while (wmaxs.hasNext()) {
NcUairMaxWind wmax = wmaxs.next();
if (wmax.getPres() > 0 && index < maxWmaxLevel) {
pdv.setFloat(WMAX_PRES, wmax.getPres(), index);
pdv.setFloat(WMAX_DRCT, wmax.getDrct(), index);
pdv.setFloat(WMAX_SPED, wmax.getSped(), index);
pdv.setFloat(WMAX_LO_SHEAR, wmax.getLoShear(), index);
pdv.setFloat(WMAX_HI_SHEAR, wmax.getHiShear(), index);
index++;
}
}
pdv.setInt("numWmax", index);
}
}
if (record.getLiftedIndex() != null) {
Iterator<NcUairLiftedIndex> miscs = record.getLiftedIndex().iterator();
index = 0;
if ( miscs != null) {
while (miscs.hasNext()) {
NcUairLiftedIndex misc = miscs.next();
if ( index < maxMiscLevel ) {
if ( record.getDataType().equals("TTAA") ) {
pdv.setFloat(TTAA_LIFT, misc.getLiTemp(), index);
pdv.setFloat(TTAA_LO_MEAN_DRCT, misc.getLoDrct(), index);
pdv.setFloat(TTAA_LO_MEAN_SPED, misc.getLoSped(), index);
pdv.setFloat(TTAA_HI_MEAN_DRCT, misc.getHiDrct(), index);
pdv.setFloat(TTAA_HI_MEAN_SPED, misc.getHiSped(), index);
} else {
pdv.setFloat(TTBB_LIFT, misc.getLiTemp(), index);
pdv.setFloat(TTBB_LO_MEAN_DRCT, misc.getLoDrct(), index);
pdv.setFloat(TTBB_LO_MEAN_SPED, misc.getLoSped(), index);
pdv.setFloat(TTBB_HI_MEAN_DRCT, misc.getHiDrct(), index);
pdv.setFloat(TTBB_HI_MEAN_SPED, misc.getHiSped(), index);
}
index++;
}
}
if ( record.getDataType().equals ("TTAA")) {
pdv.setInt ("numMiscTTAA", index);
} else {
pdv.setInt ("numMiscTTBB", index);
}
}
}
return pdv;
if (record.getLiftedIndex() != null) {
Iterator<NcUairLiftedIndex> miscs = record.getLiftedIndex()
.iterator();
index = 0;
if (miscs != null) {
while (miscs.hasNext()) {
NcUairLiftedIndex misc = miscs.next();
if (index < maxMiscLevel) {
if (record.getDataType().equals("TTAA")) {
pdv.setFloat(TTAA_LIFT, misc.getLiTemp(), index);
pdv.setFloat(TTAA_LO_MEAN_DRCT, misc.getLoDrct(),
index);
pdv.setFloat(TTAA_LO_MEAN_SPED, misc.getLoSped(),
index);
pdv.setFloat(TTAA_HI_MEAN_DRCT, misc.getHiDrct(),
index);
pdv.setFloat(TTAA_HI_MEAN_SPED, misc.getHiSped(),
index);
} else {
pdv.setFloat(TTBB_LIFT, misc.getLiTemp(), index);
pdv.setFloat(TTBB_LO_MEAN_DRCT, misc.getLoDrct(),
index);
pdv.setFloat(TTBB_LO_MEAN_SPED, misc.getLoSped(),
index);
pdv.setFloat(TTBB_HI_MEAN_DRCT, misc.getHiDrct(),
index);
pdv.setFloat(TTBB_HI_MEAN_SPED, misc.getHiSped(),
index);
}
index++;
}
}
if (record.getDataType().equals("TTAA")) {
pdv.setInt("numMiscTTAA", index);
} else {
pdv.setInt("numMiscTTBB", index);
}
}
}
return pdv;
}
}

View file

@ -51,12 +51,26 @@ public class PressChange3Hr extends AbstractMetParameter implements javax.measur
Number n = (Number) new Integer(ptsy.getStringValue());
Amount ptsyAmount = new Amount(n, Unit.ONE);
Amount theP03CAmount = PRLibrary.prP03CAbsVal(p, ptsyAmount);
this.setAssociatedMetParam(copyDerivedPTSY(ptsy));
this.setValue(theP03CAmount);
} else {
this.setValueToMissing();
}
return this;
}
private PressureTendencySymbol copyDerivedPTSY(PressureTendencySymbol ptsy) {
PressureTendencySymbol cptsy = new PressureTendencySymbol();
cptsy.setDataTime(ptsy.getDataTime());
cptsy.setStringValue(ptsy.getStringValue());
cptsy.setUnit(ptsy.getUnit());
cptsy.setValidTime(ptsy.getValidTime());
return cptsy;
}
}

View file

@ -38,17 +38,8 @@ public class PressureChange3HrAndTendency extends AbstractMetParameter implement
Number n = (Number) new Integer(ptsy.getStringValue());
Amount ptsyAmount = new Amount(n, Unit.ONE);
Amount theP03CAmount = PRLibrary.prP03CAbsVal(p, ptsyAmount);
this.setValue(theP03CAmount);
this.setAssociatedMetParam(copyDerivedPTSY(ptsy));
// Works, ptsy values can be seen form here
// System.out.print("==> derive called: ptsy: " + ptsy.toString());
if (this.getAssociatedMetParam() == null) {
// System.out.print(": BUT assoc metparm IS NULL");
} else {
// System.out.println(": ASSOC metparm to string: " + this.getAssociatedMetParam().toString());
}
this.setValue(theP03CAmount);
} else {
this.setValueToMissing();

View file

@ -865,12 +865,23 @@ public final class PRLibrary {
ptsyValue = ptsy.getValue().intValue();
// Make into a negative value
if (ptsyValue > 0 && ptsyValue < 4) {
p03c = Math.abs(p03cavValue) * -1;
} // Positive value
else if (ptsyValue > 4 && ptsyValue < 8) {
// No sign
if (p03cavValue == 0.0) {
return new Amount(p03cavValue, SI.PASCAL);
}
// No sign
if (ptsyValue == 4) {
return new Amount(p03cavValue, SI.PASCAL);
}
// Make into positive value
if (ptsyValue >= 0 && ptsyValue <= 4) {
p03c = Math.abs(p03cavValue);
} // Make into a negative value
else if (ptsyValue > 4 && ptsyValue <= 8) {
p03c = Math.abs(p03cavValue) * -1;
}
return new Amount(p03c, SI.PASCAL);

View file

@ -154,6 +154,7 @@ public class NcSoundingLayer implements ISerializableObject, Cloneable {
}
/**
*
* @param pressure
* @param geoHeight
* @param temperature
@ -164,8 +165,7 @@ public class NcSoundingLayer implements ISerializableObject, Cloneable {
* @param windV
* @param omega
* @param specHumidity
* @param dewDepression
* @param dataType
* @param dpd
*/
public NcSoundingLayer(float pressure, float geoHeight, float temperature,
float dewpoint, float windSpeed, float windDirection, float windU,
@ -187,6 +187,25 @@ public class NcSoundingLayer implements ISerializableObject, Cloneable {
}
public NcSoundingLayer(float pressure, float geoHeight, float temperature,
float dewpoint, float windSpeed, float windDirection, float windU,
float windV, float omega, float specHumidity, float relativeHumidity) {
super();
this.pressure = pressure;
this.geoHeight = geoHeight;
this.temperature = temperature;
this.dewpoint = dewpoint;
this.windSpeed = windSpeed;
this.windDirection = windDirection;
this.windU = windU;
this.windV = windV;
this.omega = omega;
this.specHumidity = specHumidity;
this.relativeHumidity = relativeHumidity;
this.dpd = MISSING;
}
/*
* public String getDataType() { return dataType; }
*
@ -246,6 +265,24 @@ public class NcSoundingLayer implements ISerializableObject, Cloneable {
this.temperature = temperature;
}
/**
* @return the dpd
*/
public float getDpd() {
return dpd;
}
/**
* @param dpd
* the dpd to set
*/
public void setDpd(float dpd) {
if (dpd == LEGACY_MISSING)
this.dpd = MISSING;
else
this.dpd = dpd;
}
/**
* @return the dewpoint in Celsius
*/
@ -368,14 +405,6 @@ public class NcSoundingLayer implements ISerializableObject, Cloneable {
this.relativeHumidity = relativeHumidity;
}
public float getDpd() {
return dpd;
}
public void setDpd(float dpd) {
this.dpd = dpd;
}
private void computeUV() {
if (windSpeed > MISSING && windDirection > MISSING) {
Coordinate uv = uvComp(windSpeed, windDirection);
@ -460,6 +489,7 @@ public class NcSoundingLayer implements ISerializableObject, Cloneable {
@Override
public String toString() {
return "Pressure=" + getPressure() + "mb:Z=" + getGeoHeight() + "m:T="
+ getTemperature() + "\u00B0C:Td=" + getDewpoint()
+ "\u00B0C:WS=" + getWindSpeed() + "m/s:WD="

View file

@ -3951,6 +3951,18 @@
<wfo></wfo>
</station>
<station>
<stid>BTG</stid>
<stnnum>000208</stnnum>
<stnname>BATTLE_GROUND</stnname>
<state>WA</state>
<country>US</country>
<latitude>45.75</latitude>
<longitude>-122.59</longitude>
<elevation>0</elevation>
<priority>0</priority>
<wfo></wfo>
</station>
<station> <!-- REPLACED BY BTG (ABOVE); KEEP PDX ENTRY ONLY AS LONG AS NEEDED TO DECODE LEGACY PRODUCTS, THEN DISCARD -->
<stid>PDX</stid>
<stnnum>000208</stnnum>
<stnname>PORTLAND</stnname>

View file

@ -104,6 +104,13 @@
<regex>^FXCA20 KWBC (0[1-9]|[12][0-9]|3[01])([01][0-9]|2[0-3])([0-5][0-9]).*PMDCA.*</regex>
<regex>^FXAK02 KWNH (0[1-9]|[12][0-9]|3[01])([01][0-9]|2[0-3])([0-5][0-9]).*PMDAK.*</regex>
<regex>^NOUS42 KWBC (0[1-9]|[12][0-9]|3[01])([01][0-9]|2[0-3])([0-5][0-9]).+</regex>
<regex>^AACN01 CWAO (0[1-9]|[12][0-9]|3[01])([01][0-9]|2[0-3])([0-5][0-9]).+</regex>
<regex>^NOUS71 KWNO (0[1-9]|[12][0-9]|3[01])([01][0-9]|2[0-3])([0-5][0-9]).+</regex>
<regex>^NOUS71 KNES (0[1-9]|[12][0-9]|3[01])([01][0-9]|2[0-3])([0-5][0-9]).+</regex>
<regex>^NOUS72 KNES (0[1-9]|[12][0-9]|3[01])([01][0-9]|2[0-3])([0-5][0-9]).+</regex>
<regex>^NOUS72 KNCF (0[1-9]|[12][0-9]|3[01])([01][0-9]|2[0-3])([0-5][0-9]).+</regex>
<regex>^NOCN05 CWAO (0[1-9]|[12][0-9]|3[01])([01][0-9]|2[0-3])([0-5][0-9]).+</regex>
<regex>^NOXX01 KWBC (0[1-9]|[12][0-9]|3[01])([01][0-9]|2[0-3])([0-5][0-9]).+</regex>
<regex>^NOUS42 KWNO (0[1-9]|[12][0-9]|3[01])([01][0-9]|2[0-3])([0-5][0-9]).+</regex>
<regex>^NPXX10 KWBC (0[1-9]|[12][0-9]|3[01])([01][0-9]|2[0-3])([0-5][0-9]).+</regex>
<regex>^NPXX10 KWNO (0[1-9]|[12][0-9]|3[01])([01][0-9]|2[0-3])([0-5][0-9]).+</regex>

View file

@ -111,4 +111,31 @@
<parameter name="TTBB_LO_MEAN_SPED" numDims="2" type="FLOAT" unit="m/s" dimension="maxMiscLevel"/>
<parameter name="TTBB_HI_MEAN_DRCT" numDims="2" type="FLOAT" unit="degrees" dimension="maxMiscLevel"/>
<parameter name="TTBB_HI_MEAN_SPED" numDims="2" type="FLOAT" unit="m/s" dimension="maxMiscLevel"/>
<parameter name="numXXAA" numDims="1" type="INT" />
<parameter name="XXAA_PRES" numDims="2" type="FLOAT" unit="hPa" dimension="maxManLevel"/>
<parameter name="XXAA_TEMP" numDims="2" type="FLOAT" unit="Celsius" dimension="maxManLevel"/>
<parameter name="XXAA_DWPT" numDims="2" type="FLOAT" unit="Celsius" dimension="maxManLevel"/>
<parameter name="XXAA_DRCT" numDims="2" type="FLOAT" unit="degrees" dimension="maxManLevel"/>
<parameter name="XXAA_SPED" numDims="2" type="FLOAT" unit="m/s" dimension="maxManLevel"/>
<parameter name="XXAA_HGHT" numDims="2" type="FLOAT" unit="m" dimension="maxManLevel"/>
<parameter name="numXXCC" numDims="1" type="INT" />
<parameter name="XXCC_PRES" numDims="2" type="FLOAT" unit="hPa" dimension="maxManLevel"/>
<parameter name="XXCC_TEMP" numDims="2" type="FLOAT" unit="Celsius" dimension="maxManLevel"/>
<parameter name="XXCC_DWPT" numDims="2" type="FLOAT" unit="Celsius" dimension="maxManLevel"/>
<parameter name="XXCC_DRCT" numDims="2" type="FLOAT" unit="degrees" dimension="maxManLevel"/>
<parameter name="XXCC_SPED" numDims="2" type="FLOAT" unit="m/s" dimension="maxManLevel"/>
<parameter name="XXCC_HGHT" numDims="2" type="FLOAT" unit="m" dimension="maxManLevel"/>
<parameter name="numXXBB" numDims="1" type="INT" />
<parameter name="XXBB_PRES" numDims="2" type="FLOAT" unit="hPa" dimension="maxSigTempLevel"/>
<parameter name="XXBB_TEMP" numDims="2" type="FLOAT" unit="Celsius" dimension="maxSigTempLevel"/>
<parameter name="XXBB_DWPT" numDims="2" type="FLOAT" unit="Celsius" dimension="maxSigTempLevel"/>
<parameter name="numXXDD" numDims="1" type="INT" />
<parameter name="XXDD_PRES" numDims="2" type="FLOAT" unit="hPa" dimension="maxSigTempLevel"/>
<parameter name="XXDD_TEMP" numDims="2" type="FLOAT" unit="Celsius" dimension="maxSigTempLevel"/>
<parameter name="XXDD_DWPT" numDims="2" type="FLOAT" unit="Celsius" dimension="maxSigTempLevel"/>
</pointDataDescription>