Merge "Issue #1804 Remove empty data structures from radar hdf5. Change-Id: Ide845d6a5b308f61dc070f3acb01b96ed9a9288d" into omaha_13.3.1

Former-commit-id: d1e37c7803 [formerly 3b8e2ff0d3] [formerly adbe7b91cc [formerly 186e08826a1a9860bd38c5dd10465b38721218f2]]
Former-commit-id: adbe7b91cc
Former-commit-id: 3bad342dca
This commit is contained in:
Richard Peter 2013-03-20 13:32:33 -05:00 committed by Gerrit Code Review
commit 53d8ef7ed1
4 changed files with 131 additions and 110 deletions

View file

@ -35,6 +35,7 @@ import com.raytheon.uf.common.dataplugin.radar.RadarRecord;
import com.raytheon.uf.common.dataplugin.radar.level3.Layer;
import com.raytheon.uf.common.dataplugin.radar.level3.LinkedVector;
import com.raytheon.uf.common.dataplugin.radar.level3.LinkedVectorPacket;
import com.raytheon.uf.common.dataplugin.radar.level3.SymbologyBlock;
import com.raytheon.uf.common.dataplugin.radar.level3.SymbologyPacket;
import com.raytheon.uf.common.dataplugin.radar.level3.TextSymbolPacket;
import com.raytheon.uf.common.dataplugin.radar.level3.UnlinkedVector;
@ -78,6 +79,8 @@ import com.vividsolutions.jts.geom.Coordinate;
* Mar 16, 2009 askripsk Initial creation
* Jul 26, 2010 #3723 bkowal Now implements the magnification
* capability.
* Mar 19, 2013 1804 bsteffen Remove empty data structures from radar
* hdf5.
*
* </pre>
*
@ -335,26 +338,29 @@ public class RadarXYResource extends RadarImageResource<RadarXYDescriptor> {
linkedLines.clear();
unlinkedLines.clear();
points.clear();
for (Layer currLayer : radarRecord.getSymbologyBlock().getLayers()) {
for (SymbologyPacket currPacket : currLayer.getPackets()) {
if (currPacket instanceof TextSymbolPacket) {
TextSymbolPacket tsp = (TextSymbolPacket) currPacket;
this.screenStringMap.put(
new Coordinate(tsp.getI(), tsp.getJ()),
tsp.getTheText());
} else if (currPacket instanceof WindBarbPacket) {
WindBarbPacket pk = (WindBarbPacket) currPacket;
points.addAll(Arrays.asList(pk.getPoints()));
} else if (currPacket instanceof UnlinkedVectorPacket) {
UnlinkedVectorPacket pk = (UnlinkedVectorPacket) currPacket;
SymbologyBlock sb = radarRecord.getSymbologyBlock();
if (sb != null) {
for (Layer currLayer : sb.getLayers()) {
for (SymbologyPacket currPacket : currLayer.getPackets()) {
if (currPacket instanceof TextSymbolPacket) {
TextSymbolPacket tsp = (TextSymbolPacket) currPacket;
this.screenStringMap.put(
new Coordinate(tsp.getI(), tsp.getJ()),
tsp.getTheText());
} else if (currPacket instanceof WindBarbPacket) {
WindBarbPacket pk = (WindBarbPacket) currPacket;
points.addAll(Arrays.asList(pk.getPoints()));
} else if (currPacket instanceof UnlinkedVectorPacket) {
UnlinkedVectorPacket pk = (UnlinkedVectorPacket) currPacket;
this.unlinkedLines.addAll(pk.getVectors());
} else if (currPacket instanceof LinkedVectorPacket) {
LinkedVectorPacket pk = (LinkedVectorPacket) currPacket;
this.unlinkedLines.addAll(pk.getVectors());
} else if (currPacket instanceof LinkedVectorPacket) {
LinkedVectorPacket pk = (LinkedVectorPacket) currPacket;
this.linkedLines.addAll(pk.getVectors());
} else {
System.out.println("Need: " + currPacket.getClass());
this.linkedLines.addAll(pk.getVectors());
} else {
System.out.println("Need: " + currPacket.getClass());
}
}
}
}

View file

@ -86,9 +86,7 @@ import com.raytheon.uf.edex.wmo.message.WMOHeader;
* 2/14/2007 139 Phillippe Initial check-in. Refactor of initial implementation.
* Dec 17, 2007 600 bphillip Added dao pool usage
* Dec 03, 2010 2235 cjeanbap EDEXUtility.sendMessageAlertViz() signature changed.
* Mar 18, 2013 1804 bsteffen Remove AlphanumericValues from radar
* HDF5.
* Mar 19, 2013 1804 bsteffen Cache db queries in radar decoder.
* Mar 19, 2013 1804 bsteffen Optimize decoder performance.
*
* </pre>
*
@ -547,12 +545,11 @@ public class RadarDecoder extends AbstractDecoder {
*/
private void processSymbologyBlock(RadarRecord record,
SymbologyBlock symbologyBlock) {
int errorCount = 0;
if (symbologyBlock == null) {
return;
}
int packetsKept = 0;
List<Layer> packetsInLyrs = new ArrayList<Layer>();
for (int layer = 0; layer < symbologyBlock.getNumLayers(); ++layer) {
@ -589,20 +586,19 @@ public class RadarDecoder extends AbstractDecoder {
}
}
}
packetsKept += packets.size();
lyr.setPackets(packets.toArray(new SymbologyPacket[packets.size()]));
packetsInLyrs.add(lyr);
}
// remove the radial and raster from the symb block
symbologyBlock.setLayers(packetsInLyrs.toArray(new Layer[packetsInLyrs
.size()]));
record.setSymbologyBlock(symbologyBlock);
record.correlateSymbologyPackets();
if (errorCount > 0) {
logger.error("Radar file contains " + errorCount
+ " unrecognized symbology packet types.");
// remove the radial and raster from the symb block, only keep it if
// there are other packets.
if (packetsKept > 0) {
symbologyBlock.setLayers(packetsInLyrs
.toArray(new Layer[packetsInLyrs.size()]));
record.setSymbologyBlock(symbologyBlock);
record.correlateSymbologyPackets();
}
}

View file

@ -28,8 +28,8 @@ package com.raytheon.edex.plugin.radar.dao;
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* 02/06/09 1990 bphillip Initial creation
* Mar 18, 2013 1804 bsteffen Remove AlphanumericValues from radar
* HDF5.
* Mar 18, 2013 1804 bsteffen Reduce useless data stored in radar hdf5
*
* </pre>
*
* @author bphillip
@ -43,12 +43,15 @@ import java.util.Map;
import com.raytheon.uf.common.dataplugin.PluginDataObject;
import com.raytheon.uf.common.dataplugin.PluginException;
import com.raytheon.uf.common.dataplugin.persist.IPersistable;
import com.raytheon.uf.common.dataplugin.radar.RadarDataKey;
import com.raytheon.uf.common.dataplugin.radar.RadarDataPoint;
import com.raytheon.uf.common.dataplugin.radar.RadarRecord;
import com.raytheon.uf.common.dataplugin.radar.RadarStoredData;
import com.raytheon.uf.common.dataplugin.radar.level3.GSMBlock.GSMMessage;
import com.raytheon.uf.common.dataplugin.radar.level3.GraphicBlock;
import com.raytheon.uf.common.dataplugin.radar.level3.SymbologyBlock;
import com.raytheon.uf.common.dataplugin.radar.util.RadarConstants;
import com.raytheon.uf.common.dataplugin.radar.util.RadarConstants.MapValues;
import com.raytheon.uf.common.dataplugin.radar.util.RadarDataRetriever;
import com.raytheon.uf.common.datastorage.IDataStore;
import com.raytheon.uf.common.datastorage.StorageProperties;
@ -135,10 +138,10 @@ public class RadarDao extends PluginDao {
dataStore.addDataRecord(bdr, sp);
}
if (radarRec.getSymbologyData() != null) {
Map<RadarDataKey, RadarDataPoint> symData = radarRec.getSymbologyData();
if (symData != null && !symData.isEmpty()) {
byte[] data = DynamicSerializationManager.getManager(
SerializationType.Thrift).serialize(
radarRec.getSymbologyData());
SerializationType.Thrift).serialize(symData);
ByteDataRecord bdr = new ByteDataRecord(
RadarStoredData.SYM_DATA_ID, radarRec.getDataURI(), data);
bdr.setCorrelationObject(radarRec);
@ -156,10 +159,11 @@ public class RadarDao extends PluginDao {
dataStore.addDataRecord(bdr, sp);
}
if (radarRec.getMapProductVals() != null) {
Map<MapValues, Map<String, Map<MapValues, String>>> mapProdVals = radarRec
.getMapProductVals();
if (mapProdVals != null && !mapProdVals.isEmpty()) {
byte[] data = DynamicSerializationManager.getManager(
SerializationType.Thrift).serialize(
radarRec.getMapProductVals());
SerializationType.Thrift).serialize(mapProdVals);
ByteDataRecord bdr = new ByteDataRecord(
RadarStoredData.PRODUCT_VALS_ID, radarRec.getDataURI(),
data);
@ -186,19 +190,21 @@ public class RadarDao extends PluginDao {
dataStore.addDataRecord(rec, sp);
}
if (radarRec.getMapRecordVals() != null) {
Map<MapValues, Map<MapValues, String>> mapRecVals = radarRec
.getMapRecordVals();
if (mapRecVals != null && !mapRecVals.isEmpty()) {
byte[] data = DynamicSerializationManager.getManager(
SerializationType.Thrift).serialize(
radarRec.getMapRecordVals());
SerializationType.Thrift).serialize(mapRecVals);
ByteDataRecord bdr = new ByteDataRecord(
RadarStoredData.RECORD_VALS_ID, radarRec.getDataURI(), data);
bdr.setCorrelationObject(radarRec);
dataStore.addDataRecord(bdr, sp);
}
if (radarRec.getStormIDs() != null) {
Map<String, RadarDataKey> stormIds = radarRec.getStormIDs();
if (stormIds != null && !stormIds.isEmpty()) {
byte[] data = DynamicSerializationManager.getManager(
SerializationType.Thrift).serialize(radarRec.getStormIDs());
SerializationType.Thrift).serialize(stormIds);
ByteDataRecord bdr = new ByteDataRecord(
RadarStoredData.STORM_IDS_ID, radarRec.getDataURI(), data);
bdr.setCorrelationObject(radarRec);

View file

@ -56,8 +56,9 @@ import com.vividsolutions.jts.geom.Coordinate;
* ------------ ---------- ----------- --------------------------
* Aug 11, 2010 mnash Initial creation
* Dec 28, 2011 11705 gzhang Fix SCAN missing Rows error
* Mar 18, 2013 1804 bsteffen Remove AlphanumericValues from radar
* HDF5.
* Mar 19, 2013 1804 bsteffen Reduce useless data stored in radar hdf5
* Mar 19, 2013 1804 bsteffen Remove empty data structures from radar
* hdf5.
*
* </pre>
*
@ -86,9 +87,8 @@ public class RadarRecordUtil {
.getTheText())) {
Map<GraphicBlockValues, String> map = new HashMap<GraphicBlockValues, String>();
Matcher m = RadarConstants.graphic_block_pattern
.matcher(
getNormalizedGBText( ((TextSymbolPacket) packets[j]).getTheText() )
);
.matcher(getNormalizedGBText(((TextSymbolPacket) packets[j])
.getTheText()));
if (m.find()) {
String storm_id = m.group(1).trim();
map.put(GraphicBlockValues.AZIMUTH, m
@ -149,8 +149,7 @@ public class RadarRecordUtil {
String property) {
String rval = "";
for (RadarDataKey curLatLon : record.getSymbologyData()
.keySet()) {
for (RadarDataKey curLatLon : record.getSymbologyData().keySet()) {
RadarDataPoint currPoint = record.getSymbologyData().get(curLatLon);
for (Integer type : currPoint.getDisplayGenericPointData().keySet()) {
@ -170,8 +169,10 @@ public class RadarRecordUtil {
/**
* Get the GenericDataComponent.
*
* @param record The RadarRecord
* @param featureId The featureId
* @param record
* The RadarRecord
* @param featureId
* The featureId
*
* @return The GenericDataComponent, or null if no matches
*/
@ -192,13 +193,15 @@ public class RadarRecordUtil {
}
return null;
}
public static List<String> getDMDFeatureIDs(RadarRecord record) {
List<String> rval = new ArrayList<String>();
for (Layer layer : record.getSymbologyBlock().getLayers()) {
for (SymbologyPacket packet : layer.getPackets())
rval.addAll(((DMDPacket) packet).getFeatureIDs());
SymbologyBlock sb = record.getSymbologyBlock();
if (sb != null) {
for (Layer layer : sb.getLayers()) {
for (SymbologyPacket packet : layer.getPackets())
rval.addAll(((DMDPacket) packet).getFeatureIDs());
}
}
return rval;
}
@ -207,8 +210,7 @@ public class RadarRecordUtil {
String featureId) {
Coordinate rval = null;
AreaComponent currFeature = null;
for (RadarDataKey curLatLon : record.getSymbologyData()
.keySet()) {
for (RadarDataKey curLatLon : record.getSymbologyData().keySet()) {
RadarDataPoint currPoint = record.getSymbologyData().get(curLatLon);
for (Integer type : currPoint.getDisplayGenericPointData().keySet()) {
@ -419,17 +421,24 @@ public class RadarRecordUtil {
return record.srmSourceName != null;
}
private static final DHRValues[] ADAP32_VALUES = {
DHRValues.BEAMWIDTH, DHRValues.BLOCKAGETHRESHOLD, DHRValues.CLUTTERTHRESHOLD, DHRValues.WEIGHTTHRESHOLD,
DHRValues.FULLHYBRIDSCANTHRESH, DHRValues.LOWREFLTHRESHOLD, DHRValues.RAINDETREFLTHRESHOLD, DHRValues.RAINDETAREATHRESHOLD,
DHRValues.RAINDETTIMETHRESHOLD, DHRValues.ZRMULTCOEFF, DHRValues.ZRPOWERCOEFF, DHRValues.MINREFLTORATE,
DHRValues.MAXREFLTORATE, DHRValues.NUMEXCLZONE, DHRValues.RANGECUTOFF, DHRValues.RANGEEFFCOEFF1,
DHRValues.RANGEEFFCOEFF2, DHRValues.RANGEEFFCOEFF3, DHRValues.MINPRECIPRATEINCL, DHRValues.MAXPRECIPRATEALLOW,
DHRValues.THRESHELAPSEDTIME, DHRValues.MAXTIMEFORINTERP, DHRValues.MINTIMEHOURLYPERIOD, DHRValues.THRESHOLDHROUTLIER,
DHRValues.ENDTIMEGAGEACCUM, DHRValues.MAXPERIODACCUMVAL, DHRValues.MAXHOURLYACCUMVAL, DHRValues.TIMEBIASEST,
DHRValues.THRESHNOGAGERADAR, DHRValues.RESETBIASVALUE, DHRValues.LONGESTALLOWLAG, DHRValues.BIASAPPLIEDFLAG
};
private static final DHRValues[] ADAP32_VALUES = { DHRValues.BEAMWIDTH,
DHRValues.BLOCKAGETHRESHOLD, DHRValues.CLUTTERTHRESHOLD,
DHRValues.WEIGHTTHRESHOLD, DHRValues.FULLHYBRIDSCANTHRESH,
DHRValues.LOWREFLTHRESHOLD, DHRValues.RAINDETREFLTHRESHOLD,
DHRValues.RAINDETAREATHRESHOLD, DHRValues.RAINDETTIMETHRESHOLD,
DHRValues.ZRMULTCOEFF, DHRValues.ZRPOWERCOEFF,
DHRValues.MINREFLTORATE, DHRValues.MAXREFLTORATE,
DHRValues.NUMEXCLZONE, DHRValues.RANGECUTOFF,
DHRValues.RANGEEFFCOEFF1, DHRValues.RANGEEFFCOEFF2,
DHRValues.RANGEEFFCOEFF3, DHRValues.MINPRECIPRATEINCL,
DHRValues.MAXPRECIPRATEALLOW, DHRValues.THRESHELAPSEDTIME,
DHRValues.MAXTIMEFORINTERP, DHRValues.MINTIMEHOURLYPERIOD,
DHRValues.THRESHOLDHROUTLIER, DHRValues.ENDTIMEGAGEACCUM,
DHRValues.MAXPERIODACCUMVAL, DHRValues.MAXHOURLYACCUMVAL,
DHRValues.TIMEBIASEST, DHRValues.THRESHNOGAGERADAR,
DHRValues.RESETBIASVALUE, DHRValues.LONGESTALLOWLAG,
DHRValues.BIASAPPLIEDFLAG };
public static Map<DHRValues, Double> getDHRValues(RadarRecord record) {
Map<DHRValues, Double> map = new HashMap<DHRValues, Double>();
String text = null;
@ -458,11 +467,11 @@ public class RadarRecordUtil {
boolean biasApplied = false;
double biasCalculated = 1.0;
Integer flagZeroHybrid = null;
String[] v = new String[nv];
for (vi = 0; vi < nv; ++vi)
v[vi] = text.substring(vi * 8, (vi+1) * 8);
v[vi] = text.substring(vi * 8, (vi + 1) * 8);
vi = 0;
while (vi < nv) {
String s = v[vi++];
@ -477,10 +486,12 @@ public class RadarRecordUtil {
while (vi < nv) {
s = v[vi++];
if (s.equals("SUPL(15)")) {
/* // average scan date/time are never used...
map.put(DHRValues.AVGSCANDATE, parseDHRValue(text, vi + 0));
map.put(DHRValues.AVGSCANTIME, parseDHRValue(text, vi + 1));
*/
/*
* // average scan date/time are never used...
* map.put(DHRValues.AVGSCANDATE, parseDHRValue(text, vi
* + 0)); map.put(DHRValues.AVGSCANTIME,
* parseDHRValue(text, vi + 1));
*/
flagZeroHybrid = (int) parseDHRValue(v[vi + 2]);
if (flagZeroHybrid != 0 && flagZeroHybrid != 1)
flagZeroHybrid = 0; // should print warning
@ -491,7 +502,8 @@ public class RadarRecordUtil {
}
}
} else if (s.equals("ADAP(38)")) {
// Don't have documentation for older formats, so copying logic from A1 decodeDHR.C.
// Don't have documentation for older formats, so copying logic
// from A1 decodeDHR.C.
map.put(DHRValues.ZRMULTCOEFF, parseDHRValue(v[vi + 9]));
map.put(DHRValues.ZRPOWERCOEFF, parseDHRValue(v[vi + 10]));
map.put(DHRValues.MAXPRECIPRATEALLOW, parseDHRValue(v[vi + 25]));
@ -523,12 +535,12 @@ public class RadarRecordUtil {
}
if (flagZeroHybrid != null)
map.put(DHRValues.FLAGZEROHYBRID, (double) flagZeroHybrid);
if (! biasApplied) {
if (!biasApplied) {
biasCalculated = 1.0;
}
map.put(DHRValues.BIAS, biasCalculated);
// Also include logic from A1 FFMPContainer::read(), FFMP_ORPG case
// Also include logic from A1 FFMPContainer::read(), FFMP_ORPG case
boolean havePrecip;
if (flagZeroHybrid == null) {
havePrecip = precipCat > 0;
@ -537,11 +549,11 @@ public class RadarRecordUtil {
}
map.put(DHRValues.HAVE_PRECIP, havePrecip ? 1.0 : 0);
map.put(DHRValues.BIAS_TO_USE, havePrecip ? biasCalculated : 1.0);
return map;
}
private static double parseDHRValue(String text) {
private static double parseDHRValue(String text) {
String s = text.trim();
if (s.equals("T"))
return 1;
@ -550,8 +562,8 @@ public class RadarRecordUtil {
else
return Double.parseDouble(s);
}
/**
/**
* DR#11705: SCAN missing row(s) comparing to radar Comb Att Table.
*
* Error cause: RadarConstants.GRAPHIC_BLOCK as a Regular Expression
@ -564,27 +576,28 @@ public class RadarRecordUtil {
* @param : Graphic Block Text that may contain ">" and/or "<".
* @return: String with ">" and/or "<" replaced by space.
*/
private static String getNormalizedGBText(String text){
if(text == null || text.isEmpty() || ( (! text.contains(">")) && (! text.contains("<")) ) )
return text;
/*
* contains only ">"
*/
if( ! text.contains("<") )
return text.replaceAll(">", " ");
/*
* contains only "<"
*/
if( ! text.contains(">") )
return text.replaceAll("<", " ");
/*
* contains both "<" and ">"
*/
return text.replaceAll(">"," ").replaceAll("<", " ");
private static String getNormalizedGBText(String text) {
if (text == null || text.isEmpty()
|| ((!text.contains(">")) && (!text.contains("<"))))
return text;
/*
* contains only ">"
*/
if (!text.contains("<"))
return text.replaceAll(">", " ");
/*
* contains only "<"
*/
if (!text.contains(">"))
return text.replaceAll("<", " ");
/*
* contains both "<" and ">"
*/
return text.replaceAll(">", " ").replaceAll("<", " ");
}
}