Git Product home page Git Product logo

cdawmeta's Introduction

About

This package uses CDAWeb's metadata to create HAPI catalog and info, SPASE NumericalData, and SOSO dataset metadata.

It was originally developed to upgrade the metadata from CDAWeb's HAPI server (the existing server only includes the minimum required metadata).

As discussed in the SPASE section, the code was extended to remedy issues with existing SPASE NumericalData metadata for CDAWeb datasets.

The code reads and combines information from

  • all.xml, which has dataset-level information about ~2,500 datasets;
  • The Master CDF files (we use the JSON representation) referenced in all.xml, which contain both dataset-level metadata and variable metadata; and
  • The list of URLs associated with all CDF files associated with a dataset using the CDASR orig_data endpoint.
  • A CDF file referenced in the orig_data response (for computing cadence).

Comments on issues with CDAWeb metadata are in the CDAWeb section.

As discussed in the SPASE section, we abandoned our attempt to use existing SPASE records.

The code uses requests-cache, so files are only re-downloaded if the HTTP headers indicate they are needed. When metadata are downloaded, a diff is stored if they changed.

The output is

  1. HAPI metadata, which is based on all.xml, Master CDF, and orig_data metadata. (The cadence of the measurements for each dataset by sampling the last CDF file associated with the dataset and a histogram of the differences in timesteps.)

  2. SQL and MongoDB databases available with a search interface:

Also, not yet available in table form is

  1. proof-of-concept SOSO metadata (see soso/info). This metadata is derived using all.xml, Master CDF, orig_data, and HAPI metadata. We did not use SPASE records because of the issues described in the SPASE section. (Deriving part of the SOSO metadata from HAPI metadata is not ideal and was done for proof-of-concept purposes. The code could be modified to remove the dependency on HAPI metadata and use the SPASE NumericalData metadata generated using code in this repository.)

and

  1. proof-of-concept SPASE records that do not have most of the major issues described in SPASE section below (see spase_auto/info).

Installing and Running

git clone https://github.com/rweigel/cdawmeta.git
cd cdawmeta;
pip install -e .

In the following, use --update to update the input metadata (source data changes on the order of days, typically in the mornings Eastern time on weekdays).

See python metadata.py --help for more options, including generation of metadata for only ids that match a regular expression.

Examples

Create and display all metadata types for dataset AC_OR_SSC

python metadata.py --id AC_OR_SSC

Create and display HAPI metadata; the output of this command can be viewed at hapi/info/AC_OR_SSC.json

python metadata.py --id AC_OR_SSC --meta-type hapi

Create and display proof-of-concept SOSO; the output of this command can be viewed at soso/info/AC_OR_SSC.json

python metadata.py --id AC_OR_SSC --meta-type soso

Create and display proof-of-concept auto-generated SPASE; the output of this command can be viewed at spase_auto/info/AC_OR_SSC.json. See the cdawmeta repository for metadata used that is not available in Master CDFs and/or all.xml.

mkdir -p ./data;
python metadata.py --id AC_OR_SSC --meta-type spase_auto

Insert SPASE documents for CDAWeb dataset names that match ^A into a MongoDB and execute a query (requires installation of MongoDB):

python query.py --id '^A' \
 --filter '{"NumericalData.Parameter": { "$exists": true }}' \
 --mongod-binary ~/mongodb/bin/mongod --port 27018
# 45 documents found
# 40 documents match query

Create report based on content of the hpde.io repository.

mkdir -p ./data
git clone --depth 1 https://github.com/hpde/hpde.io ./data
python report.py --report-name hpde_io

CDAWeb

CDAWeb provides access to metadata used for its data services in the form of n all.xml, Master CDF. Their software engineers have provided essential guidance and insight into the development of HAPI metadata.

Although CDF files uploaded or pulled into CDAWeb from instrument teams typically are roughly compliant with their [https://spdf.gsfc.nasa.gov/istp_guide/istp_guide.html](ISTP metadata guidelines), there is a high variability. In many cases, "patches" to these CDF files are needed for the CDAWeb display and listing software to work. To address this, they create "Master CDFs,". In addition, CDAWeb data serice-specific metadata, such as plot rendering information used by their IDL processing code (posted in this repo because not available in a public searchable repo), is included. Also, variables used by the CDAWeb plotting software are often added. For example, suppose variable that depends on time, energy, and pitch angle is in the dataset CDFs. In that case, they may add one variable per pitch angle by defining a "VIRTUAL" variable, which is generated by a function defined in IDL code.

The Master CDFs are posted for external use, with caveats. From 0MASTERS/00readme.txt

The following collections of Master CDF files were generated from a single data CDF or netCDF, for each dataset, for use in the CDAWeb system (https://cdaweb.gsfc.nasa.gov).

They are provided to the public for easier viewing/searching the metadata and quantities available in the data sets.

In many cases the Master CDF is changed to improve the metadata in the original data files (especially to improve their compliance with the ISTP Metadata Guidelines), and often to add CDAWeb-specific metadata and addition plotting capabilities.

Since the Master files are created using skeletontable/skeletoncdf tools from a data file and not necessarily reviewed and edited (especially for historical datasets), THEY SHOULD BE USED WITH CAUTION.

We have found that few Master CDFs are fully ISTP convention compliant. Issues encountered have been posted to this repository issue tracker and many others were handled over email.

We suggest that the community would benefit if Master CDF metadata was improved. This would

  1. improve the quality of HAPI and SPASE metadata generated based on Master CDF metadata
  2. reduce duplication of effort by scientists and developers in handling non-compliance. For example,
    • pytplot accounts for the fact that both SI_CONVERSION and SI_CONV are used as attributes in Master CDFs, but they missed SI_conv, which is also found.
    • pytplot checks for only DISPLAY_TYPE but misses the fact that Display_Type and DISPLAYTYPE are also found in CDF Masters. The CDAWeb IDL library does not look for DISPLAYTYPE and neither does ADAPT.
    • pytplot accounts for DEPEND_TIME meaning the same thing as DEPEND_0. We missed this fact when developing HAPI metadata but could not find documentation to confirm it.
    • Autoplot/CdfUtil.java has worked around many CDF and Master CDF metadata issues. (See also CdfVirtualVars.java.
    • The CDAWeb HAPI server also contains workarounds.
    • The SPDF CDF Java library (posted in this repo because it is not available in a public SPDF repo) catches some, but not all CDF metadata issues. For example, it catches DEPEND_TIME, but misses the fact that Display_Type and DISPLAYTYPE (it seems awkward for a CDF file format library to handle special metadata cases)
    • The HAPI metadata generation code contains addresses many anomolies. See the files in the attrib directory and hapi.py. A log of issues encountered that affected HAPI metadata generation encountered is generated by this code. (Other ISTP non-compliance issues are not logged by default because they represent the majority of lines in the error log file.)
    • In the early days of SPASE, Jan Merka was creating SPASE records using CDAWeb metadata, and he encountered many of the same issues we did (which we learned recently).

We also recommend

  • documentation of known issues and suggested workarounds - many developers who have re-discover issues, or missed issues, would benefit;
  • an issue tracker, and encouragement by the community to use it, for CDAWeb metadata. Although CDAWeb is responsive to many reports on errors in Master CDFs, we have found in discussions that many developers have encountered the same issues and workarounds and have not reported them. With such a tracker, other developers would benefit from knowledge of issues, and for issues that will not be fixed, they will benefit from discussion on how to fully work around an issue; and
  • documentation of non-ISTP attributes so that users know if an attribute is important for interpretation.
  • a clearer indication of, or documentation about, attributes that are CDAWeb-software specific and the more general attributes.

Early indications are that much of this is out-of-scope of the CDAWeb project. For example, CDAWeb does not control the content of the files or quality of the files that they host and improving the metadata for use by non-CDAWeb software is not supported. However, addressing these issues will have a high impact on the quality of code and metadata downstream; if it is out-of-scope, leadership should find support for addressing these perennial issues.

SPASE

Our initial attempt was to generate HAPI metadata with SPASE records.

The primary issues related to HAPI are the first three. The others were noted in passing.

1 Completion

Only about 40% of CDAWeb datasets had SPASE records when we first considered using them for HAPI metadata in 2019. ~5 years later, there is ~70% coverage (however, as discussed below, the number of updated, correct, and without missing Parameters records is less). As a result, used metadata from all.xml, Master CDF, and orig_data.

The implication is that CDAWeb NumericalData SPASE records cannot be used for one of the intended purposes, which is to provide a structured representation of CDAWeb metadata; we needed to duplicate much of the effort that went into creating CDAWeb SPASE records in order to create a complete set of HAPI metadata.

2 Updates

The SPASE metadata is not updated frequently. There are instances where variables have been added to CDAWeb datasets but the SPASE records do not have them. Sometimes, SPASE records are missing variables, even for datasets that have not changed. Examples are given in the Parameter subsection.

The implication is that a scientist who executes a search backed by SPASE records may erroneously conclude that variables or datasets are unavailable.

Note that Bernie Harris has a resolver that could be used to insert the most up-to-date dataset variables.

3 Units

We considered using SPASE Units for variables when they were available because although CDAWeb Master metadata has a UNITS attribute, no consistent convention is followed for the syntax and in some cases, UNITS are not a scientific unit but a label (e.g. 0=good and <|V|>). This effort stopped when we noticed instances where the SPASE Units were wrong.

For example, AC_H2_ULE/unc_H_S1, has UNITS = '[fraction]' in the CDF Master and Units = '(cm^2 s sr MeV)^-1)' in SPASE. See a dump of the unique Master UNITS to SPASE Units pairs, which is explained in units.md.

The implication is a scientist using SPASE Units to label their plots risks the plot being incorrect.

CDAWeb includes links to SPASE records with incorrect units. For example, NotesA.html#AC_H2_SIS links to ACE/ULEIS/Ion/Fluxes/L2/PT1H.json.

There was a second complicating factor. Some SPASE records do not have Parameters for all VAR_TYPE=data.

Although there is more consistency in the strings used for SPASE Units, SPASE does not require the use of a standard for the syntax (such as VOUnits, udunits2, or QUDT). HAPI has the option to state the standard used for unit strings so that a validator can check and units-aware software (e.g., the AstroPy Units module) can use it to make automatic unit conversions when mathematical operations on are performed.

We concluded that if we wanted to represent CDAWeb variables in HAPI with units that adhered to a syntax so the string could be validated, we would need to:

  1. Determine the VOUnit representation of all unique units (~1000), if possible. See CDFUNITS_to_VOUNITS.csv.

  2. Determine the VOUnit for all variables that do not have a UNITS attribute or a UNITS value that is all whitespace (~20,000), which we label as "missing"; see Missing_UNITS.json. Although the ISTP conventions require units for variables with VAR_TYPE = data, ~20% of variables have "missing" UNITS.

  3. Validating determinations made for 1. and 2. are correct. This could done in two ways: (a) Have two people independently make determinations and (b) for case 1., use AstroPy to compute the SI conversion and compare with the SI_{conversion,conv,CONVERSION} (all three versions are found in CDF Masters and the ISTP convention documentation. I emphasize that results must be checked and verified. Putting incorrect units in metadata is unacceptable.

Finally, I think that the correct source of the updated units is not SPASE—it should be the CDF Masters; SPASE records should draw this information from the CDF Masters. Many people use CDF Masters for metadata, and if the VOUnits only existed in SPASE, they would have access to them. (For example, CDAWeb links to the Master file in the Metadata links and Autoplot, HAPI, etc. used Master CDF metadata.)

4 AccessInformation

The AccessInformation nodes are structured in a way that is misleading and clarification is needed.

  1. For example, ACE/Ephemeris/PT12M indicates that the Format for the first four AccessURL's is CDF, which not correct. The Name=CDAWebaccess URL has has many other format options. TheSSCWebaccess URL does not provideCDFand the names of the parameters at SSCWeb are not the same as those listed inParameters; and more parameters are available from SSCWeb. Finally, CSVis listed as the format for theStyle=HAPI AccessURL, but BinaryandJSON` are available.

Note that Bernie Harris has a web service that produces SPASE records with additional AccessInformation nodes, for example compare

I don't know Bernie's web service it is being used - although it is a service endpoint for heliophysicsdata.gsfc.nasa.gov/, it seems to not be used - for example, see the search result for AC_OR_SSC.

  1. There are CDAWeb SPASE NumericalData records with the ACE Science Center listed as an AccessURL (e.g., ACE/MAG/L2/PT16S). The variable names used in the ACE Science Center files and metadata differ from those listed in the Parameter node. This is confusing.

5 Parameter content

CDAWeb datasets may have variables with different DEPEND_0s, and the DEPEND_0 may have a different cadence. For example, VOYAGER1_10S_MAG has two DEPEND_0s:

However, the SPASE record lists both of these variables as having a cadence of PT9.6S.

The Resource ID convention suggests putting cadence in the ResourceID. However, no convention is suggested for how the cadence is rendered. For example, should one day be given as PT86400S or P1D? No convention is suggested for the amount of precision to use. Our SPASE generation code computes the cadence of a dataset by computing the histogram of the difference in time step and the most frequent time step is used. We have found that this automated process often finds a cadence that does not match the cadence in the ResourceID.

It is often found that SPASE records contain information that is only available from one of the AccessURLs. For example,

  • ACE/MAG/KeyParameter/PT1H references Time PB5. This is only available in the raw CDF files. No other `AccessURL's provide access to it.

  • ACE/MAG/L2/PT16S

    • references a CDAWeb page that has different names B-field magnitude vs. Bmagnitude and Magnitude in SPASE. Why?
    • sigmaB is mentioned at Caltech pages, not in SPASE.
    • What is the relationship between the Caltech data and CDAWeb data? Which should I use?
    • Time PB5 is listed in SPASE record, it is not available from 4 of the 5 `AccessURL's:

https://spdf.gsfc.nasa.gov/pub/data/ace/mag/level_2_cdaweb/mfi_h0/

X https://cdaweb.gsfc.nasa.gov/cgi-bin/eval2.cgi?dataset=AC_H0_MFI&index=sp_phys

X https://cdaweb.gsfc.nasa.gov/hapi

X ftp://mussel.srl.caltech.edu/pub/ace/level2/mag/

X https://izw1.caltech.edu/ACE/ASC/level2/lvl2DATA_MAG.html

  • In OMNI/PT1H,

    • columns are referenced, but this does not apply to all `AccessURL's,
    • the table is not same as shown in omni2.text (new annotations added), and
    • SPASE does not reference column 55, which is mentioned in omni2.text.

This is a complicated problem. We are considering also serving CDF data of type VAR_DATA=support_data. In this case, the HAPI metadata will reference many more parameters than found in SPASE and the SPASE record will be inconsistent with the HAPI metadata.

6 Odd differences in text

PIs writing has been modified (I'm assuming PI did not request the SPASE Description to be a modified version of what is in the CDF):

TEXT node in the CDF Master

This file contains the moments obtained from the distribution function of protons after deconvolution using the same magnetic field values used to construct the matrices. The vector magnetic field and the particle velocity are given in inertial RTN coordinates. ...

Description node in the corresponding SPASE record

This File contains the Moments obtained from the Distribution Function of Protons after Deconvolution using the same Magnetic Field Values used to construct the Matrices. The Vector Magnetic Field and the Particle Velocity are given in Inertial RTN Coordinates. ...

My opinion is that only in rare circumstances should information not in all.xml, the Master CDF, a paper, or the PIs web page, or written by someone on the instrument team be in SPASE without. Also, when content is taken from papers and web pages, it should be indicated.

7 StopDate

The StopDate's are relative even though the actual stop date is available in [all.xml](https://spdf.gsfc.nasa.gov/pub/catalogs/all.xml). Given that many SPASE records have not been updated in years, it is likely that the relative StopDate` is wrong in some cases (due to, for example, no more data being produced).

8 Allowing queries of content of hpde.io repository

At least four developers have written code to ingest the contents of the hpde.io git repository to extract information. The contents of the hpde.io represent a database and as such should be stored in one (a source code repository is not a database). We suggest that (hpde.io)(https://hpde.io/) provide a query interface so that, e.g.,

https:/hpde.io/?q={"Version": 2.4.1}

would be allowed, using, for example MongoDB, eXist-db, or PostgreSQL. Note that Bernie Harris already runs an eXist database containing SPASE:

... so it searches the spase documents for ones with //AccessInformation/AccessURL[name = ‘CDAWeb’ and ProductKey = ‘whatever’]. "Sufficiently described" meant that the cdaweb information was in the spase documents. At the time that code was written, there were many cdaweb datasets that didn't have spase descriptions or the spase descriptions didn't contain the cdaweb access information. Even now, spase is usually missing the most recent cdaweb datasets but it's not too far behind.

This https://heliophysicsdata.gsfc.nasa.gov/queries/index_resolver.html describes a resolver service. To get all datasets at once, you might want to use https://heliophysicsdata.gsfc.nasa.gov/queries/CDAWeb_SPASE.html. Also note that https://cdaweb.gsfc.nasa.gov/WebServices/REST/#Get_Datasets returns the spase ResourceID. For example,

$ curl -s -H "Accept: application/json" "https://cdaweb.gsfc.nasa.gov/WS/cdasr/1/dataviews/sp_phys/datasets?idPattern=AC_H0_MFI" |jq -jr '.DatasetDescription[]|(.Id,", ",.SpaseResourceId,"\n")'

9 Inconsistent ObservedRegion

Each CDAWeb dataset in the form a_b_c should have the same Region as a dataset that starts with a_y_z (unless an instrument was not active while the spacecraft was in certain regions). This is frequently not the case; see the error messages in hpde_io.log.

For example

VOYAGER1_48S_MAG-VIM: ['Heliosphere.Outer', 'Heliosphere.Heliosheath']
VOYAGER2_PLS_COMPOSITION: ['Jupiter.Magnetosphere']

10 Inconsistent InformationURLs

InformationURL.json contains keys of a URL in an InformationURL node and an array with all CDAWeb datasets it is associated with. There are many instances where a URL should apply to additional datasets. For example, all dataset IDs that end in _SSC, _DEF, and _POSITION should be associated with https://sscweb.gsfc.nasa.gov. Also, the Master CDFs contain information URLs that do not appear in CDAWeb SPASE NumericalData records. This represents an unnecessary loss of information.

11 Conclusion

Although HAPI has an additionalMetadata attribute, we are reluctant to reference existing SPASE records due to these issues (primarily 2., 3., and 5.). We conclude that it makes more sense to link to less extensive but correct metadata (for example, to CDF Master metadata or documentation on the CDAWeb website*, than to more extensive SPASE metadata that is confusing (see 4.) or incomplete and in some cases incorrect (see items 2., 3., and 5.).

* This is not quite possible - CDAWeb includes links to SPASE records that

The primary problem with existing CDAWeb NumericalData SPASE records is

  1. that they appear to have been created ad-hoc by different authors who follow different conventions and include different levels of detail, and
  2. there is no automated mechanism for updating or syncing the SPASE records with CDAWeb metadata.

The problem is not the difficulty in writing NumericalData. These should be primarily auto-generated. Having people write them by copy/paste of existing CDAWeb metadata ensures errors and discrepancies will be introduced and that they will be soon out-of-date. There is now in edit option for SPASE NumericalData records at https://hpde.io/ (example). However, NumericalData records should be auto-generated and any additional information should be stored in an external, version controlled file. This file should be edited and daily updates of NumericalData records should draw from the file.

CDAWeb SPASE NumericalData records have been under development since 2009 and yet these problems persist. At their rate of generation, they will not be complete until 2030. I suggest a different approach is needed.

After encountering the issues described in parts 1.-3. of this section, we realized that solving all of the problems could be achieved with some additions to the existing CDAWeb to HAPI metadata code and the the creation of a table that contains metadata that does not exist, and is not desired to be in, CDAWeb metadata.

We suggest that CDAWeb SPASE metadata should be created by this automated process, which requires primarily existing CDAWeb metadata information and some additional metadata that can be stored in a few version controlled. Thus information is described in the cdawmeta-additions repository. This approach would have prevented the errors and inconsistencies described above and further detailed in the cdawmeta-additions README

Note that not all existing content in hpde.io is yet used by the automated process. For example, some SPASE records have additional details about CDAWeb variables that the automated process does not use. For example, Qualifier, RenderingHints, CoordinateSystem, SupportQuantity, and Particle, Field, etc. This could also be addressed by a table that has this information. However, there should be discussion of this; there are over ~100,000 CDAWeb variables and the search use case for much of this information is not clear; not having this information should not prevent the 15-year effort to create correct and up-to-date SPASE NumericalData records. That is, if only 10% of SPASE records have a given attribute, a search on it will not be useful. Also, some of the not-yet used metadata is not useful for search, such as Valid{Min,Max}, FillValue, and RenderingHints. This information would be useful if the SPASE record was being used for automated extraction and plotting. However, much more information is needed to enable automated extraction and even then (as we found with attempts to use SPASE for HAPI), given the issues described above, this may not be possible or too time consuming. If it were possible, an application that uses it and could test the results should be identified first. As noted above, metadata that is not used by an application is likely to have problems.

cdawmeta's People

Contributors

rweigel avatar

Watchers

 avatar Jeremy Faden avatar

cdawmeta's Issues

ISTP documentation of SI_CONVERSION

From https://spdf.gsfc.nasa.gov/istp_guide/vattributes.html, "ISTP attribute names must be capitalized".

Are some of the names in the first table not ISTP attributes?

Also, a while back, I mentioned the mixed usage of SI_conv and SI_conversion at https://spdf.gsfc.nasa.gov/istp_guide/vattributes.html. https://caa.esac.esa.int/documents/DS-QMW-TN-0010.pdf uses SI_CONVERSION, which seems more consistent with "ISTP attribute names must be capitalized".

The counts of each attribute SI conversion-related term found in masters is (out of a total of 108k variables)

SI_conv, 8246
SI_conversion, 11703
SI_CONVERSION, 13903

The document states

to convert to Tesla the value of SI_conv will be '1.0e-9>Tesla'"

In https://caa.esac.esa.int/documents/DS-QMW-TN-0010.pdf, they give an example of SI_CONVERSION="1.0e-9>T", which I think is correct (T not Tesla).

See also https://lasp.colorado.edu/galaxy/display/mms/Units+of+Measure

and a 2015 email thread with title FYI MMS SODAWG

DEPEND_0s that vary with time, but not within a file: FA_ESA_L2_EEB

Parameter data has DEPEND_1 and DEPEND_2 of pitch_angle_median and energy_median, respectively, both of which have RecVariance of VARY.

They have DEPEND_0s of compno_64 and compno_96, each with RecVariance of NOVARY.

I don't understand why the DEPEND_1 and DEPEND_2 have RecVariances of VARY.

From https://spdf.gsfc.nasa.gov/pub/software/cdf/doc/cdf360/cdf360crm.pdf

4.9 Record/Dimension Variances

Record and dimension variances affect how variable data values are physically stored.

VARY True record or dimension variance.

NOVARY False record or dimension variance.

If a variable has a record variance of VARY, then each record for that variable is physically stored. If the record variance is NOVARY, then only one record is physically stored. (All of the other records are virtual and contain the
same values.)

If a variable has a dimension variance of VARY, then each value/subarray along that dimension is physically stored. If the dimension variance is NOVARY, then only one value/subarray along that dimension is physically stored. (All other values/subarrays along that dimension are virtual and contain the same values.)

BAR_2L_L2_HKPG has parameters with no DEPEND_0

BAR_2L_L2_HKPG
{'V3_POS_DPU', 'I0_TotalLoad', 'timeOffset', 'V2_Solar1', 'T5_DPU', 'T14_TermCap', 'V6_NEG_XRayDet', 'I6_NEG_XRayDet', 'V9_Solar2', 'T12_TermTemp', 'V8_Mag', 'V7_NEG_DPU', 'I5_Modem', 'T2_ChargeCont', 'V11_Solar4', 'T8_Solar1', 'T1_Mag', 'T0_Scint', 'T6_Modem', 'T9_Solar2', 'dcdCounter', 'I7_NEG_DPU', 'T3_Battery', 'V10_Solar3', 'T15_CCStat', 'numOfSats', 'V5_Modem', 'cmdCounter', 'T11_Solar4', 'V4_POS_XRayDet', 'T13_TermBatt', 'termStatus', 'I3_POS_DPU', 'modemCounter', 'T4_PowerConv', 'V1_Battery', 'I2_Solar1', 'weeks', 'I4_POS_XRayDet', 'T7_Structure', 'I1_TotalSolar', 'T10_Solar3', 'V0_VoltAtLoad'}

Missing VAR_TYPE or VarAttributes

In the following, I dropped ParticleDir_SM because one of its DEPEND_2 variable (NumAxisFixed) does not have a VAR_TYPE. In principle, knowing the VAR_TYPE is not needed because it is a DEPEND variable. Given that ISTP says VAR_TYPE is required, this seems to be a metadata error.

I noticed also that NumAxis does not have a VAR_TYPE. I think it did not cause a problem because it is used as a label pointer.

RBSP-A-RBSPICE_LEV-3_TOFXEH
RBSP-B-RBSPICE_LEV-3_TOFXEH
RBSP-A-RBSPICE_LEV-3_TOFXEION
RBSP-B-RBSPICE_LEV-3_TOFXEION
RBSP-A-RBSPICE_LEV-3_TOFXENONH
RBSP-B-RBSPICE_LEV-3_TOFXENONH
RBSP-A-RBSPICE_LEV-3_TOFXPHHHELT
RBSP-B-RBSPICE_LEV-3_TOFXPHHHELT
RBSP-A-RBSPICE_LEV-3_TOFXPHHLEHT
RBSP-B-RBSPICE_LEV-3_TOFXPHHLEHT
RBSP-A-RBSPICE_LEV-3_ESRHELT
RBSP-B-RBSPICE_LEV-3_ESRHELT
RBSP-A-RBSPICE_LEV-3_ESRLEHT
RBSP-B-RBSPICE_LEV-3_ESRLEHT
RBSP-A-RBSPICE_LEV-3_ISRHELT
RBSP-B-RBSPICE_LEV-3_ISRHELT

Full list

STB_L1_STE

Error: Dropping variable "STE_spectra_LABL_1" b/c it has no VarAttributes

DE2_WIND2S_WATS

Error: Dropping variable "Mass" b/c it has no has no VAR_TYPE

--

GPS_RF_LANL-VTEC-1HR

Error: Dropping variable "lat_bounds" b/c it has no has no VAR_TYPE

GPS_RF_LANL-VTEC-1HR

Error: Dropping variable "lon_bounds" b/c it has no has no VAR_TYPE

--

RBSP-A-RBSPICE_LEV-3_TOFXEH

Error: Dropping variable "NumAxis" b/c it has no has no VAR_TYPE

RBSP-A-RBSPICE_LEV-3_TOFXEH

Error: Dropping variable "NumAxisFixed" b/c it has no has no VAR_TYPE

RBSP-B-RBSPICE_LEV-3_TOFXEH

Error: Dropping variable "NumAxis" b/c it has no has no VAR_TYPE

RBSP-B-RBSPICE_LEV-3_TOFXEH

Error: Dropping variable "NumAxisFixed" b/c it has no has no VAR_TYPE

RBSP-A-RBSPICE_LEV-3_TOFXEION

Error: Dropping variable "NumAxis" b/c it has no has no VAR_TYPE

RBSP-A-RBSPICE_LEV-3_TOFXEION

Error: Dropping variable "NumAxisFixed" b/c it has no has no VAR_TYPE

RBSP-B-RBSPICE_LEV-3_TOFXEION

Error: Dropping variable "NumAxis" b/c it has no has no VAR_TYPE

RBSP-B-RBSPICE_LEV-3_TOFXEION

Error: Dropping variable "NumAxisFixed" b/c it has no has no VAR_TYPE

RBSP-A-RBSPICE_LEV-3_TOFXENONH

Error: Dropping variable "NumAxis" b/c it has no has no VAR_TYPE

RBSP-A-RBSPICE_LEV-3_TOFXENONH

Error: Dropping variable "NumAxisFixed" b/c it has no has no VAR_TYPE

RBSP-B-RBSPICE_LEV-3_TOFXENONH

Error: Dropping variable "NumAxis" b/c it has no has no VAR_TYPE

RBSP-B-RBSPICE_LEV-3_TOFXENONH

Error: Dropping variable "NumAxisFixed" b/c it has no has no VAR_TYPE

RBSP-A-RBSPICE_LEV-3_TOFXPHHHELT

Error: Dropping variable "NumAxis" b/c it has no has no VAR_TYPE

RBSP-A-RBSPICE_LEV-3_TOFXPHHHELT

Error: Dropping variable "NumAxisFixed" b/c it has no has no VAR_TYPE

RBSP-B-RBSPICE_LEV-3_TOFXPHHHELT

Error: Dropping variable "NumAxis" b/c it has no has no VAR_TYPE

RBSP-B-RBSPICE_LEV-3_TOFXPHHHELT

Error: Dropping variable "NumAxisFixed" b/c it has no has no VAR_TYPE

RBSP-A-RBSPICE_LEV-3_TOFXPHHLEHT

Error: Dropping variable "NumAxis" b/c it has no has no VAR_TYPE

RBSP-A-RBSPICE_LEV-3_TOFXPHHLEHT

Error: Dropping variable "NumAxisFixed" b/c it has no has no VAR_TYPE

RBSP-B-RBSPICE_LEV-3_TOFXPHHLEHT

Error: Dropping variable "NumAxis" b/c it has no has no VAR_TYPE

RBSP-B-RBSPICE_LEV-3_TOFXPHHLEHT

Error: Dropping variable "NumAxisFixed" b/c it has no has no VAR_TYPE

RBSP-A-RBSPICE_LEV-3_ESRHELT

Error: Dropping variable "NumAxis" b/c it has no has no VAR_TYPE

RBSP-A-RBSPICE_LEV-3_ESRHELT

Error: Dropping variable "NumAxisFixed" b/c it has no has no VAR_TYPE

RBSP-B-RBSPICE_LEV-3_ESRHELT

Error: Dropping variable "NumAxis" b/c it has no has no VAR_TYPE

RBSP-B-RBSPICE_LEV-3_ESRHELT

Error: Dropping variable "NumAxisFixed" b/c it has no has no VAR_TYPE

RBSP-A-RBSPICE_LEV-3_ESRLEHT

Error: Dropping variable "Position_SM_Axis_Label" b/c it has no has no VAR_TYPE

RBSP-A-RBSPICE_LEV-3_ESRLEHT

Error: Dropping variable "NumAxis" b/c it has no has no VAR_TYPE

RBSP-A-RBSPICE_LEV-3_ESRLEHT

Error: Dropping variable "NumAxisFixed" b/c it has no has no VAR_TYPE

RBSP-B-RBSPICE_LEV-3_ESRLEHT

Error: Dropping variable "Position_SM_Axis_Label" b/c it has no has no VAR_TYPE

RBSP-B-RBSPICE_LEV-3_ESRLEHT

Error: Dropping variable "NumAxis" b/c it has no has no VAR_TYPE

RBSP-B-RBSPICE_LEV-3_ESRLEHT

Error: Dropping variable "NumAxisFixed" b/c it has no has no VAR_TYPE

RBSP-A-RBSPICE_LEV-3_ISRHELT

Error: Dropping variable "NumAxis" b/c it has no has no VAR_TYPE

RBSP-A-RBSPICE_LEV-3_ISRHELT

Error: Dropping variable "NumAxisFixed" b/c it has no has no VAR_TYPE

RBSP-B-RBSPICE_LEV-3_ISRHELT

Error: Dropping variable "NumAxis" b/c it has no has no VAR_TYPE

RBSP-B-RBSPICE_LEV-3_ISRHELT

Error: Dropping variable "NumAxisFixed" b/c it has no has no VAR_TYPE

--

STA_L1_STE

Error: Dropping variable "STE_detector" b/c it has no has no VAR_TYPE

--

STB_L1_STE

Error: Dropping variable "STE_detector" b/c it has no has no VAR_TYPE

Should there be better consistency in attribute names?

To create the SQL table of CDAWeb dataset and variable level metadata, we had to treat certain attributes that differed only by case as equivalent because (a.) SQL column names are case insensitive, and we did not want additional columns. In doing this, we noticed many attributes with multiple representations in different cases. However, the ISTP documentation indicates that ISTP attributes should be all caps, but this is not always the case, and no documentation indicates the case should be ignored.

There are also attribute names that are similar but not case-insensitive equivalent. In README.md, we give examples of source code where the authors catch some, but not all, variations on attributes.

The reaming mapping we use is (cdaweb.table.variable_attributes.fixes.json).

FILLVALs

(More details are in email. Search on title for "FILLVALUEs")

The primary issue is that the ISTP conventions require using -1e31 for FILLVAL for CDF_FLOAT and CDF_REAL4 data types, but -1e31 cannot be represented exactly; See https://www.h-schmidt.net/FloatConverter/IEEE754.html, which shows "Value actually stored in float = -9.99999984824320729510959E+30".

This issue has resulted in problems at various times when a fill value of -1e31 is cast as a double, it will not match CDF_FLOAT values cast as doubles (which won't be exactly -1e31). This seems to have been noticed by a CDAWlib developer

I recommend that the ISTP conventions documentation is updated to note that the -1e31 is recommended for CDF_FLOAT and CDF_REAL4, it cannot be represented exactly and so care must be taken.

Other notes:

These FILLVALs are suspect (related to the CDF_FLOAT/-1e31 issue described above):

Nand often has FILL=-2.14748006E9 for integer type variables. To see the occurrences, search the logfile for -2.14748006E9. I suspect the reason is similar to that in item 3. below. I also see Nand having a fill of 99999.9 when the master has 100000.0 and also NaN when the master has -1e+31. (Search on the logfile for 99999.9 and NaN).

wi_epact_step-differential-ion-flux-1hr DEPEND_2

https://cdaweb.gsfc.nasa.gov/pub/software/cdawlib/0SKELTABLES/wi_epact_step-differential-ion-flux-1hr_00000000_v01.skt

Given that other variables, such as H_energy_center have DEPEND_2 = TELESCOPE_index, I would regard the fact that He_energy_center has no DEPEND_2 as an error. I tried to plot He_energy_center with CDAWeb and got

"He_energy_center data are all fill: reselect time range. Or metadata depend values are missing."

However, I know they are not all fill because I could plot HE_ENERGY_CENTER_T1.

Handling the `FORMAT` attribute

For the HAPI server when output=csv is used, we would like to use the precision part when printing floating point values when the variable has a FORMAT or FORM_PTR attribute.

Two places that seem to handle the FORMAT value are

The following code produces the table that follows it. The first column of the table is the given FORMAT and the third column is the parsed format. If the parsed value is '', the FORMAT value did not have precision information or was invalid. The plan is to include a x_FORMAT attribute in the metadata for a HAPI parameter if a valid one exists. If none exists for a parameter of type=double,.7g will be used if the parameter was stored in the CDF as a 32-bit float and .16g will be used for 32-bit floats (as done in CDAWlib). Note that Nand uses .3e for both, which does not seem to be a good choice.

Values of ? and in the first column were not actually in CDF Master metadata. For the SQL table, ? was inserted for all ISTP attributes when a variable had no VariableAttributes (e.g., https://hapi-server.org/meta/cdaweb/#FORMAT=?) and was inserted when FORMAT=' ' (a single space).

Please review the output of the code at the bottom of this page.

If you want to determine where a given format specifer occurs, use, for example

import re

def f2c_specifier(f_template, cdf_type):

  """Extract the precision part of a Fortran format string found as a FORMAT
  value. 
  """

  # See also
  # https://github.com/rweigel/CDAWlib/blob/952a28b08658413081e75714bd3b9bd3ba9167b9/cdfjson__define.pro#L132
  # https://git.smce.nasa.gov/spdf/hapi-nand/-/blob/main/src/java/org/hapistream/hapi/server/cdaweb/CdawebUtil.java?ref_type=heads#L23

  if isinstance(f_template, list):
    fmts = []
    for f in f_template:
      fmt = f2c_specifier(f, cdf_type)
      if fmt == "":
        # If any not valid, don't use any
        return ""
      else:
        fmts.append(fmt)
    return fmts

  defaults = {
    'CDF_FLOAT': '.7g',
    'CDF_DOUBLE': '.17g',
    'CDF_REAL4': '.7g',
    'CDF_REAL8': '.17g'
  }

  f_template = f_template.lower().strip()
  if f_template == "":
    return ""

  # No precision.
  if "." not in f_template:
    return ""

  # Drop any string or integer related format string.
  fmt = re.sub(r".*[a|s|c|z|b|i].*", "", f_template)
  if fmt == "":
    return fmt

  # e.g., E11.4 => .4e, F8.1 => .1f
  fmt = re.sub(r".*([f|e|g])([0-9].*)\.([0-9].*)", r".\3\1", f_template)

  # Test the format string
  try:
    templ = "{:" + fmt + "}"
    templ.format(1.0)
  except:
    #print("Failed: " + fmt)
    return ""

  return fmt

if __name__ == "__main__":
  import cdawmeta
  kwargs = {
    "id": None,
    "data_dir": "../data",
    "embed_data": True,
    "update": False,
    "max_workers": 1,
    "diffs": False,
    "restructure_master": True,
    "no_spase": True,
    "no_orig_data": True
  }
  meta = cdawmeta.metadata(**kwargs)

  formats = []
  for id in meta.keys():
    if "master" not in meta[id]:
      continue
    master = meta[id]["master"]['data']
    if master is None or "CDFVariables" not in master:
      continue
    variables = master['CDFVariables']
    for variable_name, variable in variables.items():
      if "VarAttributes" not in variable:
        continue
      if "VarDescription" not in variable:
        continue
      if 'DataType' in variable['VarDescription']:
        cdf_type = variable['VarDescription']['DataType']
      else:
        continue

      if 'FORMAT' in variable['VarAttributes']:
        format = variable['VarAttributes']['FORMAT']
        formats.append(f"{format}; {cdf_type}; {f2c_specifier(format, cdf_type)}")

      if 'FORM_PTR' in variable['VarAttributes']:
        FORM_PTR = variable['VarAttributes']['FORM_PTR']
        if FORM_PTR in variables:
          variable = variables[FORM_PTR]
          if 'VarData' in variable:
            VarData = variable['VarData']
            if VarData[0][0:2] == '10':
              # https://github.com/rweigel/cdawmeta/issues/11
              print(id, variable_name, VarData)
            format = ", ".join(variable['VarData'])
            formats.append(f"{format}; {cdf_type}; {','.join(f2c_specifier(VarData, cdf_type))}")

  uniques = list(set(formats))
  for unique in uniques:
    unique = unique.split("; ")
    if len(unique[0].split(",")) > 1:
      if len(unique[2].split(",")) == 0:
        print(f"[{unique[0]}] {unique[1]}' => ''")
      else:
        print(f"[{unique[0]}] {unique[1]}' => [{unique[2]}]")
    else:
      print(f"'{unique[0]}' {unique[1]} => '{unique[2]}'")
VOYAGER1_PLS_ELECTRONS_E1 Channel ['10   - 14,5.............', '14.5 - 19.3.............', '19.3 - 24.5.............', '24.5 - 30...............', '30   - 36...............', '36   - 42.4.............', '42.4 - 49.3.............', '49.3 - 56.7.............', '56.7 - 64.7.............', '64.7 - 73.2.............', '73.2 - 82.4.............', '82.4 - 92.3.............', '92.3 - 102.9............', '102.9 - 114.3...........', '114.3 - 126.6...........', '126.6 - 139.7...........']
VOYAGER1_PLS_ELECTRONS_E2 Channel ['10   - 14,5.............', '14.5 - 19.3.............', '19.3 - 24.5.............', '24.5 - 30...............', '30   - 36...............', '36   - 42.4.............', '42.4 - 49.3.............', '49.3 - 56.7.............', '56.7 - 64.7.............', '64.7 - 73.2.............', '73.2 - 82.4.............', '82.4 - 92.3.............', '92.3 - 102.9............', '102.9 - 114.3...........', '114.3 - 126.6...........', '126.6 - 139.7...........']
VOYAGER1_PLS_IONS_L Channel ['10.0 - 30.0.............', '30.0 - 56.7.............', '56.7 - 92.3.............', '92.3 - 139.7............', '139.7 - 203.0...........', '203.0 - 287.4...........', '287.4 - 399.9...........', '399.9 - 550.0...........', '550.0 - 750.1...........', '750.1 - 1016.9..........', '1017.0 - 1372.0.........', '1372.0 - 1847.3.........', '1847.3 - 2480.1.........', '2480.1 - 3324.0.........', '3324.0 - 4449.3.........', '4449.3 - 5949.9.........']
VOYAGER1_PLS_IONS_M Channel ['10.0 -12.2..............', '12.2 - 14.5.............', '14.5 - 16.8.............', '16.8 - 19.3.............', '19.3 - 21.8.............', '21.8 - 24.5.............', '24.5 - 27.2.............', '27.2 - 30.0.............', '30.0 - 32.9.............', '32.9 - 36.0.............', '36.0 - 39.1.............', '39.1 - 42.4.............', '42.4 - 45.8.............', '45.8 - 49.3.............', '49.3 - 52.9.............', '52.9 - 56.7.............', '56.7 - 60.6.............', '60.6 - 64.7.............', '64.7 - 68.9.............', '68.9 - 73.2.............', '73.2 - 77.7.............', '77.7 - 82.4.............', '82.4 - 87.2.............', '87.2 - 92.3.............', '92.3 - 97.5.............', '97.5 - 102.9............', '102.9 - 108.5...........', '108.5 - 114.3...........', '114.3 - 120.3...........', '120.3 - 126.5...........', '126.5 - 133.0...........', '133.0 - 139.7...........', '139.7 - 146.7...........', '146.7 - 153.9...........', '153.9 - 161.3...........', '161.3 - 169.1...........', '169.0 - 177.1...........', '177.1 - 185.4...........', '185.4 - 194.0...........', '194.0 - 202.9...........', '202.9 - 212.3...........', '212.3 - 221.9...........', '221.9 - 238.1...........', '231.8 - 242.1...........', '242.1 - 252.8...........', '252.8 - 263.9...........', '263.9 - 275.4...........', '275.4 - 287.3...........', '287.3 - 299.7...........', '299.7 - 312.5...........', '312.5 - 325.8...........', '325.8 - 339.6...........', '339.6 - 353.8...........', '353.8 - 368.6...........', '368.6 - 383.9...........', '383.9 - 399.9...........', '399.9 - 416.3...........', '416.3 - 433.4...........', '433.4 - 451.1...........', '451.1 - 469.5...........', '469.5 - 488.5...........', '488.5 - 508.2...........', '508.2 - 528.7...........', '528.7 - 549.9...........', '549.9 - 571.9...........', '571.9 - 594.6...........', '594.6 - 618.3...........', '618.3 - 642.7...........', '642.7 - 668.1...........', '668.1 - 694.4...........', '694.4 - 721.7...........', '721.7 - 749.9...........', '749.9 - 779.2...........', '779.2 - 809.6...........', '809.6 - 841.1...........', '841.1 - 873.8...........', '873.8 - 907.6...........', '907.6 - 942.7...........', '942.7 - 979.0...........', '979.0 - 1016.7..........', '1016.7 - 1055.8.........', '1055.8 - 1096.3.........', '1096.3 - 1138.3.........', '1138.3 - 1181.8.........', '1181.8 - 1226.9.........', '1226.9 - 1273.7.........', '1273.7 - 1322.2.........', '1322.2 - 1372.5.........', '1372.5 - 1424.6.........', '1424.6 - 1478.6.........', '1478.6 - 1534.6.........', '1534.6 - 1592.6.........', '1592.6 - 1652.8.........', '1652.8 - 1715.2.........', '1715.2 - 1779.8.........', '1779.8 - 1846.8.........', '1846.8 - 1916.3.........', '1916.3 - 1988.4.........', '1988.4 - 2063.0.........', '2063.0 - 2140.4.........', '2140.4 - 2220.7.........', '2220.7 - 2303.8.........', '2303.8 - 2390.1.........', '2390.1 - 2479.4.........', '2479.4 - 2572.1.........', '2572.1 - 2668.1.........', '2668.1 - 2676.7.........', '2676.7 - 2870.9.........', '2870.9 - 2977.9.........', '2977.9 - 3088.8.........', '3088.8 - 3203.8.........', '3203.8 - 3322.9.........', '3322.9 - 3446.5.........', '3446.5 - 3574.6.........', '3574.6 - 3707.4.........', '3707.4 - 3845.0.........', '3845.0 - 3987.7.........', '3987.7 - 4135.6.........', '4135.6 - 4288.9.........', '4288.9 - 4447.8.........', '4447.8 - 4612.6.........', '4612.6 - 4783.4.........', '4783.4 - 4960.4.........', '4960.4 - 5143.9.........', '5143.9 - 5334.2.........', '5334.2 - 5531.4.........', '5531.4 - 5735.9.........', '5735.9 - 5947.8.........']
VOYAGER2_PLS_ELECTRONS_E1 Channel ['10   - 14,5.............', '14.5 - 19.3.............', '19.3 - 24.5.............', '24.5 - 30...............', '30   - 36...............', '36   - 42.4.............', '42.4 - 49.3.............', '49.3 - 56.7.............', '56.7 - 64.7.............', '64.7 - 73.2.............', '73.2 - 82.4.............', '82.4 - 92.3.............', '92.3 - 102.9............', '102.9 - 114.3...........', '114.3 - 126.6...........', '126.6 - 139.7...........']
VOYAGER2_PLS_ELECTRONS_E2 Channel ['10   - 14,5.............', '14.5 - 19.3.............', '19.3 - 24.5.............', '24.5 - 30...............', '30   - 36...............', '36   - 42.4.............', '42.4 - 49.3.............', '49.3 - 56.7.............', '56.7 - 64.7.............', '64.7 - 73.2.............', '73.2 - 82.4.............', '82.4 - 92.3.............', '92.3 - 102.9............', '102.9 - 114.3...........', '114.3 - 126.6...........', '126.6 - 139.7...........']
VOYAGER2_PLS_IONS_L Channel ['10.0 - 30.0.............', '30.0 - 56.7.............', '56.7 - 92.3.............', '92.3 - 139.7............', '139.7 - 203.0...........', '203.0 - 287.4...........', '287.4 - 399.9...........', '399.9 - 550.0...........', '550.0 - 750.1...........', '750.1 - 1016.9..........', '1016.9 - 1372.8.........', '1372.8 - 1847.3.........', '1847.3 - 2480.1.........', '2480.1 - 3324.0.........', '3324.0 - 4449.3.........', '4449.3 - 5949.9.........']
VOYAGER2_PLS_IONS_M Channel ['10.0 -12.2..............', '12.2 - 14.5.............', '14.5 - 16.8.............', '16.8 - 19.3.............', '19.3 - 21.8.............', '21.8 - 24.5.............', '24.5 - 27.2.............', '27.2 - 30.0.............', '30.0 - 32.9.............', '32.9 - 36.0.............', '36.0 - 39.1.............', '39.1 - 42.4.............', '42.4 - 45.8.............', '45.8 - 49.3.............', '49.3 - 52.9.............', '52.9 - 56.7.............', '56.7 - 60.6.............', '60.6 - 64.7.............', '64.7 - 68.9.............', '68.9 - 73.2.............', '73.2 - 77.7.............', '77.7 - 82.4.............', '82.4 - 87.2.............', '87.2 - 92.3.............', '92.3 - 97.5.............', '97.5 - 102.9............', '102.9 - 108.5...........', '108.5 - 114.3...........', '114.3 - 120.3...........', '120.3 - 126.5...........', '126.5 - 133.0...........', '133.0 - 139.7...........', '139.7 - 146.7...........', '146.7 - 153.9...........', '153.9 - 161.3...........', '161.3 - 169.1...........', '169.0 - 177.1...........', '177.1 - 185.4...........', '185.4 - 194.0...........', '194.0 - 202.9...........', '202.9 - 212.3...........', '212.3 - 221.9...........', '221.9 - 238.1...........', '231.8 - 242.1...........', '242.1 - 252.8...........', '252.8 - 263.9...........', '263.9 - 275.4...........', '275.4 - 287.3...........', '287.3 - 299.7...........', '299.7 - 312.5...........', '312.5 - 325.8...........', '325.8 - 339.6...........', '339.6 - 353.8...........', '353.8 - 368.6...........', '368.6 - 383.9...........', '383.9 - 399.9...........', '399.9 - 416.3...........', '416.3 - 433.4...........', '433.4 - 451.1...........', '451.1 - 469.5...........', '469.5 - 488.5...........', '488.5 - 508.2...........', '508.2 - 528.7...........', '528.7 - 549.9...........', '549.9 - 571.9...........', '571.9 - 594.6...........', '594.6 - 618.3...........', '618.3 - 642.7...........', '642.7 - 668.1...........', '668.1 - 694.4...........', '694.4 - 721.7...........', '721.7 - 749.9...........', '749.9 - 779.2...........', '779.2 - 809.6...........', '809.6 - 841.1...........', '841.1 - 873.8...........', '873.8 - 907.6...........', '907.6 - 942.7...........', '942.7 - 979.0...........', '979.0 - 1016.7..........', '1016.7 - 1055.8.........', '1055.8 - 1096.3.........', '1096.3 - 1138.3.........', '1138.3 - 1181.8.........', '1181.8 - 1226.9.........', '1226.9 - 1273.7.........', '1273.7 - 1322.2.........', '1322.2 - 1372.5.........', '1372.5 - 1424.6.........', '1424.6 - 1478.6.........', '1478.6 - 1534.6.........', '1534.6 - 1592.6.........', '1592.6 - 1652.8.........', '1652.8 - 1715.2.........', '1715.2 - 1779.8.........', '1779.8 - 1846.8.........', '1846.8 - 1916.3.........', '1916.3 - 1988.4.........', '1988.4 - 2063.0.........', '2063.0 - 2140.4.........', '2140.4 - 2220.7.........', '2220.7 - 2303.8.........', '2303.8 - 2390.1.........', '2390.1 - 2479.4.........', '2479.4 - 2572.1.........', '2572.1 - 2668.1.........', '2668.1 - 2676.7.........', '2676.7 - 2870.9.........', '2870.9 - 2977.9.........', '2977.9 - 3088.8.........', '3088.8 - 3203.8.........', '3203.8 - 3322.9.........', '3322.9 - 3446.5.........', '3446.5 - 3574.6.........', '3574.6 - 3707.4.........', '3707.4 - 3845.0.........', '3845.0 - 3987.7.........', '3987.7 - 4135.6.........', '4135.6 - 4288.9.........', '4288.9 - 4447.8.........', '4447.8 - 4612.6.........', '4612.6 - 4783.4.........', '4783.4 - 4960.4.........', '4960.4 - 5143.9.........', '5143.9 - 5334.2.........', '5334.2 - 5531.4.........', '5531.4 - 5735.9.........', '5735.9 - 5947.8.........']
'i10' CDF_INT4 => ''
'F8.1' CDF_REAL8 => '.1f'
'f13.2' CDF_DOUBLE => '.2f'
'F12.8' CDF_DOUBLE => '.8f'
'C24' CDF_CHAR => ''
'E12.6' CDF_REAL8 => '.6e'
'F10.2' CDF_REAL8 => '.2f'
'F10.3' CDF_REAL8 => '.3f'
'F' CDF_FLOAT => ''
'E14.7' CDF_FLOAT => '.7e'
'F12.6' CDF_REAL4 => '.6f'
'A22' CDF_CHAR => ''
'F10.4' CDF_DOUBLE => '.4f'
'f7.3' CDF_REAL4 => '.3f'
'I1' CDF_BYTE => ''
'i8' CDF_INT2 => ''
'I9' CDF_INT4 => ''
'i8' CDF_INT4 => ''
'f6.1' CDF_REAL4 => '.1f'
'F8.0' CDF_FLOAT => '.0f'
'D2' CDF_INT1 => ''
'I3' CDF_INT4 => ''
'E14.8' CDF_EPOCH => '.8e'
'F7.2' CDF_DOUBLE => '.2f'
'i2' CDF_BYTE => ''
'15(G9.4)' CDF_REAL4 => ''
'I2' CDF_UINT1 => ''
'F6.2' CDF_DOUBLE => '.2f'
'G12.1' CDF_FLOAT => '.1g'
[F10.2, F10.2, F10.2] CDF_REAL4' => [.2f,.2f,.2f]
'b1' CDF_BYTE => ''
'A21' CDF_UCHAR => ''
'F8.0' CDF_UINT2 => '.0f'
'f18.5' CDF_REAL4 => '.5f'
'e10.5' CDF_REAL4 => '.5e'
'E12.4' CDF_REAL4 => '.4e'
[I4, I3, I8] CDF_INT4' => ''
'F6.3' CDF_REAL4 => '.3f'
'f8.4' CDF_FLOAT => '.4f'
'E14.3' CDF_FLOAT => '.3e'
'E12.3' CDF_DOUBLE => '.3e'
'A24' CDF_EPOCH16 => ''
'F7' CDF_INT4 => ''
'a31' CDF_CHAR => ''
'f10.4' CDF_FLOAT => '.4f'
'f7.3' CDF_DOUBLE => '.3f'
'f7.3' CDF_FLOAT => '.3f'
'F3' CDF_FLOAT => ''
'a8' CDF_CHAR => ''
'f12.2' CDF_REAL8 => '.2f'
'E11.3' CDF_REAL4 => '.3e'
'4I1' CDF_INT1 => ''
'F8.4' CDF_UINT2 => '.4f'
'E12.4' CDF_FLOAT => '.4e'
'E11.4' CDF_REAL4 => '.4e'
[F10.2, F10.5] CDF_REAL4' => [.2f,.5f]
'A19' CDF_UCHAR => ''
'a30' CDF_CHAR => ''
'F5' CDF_FLOAT => ''
'F7.0' CDF_REAL4 => '.0f'
'a26' CDF_CHAR => ''
'E9.2' CDF_FLOAT => '.2e'
'A 24' CDF_CHAR => ''
'z10' CDF_INT4 => ''
'a14' CDF_CHAR => ''
'g12.0' CDF_DOUBLE => '.0g'
'A11' CDF_INT2 => ''
'A130' CDF_CHAR => ''
'15(I6)' CDF_INT2 => ''
'I4' CDF_INT1 => ''
'A27' CDF_CHAR => ''
'e14.5' CDF_DOUBLE => '.5e'
'E19.5' CDF_REAL4 => '.5e'
'F16.6' CDF_REAL8 => '.6f'
'a6' CDF_CHAR => ''
'e13.5' CDF_REAL4 => '.5e'
'E9.3' CDF_FLOAT => '.3e'
'F13.2' CDF_FLOAT => '.2f'
'F8.5' CDF_REAL4 => '.5f'
'e12.3' CDF_REAL4 => '.3e'
'F16.12' CDF_DOUBLE => '.12f'
'E5.1' CDF_REAL4 => '.1e'
'F5.2' CDF_FLOAT => '.2f'
'F20.8' CDF_REAL4 => '.8f'
'I1' CDF_INT2 => ''
'F12.2' CDF_DOUBLE => '.2f'
'f14.2' CDF_REAL4 => '.2f'
'I1' CDF_INT4 => ''
'16G13.6' CDF_REAL4 => '.6g'
'e12.6' CDF_REAL8 => '.6e'
'f12.4' CDF_REAL8 => '.4f'
'I4' CDF_INT4 => ''
'E16.6' CDF_REAL4 => '.6e'
'A18' CDF_CHAR => ''
'a3' CDF_CHAR => ''
'A7' CDF_CHAR => ''
'z4.2' CDF_UINT1 => ''
'f6.2' CDF_REAL4 => '.2f'
'f6.3' CDF_FLOAT => '.3f'
'I8' CDF_INT4 => ''
'E12.3' CDF_REAL4 => '.3e'
'f7.1' CDF_REAL4 => '.1f'
'F8.2' CDF_REAL4 => '.2f'
'F9.0' CDF_REAL4 => '.0f'
'F32.6' CDF_REAL8 => '.6f'
'F10.1' CDF_FLOAT => '.1f'
'E11.4' CDF_FLOAT => '.4e'
'E8.4' CDF_FLOAT => '.4e'
'f14.6' CDF_REAL8 => '.6f'
'F17.7' CDF_REAL8 => '.7f'
'a23' CDF_CHAR => ''
'E12.8' CDF_REAL8 => '.8e'
'F12.6' CDF_REAL8 => '.6f'
'F20.7' CDF_FLOAT => '.7f'
'A2' CDF_UCHAR => ''
'i5' CDF_INT4 => ''
'I12' CDF_INT4 => ''
'i1' CDF_INT2 => ''
'F4' CDF_FLOAT => ''
'a28' CDF_CHAR => ''
'A36' CDF_UCHAR => ''
'F8.0' CDF_REAL4 => '.0f'
'I20' CDF_UINT1 => ''
'F7' CDF_REAL8 => ''
'A27' CDF_EPOCH16 => ''
'I2' CDF_INT8 => ''
'E9.1' CDF_REAL4 => '.1e'
'i7' CDF_INT4 => ''
'f7.4' CDF_FLOAT => '.4f'
'E10' CDF_REAL4 => ''
'a10' CDF_CHAR => ''
'F7.0' CDF_FLOAT => '.0f'
'1PE13.2' CDF_EPOCH => '.2e'
'F14.2' CDF_REAL4 => '.2f'
'F10.6' CDF_REAL8 => '.6f'
'A23' CDF_UCHAR => ''
'a24' CDF_CHAR => ''
'i3' CDF_UINT1 => ''
'F14.2' CDF_FLOAT => '.2f'
'e10.3' CDF_FLOAT => '.3e'
'G9.4' CDF_REAL4 => '.4g'
'A2' CDF_CHAR => ''
'e9.3' CDF_REAL4 => '.3e'
'I13' CDF_INT4 => ''
'I' CDF_INT1 => ''
'F10.3' CDF_REAL4 => '.3f'
'a15' CDF_CHAR => ''
'E14.7' CDF_REAL8 => '.7e'
'i10' CDF_UINT4 => ''
'A27' CDF_EPOCH => ''
'f10.3' CDF_FLOAT => '.3f'
'F6.3s' CDF_FLOAT => ''
'I3' CDF_UINT2 => ''
'E8.2' CDF_REAL4 => '.2e'
'e12.0' CDF_EPOCH => '.0e'
'i12' CDF_INT4 => ''
'F9.4' CDF_REAL4 => '.4f'
'e13.6' CDF_REAL4 => '.6e'
'a15' CDF_UCHAR => ''
'f14.1' CDF_REAL8 => '.1f'
'F3.3' CDF_FLOAT => '.3f'
'i9' CDF_INT4 => ''
'g12.3' CDF_UINT1 => '.3g'
'F32.6' CDF_REAL4 => '.6f'
'A40' CDF_CHAR => ''
'F8.1' CDF_FLOAT => '.1f'
'F10.5' CDF_DOUBLE => '.5f'
'f10.1' CDF_REAL4 => '.1f'
'E11.3 ' CDF_REAL4 => '.3e'
'F7.2' CDF_REAL4 => '.2f'
'I6' CDF_UINT2 => ''
'F9.2' CDF_REAL8 => '.2f'
'F15.6' CDF_DOUBLE => '.6f'
'F12.3' CDF_REAL8 => '.3f'
'F13.3' CDF_FLOAT => '.3f'
'I3' CDF_BYTE => ''
'A61' CDF_CHAR => ''
'I' CDF_INT8 => ''
'f5.0' CDF_REAL4 => '.0f'
'f8.2' CDF_REAL8 => '.2f'
'f12.1' CDF_REAL4 => '.1f'
'E25.18' CDF_DOUBLE => '.18e'
'F5.2' CDF_REAL4 => '.2f'
'I20' CDF_INT8 => ''
'F6' CDF_FLOAT => ''
'F' CDF_DOUBLE => ''
'E14.9' CDF_REAL4 => '.9e'
'Z4' CDF_INT2 => ''
'F9.3' CDF_DOUBLE => '.3f'
'a129' CDF_CHAR => ''
'I3' CDF_UINT1 => ''
'I5' CDF_UINT2 => ''
'i6' CDF_UINT1 => ''
'E13.4' CDF_DOUBLE => '.4e'
'i4' CDF_UINT1 => ''
' F6.1' CDF_REAL4 => '.1f'
[F1, F1, F1] CDF_FLOAT' => ''
'f5.1' CDF_REAL4 => '.1f'
'f6.1' CDF_FLOAT => '.1f'
'I11' CDF_INT2 => ''
'F11' CDF_FLOAT => ''
'I22' CDF_TIME_TT2000 => ''
'I3.0' CDF_UINT1 => ''
'E25.18' CDF_EPOCH => '.18e'
'I4' CDF_UINT4 => ''
'f10.5' CDF_REAL4 => '.5f'
'E12.5' CDF_FLOAT => '.5e'
'F7.3' CDF_REAL8 => '.3f'
'E16.2' CDF_FLOAT => '.2e'
'F15.1' CDF_FLOAT => '.1f'
'F8' CDF_FLOAT => ''
'f3.0' CDF_REAL4 => '.0f'
'A25' CDF_CHAR => ''
'i5' CDF_INT2 => ''
'A1' CDF_CHAR => ''
'F4.3' CDF_FLOAT => '.3f'
'A4' CDF_CHAR => ''
'F18.6' CDF_DOUBLE => '.6f'
'F12.1' CDF_REAL8 => '.1f'
'A39' CDF_CHAR => ''
'F7.1' CDF_REAL4 => '.1f'
'g11.4' CDF_REAL4 => '.4g'
'f11.0' CDF_REAL4 => '.0f'
'I10' CDF_TIME_TT2000 => ''
'f8.1' CDF_DOUBLE => '.1f'
'G8.3' CDF_FLOAT => '.3g'
'f10.3' CDF_REAL8 => '.3f'
'F8.4' CDF_EPOCH => '.4f'
'I16' CDF_TIME_TT2000 => ''
'F15.8' CDF_REAL8 => '.8f'
'f11.4' CDF_FLOAT => '.4f'
'G13.5' CDF_FLOAT => '.5g'
'F15.3' CDF_FLOAT => '.3f'
'F6.2' CDF_FLOAT => '.2f'
'E9.2' CDF_REAL8 => '.2e'
'a1' CDF_CHAR => ''
'f10.1' CDF_FLOAT => '.1f'
'F15.7' CDF_FLOAT => '.7f'
'f5.3' CDF_REAL4 => '.3f'
'F14.3' CDF_FLOAT => '.3f'
'f9.2' CDF_FLOAT => '.2f'
'F8.1' CDF_DOUBLE => '.1f'
' ' CDF_TIME_TT2000 => ''
'E13.2' CDF_REAL8 => '.2e'
'E10.2' CDF_REAL8 => '.2e'
'F16' CDF_FLOAT => ''
'F5.1' CDF_REAL4 => '.1f'
'G13.6' CDF_REAL4 => '.6g'
'F24.7' CDF_DOUBLE => '.7f'
'F24.1' CDF_TIME_TT2000 => '.1f'
'a27' CDF_CHAR => ''
'e10.2' CDF_FLOAT => '.2e'
'I10' CDF_INT8 => ''
'e14.4' CDF_REAL8 => '.4e'
'F10.6' CDF_DOUBLE => '.6f'
'E11.5E2' CDF_REAL4 => ''
'F14.0   ' CDF_EPOCH => '.0f'
'F6.4' CDF_REAL4 => '.4f'
'a50' CDF_CHAR => ''
'a24' CDF_UCHAR => ''
'F14.8' CDF_REAL8 => '.8f'
'E14.8' CDF_REAL8 => '.8e'
'E11.3  ' CDF_REAL4 => '.3e'
[10   - 14,5............., 14.5 - 19.3............., 19.3 - 24.5............., 24.5 - 30..............., 30   - 36..............., 36   - 42.4............., 42.4 - 49.3............., 49.3 - 56.7............., 56.7 - 64.7............., 64.7 - 73.2............., 73.2 - 82.4............., 82.4 - 92.3............., 92.3 - 102.9............, 102.9 - 114.3..........., 114.3 - 126.6..........., 126.6 - 139.7...........] CDF_REAL4' => ''
'f13.2' CDF_REAL4 => '.2f'
[ F6.3 ,  F6.3 ,  F6.3 ,  F6.3 ,  F6.3 ,  F6.3 ,  F6.3 ,  F6.3 ,  F6.3 ,  F6.3 ,  F6.3 ,  F6.3 ,  F6.3 ,  F6.3 ,  F6.3 ,  F6.3 ,  F6.3 ,  F6.3 ,  F6.3 ,  F6.3 ,  F6.3 ,  F6.3 ,  F6.3 ,  F6.3 ,  F6.3 ,  F6.3 ,  F6.3 ,  F6.3 ,  F6.3 ,  F6.3 ,  F6.3 ,  F6.3 ,  F6.3 ,  F6.3 ,  F6.3 ,  F6.3 ,  F6.3 ,  F6.3 ,  F6.3 ,  F6.3 ,  F6.3 ,  F6.3 ,  F6.3 ,  F6.3 ,  F6.3 ,  F6.3 ,  F6.3 ,  F6.3 ,  F6.3 ,  F6.3 ,  F6.3 ,  F6.3 ,  F6.3 ,  F6.3 ,  F6.3 ,  F6.3 ,  F6.3 ,  F6.3 ,  F6.3 ,  F6.3 ,  F6.3 ,  F6.3 ,  F6.3 ,  F6.3 ] CDF_REAL4' => [.3f,.3f,.3f,.3f,.3f,.3f,.3f,.3f,.3f,.3f,.3f,.3f,.3f,.3f,.3f,.3f,.3f,.3f,.3f,.3f,.3f,.3f,.3f,.3f,.3f,.3f,.3f,.3f,.3f,.3f,.3f,.3f,.3f,.3f,.3f,.3f,.3f,.3f,.3f,.3f,.3f,.3f,.3f,.3f,.3f,.3f,.3f,.3f,.3f,.3f,.3f,.3f,.3f,.3f,.3f,.3f,.3f,.3f,.3f,.3f,.3f,.3f,.3f,.3f]
'E12.2' CDF_DOUBLE => '.2e'
'i6' CDF_BYTE => ''
'e12.2' CDF_REAL4 => '.2e'
'I3' CDF_REAL4 => ''
'E11.3' CDF_FLOAT => '.3e'
'E10' CDF_REAL8 => ''
'E12.2' CDF_REAL4 => '.2e'
'I2' CDF_BYTE => ''
'i6' CDF_INT2 => ''
'E13.4' CDF_REAL8 => '.4e'
'I1.0' CDF_UINT1 => ''
'A15' CDF_CHAR => ''
'A24' CDF_EPOCH => ''
'I5' CDF_UINT1 => ''
'A33' CDF_CHAR => ''
'F12.2' CDF_EPOCH => '.2f'
'A37' CDF_CHAR => ''
'E9.4' CDF_FLOAT => '.4e'
'A19' CDF_CHAR => ''
'G22.8' CDF_REAL8 => '.8g'
'e12.4' CDF_REAL4 => '.4e'
'F17.5' CDF_REAL4 => '.5f'
'I2  ' CDF_INT2 => ''
'F14.6' CDF_REAL8 => '.6f'
'f4' CDF_FLOAT => ''
'I8' CDF_INT2 => ''
'F11.2' CDF_FLOAT => '.2f'
'A29' CDF_CHAR => ''
'e12.2' CDF_FLOAT => '.2e'
'F9.1' CDF_FLOAT => '.1f'
'E7.1' CDF_REAL4 => '.1e'
'f6.0' CDF_FLOAT => '.0f'
'f11.7' CDF_REAL8 => '.7f'
'I7' CDF_UINT4 => ''
'f8.5' CDF_FLOAT => '.5f'
'G8.2' CDF_FLOAT => '.2g'
'E25.18' CDF_TIME_TT2000 => '.18e'
'i4' CDF_INT4 => ''
'f8.1' CDF_FLOAT => '.1f'
'F8.3' CDF_REAL8 => '.3f'
'A16' CDF_CHAR => ''
'F13.9' CDF_DOUBLE => '.9f'
'f8.2' CDF_REAL4 => '.2f'
'a21' CDF_CHAR => ''
'F24.6' CDF_REAL8 => '.6f'
'A3' CDF_UCHAR => ''
'a65' CDF_CHAR => ''
'E13.5' CDF_REAL4 => '.5e'
'F12.2' CDF_REAL4 => '.2f'
'F7.4' CDF_DOUBLE => '.4f'
'e9.2' CDF_FLOAT => '.2e'
'F11.4' CDF_REAL4 => '.4f'
[F8.2, F8.2, F8.2] CDF_REAL4' => [.2f,.2f,.2f]
'E16.10' CDF_REAL8 => '.10e'
'A15' CDF_UCHAR => ''
'f10.0' CDF_REAL4 => '.0f'
'i4' CDF_UINT4 => ''
'I20' CDF_TIME_TT2000 => ''
'E9.2' CDF_REAL4 => '.2e'
'20F8.2' CDF_REAL4 => '.2f'
'f6.2' CDF_FLOAT => '.2f'
'a19' CDF_CHAR => ''
'A9' CDF_UCHAR => ''
'A17' CDF_EPOCH => ''
'G10' CDF_FLOAT => ''
'1PE11.5' CDF_REAL4 => '.5e'
[F6.4, F8.4, F8.4] CDF_REAL4' => [.4f,.4f,.4f]
'A20' CDF_CHAR => ''
'f9.1' CDF_REAL4 => '.1f'
'F20.3' CDF_FLOAT => '.3f'
'f7.4' CDF_REAL4 => '.4f'
'I6' CDF_INT4 => ''
'A28' CDF_CHAR => ''
'f8.1' CDF_REAL8 => '.1f'
'I20' CDF_UINT4 => ''
'F18.9' CDF_REAL8 => '.9f'
'g12.3' CDF_REAL4 => '.3g'
'I' CDF_UINT2 => ''
'f4.0' CDF_FLOAT => '.0f'
'F15.3' CDF_REAL8 => '.3f'
'e12.6' CDF_REAL4 => '.6e'
'i1' CDF_BYTE => ''
'f14.7' CDF_REAL8 => '.7f'
'f12.2' CDF_FLOAT => '.2f'
'F6.1' CDF_REAL4 => '.1f'
[10.0 -12.2.............., 12.2 - 14.5............., 14.5 - 16.8............., 16.8 - 19.3............., 19.3 - 21.8............., 21.8 - 24.5............., 24.5 - 27.2............., 27.2 - 30.0............., 30.0 - 32.9............., 32.9 - 36.0............., 36.0 - 39.1............., 39.1 - 42.4............., 42.4 - 45.8............., 45.8 - 49.3............., 49.3 - 52.9............., 52.9 - 56.7............., 56.7 - 60.6............., 60.6 - 64.7............., 64.7 - 68.9............., 68.9 - 73.2............., 73.2 - 77.7............., 77.7 - 82.4............., 82.4 - 87.2............., 87.2 - 92.3............., 92.3 - 97.5............., 97.5 - 102.9............, 102.9 - 108.5..........., 108.5 - 114.3..........., 114.3 - 120.3..........., 120.3 - 126.5..........., 126.5 - 133.0..........., 133.0 - 139.7..........., 139.7 - 146.7..........., 146.7 - 153.9..........., 153.9 - 161.3..........., 161.3 - 169.1..........., 169.0 - 177.1..........., 177.1 - 185.4..........., 185.4 - 194.0..........., 194.0 - 202.9..........., 202.9 - 212.3..........., 212.3 - 221.9..........., 221.9 - 238.1..........., 231.8 - 242.1..........., 242.1 - 252.8..........., 252.8 - 263.9..........., 263.9 - 275.4..........., 275.4 - 287.3..........., 287.3 - 299.7..........., 299.7 - 312.5..........., 312.5 - 325.8..........., 325.8 - 339.6..........., 339.6 - 353.8..........., 353.8 - 368.6..........., 368.6 - 383.9..........., 383.9 - 399.9..........., 399.9 - 416.3..........., 416.3 - 433.4..........., 433.4 - 451.1..........., 451.1 - 469.5..........., 469.5 - 488.5..........., 488.5 - 508.2..........., 508.2 - 528.7..........., 528.7 - 549.9..........., 549.9 - 571.9..........., 571.9 - 594.6..........., 594.6 - 618.3..........., 618.3 - 642.7..........., 642.7 - 668.1..........., 668.1 - 694.4..........., 694.4 - 721.7..........., 721.7 - 749.9..........., 749.9 - 779.2..........., 779.2 - 809.6..........., 809.6 - 841.1..........., 841.1 - 873.8..........., 873.8 - 907.6..........., 907.6 - 942.7..........., 942.7 - 979.0..........., 979.0 - 1016.7.........., 1016.7 - 1055.8........., 1055.8 - 1096.3........., 1096.3 - 1138.3........., 1138.3 - 1181.8........., 1181.8 - 1226.9........., 1226.9 - 1273.7........., 1273.7 - 1322.2........., 1322.2 - 1372.5........., 1372.5 - 1424.6........., 1424.6 - 1478.6........., 1478.6 - 1534.6........., 1534.6 - 1592.6........., 1592.6 - 1652.8........., 1652.8 - 1715.2........., 1715.2 - 1779.8........., 1779.8 - 1846.8........., 1846.8 - 1916.3........., 1916.3 - 1988.4........., 1988.4 - 2063.0........., 2063.0 - 2140.4........., 2140.4 - 2220.7........., 2220.7 - 2303.8........., 2303.8 - 2390.1........., 2390.1 - 2479.4........., 2479.4 - 2572.1........., 2572.1 - 2668.1........., 2668.1 - 2676.7........., 2676.7 - 2870.9........., 2870.9 - 2977.9........., 2977.9 - 3088.8........., 3088.8 - 3203.8........., 3203.8 - 3322.9........., 3322.9 - 3446.5........., 3446.5 - 3574.6........., 3574.6 - 3707.4........., 3707.4 - 3845.0........., 3845.0 - 3987.7........., 3987.7 - 4135.6........., 4135.6 - 4288.9........., 4288.9 - 4447.8........., 4447.8 - 4612.6........., 4612.6 - 4783.4........., 4783.4 - 4960.4........., 4960.4 - 5143.9........., 5143.9 - 5334.2........., 5334.2 - 5531.4........., 5531.4 - 5735.9........., 5735.9 - 5947.8.........] CDF_REAL4' => ''
'F12.4' CDF_REAL4 => '.4f'
'A22' CDF_UCHAR => ''
'F16.1' CDF_FLOAT => '.1f'
'A23' CDF_EPOCH => ''
'E8.4' CDF_REAL4 => '.4e'
'f9.1' CDF_DOUBLE => '.1f'
'e15.7' CDF_REAL8 => '.7e'
'16I1' CDF_INT1 => ''
'a10' CDF_UCHAR => ''
'E9.2' CDF_DOUBLE => '.2e'
'a43' CDF_CHAR => ''
'F9.2' CDF_REAL4 => '.2f'
'F9.3' CDF_REAL4 => '.3f'
'A12' CDF_CHAR => ''
'  ' CDF_EPOCH => ''
'I' CDF_UINT4 => ''
'F12.5' CDF_DOUBLE => '.5f'
'i2' CDF_INT4 => ''
'g6.1' CDF_REAL8 => '.1g'
'e13.6' CDF_DOUBLE => '.6e'
'I5.5' CDF_UINT1 => ''
'F14.3' CDF_REAL4 => '.3f'
'F9.6' CDF_REAL4 => '.6f'
'I11' CDF_UINT2 => ''
'f10.6' CDF_REAL4 => '.6f'
'F7.1' CDF_FLOAT => '.1f'
'E13.3' CDF_FLOAT => '.3e'
'a3' CDF_UCHAR => ''
'A34' CDF_CHAR => ''
'D20.6' CDF_REAL8 => ''
'F4.0' CDF_FLOAT => '.0f'
'I8' CDF_UINT2 => ''
'I12' CDF_UINT4 => ''
'E9.4' CDF_REAL4 => '.4e'
'A38' CDF_CHAR => ''
'A3' CDF_CHAR => ''
[10.0 - 30.0............., 30.0 - 56.7............., 56.7 - 92.3............., 92.3 - 139.7............, 139.7 - 203.0..........., 203.0 - 287.4..........., 287.4 - 399.9..........., 399.9 - 550.0..........., 550.0 - 750.1..........., 750.1 - 1016.9.........., 1017.0 - 1372.0........., 1372.0 - 1847.3........., 1847.3 - 2480.1........., 2480.1 - 3324.0........., 3324.0 - 4449.3........., 4449.3 - 5949.9.........] CDF_REAL4' => ''
'i4' CDF_BYTE => ''
'i4' CDF_UINT2 => ''
'f10.7' CDF_FLOAT => '.7f'
'a18' CDF_UCHAR => ''
'I2' CDF_INT4 => ''
'E11.3' CDF_REAL8 => '.3e'
'F5.2    ' CDF_REAL4 => '.2f'
'f8.3' CDF_FLOAT => '.3f'
'F5.3' CDF_FLOAT => '.3f'
'F7.5' CDF_FLOAT => '.5f'
'A6' CDF_CHAR => ''
'G' CDF_REAL8 => ''
'F20.3' CDF_DOUBLE => '.3f'
'E12.2' CDF_TIME_TT2000 => '.2e'
'E10.2' CDF_REAL4 => '.2e'
'I5' CDF_INT4 => ''
'i2' CDF_INT2 => ''
'E8.1' CDF_REAL4 => '.1e'
'G13' CDF_FLOAT => ''
'a32' CDF_CHAR => ''
'A30' CDF_CHAR => ''
[I4, I3, I8,   ] CDF_INT4' => ''
'f11.5' CDF_DOUBLE => '.5f'
'i2' CDF_INT1 => ''
'e11.4' CDF_REAL4 => '.4e'
'i4' CDF_REAL4 => ''
'i3' CDF_BYTE => ''
'F13.1' CDF_FLOAT => '.1f'
'I10' CDF_INT4 => ''
'E12.2' CDF_REAL8 => '.2e'
'I29' CDF_TIME_TT2000 => ''
'E20.12' CDF_REAL8 => '.12e'
'I13' CDF_INT8 => ''
'f9.4' CDF_REAL4 => '.4f'
'i3' CDF_UINT2 => ''
'A21' CDF_CHAR => ''
'F12.2' CDF_FLOAT => '.2f'
'F12.4' CDF_FLOAT => '.4f'
'a17' CDF_CHAR => ''
'e7.2' CDF_REAL4 => '.2e'
'I5' CDF_UINT4 => ''
'F8.2' CDF_REAL8 => '.2f'
'F12.12' CDF_REAL8 => '.12f'
'E10.3' CDF_FLOAT => '.3e'
'E10.3' CDF_REAL4 => '.3e'
'a9' CDF_UCHAR => ''
'F8.4' CDF_FLOAT => '.4f'
'F9.1' CDF_REAL4 => '.1f'
'a20' CDF_CHAR => ''
'I10' CDF_INT2 => ''
'A50' CDF_CHAR => ''
'I4' CDF_BYTE => ''
'F10.2' CDF_FLOAT => '.2f'
'I1' CDF_INT1 => ''
'i5' CDF_UINT1 => ''
'F8.3' CDF_REAL4 => '.3f'
'E20.4' CDF_REAL4 => '.4e'
[F7.4, F6.2, F6.2] CDF_REAL4' => [.4f,.2f,.2f]
'I20' CDF_INT4 => ''
'F7.2' CDF_FLOAT => '.2f'
'I7' CDF_INT2 => ''
'A26' CDF_CHAR => ''
'F16.3' CDF_FLOAT => '.3f'
'I08' CDF_INT2 => ''
'F5.0' CDF_FLOAT => '.0f'
'F7.1' CDF_REAL8 => '.1f'
'E13.6' CDF_EPOCH => '.6e'
'i3' CDF_INT2 => ''
'f5.2' CDF_REAL4 => '.2f'
'G12.6' CDF_FLOAT => '.6g'
'F10.3' CDF_DOUBLE => '.3f'
'e12.5' CDF_FLOAT => '.5e'
'I2' CDF_INT1 => ''
'F4.1' CDF_FLOAT => '.1f'
'F4.0' CDF_REAL4 => '.0f'
'e14.5' CDF_FLOAT => '.5e'
'I10.0' CDF_UINT4 => ''
'E12.8' CDF_REAL4 => '.8e'
'I4' CDF_INT2 => ''
'I3' CDF_INT1 => ''
'f7.0' CDF_UINT1 => '.0f'
'f6.2' CDF_DOUBLE => '.2f'
'I2.2' CDF_UINT1 => ''
'F5.0' CDF_REAL4 => '.0f'
'F10.4' CDF_REAL4 => '.4f'
'A10' CDF_CHAR => ''
'F17.5' CDF_REAL8 => '.5f'
'G10.2E3' CDF_FLOAT => ''
'F' CDF_REAL4 => ''
'I1' CDF_UINT4 => ''
'e10.3' CDF_REAL4 => '.3e'
'F16.8' CDF_DOUBLE => '.8f'
'F4.1' CDF_REAL4 => '.1f'
'I11' CDF_INT4 => ''
'i10' CDF_INT2 => ''
'E31.4' CDF_REAL4 => '.4e'
'a25' CDF_CHAR => ''
'f5.1' CDF_FLOAT => '.1f'
'F14.0' CDF_EPOCH => '.0f'
'E11.4' CDF_DOUBLE => '.4e'
'CDF Epoch Time' CDF_EPOCH => ''
'e11.4' CDF_FLOAT => '.4e'
'E8.3' CDF_REAL4 => '.3e'
'a7' CDF_CHAR => ''
'A' CDF_CHAR => ''
'E12.6' CDF_DOUBLE => '.6e'
'F9.2' CDF_FLOAT => '.2f'
'F11.4' CDF_REAL8 => '.4f'
'f6.1' CDF_REAL8 => '.1f'
'F13' CDF_FLOAT => ''
'f4.1' CDF_REAL4 => '.1f'
'F14.3' CDF_REAL8 => '.3f'
'I1.1' CDF_INT8 => ''
'a9' CDF_CHAR => ''
'e12.5' CDF_DOUBLE => '.5e'
'F22.12' CDF_DOUBLE => '.12f'
'F9.5' CDF_REAL8 => '.5f'
'i10' CDF_UINT2 => ''
'I10.10' CDF_INT4 => ''
'I2' CDF_UINT2 => ''
'G13.6' CDF_FLOAT => '.6g'
'I8' CDF_INT8 => ''
[I2, I4] CDF_INT4' => ''
'D8.3' CDF_DOUBLE => ''
'i6' CDF_UINT2 => ''
'14' CDF_CHAR => ''
'E7.2' CDF_REAL4 => '.2e'
'f8.4' CDF_REAL4 => '.4f'
'E13.6' CDF_REAL4 => '.6e'
'f9.2' CDF_REAL8 => '.2f'
'F8.0' CDF_UINT4 => '.0f'
'A13' CDF_CHAR => ''
'E13.6' CDF_REAL8 => '.6e'
'F14.4' CDF_REAL8 => '.4f'
'F10.6' CDF_FLOAT => '.6f'
'Z8' CDF_INT4 => ''
'G11.1' CDF_FLOAT => '.1g'
'F12.8' CDF_REAL8 => '.8f'
'a2' CDF_CHAR => ''
'I' CDF_UINT1 => ''
'f16.5' CDF_REAL4 => '.5f'
'f9.3' CDF_DOUBLE => '.3f'
'E10.2' CDF_FLOAT => '.2e'
'I10' CDF_UINT4 => ''
'F16.1' CDF_EPOCH => '.1f'
'F10.1' CDF_REAL8 => '.1f'
'F12.7' CDF_DOUBLE => '.7f'
'E14.8' CDF_FLOAT => '.8e'
'E12.5' CDF_REAL4 => '.5e'
'f13.1' CDF_REAL8 => '.1f'
'A14' CDF_CHAR => ''
'A20' CDF_UCHAR => ''
'E6.2' CDF_REAL4 => '.2e'
'E13.4' CDF_REAL4 => '.4e'
'e15.8' CDF_REAL8 => '.8e'
'f4.0' CDF_REAL4 => '.0f'
'f7.2' CDF_FLOAT => '.2f'
[I4        , I3        , I8        ] CDF_INT4' => ''
'I6' CDF_INT2 => ''
'a6' CDF_UCHAR => ''
'a33' CDF_CHAR => ''
'A18' CDF_UCHAR => ''
'F19.7' CDF_REAL8 => '.7f'
'F10.2' CDF_REAL4 => '.2f'
'A8' CDF_CHAR => ''
'I7' CDF_UINT1 => ''
'E14.8' CDF_TIME_TT2000 => '.8e'
'E14.8' CDF_REAL4 => '.8e'
'F15.7' CDF_REAL8 => '.7f'
'F16.3' CDF_DOUBLE => '.3f'
'f7.4' CDF_INT4 => '.4f'
'F7.3' CDF_DOUBLE => '.3f'
'I6' CDF_UINT4 => ''
'f14.3' CDF_REAL8 => '.3f'
'e12.0' CDF_DOUBLE => '.0e'
'G12.5' CDF_FLOAT => '.5g'
'F4.2' CDF_REAL4 => '.2f'
'F13.1' CDF_REAL8 => '.1f'
'F12.7' CDF_REAL8 => '.7f'
'F16.2' CDF_EPOCH => '.2f'
'I8' CDF_UINT4 => ''
'f5.2' CDF_FLOAT => '.2f'
'E13.6' CDF_FLOAT => '.6e'
'f9.4' CDF_FLOAT => '.4f'
'e11.5' CDF_FLOAT => '.5e'
'F6.1' CDF_FLOAT => '.1f'
'F4' CDF_REAL4 => ''
'e11.2' CDF_REAL8 => '.2e'
'F12.3' CDF_REAL4 => '.3f'
'G10.4' CDF_REAL4 => '.4g'
'e12.4' CDF_FLOAT => '.4e'
'E12.5E2' CDF_REAL4 => ''
'F25.8' CDF_REAL8 => '.8f'
'E8.2' CDF_FLOAT => '.2e'
'a18' CDF_CHAR => ''
'F13.6' CDF_REAL8 => '.6f'
'F25.6' CDF_DOUBLE => '.6f'
'A48' CDF_CHAR => ''
'e14.6' CDF_REAL4 => '.6e'
'E6.3' CDF_FLOAT => '.3e'
'i1' CDF_INT1 => ''
'a12' CDF_CHAR => ''
'F16.7' CDF_FLOAT => '.7f'
'E14.0' CDF_DOUBLE => '.0e'
'A32' CDF_CHAR => ''
'I20' CDF_DOUBLE => ''
'F16.2' CDF_FLOAT => '.2f'
'E13.6' CDF_TIME_TT2000 => '.6e'
'E14.6' CDF_DOUBLE => '.6e'
'F6' CDF_DOUBLE => ''
'A37' CDF_EPOCH16 => ''
'a16' CDF_CHAR => ''
'F10' CDF_FLOAT => ''
'I2' CDF_INT2 => ''
'A24' CDF_CHAR => ''
'f8.1' CDF_REAL4 => '.1f'
'f9.2' CDF_REAL4 => '.2f'
'a81' CDF_CHAR => ''
'E8.1' CDF_FLOAT => '.1e'
'A43' CDF_CHAR => ''
'F15.3' CDF_DOUBLE => '.3f'
'4G13.6' CDF_REAL4 => '.6g'
'F9.5' CDF_REAL4 => '.5f'
'F2' CDF_FLOAT => ''
'E9.3' CDF_REAL4 => '.3e'
'E12.4' CDF_DOUBLE => '.4e'
'F12.3' CDF_FLOAT => '.3f'
'I10' CDF_UINT1 => ''
'F20.6' CDF_FLOAT => '.6f'
'I5' CDF_INT2 => ''
'F9.4' CDF_FLOAT => '.4f'
'F8.3s' CDF_FLOAT => ''
'S1' CDF_CHAR => ''
'F8.4' CDF_INT4 => '.4f'
'F11.3' CDF_REAL4 => '.3f'
' I3 ' CDF_INT2 => ''
'A9' CDF_CHAR => ''
' E10.2' CDF_REAL4 => '.2e'
'i7' CDF_REAL4 => ''
'f11.2' CDF_REAL4 => '.2f'
'z8' CDF_INT8 => ''
'F7.3' CDF_REAL4 => '.3f'
'F32.6' CDF_DOUBLE => '.6f'
'e12.5' CDF_REAL4 => '.5e'
'E15.7' CDF_FLOAT => '.7e'
'F3.0' CDF_REAL4 => '.0f'
'g13.2' CDF_DOUBLE => '.2g'
'I10' CDF_DOUBLE => ''
'i9' CDF_UINT4 => ''
'e12.5' CDF_REAL8 => '.5e'
'f12.0' CDF_REAL8 => '.0f'
'I' CDF_INT4 => ''
'F12.5' CDF_REAL8 => '.5f'
'F6.3' CDF_REAL8 => '.3f'
'F12.2' CDF_TIME_TT2000 => '.2f'
'I' CDF_TIME_TT2000 => ''
'F20.12' CDF_REAL8 => '.12f'
'F4.2' CDF_FLOAT => '.2f'
'E12.2' CDF_FLOAT => '.2e'
'I3 ' CDF_INT2 => ''
'F7.3' CDF_FLOAT => '.3f'
'E15.8' CDF_REAL4 => '.8e'
'f7.0' CDF_REAL4 => '.0f'
'I16' CDF_INT4 => ''
'E8.1' CDF_REAL8 => '.1e'
'a4' CDF_CHAR => ''
'e13.4' CDF_DOUBLE => '.4e'
'A5' CDF_UCHAR => ''
'A31' CDF_CHAR => ''
'F12.1' CDF_REAL4 => '.1f'
'F20.2' CDF_FLOAT => '.2f'
'f16.2' CDF_EPOCH => '.2f'
'F11.2' CDF_REAL4 => '.2f'
'i6' CDF_REAL4 => ''
'F25.12' CDF_DOUBLE => '.12f'
'f12.3' CDF_FLOAT => '.3f'
'f9.2' CDF_DOUBLE => '.2f'
'f10.2' CDF_DOUBLE => '.2f'
'f8.3' CDF_DOUBLE => '.3f'
'F18.1' CDF_REAL8 => '.1f'
'a80' CDF_CHAR => ''
'Z4' CDF_UINT2 => ''
'F9.3' CDF_FLOAT => '.3f'
'F10.3' CDF_FLOAT => '.3f'
'G8.1' CDF_FLOAT => '.1g'
'i2' CDF_UINT1 => ''
'E10.4' CDF_REAL8 => '.4e'
'i1' CDF_UINT1 => ''
'a13' CDF_CHAR => ''
'i13' CDF_INT8 => ''
'f11.5' CDF_FLOAT => '.5f'
'A5' CDF_CHAR => ''
'E13.6' CDF_DOUBLE => '.6e'
'I19' CDF_INT8 => ''
'E12.3' CDF_FLOAT => '.3e'
'f5.0' CDF_FLOAT => '.0f'
'i5' CDF_BYTE => ''
'F5.1' CDF_FLOAT => '.1f'
'e13.6' CDF_FLOAT => '.6e'
'G7.5' CDF_FLOAT => '.5g'
'I3' CDF_INT2 => ''
'E10.4' CDF_REAL4 => '.4e'
'e6.2' CDF_REAL4 => '.2e'
'%d' CDF_UINT1 => ''
'e9.2' CDF_REAL4 => '.2e'
'G10.4' CDF_FLOAT => '.4g'
'F10.1' CDF_REAL4 => '.1f'
'f16.3' CDF_FLOAT => '.3f'
'f14.4' CDF_REAL8 => '.4f'
'F8.2' CDF_FLOAT => '.2f'
'f9.0' CDF_REAL4 => '.0f'
'E10.3' CDF_DOUBLE => '.3e'
'I3' CDF_UINT4 => ''
'Z10.8' CDF_UINT4 => ''
'A11' CDF_CHAR => ''
'F20.9' CDF_REAL8 => '.9f'
'G10.6' CDF_FLOAT => '.6g'
'F7.2' CDF_REAL8 => '.2f'
'F7' CDF_FLOAT => ''
'I14' CDF_INT8 => ''
'I7' CDF_UINT2 => ''
'F15.9' CDF_REAL8 => '.9f'
'F13.6' CDF_FLOAT => '.6f'
'A36' CDF_CHAR => ''
[F9.4 , F10.5] CDF_REAL4' => [.4f,.5f]
'F3.1' CDF_REAL4 => '.1f'
'F9' CDF_FLOAT => ''
'f8.0' CDF_REAL4 => '.0f'
'F15.0' CDF_EPOCH => '.0f'
'A35' CDF_CHAR => ''
'a22' CDF_CHAR => ''
'f4.2' CDF_FLOAT => '.2f'
'f12.1' CDF_REAL8 => '.1f'
'E13.5' CDF_FLOAT => '.5e'
'G9.3' CDF_REAL4 => '.3g'
'f7.2' CDF_REAL4 => '.2f'
'I5' CDF_BYTE => ''
'I2' CDF_UINT4 => ''
'F8.1' CDF_REAL4 => '.1f'
'E8.0' CDF_FLOAT => '.0e'
'e12.2' CDF_EPOCH => '.2e'
'A12' CDF_UCHAR => ''
'y/n (yes/no)' CDF_INT1 => ''
'A17' CDF_CHAR => ''
'I4.4' CDF_UINT2 => ''
'I20' CDF_INT2 => ''
'i3' CDF_INT4 => ''
'F16.4' CDF_FLOAT => '.4f'
'F20.8' CDF_REAL8 => '.8f'
'g12.3' CDF_FLOAT => '.3g'
'F12.8' CDF_REAL4 => '.8f'
'F9.1' CDF_REAL8 => '.1f'
'f9.0' CDF_FLOAT => '.0f'
'I1' CDF_UINT1 => ''
'f8' CDF_DOUBLE => ''
'%d' CDF_UINT4 => ''
'A31' CDF_UCHAR => ''
'F19.12' CDF_DOUBLE => '.12f'
'f10.2' CDF_FLOAT => '.2f'
'F8.4' CDF_REAL4 => '.4f'
'F10.8' CDF_REAL4 => '.8f'
'I3.3' CDF_UINT1 => ''
'I4' CDF_UINT1 => ''
'f10.4' CDF_REAL4 => '.4f'
'z12.8' CDF_INT8 => ''
'F8.6' CDF_REAL4 => '.6f'
'F5' CDF_REAL4 => ''
'A4' CDF_UCHAR => ''
'F18.7' CDF_FLOAT => '.7f'
'f7.1' CDF_FLOAT => '.1f'
'I1.1' CDF_UINT1 => ''
'f12.2' CDF_DOUBLE => '.2f'
'F3.0' CDF_FLOAT => '.0f'
'G12.3' CDF_FLOAT => '.3g'
'f9.3' CDF_FLOAT => '.3f'
'F6.3' CDF_FLOAT => '.3f'
'i4' CDF_INT2 => ''
[ I7 ,  I7 ,  I7 ,  I7 ,  I7 ,  I7 ,  I7 ,  I7 ,  I7 ,  I7 ,  I7 ,  I7 ,  I7 ,  I7 ,  I7 ,  I7 ,  I7 ,  I7 ,  I7 ,  I7 ,  I7 ,  I7 ,  I7 ,  I7 ,  I7 ,  I7 ,  I7 ,  I7 ,  I7 ,  I7 ,  I7 ,  I7 ,  I7 ,  I7 ,  I7 ,  I7 ,  I7 ,  I7 ,  I7 ,  I7 ,  I7 ,  I7 ,  I7 ,  I7 ,  I7 ,  I7 ,  I7 ,  I7 ,  I7 ,  I7 ,  I7 ,  I7 ,  I7 ,  I7 ,  I7 ,  I7 ,  I7 ,  I7 ,  I7 ,  I7 ,  I7 ,  I7 ,  I7 ,  I7 ] CDF_UINT4' => ''
'f8.3' CDF_REAL4 => '.3f'
'I20' CDF_FLOAT => ''
'F10.6' CDF_REAL4 => '.6f'
'F12' CDF_FLOAT => ''
'F5.3' CDF_REAL4 => '.3f'
'F11.3' CDF_FLOAT => '.3f'
'f12.3' CDF_DOUBLE => '.3f'
'f18.3' CDF_REAL4 => '.3f'
'F13.3' CDF_REAL4 => '.3f'
'F5.2' CDF_DOUBLE => '.2f'
'f6.3' CDF_REAL4 => '.3f'
'I5' CDF_INT1 => ''
'20F6.2' CDF_REAL4 => '.2f'
'F8.3' CDF_FLOAT => '.3f'
'F6.2' CDF_REAL4 => '.2f'
'F17.8' CDF_REAL8 => '.8f'
'E4.0' CDF_REAL4 => '.0e'
'I11' CDF_UINT4 => ''
'i6' CDF_INT4 => ''
'f7.2' CDF_INT4 => '.2f'
'f12.5' CDF_DOUBLE => '.5f'
'F8.4' CDF_UINT4 => '.4f'
'F18.1' CDF_REAL4 => '.1f'
'i8' CDF_INT8 => ''
'F6.0' CDF_REAL4 => '.0f'
'F7.0' CDF_REAL8 => '.0f'
'A34' CDF_UCHAR => ''
'A23' CDF_CHAR => ''
'F5.1' CDF_DOUBLE => '.1f'
'a29' CDF_CHAR => ''
'F7.4' CDF_REAL4 => '.4f'
'I7' CDF_INT4 => ''
'E12.7' CDF_REAL4 => '.7e'
[F8.3, F8.3, F6.4] CDF_REAL4' => [.3f,.3f,.4f]
'f8.2' CDF_FLOAT => '.2f'
'D1' CDF_BYTE => ''
'F7.4' CDF_REAL8 => '.4f'
'g13.2' CDF_FLOAT => '.2g'
'f10.2' CDF_REAL4 => '.2f'
'a11' CDF_CHAR => ''
'A1' CDF_UCHAR => ''
'F18.6' CDF_REAL8 => '.6f'
'I4' CDF_UINT2 => ''
[E9.3, F6.3, F6.3, F6.3, F6.3] CDF_REAL4' => [.3e,.3f,.3f,.3f,.3f]
'f8.2' CDF_DOUBLE => '.2f'
'G11.3' CDF_REAL4 => '.3g'
'f6.0' CDF_REAL4 => '.0f'
'a5' CDF_CHAR => ''
'F8.2' CDF_DOUBLE => '.2f'
'I20' CDF_UINT2 => ''
'f10.3' CDF_REAL4 => '.3f'
'E11.4' CDF_REAL8 => '.4e'
'f9.5' CDF_REAL4 => '.5f'
'I10' CDF_UINT2 => ''
[10.0 - 30.0............., 30.0 - 56.7............., 56.7 - 92.3............., 92.3 - 139.7............, 139.7 - 203.0..........., 203.0 - 287.4..........., 287.4 - 399.9..........., 399.9 - 550.0..........., 550.0 - 750.1..........., 750.1 - 1016.9.........., 1016.9 - 1372.8........., 1372.8 - 1847.3........., 1847.3 - 2480.1........., 2480.1 - 3324.0........., 3324.0 - 4449.3........., 4449.3 - 5949.9.........] CDF_REAL4' => ''
'D2' CDF_BYTE => ''
[I4                  , I3                  , I8                  ] CDF_UINT4' => ''
'F30.12' CDF_DOUBLE => '.12f'
'F11.6' CDF_REAL4 => '.6f'
'I5.5' CDF_UINT2 => ''
'G16.10' CDF_FLOAT => '.10g'
' ' CDF_UINT1 => ''
'f9.3' CDF_REAL4 => '.3f'
'E11.3' CDF_DOUBLE => '.3e'
'f12.2' CDF_REAL4 => '.2f'

BAR Quality parameter

Nand's server claims the Quality variable is a double, but the master CDF has it as an int. Do the raw CDF files have double for this parameter (and perhaps Nand is using the raw CDFs instead of the masters?)

BAR_1A_L2_EPHM/Quality/type
  val_nl = double != val_bw = integer
BAR_1A_L2_FSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_1A_L2_HKPG/Quality/type
  val_nl = double != val_bw = integer
BAR_1A_L2_MAGN/Quality/type
  val_nl = double != val_bw = integer
BAR_1A_L2_MSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_1A_L2_RCNT/Quality/type
  val_nl = double != val_bw = integer
BAR_1A_L2_SSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_1B_L2_EPHM/Quality/type
  val_nl = double != val_bw = integer
BAR_1B_L2_FSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_1B_L2_HKPG/Quality/type
  val_nl = double != val_bw = integer
BAR_1B_L2_MAGN/Quality/type
  val_nl = double != val_bw = integer
BAR_1B_L2_MSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_1B_L2_RCNT/Quality/type
  val_nl = double != val_bw = integer
BAR_1B_L2_SSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_1C_L2_EPHM/Quality/type
  val_nl = double != val_bw = integer
BAR_1C_L2_FSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_1C_L2_HKPG/Quality/type
  val_nl = double != val_bw = integer
BAR_1C_L2_MAGN/Quality/type
  val_nl = double != val_bw = integer
BAR_1C_L2_MSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_1C_L2_RCNT/Quality/type
  val_nl = double != val_bw = integer
BAR_1C_L2_SSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_1D_L2_EPHM/Quality/type
  val_nl = double != val_bw = integer
BAR_1D_L2_FSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_1D_L2_HKPG/Quality/type
  val_nl = double != val_bw = integer
BAR_1D_L2_MAGN/Quality/type
  val_nl = double != val_bw = integer
BAR_1D_L2_MSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_1D_L2_RCNT/Quality/type
  val_nl = double != val_bw = integer
BAR_1D_L2_SSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_1G_L2_EPHM/Quality/type
  val_nl = double != val_bw = integer
BAR_1G_L2_FSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_1G_L2_HKPG/Quality/type
  val_nl = double != val_bw = integer
BAR_1G_L2_MAGN/Quality/type
  val_nl = double != val_bw = integer
BAR_1G_L2_MSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_1G_L2_RCNT/Quality/type
  val_nl = double != val_bw = integer
BAR_1G_L2_SSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_1H_L2_EPHM/Quality/type
  val_nl = double != val_bw = integer
BAR_1H_L2_FSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_1H_L2_HKPG/Quality/type
  val_nl = double != val_bw = integer
BAR_1H_L2_MAGN/Quality/type
  val_nl = double != val_bw = integer
BAR_1H_L2_MSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_1H_L2_RCNT/Quality/type
  val_nl = double != val_bw = integer
BAR_1H_L2_SSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_1I_L2_EPHM/Quality/type
  val_nl = double != val_bw = integer
BAR_1I_L2_FSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_1I_L2_HKPG/Quality/type
  val_nl = double != val_bw = integer
BAR_1I_L2_MAGN/Quality/type
  val_nl = double != val_bw = integer
BAR_1I_L2_MSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_1I_L2_RCNT/Quality/type
  val_nl = double != val_bw = integer
BAR_1I_L2_SSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_1J_L2_EPHM/Quality/type
  val_nl = double != val_bw = integer
BAR_1J_L2_FSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_1J_L2_HKPG/Quality/type
  val_nl = double != val_bw = integer
BAR_1J_L2_MAGN/Quality/type
  val_nl = double != val_bw = integer
BAR_1J_L2_MSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_1J_L2_RCNT/Quality/type
  val_nl = double != val_bw = integer
BAR_1J_L2_SSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_1K_L2_EPHM/Quality/type
  val_nl = double != val_bw = integer
BAR_1K_L2_FSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_1K_L2_HKPG/Quality/type
  val_nl = double != val_bw = integer
BAR_1K_L2_MAGN/Quality/type
  val_nl = double != val_bw = integer
BAR_1K_L2_MSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_1K_L2_RCNT/Quality/type
  val_nl = double != val_bw = integer
BAR_1K_L2_SSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_1M_L2_EPHM/Quality/type
  val_nl = double != val_bw = integer
BAR_1M_L2_FSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_1M_L2_HKPG/Quality/type
  val_nl = double != val_bw = integer
BAR_1M_L2_MAGN/Quality/type
  val_nl = double != val_bw = integer
BAR_1M_L2_MSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_1M_L2_RCNT/Quality/type
  val_nl = double != val_bw = integer
BAR_1M_L2_SSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_1N_L2_EPHM/Quality/type
  val_nl = double != val_bw = integer
BAR_1N_L2_FSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_1N_L2_HKPG/Quality/type
  val_nl = double != val_bw = integer
BAR_1N_L2_MAGN/Quality/type
  val_nl = double != val_bw = integer
BAR_1N_L2_MSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_1N_L2_RCNT/Quality/type
  val_nl = double != val_bw = integer
BAR_1N_L2_SSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_1O_L2_EPHM/Quality/type
  val_nl = double != val_bw = integer
BAR_1O_L2_FSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_1O_L2_HKPG/Quality/type
  val_nl = double != val_bw = integer
BAR_1O_L2_MAGN/Quality/type
  val_nl = double != val_bw = integer
BAR_1O_L2_MSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_1O_L2_RCNT/Quality/type
  val_nl = double != val_bw = integer
BAR_1O_L2_SSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_1Q_L2_EPHM/Quality/type
  val_nl = double != val_bw = integer
BAR_1Q_L2_FSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_1Q_L2_HKPG/Quality/type
  val_nl = double != val_bw = integer
BAR_1Q_L2_MAGN/Quality/type
  val_nl = double != val_bw = integer
BAR_1Q_L2_MSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_1Q_L2_RCNT/Quality/type
  val_nl = double != val_bw = integer
BAR_1Q_L2_SSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_1R_L2_EPHM/Quality/type
  val_nl = double != val_bw = integer
BAR_1R_L2_FSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_1R_L2_HKPG/Quality/type
  val_nl = double != val_bw = integer
BAR_1R_L2_MAGN/Quality/type
  val_nl = double != val_bw = integer
BAR_1R_L2_MSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_1R_L2_RCNT/Quality/type
  val_nl = double != val_bw = integer
BAR_1R_L2_SSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_1S_L2_EPHM/Quality/type
  val_nl = double != val_bw = integer
BAR_1S_L2_FSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_1S_L2_HKPG/Quality/type
  val_nl = double != val_bw = integer
BAR_1S_L2_MAGN/Quality/type
  val_nl = double != val_bw = integer
BAR_1S_L2_MSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_1S_L2_RCNT/Quality/type
  val_nl = double != val_bw = integer
BAR_1S_L2_SSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_1T_L2_EPHM/Quality/type
  val_nl = double != val_bw = integer
BAR_1T_L2_FSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_1T_L2_HKPG/Quality/type
  val_nl = double != val_bw = integer
BAR_1T_L2_MAGN/Quality/type
  val_nl = double != val_bw = integer
BAR_1T_L2_MSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_1T_L2_RCNT/Quality/type
  val_nl = double != val_bw = integer
BAR_1T_L2_SSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_1U_L2_EPHM/Quality/type
  val_nl = double != val_bw = integer
BAR_1U_L2_FSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_1U_L2_HKPG/Quality/type
  val_nl = double != val_bw = integer
BAR_1U_L2_MAGN/Quality/type
  val_nl = double != val_bw = integer
BAR_1U_L2_MSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_1U_L2_RCNT/Quality/type
  val_nl = double != val_bw = integer
BAR_1U_L2_SSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_1V_L2_EPHM/Quality/type
  val_nl = double != val_bw = integer
BAR_1V_L2_FSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_1V_L2_HKPG/Quality/type
  val_nl = double != val_bw = integer
BAR_1V_L2_MAGN/Quality/type
  val_nl = double != val_bw = integer
BAR_1V_L2_MSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_1V_L2_RCNT/Quality/type
  val_nl = double != val_bw = integer
BAR_1V_L2_SSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_2A_L2_EPHM/Quality/type
  val_nl = double != val_bw = integer
BAR_2A_L2_FSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_2A_L2_HKPG/Quality/type
  val_nl = double != val_bw = integer
BAR_2A_L2_MAGN/Quality/type
  val_nl = double != val_bw = integer
BAR_2A_L2_MSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_2A_L2_RCNT/Quality/type
  val_nl = double != val_bw = integer
BAR_2A_L2_SSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_2B_L2_EPHM/Quality/type
  val_nl = double != val_bw = integer
BAR_2B_L2_FSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_2B_L2_HKPG/Quality/type
  val_nl = double != val_bw = integer
BAR_2B_L2_MAGN/Quality/type
  val_nl = double != val_bw = integer
BAR_2B_L2_MSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_2B_L2_RCNT/Quality/type
  val_nl = double != val_bw = integer
BAR_2B_L2_SSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_2C_L2_EPHM/Quality/type
  val_nl = double != val_bw = integer
BAR_2C_L2_FSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_2C_L2_HKPG/Quality/type
  val_nl = double != val_bw = integer
BAR_2C_L2_MAGN/Quality/type
  val_nl = double != val_bw = integer
BAR_2C_L2_MSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_2C_L2_RCNT/Quality/type
  val_nl = double != val_bw = integer
BAR_2C_L2_SSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_2D_L2_EPHM/Quality/type
  val_nl = double != val_bw = integer
BAR_2D_L2_FSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_2D_L2_HKPG/Quality/type
  val_nl = double != val_bw = integer
BAR_2D_L2_MAGN/Quality/type
  val_nl = double != val_bw = integer
BAR_2D_L2_MSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_2D_L2_RCNT/Quality/type
  val_nl = double != val_bw = integer
BAR_2D_L2_SSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_2E_L2_EPHM/Quality/type
  val_nl = double != val_bw = integer
BAR_2E_L2_FSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_2E_L2_HKPG/Quality/type
  val_nl = double != val_bw = integer
BAR_2E_L2_MAGN/Quality/type
  val_nl = double != val_bw = integer
BAR_2E_L2_MSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_2E_L2_RCNT/Quality/type
  val_nl = double != val_bw = integer
BAR_2E_L2_SSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_2F_L2_EPHM/Quality/type
  val_nl = double != val_bw = integer
BAR_2F_L2_FSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_2F_L2_HKPG/Quality/type
  val_nl = double != val_bw = integer
BAR_2F_L2_MAGN/Quality/type
  val_nl = double != val_bw = integer
BAR_2F_L2_MSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_2F_L2_RCNT/Quality/type
  val_nl = double != val_bw = integer
BAR_2F_L2_SSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_2I_L2_EPHM/Quality/type
  val_nl = double != val_bw = integer
BAR_2I_L2_FSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_2I_L2_HKPG/Quality/type
  val_nl = double != val_bw = integer
BAR_2I_L2_MAGN/Quality/type
  val_nl = double != val_bw = integer
BAR_2I_L2_MSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_2I_L2_RCNT/Quality/type
  val_nl = double != val_bw = integer
BAR_2I_L2_SSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_2K_L2_EPHM/Quality/type
  val_nl = double != val_bw = integer
BAR_2K_L2_FSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_2K_L2_HKPG/Quality/type
  val_nl = double != val_bw = integer
BAR_2K_L2_MAGN/Quality/type
  val_nl = double != val_bw = integer
BAR_2K_L2_MSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_2K_L2_RCNT/Quality/type
  val_nl = double != val_bw = integer
BAR_2K_L2_SSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_2L_L2_EPHM/Quality/type
  val_nl = double != val_bw = integer
BAR_2L_L2_FSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_2L_L2_MAGN/Quality/type
  val_nl = double != val_bw = integer
BAR_2L_L2_MSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_2L_L2_RCNT/Quality/type
  val_nl = double != val_bw = integer
BAR_2L_L2_SSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_2M_L2_EPHM/Quality/type
  val_nl = double != val_bw = integer
BAR_2M_L2_FSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_2M_L2_HKPG/Quality/type
  val_nl = double != val_bw = integer
BAR_2M_L2_MAGN/Quality/type
  val_nl = double != val_bw = integer
BAR_2M_L2_MSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_2M_L2_RCNT/Quality/type
  val_nl = double != val_bw = integer
BAR_2M_L2_SSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_2N_L2_EPHM/Quality/type
  val_nl = double != val_bw = integer
BAR_2N_L2_FSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_2N_L2_HKPG/Quality/type
  val_nl = double != val_bw = integer
BAR_2N_L2_MAGN/Quality/type
  val_nl = double != val_bw = integer
BAR_2N_L2_MSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_2N_L2_RCNT/Quality/type
  val_nl = double != val_bw = integer
BAR_2N_L2_SSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_2O_L2_EPHM/Quality/type
  val_nl = double != val_bw = integer
BAR_2O_L2_FSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_2O_L2_HKPG/Quality/type
  val_nl = double != val_bw = integer
BAR_2O_L2_MAGN/Quality/type
  val_nl = double != val_bw = integer
BAR_2O_L2_MSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_2O_L2_RCNT/Quality/type
  val_nl = double != val_bw = integer
BAR_2O_L2_SSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_2P_L2_EPHM/Quality/type
  val_nl = double != val_bw = integer
BAR_2P_L2_FSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_2P_L2_HKPG/Quality/type
  val_nl = double != val_bw = integer
BAR_2P_L2_MAGN/Quality/type
  val_nl = double != val_bw = integer
BAR_2P_L2_MSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_2P_L2_RCNT/Quality/type
  val_nl = double != val_bw = integer
BAR_2P_L2_SSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_2Q_L2_EPHM/Quality/type
  val_nl = double != val_bw = integer
BAR_2Q_L2_FSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_2Q_L2_HKPG/Quality/type
  val_nl = double != val_bw = integer
BAR_2Q_L2_MAGN/Quality/type
  val_nl = double != val_bw = integer
BAR_2Q_L2_MSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_2Q_L2_RCNT/Quality/type
  val_nl = double != val_bw = integer
BAR_2Q_L2_SSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_2T_L2_EPHM/Quality/type
  val_nl = double != val_bw = integer
BAR_2T_L2_FSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_2T_L2_HKPG/Quality/type
  val_nl = double != val_bw = integer
BAR_2T_L2_MAGN/Quality/type
  val_nl = double != val_bw = integer
BAR_2T_L2_MSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_2T_L2_RCNT/Quality/type
  val_nl = double != val_bw = integer
BAR_2T_L2_SSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_2W_L2_EPHM/Quality/type
  val_nl = double != val_bw = integer
BAR_2W_L2_FSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_2W_L2_HKPG/Quality/type
  val_nl = double != val_bw = integer
BAR_2W_L2_MAGN/Quality/type
  val_nl = double != val_bw = integer
BAR_2W_L2_MSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_2W_L2_RCNT/Quality/type
  val_nl = double != val_bw = integer
BAR_2W_L2_SSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_2X_L2_EPHM/Quality/type
  val_nl = double != val_bw = integer
BAR_2X_L2_FSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_2X_L2_HKPG/Quality/type
  val_nl = double != val_bw = integer
BAR_2X_L2_MAGN/Quality/type
  val_nl = double != val_bw = integer
BAR_2X_L2_MSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_2X_L2_RCNT/Quality/type
  val_nl = double != val_bw = integer
BAR_2X_L2_SSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_2Y_L2_EPHM/Quality/type
  val_nl = double != val_bw = integer
BAR_2Y_L2_FSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_2Y_L2_HKPG/Quality/type
  val_nl = double != val_bw = integer
BAR_2Y_L2_MAGN/Quality/type
  val_nl = double != val_bw = integer
BAR_2Y_L2_MSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_2Y_L2_RCNT/Quality/type
  val_nl = double != val_bw = integer
BAR_2Y_L2_SSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_3A_L2_EPHM/Quality/type
  val_nl = double != val_bw = integer
BAR_3A_L2_FSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_3A_L2_HKPG/Quality/type
  val_nl = double != val_bw = integer
BAR_3A_L2_MAGN/Quality/type
  val_nl = double != val_bw = integer
BAR_3A_L2_MSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_3A_L2_RCNT/Quality/type
  val_nl = double != val_bw = integer
BAR_3A_L2_SSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_3B_L2_EPHM/Quality/type
  val_nl = double != val_bw = integer
BAR_3B_L2_FSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_3B_L2_HKPG/Quality/type
  val_nl = double != val_bw = integer
BAR_3B_L2_MAGN/Quality/type
  val_nl = double != val_bw = integer
BAR_3B_L2_MSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_3B_L2_RCNT/Quality/type
  val_nl = double != val_bw = integer
BAR_3B_L2_SSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_3C_L2_EPHM/Quality/type
  val_nl = double != val_bw = integer
BAR_3C_L2_FSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_3C_L2_HKPG/Quality/type
  val_nl = double != val_bw = integer
BAR_3C_L2_MAGN/Quality/type
  val_nl = double != val_bw = integer
BAR_3C_L2_MSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_3C_L2_RCNT/Quality/type
  val_nl = double != val_bw = integer
BAR_3C_L2_SSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_3D_L2_EPHM/Quality/type
  val_nl = double != val_bw = integer
BAR_3D_L2_FSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_3D_L2_HKPG/Quality/type
  val_nl = double != val_bw = integer
BAR_3D_L2_MAGN/Quality/type
  val_nl = double != val_bw = integer
BAR_3D_L2_MSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_3D_L2_RCNT/Quality/type
  val_nl = double != val_bw = integer
BAR_3D_L2_SSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_3E_L2_EPHM/Quality/type
  val_nl = double != val_bw = integer
BAR_3E_L2_FSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_3E_L2_HKPG/Quality/type
  val_nl = double != val_bw = integer
BAR_3E_L2_MAGN/Quality/type
  val_nl = double != val_bw = integer
BAR_3E_L2_MSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_3E_L2_RCNT/Quality/type
  val_nl = double != val_bw = integer
BAR_3E_L2_SSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_3F_L2_EPHM/Quality/type
  val_nl = double != val_bw = integer
BAR_3F_L2_FSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_3F_L2_HKPG/Quality/type
  val_nl = double != val_bw = integer
BAR_3F_L2_MAGN/Quality/type
  val_nl = double != val_bw = integer
BAR_3F_L2_MSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_3F_L2_RCNT/Quality/type
  val_nl = double != val_bw = integer
BAR_3F_L2_SSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_3G_L2_EPHM/Quality/type
  val_nl = double != val_bw = integer
BAR_3G_L2_FSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_3G_L2_HKPG/Quality/type
  val_nl = double != val_bw = integer
BAR_3G_L2_MAGN/Quality/type
  val_nl = double != val_bw = integer
BAR_3G_L2_MSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_3G_L2_RCNT/Quality/type
  val_nl = double != val_bw = integer
BAR_3G_L2_SSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_4A_L2_EPHM/Quality/type
  val_nl = double != val_bw = integer
BAR_4A_L2_FSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_4A_L2_HKPG/Quality/type
  val_nl = double != val_bw = integer
BAR_4A_L2_MSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_4A_L2_RCNT/Quality/type
  val_nl = double != val_bw = integer
BAR_4A_L2_SSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_4B_L2_EPHM/Quality/type
  val_nl = double != val_bw = integer
BAR_4B_L2_FSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_4B_L2_HKPG/Quality/type
  val_nl = double != val_bw = integer
BAR_4B_L2_MSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_4B_L2_RCNT/Quality/type
  val_nl = double != val_bw = integer
BAR_4B_L2_SSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_4C_L2_EPHM/Quality/type
  val_nl = double != val_bw = integer
BAR_4C_L2_FSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_4C_L2_HKPG/Quality/type
  val_nl = double != val_bw = integer
BAR_4C_L2_MSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_4C_L2_RCNT/Quality/type
  val_nl = double != val_bw = integer
BAR_4C_L2_SSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_4D_L2_EPHM/Quality/type
  val_nl = double != val_bw = integer
BAR_4D_L2_FSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_4D_L2_HKPG/Quality/type
  val_nl = double != val_bw = integer
BAR_4D_L2_MSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_4D_L2_RCNT/Quality/type
  val_nl = double != val_bw = integer
BAR_4D_L2_SSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_4E_L2_EPHM/Quality/type
  val_nl = double != val_bw = integer
BAR_4E_L2_FSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_4E_L2_HKPG/Quality/type
  val_nl = double != val_bw = integer
BAR_4E_L2_MSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_4E_L2_RCNT/Quality/type
  val_nl = double != val_bw = integer
BAR_4E_L2_SSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_4F_L2_EPHM/Quality/type
  val_nl = double != val_bw = integer
BAR_4F_L2_FSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_4F_L2_HKPG/Quality/type
  val_nl = double != val_bw = integer
BAR_4F_L2_MSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_4F_L2_RCNT/Quality/type
  val_nl = double != val_bw = integer
BAR_4F_L2_SSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_4G_L2_EPHM/Quality/type
  val_nl = double != val_bw = integer
BAR_4G_L2_FSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_4G_L2_HKPG/Quality/type
  val_nl = double != val_bw = integer
BAR_4G_L2_MSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_4G_L2_RCNT/Quality/type
  val_nl = double != val_bw = integer
BAR_4G_L2_SSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_4H_L2_EPHM/Quality/type
  val_nl = double != val_bw = integer
BAR_4H_L2_FSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_4H_L2_HKPG/Quality/type
  val_nl = double != val_bw = integer
BAR_4H_L2_MSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_4H_L2_RCNT/Quality/type
  val_nl = double != val_bw = integer
BAR_4H_L2_SSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_5A_L2_EPHM/Quality/type
  val_nl = double != val_bw = integer
BAR_5A_L2_FSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_5A_L2_HKPG/Quality/type
  val_nl = double != val_bw = integer
BAR_5A_L2_MSPC/Quality/type
  val_nl = double != val_bw = integer
BAR_5A_L2_RCNT/Quality/type
  val_nl = double != val_bw = integer
BAR_5A_L2_SSPC/Quality/type
  val_nl = double != val_bw = integer

DAWN_HELIO1DAY_POSITION files

This URL

https://cdaweb.gsfc.nasa.gov/WS/cdasr/1/dataviews/sp_phys/datasets/DAWN_HELIO1DAY_POSITION/orig_data/20070928T000000Z,20401225T235959Z

was computed based on start/stop in all.xml. Doing so for all other datasets results in a FileDescription node in the response. Here I get

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><DataResult xmlns="http://cdaweb.gsfc.nasa.gov/schema" xmlns:ns2="http://cdf.gsfc.nasa.gov"/>

However, there does appear to be one file

https://cdaweb.gsfc.nasa.gov/pub/data/dawn/helio1day/

ICON

(This was discussed over email - search title for "ICON in particular")

The issue was that the DimSize in the master did not always match what was in the CDF. A variable dimension size creates problems with both HAPI and the CDAWeb software.

From: Tami:

All – the ICON data provider reprocessed all data files for this data set ICON_L2-5_FUV_NIGHT with a static dimension size (135) for the altitude variable and made the matching modifications to all other variables that depend on altitude. The data file version is 6. I have updated our CDAWeb master cdf to match. After our system update tomorrow morning, requests for this data set should work just fine across all files.

P.S. they also just reprocessed all ICON - FUV L2-4* data set files, so those will be ingested tonight and we’ll need to analyze what the changes are. I don’t think there were dimension issues with these.

Fill values don't match type

In many cases, Nand's metadata has CDF_REAL4 and a FILLVAL of -1e31 instead of what is given: -9.999999796611898e-32. What I think is the correct value (-9.999999796611898e-32) also appears in the masters, for example, http://mag.gmu.edu/git-data/cdaweb-hapi-metadata/cache/bw/DE/DE_VS_EICS/DE_VS_EICS-combined.json.

According to https://spdf.gsfc.nasa.gov/istp_guide/vattributes.html#FILLVAL, for CDF_REAL4, it should be -1E31. But -1E31 is not a valid 32-bit IEEE 754 value (np.float32(-1e31) == -1e31 gives False). See also https://www.h-schmidt.net/FloatConverter/IEEE754.html. I think this is the source of the problem.

I think the modification of FILLVAL of -1e31 was done to account for when the data are printed as ASCII, in which case the format string results in fill values in the data being -1e31. However, if binary data are read, a search for values of -9.999999796611898e-32 won't work if the values were cast as doubles and a FILLVAL of -1e31 is used.

I know that one can kludge together rules to handle this, but I've encountered issues with this over the years in both Autoplot and Nand's server. It seems like how this should be handled by software should be documented in the ISTP metadata document.

psp_fld_l3_rfs_hfr

When attempting to determine the cadence for psp_fld_l3_rfs_hfr, I encountered the following (read_cdf uses the Python CDF library).

url = 'https://cdaweb.gsfc.nasa.gov/sp_phys/data/psp/fields/l3/rfs_hfr/2023/psp_fld_l3_rfs_hfr_20231031_v03.cdf'
depend_0_name = 'epoch_hfr_coher_V1_V2'
data = cdawmeta.io.read_cdf(url, variables=depend_0_name, iso8601=False)
print(data)

{'epoch_hfr_coher_V1_V2': {'VarDescription': {'BlockingFactor': 0, 'Compress': 0, 'DataTypeValue': 33, 'DataType': 'CDF_TIME_TT2000', 'DimSizes': [], 'DimVariances': [], 'LastRecord': -1, 'Num': 300, 'NumDims': 0, 'NumElements': 1, 'PadValue': array([-9223372036854775807]), 'RecVariance': True, 'SparseRecords': 'No_sparse', 'VarType': 'zVariable', 'VariableName': 'epoch_hfr_coher_V1_V2'}, 'VarAttributes': {'FIELDNAM': 'epoch_hfr_coher_V1_V2', 'MONOTON': 'INCREASE', 'FORMAT': 'I22', 'LABLAXIS': 'epoch', 'VAR_TYPE': 'support_data', 'FILLVAL': -9223372036854775808, 'DISPLAY_TYPE': 'time_series', 'VALIDMIN': 315576066184000000, 'VALIDMAX': 1577880069183999999, 'SCALEMIN': -9223372036854775807, 'SCALEMAX': -9223372036854775807, 'UNITS': 'ns', 'CATDESC': 'Time for HFR Cross Coherence, Ch0: V1 Ch1: V2', 'TIME_BASE': 'J2000'}, 'VarData': None}}

The LastRecord=-1 and Num=300 is suspicious.

Autoplot gives

Screen Shot 2024-09-17 at 7 55 07 AM

ISS_SP_FPMU/TCC ASCII null

My code (which uses the JSON representation of the master CDFs) claims that the units for ISS_SP_FPMU/TCC is the ASCII null. I see "UNITS":"\u0000" in a.json at

curl "https://cdaweb.gsfc.nasa.gov/pub/software/cdawlib/0JSONS/iss_sp_fpmu_00000000_v01.json" > a.json

This created problems when writing units to a CSV due to python/cpython#97503

Blank space for units

Many parameters have blank space for units in master CDFs. Nand reports the units for these parameters as blank spaces.

For example, FAULT in WI_K0_SPHA

My understanding is that a blank space in a master CDF GlobalAttribute is a signal to CDAWeb that the value should be obtained from a raw CDF (usually because it varies across files).

Does a blank space for units mean "dimensionless" or does it mean either dimensionless or "I don't know the unit or don't want to enter the unit but I want to pass validation?"

Also, some parameters have an empty string for UNITS (for example, SYMM of WI_ELM2_3DP). Nand gives these parameters units of null.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.