Skip to content

Commit

Permalink
Bugfix 2867 point2grid qc flag main v11.1 (#2874)
Browse files Browse the repository at this point in the history
* #2867 Added point2grid_GOES_16_ADP_Enterprise_high and changed qc flags for ADP

* #2867 Added get_nc_att_values_

* #2867 Added get_nc_att_values

* #2867 Get the ADP QC flag values from the varibale attributes (support GOES16 Enterprise allgorithm) and apply them for QC Flags. Adjusted the ADP QC flags based on the variable QC values

---------

Co-authored-by: Howard Soh <hsoh@seneca.rap.ucar.edu>
  • Loading branch information
hsoh-u and Howard Soh committed May 3, 2024
1 parent 57d404a commit eb35a2e
Show file tree
Hide file tree
Showing 5 changed files with 218 additions and 56 deletions.
29 changes: 24 additions & 5 deletions internal/test_unit/xml/unit_point2grid.xml
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@
<grid_nc>&OUTPUT_DIR;/point2grid/point2grid_GOES_16_AOD_TO_G212_compute.nc</grid_nc>
</output>
</test>

<test name="point2grid_GOES_16_AOD_TO_G212_GAUSSIAN">
<exec>&MET_BIN;/point2grid</exec>
<env>
Expand All @@ -155,7 +155,7 @@
<grid_nc>&OUTPUT_DIR;/point2grid/point2grid_GOES_16_AOD_TO_G212_gaussian.nc</grid_nc>
</output>
</test>

<test name="point2grid_GOES_16_ADP">
<exec>&MET_BIN;/point2grid</exec>
<env>
Expand All @@ -174,7 +174,7 @@
<grid_nc>&OUTPUT_DIR;/point2grid/point2grid_GOES_16_ADP.nc</grid_nc>
</output>
</test>

<test name="point2grid_GOES_16_AOD_TO_G212_GRID_MAP">
<exec>&MET_BIN;/point2grid</exec>
<env>
Expand All @@ -185,7 +185,7 @@
G212 \
&OUTPUT_DIR;/point2grid/point2grid_GOES_16_AOD_TO_G212_grid_map.nc \
-field 'name="AOD"; level="(*,*)";' \
-qc 1,2,3 -method MAX \
-qc 0,1,2 -method MAX \
-v 1
</param>
<output>
Expand All @@ -205,14 +205,33 @@
G212 \
&OUTPUT_DIR;/point2grid/point2grid_GOES_16_AOD_TO_G212.nc \
-field 'name="AOD"; level="(*,*)";' \
-qc 1,2,3 -method MAX \
-qc 0,1,2 -method MAX \
-v 1
</param>
<output>
<grid_nc>&OUTPUT_DIR;/point2grid/point2grid_GOES_16_AOD_TO_G212.nc</grid_nc>
</output>
</test>

<test name="point2grid_GOES_16_ADP_Enterprise_high">
<exec>&MET_BIN;/point2grid</exec>
<env>
<pair><name>MET_TMP_DIR</name> <value>&OUTPUT_DIR;/point2grid</value></pair>
</env>
<param> \
&DATA_DIR_MODEL;/goes_16/OR_ABI-L2-AODC-M6_G16_s20241100001171_e20241100003544_c20241100006242.nc \
G212 \
&OUTPUT_DIR;/point2grid/point2grid_GOES_16_ADP_Enterprise_high.nc \
-field 'name="AOD_Smoke"; level="(*,*)";' \
-adp &DATA_DIR_MODEL;/goes_16/OR_ABI-L2-ADPC-M6_G16_s20241100001171_e20241100003544_c20241100006361.nc \
-qc 0,1 -method MAX \
-v 1
</param>
<output>
<grid_nc>&OUTPUT_DIR;/point2grid/point2grid_GOES_16_ADP_Enterprise_high.nc</grid_nc>
</output>
</test>

<test name="point2grid_NCCF_UK">
<exec>&MET_BIN;/point2grid</exec>
<env>
Expand Down
28 changes: 21 additions & 7 deletions src/libcode/vx_nc_util/nc_utils.cc
Original file line number Diff line number Diff line change
Expand Up @@ -537,6 +537,17 @@ bool get_nc_att_value(const NcVar *var, const ConcatString &att_name,

////////////////////////////////////////////////////////////////////////

bool get_nc_att_values(const NcVar *var, const ConcatString &att_name,
unsigned short *att_val, bool exit_on_error) {
static const char *method_name = "get_nc_att_value(NcVar,float) -> ";
bool status = get_nc_att_values_(var, att_name, att_val, exit_on_error,
(unsigned short)bad_data_int, method_name);
return status;
}

////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////

bool get_nc_att_value(const NcVarAtt *att, ConcatString &att_val) {
bool status = false;

Expand Down Expand Up @@ -1729,18 +1740,21 @@ bool get_nc_data(NcVar *var, char **data) {

////////////////////////////////////////////////////////////////////////

bool get_nc_data(NcVar *var, uchar *data) {
bool get_nc_data(NcVar *var, uchar *data, bool allow_conversion) {
bool return_status = false;
int data_type = GET_NC_TYPE_ID_P(var);
static const char *method_name = "get_nc_data(NcVar *, uchar *) -> ";
if (NC_UBYTE == data_type) return_status = get_nc_data_t(var, data);
else if (NC_BYTE == data_type && has_unsigned_attribute(var)) {
int cell_count = get_data_size(var);
ncbyte *signed_data = new ncbyte[cell_count];
return_status = get_nc_data_t(var, signed_data);
for (int idx=0; idx<cell_count; idx++) {
data[idx] = (uchar)signed_data[idx];
else if (NC_BYTE == data_type) {
if (!has_unsigned_attribute(var) && !allow_conversion) {
mlog << Debug(1) << "\n" << method_name
<< "INFO: Unexpected conversion from 'ncbyte' for variable \""
<< GET_NC_NAME_P(var) << "\".\n\n";
}
int data_count = get_data_size(var);
ncbyte *signed_data = new ncbyte[data_count];
return_status = get_nc_data_t(var, signed_data);
for (int idx=0; idx<data_count; idx++) data[idx] = (uchar)signed_data[idx];
delete [] signed_data;
}
else {
Expand Down
5 changes: 3 additions & 2 deletions src/libcode/vx_nc_util/nc_utils.h
Original file line number Diff line number Diff line change
Expand Up @@ -194,6 +194,7 @@ extern bool get_nc_att_value(const netCDF::NcVar *, const ConcatString &, Concat
extern bool get_nc_att_value(const netCDF::NcVar *, const ConcatString &, int &, bool exit_on_error = false);
extern bool get_nc_att_value(const netCDF::NcVar *, const ConcatString &, float &, bool exit_on_error = false);
extern bool get_nc_att_value(const netCDF::NcVar *, const ConcatString &, double &, bool exit_on_error = false);
extern bool get_nc_att_values(const netCDF::NcVar *,const ConcatString &, unsigned short *,bool exit_on_error = false);

extern bool has_att(netCDF::NcFile *, const ConcatString name, bool exit_on_error=false);
extern bool has_att(netCDF::NcVar *, const ConcatString name, bool do_log=false);
Expand Down Expand Up @@ -256,11 +257,11 @@ extern ConcatString* get_string_val(netCDF::NcVar *var, const int index, const i
extern bool get_nc_data(netCDF::NcVar *, int *data);
extern bool get_nc_data(netCDF::NcVar *, char *data);
extern bool get_nc_data(netCDF::NcVar *, char **data);
extern bool get_nc_data(netCDF::NcVar *, uchar *data);
extern bool get_nc_data(netCDF::NcVar *, uchar *data, bool allow_conversion=false);
extern bool get_nc_data(netCDF::NcVar *, float *data);
extern bool get_nc_data(netCDF::NcVar *, double *data);
extern bool get_nc_data(netCDF::NcVar *, time_t *data);
extern bool get_nc_data(netCDF::NcVar *, ncbyte *data);
//extern bool get_nc_data(netCDF::NcVar *, ncbyte *data);
extern bool get_nc_data(netCDF::NcVar *, unsigned short *data);

extern bool get_nc_data(netCDF::NcVar *, int *data, const LongArray &curs);
Expand Down
23 changes: 23 additions & 0 deletions src/libcode/vx_nc_util/nc_utils.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,29 @@ bool get_nc_att_value_(const netCDF::NcVar *var, const ConcatString &att_name,

////////////////////////////////////////////////////////////////////////

template <typename T>
bool get_nc_att_values_(const netCDF::NcVar *var, const ConcatString &att_name,
T *att_vals, bool exit_on_error,
T bad_data, const char *caller_name) {
// caller should initialize att_vals

//
// Retrieve the NetCDF variable attribute.
//
netCDF::NcVarAtt *att = get_nc_att(var, att_name);
bool status = IS_VALID_NC_P(att);
if (status) att->getValues(att_vals);
else {
mlog << Error << "\n" << caller_name
<< get_log_msg_for_att(att, GET_SAFE_NC_NAME_P(var), att_name);
}
if (att) delete att;
if (!status && exit_on_error) exit(1);
return status;
}

////////////////////////////////////////////////////////////////////////

template <typename T>
bool get_nc_att_value_(const netCDF::NcVarAtt *att, T &att_val, bool exit_on_error,
T bad_data, const char *caller_name) {
Expand Down

0 comments on commit eb35a2e

Please sign in to comment.