From 92f13fd768fce94e1a96f1af4dc844da74028a56 Mon Sep 17 00:00:00 2001 From: Matthew Foster Date: Wed, 18 Nov 2015 13:21:36 +0000 Subject: [PATCH] VLab Issue #12735 - GFS20PostProcessor does not handle CP grids; fixes #12735 Change-Id: I71f9f024da7b7202d738d43d112645a98a5b2a07 Former-commit-id: 0d9ba7bde33c9dc75d735674dd3e1d0d237e7b8e --- .../GFS20PostProcessor.java | 236 ------------------ 1 file changed, 236 deletions(-) delete mode 100644 crh/gov.noaa.nws.crh.edex.grib.decoderpostprocessor/src/gov/noaa/nws/crh/edex/grib/decoderpostprocessor/GFS20PostProcessor.java diff --git a/crh/gov.noaa.nws.crh.edex.grib.decoderpostprocessor/src/gov/noaa/nws/crh/edex/grib/decoderpostprocessor/GFS20PostProcessor.java b/crh/gov.noaa.nws.crh.edex.grib.decoderpostprocessor/src/gov/noaa/nws/crh/edex/grib/decoderpostprocessor/GFS20PostProcessor.java deleted file mode 100644 index 03dce690f3..0000000000 --- a/crh/gov.noaa.nws.crh.edex.grib.decoderpostprocessor/src/gov/noaa/nws/crh/edex/grib/decoderpostprocessor/GFS20PostProcessor.java +++ /dev/null @@ -1,236 +0,0 @@ -package gov.noaa.nws.crh.edex.grib.decoderpostprocessor; - -import java.util.ArrayList; -import java.util.Date; -import java.util.List; - -import com.raytheon.edex.plugin.grib.decoderpostprocessors.ThreeHrPrecipGridProcessor; -import com.raytheon.edex.plugin.grib.exception.GribException; -import com.raytheon.uf.common.dataplugin.grid.GridConstants; -import com.raytheon.uf.common.dataplugin.grid.GridRecord; -import com.raytheon.uf.common.parameter.Parameter; -import com.raytheon.uf.edex.plugin.grid.dao.GridDao; - -/** - * Grib post processor implementation to generate 3-hr precipitation grids from - * the alternating (3-hr, 6-hr, 3-hr, 3-hr, 6-hr, etc.) precip grids in the - * GFS20 output. - * - *
- * 
- * SOFTWARE HISTORY
- * 
- * Date          Ticket#  Engineer    Description
- * ------------- -------- ----------- --------------------------
- * Jun 08, 2015           M. Foster   Initial Creation
- * Nov 10, 2015  DR18246  M. Foster   Added ability to process CP grids
- * 
- * 
- * 
- * - * @author matthew.foster - * @version 1.0 - */ - -public class GFS20PostProcessor extends ThreeHrPrecipGridProcessor { - - @Override - public GridRecord[] process(GridRecord record) throws GribException { - // Post process the data if this is a Total Precipitation grid - if (record.getParameter().getAbbreviation().equals("TP6hr") - || record.getParameter().getAbbreviation().equals("CP6hr")) { - return super.process(record); - } - return new GridRecord[] { record }; - } - - /** - * Retrieves a List of GridRecord via DAO query for the given datasetId, - * parm and refTime. - * - * @param datasetId - * The datasetId from which to retrieve the GridRecords - * @param parm - * The parameter for which to retrieve GridRecords - * @param refTime - * The reference (cycle) time for the aforementioned datasetId - * @return - * @throws GribException - */ - @SuppressWarnings("unchecked") - protected List getPrecipInventory(String datasetId, - String parm, Date refTime) throws GribException { - GridDao dao = null; - try { - dao = new GridDao(); - } catch (PluginException e) { - throw new GribException("Error instantiating grib dao!", e); - } - DatabaseQuery query = new DatabaseQuery(GridRecord.class); - query.addQueryParam(GridConstants.PARAMETER_ABBREVIATION, parm); - query.addQueryParam(GridConstants.DATASET_ID, datasetId); - query.addQueryParam("dataTime.refTime", refTime); - query.addOrder("dataTime.fcstTime", true); - try { - return (List) dao.queryByCriteria(query); - } catch (DataAccessLayerException e) { - throw new GribException("Error getting Precip inventory for " - + datasetId, e); - } - } - - /** - * Generates the 3 hour accumulated grid by taking the difference of the - * current 6-hr accumulation and the previous 3-hr accumulation. This - * function will look in the inventory and generate any 3-hr grids that can - * be generated. - * - * @param record - * The grib record for which to generate the 3 hour accumulated - * precipitation grid - * @return The generated 3-hr precipitation grids - * @throws GribException - */ - protected synchronized GridRecord[] generate3hrPrecipGrids(GridRecord record) - throws GribException { - - String abbrev6; - String abbrev3; - - if (record.getParameter().getAbbreviation().equals("TP6hr")) { - abbrev6 = "TP6hr"; - abbrev3 = "TP3hr"; - } else { - abbrev6 = "CP6hr"; - abbrev3 = "CP3hr"; - } - - // The current 6-hr precipitation grid inventory in the database - List precip6hrInventory = getPrecipInventory( - record.getDatasetId(), abbrev6, record.getDataTime() - .getRefTime()); - - // The current 3-hr precipitation grid inventory in the database - List precip3hrInventory = getPrecipInventory( - record.getDatasetId(), abbrev3, record.getDataTime() - .getRefTime()); - - // Make a list of the 3-hr forecast times - List precip3hrTimes = new ArrayList(); - for (int i = 0; i < precip3hrInventory.size(); i++) { - precip3hrTimes.add(precip3hrInventory.get(i).getDataTime() - .getFcstTime()); - } - - // Adds the current record to the precip inventory - float[] currentData = (float[]) record.getMessageData(); - record.setMessageData(currentData); - precip6hrInventory.add(record); - - // Examine each grid in the inventory and generate the 3hr precipitation - // grid if possible - List generatedRecords = new ArrayList(); - for (int i = 0; i < precip6hrInventory.size(); i++) { - // Check if the 3hr precipitation grid has already been produced - if (!precip3hrTimes.contains(precip6hrInventory.get(i) - .getDataTime().getFcstTime())) { - // If the precipitation grid has not been produced, generate it - List generated3hrPrecips = generate3hrPrecip( - precip6hrInventory.get(i), precip3hrInventory); - for (GridRecord newRecord : generated3hrPrecips) { - // Add the generated grid to the current inventory - if (newRecord != null) { - precip3hrTimes.add(newRecord.getDataTime() - .getFcstTime()); - generatedRecords.add(newRecord); - } - } - } - } - - return generatedRecords.toArray(new GridRecord[] {}); - } - - /** - * {@inheritDoc} - */ - @Override - protected GridRecord calculate3hrPrecip(GridRecord inventoryRecord, - GridRecord currentRecord) throws GribException { - - // Clone the current record and set the ID to 0 so Hibernate will - // recognize it as a new record - GridRecord tp3hrRecord = new GridRecord(currentRecord); - tp3hrRecord.setId(0); - if (currentRecord.getMessageData() == null) { - GridDao dao = null; - try { - dao = new GridDao(); - currentRecord.setMessageData(((FloatDataRecord) dao - .getHDF5Data(currentRecord, -1)[0]).getFloatData()); - } catch (PluginException e) { - throw new GribException("Error populating grib data!", e); - } - } - - // Copy the data to the new record so the data from the original record - // does not get modified - float[] currentData = (float[]) currentRecord.getMessageData(); - currentRecord.setMessageData(currentData); - float[] newData = new float[currentData.length]; - System.arraycopy(currentData, 0, newData, 0, currentData.length); - tp3hrRecord.setMessageData(newData); - - // First determine if this is Total Precip (TP) or Convective Precip - // (CP) - // Assign the new parameter abbreviation and cache it if necessary - - String abbrev; - String name; - if (currentRecord.getParameter().getAbbreviation().equals("TP6hr")) { - abbrev = "TP3hr"; - name = "Precip Accum 3 hr"; - } else { - abbrev = "CP3hr"; - name = "Convective Precip Accum 3hr"; - } - Parameter param = new Parameter(abbrev, name, currentRecord - .getParameter().getUnit()); - tp3hrRecord.setParameter(param); - tp3hrRecord.getInfo().setId(null); - // Change the data time to include the 3-hr time range - modifyDataTime(tp3hrRecord); - - // Calculate the new data values - if (inventoryRecord != null) { - if (inventoryRecord.getMessageData() == null) { - GridDao dao = null; - try { - dao = new GridDao(); - inventoryRecord - .setMessageData(((FloatDataRecord) dao.getHDF5Data( - inventoryRecord, 0)[0]).getFloatData()); - } catch (PluginException e) { - throw new GribException("Error populating grib data!", e); - } - } - calculatePrecipValues((float[]) inventoryRecord.getMessageData(), - (float[]) tp3hrRecord.getMessageData()); - } - return tp3hrRecord; - } - - /** - * {@inheritDoc} - */ - @Override - protected void calculatePrecipValues(float[] inventoryData, float[] newData) { - for (int i = 0; i < inventoryData.length; i++) { - newData[i] = newData[i] - inventoryData[i]; - if (newData[i] < 0) { - newData[i] = 0; - } - } - } - -}