We discussed this internally and came up with the following:

(1) We agree that removing the QARTOD from the test names is fine, since the 
result is still perfectly useful for our cases, and in fact makes the names 
more generic and widely useful.

(2) It's clear from this thread that we are in a gray area between Standard 
Names and Standard Name Modifiers. But we prefer adding these as Standard Names 
rather than modifiers.

(3) Since `vocabulary` and `references` are not part of the CF conventions, 
that isn't explicitly part of our proposal. Even without those attributes we 
believe the standard name alone conveys useful information. We will enforce use 
of these attributes in our own metadata profile, which is built upon CF and 
other standards.

Since this has had a lot of back-and-forth, we've updated our original proposal 
and pasted it below. We removed references to QARTOD, added descriptions of 
each test, and updated the proposal description. 

Again, thank you everyone for all the great input. 

---

**Updated proposal:**


We are proposing adding quality test flag names to the Standard Name list. 
Adding these flags allows us to define exactly which dataset variable 
represents the results of a particular quality test for a particular data 
variable. While the list below is not comprehensive -- that is, it does not 
contain a full list of every possible quality test that could be run -- as it 
stands it we meet our needs for the foreseeable future. If accepted, we expect 
others will propose expanding this list to include other testing methods as 
needed.

Proposed names:

| Name                                | Description                             
                                                                                
                                                                                
                                             | Units |
|-------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------|
| aggregate_quality_flag              | This flag is a summary of all quality 
tests run for another data variable, and is set to the highest-level (worst 
case) flag found. The linkage between the data variable and this variable is 
achieved using the ancillary_variables attribute.     | 1     |
| gap_test_quality_flag               | Result of the Timing/Gap test, which 
checks that data has been received within the expected time window and has the 
correct time stamp. The linkage between the data variable and this variable is 
achieved using the ancillary_variables attribute. | 1     |
| syntax_test_quality_flag            | Result of the Syntax test, which checks 
that the data contains no indicators of flawed transmission. The linkage 
between the data variable and this variable is achieved using the 
ancillary_variables attribute.                                    | 1     |
| location_test_quality_flag          | Result of the Location test, which 
checks that a location is within reasonable bounds. The linkage between the 
data variable and this variable is achieved using the ancillary_variables 
attribute.                                                  | 1     |
| gross_range_test_quality_flag       | Result of the Gross Range test, which 
checks that values are within reasonable range bounds. The linkage between the 
data variable and this variable is achieved using the ancillary_variables 
attribute.                                            | 1     |
| climatology_test_quality_flag       | Result of the Climatology test, which 
checks that values are within reasonable range bounds for a given time and 
location. The linkage between the data variable and this variable is achieved 
using the ancillary_variables attribute.              | 1     |
| spike_test_quality_flag             | Result of the Spike test, which checks 
that the difference between two points in a series of values is within 
reasonable bounds. The linkage between the data variable and this variable is 
achieved using the ancillary_variables attribute.        | 1     |
| rate_of_change_test_quality_flag    | Result of the Rate of Change test, 
which checks that the first order difference of a series of values is within 
reasonable bounds. The linkage between the data variable and this variable is 
achieved using the ancillary_variables attribute.      | 1     |
| flat_line_test_quality_flag         | Result of the Flat Line test, which 
checks for consecutively repeated values within a tolerance. The linkage 
between the data variable and this variable is achieved using the 
ancillary_variables attribute.                                        | 1     |
| multi_variate_test_quality_flag     | Result of the Multi-variate test, which 
checks that values are reasonable when compared with related variables. The 
linkage between the data variable and this variable is achieved using the 
ancillary_variables attribute.                         | 1     |
| attenuated_signal_test_quality_flag | Result of the Attenuated Signal test, 
which checks for near-flat-line conditions using a range or standard deviation. 
The linkage between the data variable and this variable is achieved using the 
ancillary_variables attribute.                   | 1     |
| neighbor_test_quality_flag          | Result of the Neighbor test, which 
checks that values are reasonable when compared with nearby measurements. The 
linkage between the data variable and this variable is achieved using the 
ancillary_variables attribute.                            | 1     |             
                                                                                
 | 1     |

Example usage:

```
variables:

    float sea_water_practical_salinity(time, z);
        sea_water_practical_salinity:units = "1";
        sea_water_practical_salinity:long_name = "Salinity";
        sea_water_practical_salinity:standard_name = 
"sea_water_practical_salinity";
        sea_water_practical_salinity:ancillary_variables = 
"sea_water_practical_salinity_qc_agg 
sea_water_practical_salinity_qc_flat_line_test";

    int sea_water_practical_salinity_qc_agg(time, z);
        sea_water_practical_salinity_qc_agg:long_name = "Salinity Aggregate 
Flag";
        sea_water_practical_salinity_qc_agg:standard_name = 
"aggregate_quality_flag status_flag";
        sea_water_practical_salinity_qc_agg:missing_value = 2;
        sea_water_practical_salinity_qc_agg:flag_meanings = "PASS NOT_EVALUATED 
SUSPECT FAIL MISSING";
        sea_water_practical_salinity_qc_agg:flag_values = 1, 2, 3, 4, 9;

    int sea_water_practical_salinity_qc_flat_line_test(time, z);
        sea_water_practical_salinity_qc_flat_line_test:long_name = "Salinity 
Flat Line Test Flag";
        sea_water_practical_salinity_qc_flat_line_test:standard_name = 
"flat_line_test_quality_flag status_flag";
        sea_water_practical_salinity_qc_flat_line_test:missing_value = 2;
        sea_water_practical_salinity_qc_flat_line_test:flag_meanings = "PASS 
NOT_EVALUATED SUSPECT FAIL MISSING";
        sea_water_practical_salinity_qc_flat_line_test:flag_values = 1, 2, 3, 
4, 9;
```



-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/cf-convention/cf-conventions/issues/216#issuecomment-558878045

This list forwards relevant notifications from Github.  It is distinct from 
[email protected], although if you do nothing, a subscription to the 
UCAR list will result in a subscription to this list.
To unsubscribe from this list only, send a message to 
[email protected].

Reply via email to