Closed hyoklee closed 8 years ago
I'll leave this to @dmh , our OPeNDAP expert, to address.
Can you please explain in more detail? Internally, the DAS is parsed. Do you see a specific bug?
I don't see any global attribute in "CoreMetadata" DAS container in the following output. Please look at the bottom of this comment to see the missing part.
/opt/local/bin/ncdump -h https://eosdap.hdfgroup.org:8080/opendap/data/NASAFILES/hdf4/1B01_CSI.971221.375.ADLD.6.HDF
netcdf \1B01_CSI.971221.375.ADLD.6 {
dimensions:
VDFDim0_vdata_DATA_GRANULE_SwathData_navigation_vdf_att1 = 675 ;
VDFDim0_vdata_DATA_GRANULE_SwathData_navigation_vdf_att2 = 675 ;
VDFDim0_vdata_DATA_GRANULE_SwathData_navigation_vdf_att3 = 675 ;
VDFDim0_vdata_DATA_GRANULE_SwathData_navigation_vdf_att4 = 675 ;
VDFDim0_vdata_DATA_GRANULE_SwathData_navigation_vdf_att5 = 675 ;
VDFDim0_vdata_DATA_GRANULE_SwathData_navigation_vdf_att6 = 675 ;
VDFDim0_vdata_DATA_GRANULE_SwathData_navigation_vdf_att7 = 675 ;
VDFDim0_vdata_DATA_GRANULE_SwathData_navigation_vdf_att8 = 675 ;
VDFDim0_vdata_DATA_GRANULE_SwathData_navigation_vdf_att9 = 675 ;
VDFDim0_vdata_DATA_GRANULE_SwathData_navigation_vdf_greenHourAng = 675 ;
VDFDim0_vdata_DATA_GRANULE_SwathData_navigation_vdf_scAlt = 675 ;
VDFDim0_vdata_DATA_GRANULE_SwathData_navigation_vdf_scAttPitch = 675 ;
VDFDim0_vdata_DATA_GRANULE_SwathData_navigation_vdf_scAttRoll = 675 ;
VDFDim0_vdata_DATA_GRANULE_SwathData_navigation_vdf_scAttYaw = 675 ;
VDFDim0_vdata_DATA_GRANULE_SwathData_navigation_vdf_scLat = 675 ;
VDFDim0_vdata_DATA_GRANULE_SwathData_navigation_vdf_scLon = 675 ;
VDFDim0_vdata_DATA_GRANULE_SwathData_navigation_vdf_scPosX = 675 ;
VDFDim0_vdata_DATA_GRANULE_SwathData_navigation_vdf_scPosY = 675 ;
VDFDim0_vdata_DATA_GRANULE_SwathData_navigation_vdf_scPosZ = 675 ;
VDFDim0_vdata_DATA_GRANULE_SwathData_navigation_vdf_scVelX = 675 ;
VDFDim0_vdata_DATA_GRANULE_SwathData_navigation_vdf_scVelY = 675 ;
VDFDim0_vdata_DATA_GRANULE_SwathData_navigation_vdf_scVelZ = 675 ;
VDFDim0_vdata_DATA_GRANULE_SwathData_scan_status_vdf_acsMode = 675 ;
VDFDim0_vdata_DATA_GRANULE_SwathData_scan_status_vdf_ch1Quality = 675 ;
VDFDim0_vdata_DATA_GRANULE_SwathData_scan_status_vdf_ch2Quality = 675 ;
VDFDim0_vdata_DATA_GRANULE_SwathData_scan_status_vdf_ch3Quality = 675 ;
VDFDim0_vdata_DATA_GRANULE_SwathData_scan_status_vdf_ch4Quality = 675 ;
VDFDim0_vdata_DATA_GRANULE_SwathData_scan_status_vdf_ch5Quality = 675 ;
VDFDim0_vdata_DATA_GRANULE_SwathData_scan_status_vdf_fractOrbitN = 675 ;
VDFDim0_vdata_DATA_GRANULE_SwathData_scan_status_vdf_geoQuality = 675 ;
VDFDim0_vdata_DATA_GRANULE_SwathData_scan_status_vdf_missing = 675 ;
VDFDim0_vdata_DATA_GRANULE_SwathData_scan_status_vdf_qac = 675 ;
VDFDim0_vdata_DATA_GRANULE_SwathData_scan_status_vdf_scOrient = 675 ;
VDFDim0_vdata_DATA_GRANULE_SwathData_scan_status_vdf_validity = 675 ;
VDFDim0_vdata_DATA_GRANULE_SwathData_scan_status_vdf_virsAbnCon = 675 ;
VDFDim0_vdata_DATA_GRANULE_SwathData_scan_status_vdf_virsInstS = 675 ;
VDFDim0_vdata_DATA_GRANULE_SwathData_scan_status_vdf_virsMode = 675 ;
VDFDim0_vdata_DATA_GRANULE_SwathData_scan_status_vdf_yawUpdateS = 675 ;
VDFDim0_vdata_DATA_GRANULE_SwathData_scan_time_vdf_scanTime = 675 ;
VDFDim0_vdata_DATA_GRANULE_SwathData_solarCal_vdf_sunMag = 675 ;
VDFDim0_vdata_DATA_GRANULE_SwathData_solarCal_vdf_sunVecX = 675 ;
VDFDim0_vdata_DATA_GRANULE_SwathData_solarCal_vdf_sunVecY = 675 ;
VDFDim0_vdata_DATA_GRANULE_SwathData_solarCal_vdf_sunVecZ = 675 ;
bb_sv_sd = 3 ;
channel = 5 ;
dataword = 2 ;
pixel = 261 ;
pixel_ld = 27 ;
satsun = 2 ;
scan = 675 ;
tempindex = 6 ;
zenazm = 2 ;
variables:
short DATA_GRANULE_SwathData_calCounts(scan, bb_sv_sd, dataword, channel) ;
DATA_GRANULE_SwathData_calCounts:long_name = "calCounts" ;
short DATA_GRANULE_SwathData_tempCounts(scan, tempindex) ;
DATA_GRANULE_SwathData_tempCounts:long_name = "tempCounts" ;
float DATA_GRANULE_SwathData_localDirection(scan, pixel_ld, satsun, zenazm) ;
DATA_GRANULE_SwathData_localDirection:long_name = "localDirection" ;
short DATA_GRANULE_SwathData_channels(scan, pixel, channel) ;
DATA_GRANULE_SwathData_channels:long_name = "channels" ;
DATA_GRANULE_SwathData_channels:VIRSChannelsScalingFactors_0 = "OBJECT=CHANNEL_1;\n",
"\tValue=500;\n",
"\tData_Location=PGE;\n",
"\tMandatory=FALSE;\n",
"END_OBJECT=CHANNEL_1;\n",
"\n",
"OBJECT=CHANNEL_2;\n",
"\tValue=1000;\n",
"\tData_Location=PGE;\n",
"\tMandatory=FALSE;\n",
"END_OBJECT=CHANNEL_2;\n",
"\n",
"OBJECT=CHANNEL_3;\n",
"\tValue=100000;\n",
"\tData_Location=PGE;\n",
"\tMandatory=FALSE;\n",
"END_OBJECT=CHANNEL_3;\n",
"\n",
"OBJECT=CHANNEL_4;\n",
"\tValue=10000;\n",
"\tData_Location=PGE;\n",
"\tMandatory=FALSE;\n",
"END_OBJECT=CHANNEL_4;\n",
"\n",
"OBJECT=CHANNEL_5;\n",
"\tValue=10000;\n",
"\tData_Location=PGE;\n",
"\tMandatory=FALSE;\n",
"END_OBJECT=CHANNEL_5;\n",
"\n",
"END;\n",
"" ;
DATA_GRANULE_SwathData_channels:coordinates = "latitudeLE_SwathData_geolocation longitudeLE_SwathData_geolocation channel" ;
float latitudeLE_SwathData_geolocation(scan, pixel) ;
latitudeLE_SwathData_geolocation:long_name = "latitude" ;
latitudeLE_SwathData_geolocation:units = "degrees_north" ;
float longitudeLE_SwathData_geolocation(scan, pixel) ;
longitudeLE_SwathData_geolocation:long_name = "longitude" ;
longitudeLE_SwathData_geolocation:units = "degrees_east" ;
int bb_sv_sd(bb_sv_sd) ;
bb_sv_sd:long_name = "bb_sv_sd" ;
bb_sv_sd:units = "level" ;
int channel(channel) ;
channel:long_name = "channel" ;
channel:units = "level" ;
int dataword(dataword) ;
dataword:long_name = "dataword" ;
dataword:units = "level" ;
int pixel_ld(pixel_ld) ;
pixel_ld:long_name = "pixel_ld" ;
pixel_ld:units = "level" ;
int satsun(satsun) ;
satsun:long_name = "satsun" ;
satsun:units = "level" ;
int tempindex(tempindex) ;
tempindex:long_name = "tempindex" ;
tempindex:units = "level" ;
int zenazm(zenazm) ;
zenazm:long_name = "zenazm" ;
zenazm:units = "level" ;
double vdata_DATA_GRANULE_SwathData_scan_time_vdf_scanTime(VDFDim0_vdata_DATA_GRANULE_SwathData_scan_time_vdf_scanTime) ;
int vdata_DATA_GRANULE_SwathData_scan_status_vdf_missing(VDFDim0_vdata_DATA_GRANULE_SwathData_scan_status_vdf_missing) ;
int vdata_DATA_GRANULE_SwathData_scan_status_vdf_validity(VDFDim0_vdata_DATA_GRANULE_SwathData_scan_status_vdf_validity) ;
int vdata_DATA_GRANULE_SwathData_scan_status_vdf_qac(VDFDim0_vdata_DATA_GRANULE_SwathData_scan_status_vdf_qac) ;
int vdata_DATA_GRANULE_SwathData_scan_status_vdf_geoQuality(VDFDim0_vdata_DATA_GRANULE_SwathData_scan_status_vdf_geoQuality) ;
int vdata_DATA_GRANULE_SwathData_scan_status_vdf_ch1Quality(VDFDim0_vdata_DATA_GRANULE_SwathData_scan_status_vdf_ch1Quality) ;
int vdata_DATA_GRANULE_SwathData_scan_status_vdf_ch2Quality(VDFDim0_vdata_DATA_GRANULE_SwathData_scan_status_vdf_ch2Quality) ;
int vdata_DATA_GRANULE_SwathData_scan_status_vdf_ch3Quality(VDFDim0_vdata_DATA_GRANULE_SwathData_scan_status_vdf_ch3Quality) ;
int vdata_DATA_GRANULE_SwathData_scan_status_vdf_ch4Quality(VDFDim0_vdata_DATA_GRANULE_SwathData_scan_status_vdf_ch4Quality) ;
int vdata_DATA_GRANULE_SwathData_scan_status_vdf_ch5Quality(VDFDim0_vdata_DATA_GRANULE_SwathData_scan_status_vdf_ch5Quality) ;
int vdata_DATA_GRANULE_SwathData_scan_status_vdf_scOrient(VDFDim0_vdata_DATA_GRANULE_SwathData_scan_status_vdf_scOrient) ;
int vdata_DATA_GRANULE_SwathData_scan_status_vdf_acsMode(VDFDim0_vdata_DATA_GRANULE_SwathData_scan_status_vdf_acsMode) ;
int vdata_DATA_GRANULE_SwathData_scan_status_vdf_yawUpdateS(VDFDim0_vdata_DATA_GRANULE_SwathData_scan_status_vdf_yawUpdateS) ;
int vdata_DATA_GRANULE_SwathData_scan_status_vdf_virsInstS(VDFDim0_vdata_DATA_GRANULE_SwathData_scan_status_vdf_virsInstS) ;
int vdata_DATA_GRANULE_SwathData_scan_status_vdf_virsMode(VDFDim0_vdata_DATA_GRANULE_SwathData_scan_status_vdf_virsMode) ;
int vdata_DATA_GRANULE_SwathData_scan_status_vdf_virsAbnCon(VDFDim0_vdata_DATA_GRANULE_SwathData_scan_status_vdf_virsAbnCon) ;
float vdata_DATA_GRANULE_SwathData_scan_status_vdf_fractOrbitN(VDFDim0_vdata_DATA_GRANULE_SwathData_scan_status_vdf_fractOrbitN) ;
float vdata_DATA_GRANULE_SwathData_navigation_vdf_scPosX(VDFDim0_vdata_DATA_GRANULE_SwathData_navigation_vdf_scPosX) ;
float vdata_DATA_GRANULE_SwathData_navigation_vdf_scPosY(VDFDim0_vdata_DATA_GRANULE_SwathData_navigation_vdf_scPosY) ;
float vdata_DATA_GRANULE_SwathData_navigation_vdf_scPosZ(VDFDim0_vdata_DATA_GRANULE_SwathData_navigation_vdf_scPosZ) ;
float vdata_DATA_GRANULE_SwathData_navigation_vdf_scVelX(VDFDim0_vdata_DATA_GRANULE_SwathData_navigation_vdf_scVelX) ;
float vdata_DATA_GRANULE_SwathData_navigation_vdf_scVelY(VDFDim0_vdata_DATA_GRANULE_SwathData_navigation_vdf_scVelY) ;
float vdata_DATA_GRANULE_SwathData_navigation_vdf_scVelZ(VDFDim0_vdata_DATA_GRANULE_SwathData_navigation_vdf_scVelZ) ;
float vdata_DATA_GRANULE_SwathData_navigation_vdf_scLat(VDFDim0_vdata_DATA_GRANULE_SwathData_navigation_vdf_scLat) ;
float vdata_DATA_GRANULE_SwathData_navigation_vdf_scLon(VDFDim0_vdata_DATA_GRANULE_SwathData_navigation_vdf_scLon) ;
float vdata_DATA_GRANULE_SwathData_navigation_vdf_scAlt(VDFDim0_vdata_DATA_GRANULE_SwathData_navigation_vdf_scAlt) ;
float vdata_DATA_GRANULE_SwathData_navigation_vdf_scAttRoll(VDFDim0_vdata_DATA_GRANULE_SwathData_navigation_vdf_scAttRoll) ;
float vdata_DATA_GRANULE_SwathData_navigation_vdf_scAttPitch(VDFDim0_vdata_DATA_GRANULE_SwathData_navigation_vdf_scAttPitch) ;
float vdata_DATA_GRANULE_SwathData_navigation_vdf_scAttYaw(VDFDim0_vdata_DATA_GRANULE_SwathData_navigation_vdf_scAttYaw) ;
float vdata_DATA_GRANULE_SwathData_navigation_vdf_att1(VDFDim0_vdata_DATA_GRANULE_SwathData_navigation_vdf_att1) ;
float vdata_DATA_GRANULE_SwathData_navigation_vdf_att2(VDFDim0_vdata_DATA_GRANULE_SwathData_navigation_vdf_att2) ;
float vdata_DATA_GRANULE_SwathData_navigation_vdf_att3(VDFDim0_vdata_DATA_GRANULE_SwathData_navigation_vdf_att3) ;
float vdata_DATA_GRANULE_SwathData_navigation_vdf_att4(VDFDim0_vdata_DATA_GRANULE_SwathData_navigation_vdf_att4) ;
float vdata_DATA_GRANULE_SwathData_navigation_vdf_att5(VDFDim0_vdata_DATA_GRANULE_SwathData_navigation_vdf_att5) ;
float vdata_DATA_GRANULE_SwathData_navigation_vdf_att6(VDFDim0_vdata_DATA_GRANULE_SwathData_navigation_vdf_att6) ;
float vdata_DATA_GRANULE_SwathData_navigation_vdf_att7(VDFDim0_vdata_DATA_GRANULE_SwathData_navigation_vdf_att7) ;
float vdata_DATA_GRANULE_SwathData_navigation_vdf_att8(VDFDim0_vdata_DATA_GRANULE_SwathData_navigation_vdf_att8) ;
float vdata_DATA_GRANULE_SwathData_navigation_vdf_att9(VDFDim0_vdata_DATA_GRANULE_SwathData_navigation_vdf_att9) ;
float vdata_DATA_GRANULE_SwathData_navigation_vdf_greenHourAng(VDFDim0_vdata_DATA_GRANULE_SwathData_navigation_vdf_greenHourAng) ;
double vdata_DATA_GRANULE_SwathData_solarCal_vdf_sunVecX(VDFDim0_vdata_DATA_GRANULE_SwathData_solarCal_vdf_sunVecX) ;
double vdata_DATA_GRANULE_SwathData_solarCal_vdf_sunVecY(VDFDim0_vdata_DATA_GRANULE_SwathData_solarCal_vdf_sunVecY) ;
double vdata_DATA_GRANULE_SwathData_solarCal_vdf_sunVecZ(VDFDim0_vdata_DATA_GRANULE_SwathData_solarCal_vdf_sunVecZ) ;
double vdata_DATA_GRANULE_SwathData_solarCal_vdf_sunMag(VDFDim0_vdata_DATA_GRANULE_SwathData_solarCal_vdf_sunMag) ;
}
The below is missing global attribute that exists in DAS but ncdump missed.
CoreMetadata {
OrbitNumber {
Int32 Value 375;
String Data_Location "PGE";
String Mandatory "FALSE";
}
RangeBeginningDate {
String Value "1997/12/21";
String Data_Location "PGE";
String Mandatory "FALSE";
}
RangeBeginningTime {
String Value "16:31:36";
String Data_Location "PGE";
String Mandatory "FALSE";
}
RangeEndingDate {
String Value "1997/12/21";
String Data_Location "PGE";
String Mandatory "FALSE";
}
RangeEndingTime {
String Value "16:35:02";
String Data_Location "PGE";
String Mandatory "FALSE";
}
GranulePointer {
String Value "1B01_CSI.971221.375.ADLD.6.HDF";
String Data_Location "PGE";
String Mandatory "FALSE";
}
ShortName {
String Value "VIRS Radiance";
String Data_Location "PGE";
String Mandatory "FALSE";
}
SizeMBECSDataGranule {
Float64 Value 3.481854;
String Data_Location "PGE";
String Mandatory "FALSE";
}
LongitudeOfMaximumLatitude {
Float64 Value 9.633907;
String Data_Location "PGE";
String Mandatory "FALSE";
}
SpatialCoverageType {
String Value "Horizontal";
String Data_Location "PGE";
String Mandatory "FALSE";
}
EllipsoidName {
String Value "World Geodetic System (WGS) 84";
String Data_Location "PGE";
String Mandatory "FALSE";
}
EquatorialRadius {
Float64 Value 6378.137;
String Data_Location "PGE";
String Mandatory "FALSE";
}
DenominatorFlatteningRatio {
Float64 Value 0.00335281;
String Data_Location "PGE";
String Mandatory "FALSE";
}
OrbitalModelName {
String Value "Definitive FDF Ephemeris";
String Data_Location "PGE";
String Mandatory "FALSE";
}
SemiMajorAxis {
Float64 Value 6725777.500000;
String Data_Location "PGE";
String Mandatory "FALSE";
}
MeanAnomaly {
Float64 Value 3.192575;
String Data_Location "PGE";
String Mandatory "FALSE";
}
RightAscensionNode {
Float64 Value 4.347882;
String Data_Location "PGE";
String Mandatory "FALSE";
}
ArgumentOfPerigee {
Float64 Value 1.519822;
String Data_Location "PGE";
String Mandatory "FALSE";
}
Eccentricity {
Float64 Value 0.000185;
String Data_Location "PGE";
String Mandatory "FALSE";
}
Inclination {
Float64 Value 0.610432;
String Data_Location "PGE";
String Mandatory "FALSE";
}
EpochTime {
String Value "15:10:22";
String Data_Location "PGE";
String Mandatory "FALSE";
}
EpochDate {
String Value "1997/12/21";
String Data_Location "PGE";
String Mandatory "FALSE";
}
EpochMillisec {
Int32 Value 363;
String Data_Location "PGE";
String Mandatory "FALSE";
}
WestBoundingCoordinate {
Int32 Value -180;
String Data_Location "PGE";
String Mandatory "FALSE";
}
EastBoundingCoordinate {
Int32 Value 180;
String Data_Location "PGE";
String Mandatory "FALSE";
}
NorthBoundingCoordinate {
Int32 Value 40;
String Data_Location "PGE";
String Mandatory "FALSE";
}
SouthBoundingCoordinate {
Int32 Value -40;
String Data_Location "PGE";
String Mandatory "FALSE";
}
CenterLatitude {
Float64 Value -9999.9;
String Data_Location "PGE";
String Mandatory "FALSE";
}
CenterLongitude {
Float64 Value -9999.9;
String Data_Location "PGE";
String Mandatory "FALSE";
}
RadiusValue {
Float64 Value -9999.9;
String Data_Location "PGE";
String Mandatory "FALSE";
}
LatitudeResolution {
Float64 Value -9999.9;
String Data_Location "PGE";
String Mandatory "FALSE";
}
LongitudeResolution {
Float64 Value -9999.9;
String Data_Location "PGE";
String Mandatory "FALSE";
}
GeographicCoordinateUnits {
String Value "NULL";
String Data_Location "PGE";
String Mandatory "FALSE";
}
TemporalRangeType {
String Value "Continuous Range";
String Data_Location "PGE";
String Mandatory "FALSE";
}
QualityAssuranceParameterName {
String Value "ScienceQualityFlag";
String Data_Location "PGE";
String Mandatory "FALSE";
}
QualityAssuranceParameterValue {
String Value "NOT BEING INVESTIGATED";
String Data_Location "PGE";
String Mandatory "FALSE";
}
ReprocessingActual {
String Value "NULL";
String Data_Location "PGE";
String Mandatory "FALSE";
}
BrowsePointer {
String Value "NULL";
String Data_Location "PGE";
String Mandatory "FALSE";
}
ScienceContact {
String Value "William Barnes";
String Data_Location "PGE";
String Mandatory "FALSE";
}
MeanMotion {
Float64 Value 15.739437;
String Data_Location "PGE";
String Mandatory "FALSE";
}
OrbitAdjustFlag {
Int32 Value 0;
String Data_Location "PGE";
String Mandatory "FALSE";
}
AttitudeModeFlag {
Int32 Value 1;
String Data_Location "PGE";
String Mandatory "FALSE";
}
SolarBetaAngleAtBeginningOfGranule {
Float64 Value -30.646681;
String Data_Location "PGE";
String Mandatory "FALSE";
}
SolarBetaAngleAtEndOfGranule {
Float64 Value -30.687693;
String Data_Location "PGE";
String Mandatory "FALSE";
}
SensorAlignment {
String Value "0.0,0.0,0.0,1,2,3";
String Data_Location "PGE";
String Mandatory "FALSE";
}
SensorAlignmentChannelOffsets {
String Value "0,0,0,0,0";
String Data_Location "PGE";
String Mandatory "FALSE";
}
ScanPathModel {
String Value "1,3,90,-45.0,90.0,0.15,0.0";
String Data_Location "PGE";
String Mandatory "FALSE";
}
ScanPathModelParam {
String Value "0,0,0,0,0";
String Data_Location "PGE";
String Mandatory "FALSE";
}
EphemerisFileID {
String Value "EPHEM.971221";
String Data_Location "PGE";
String Mandatory "FALSE";
}
}
I am not sure how you want to represent these missing attributes in the netcdf file. For example: if I look at this: CoreMetadata { OrbitNumber { Int32 Value 375; String Data_Location "PGE"; String Mandatory "FALSE"; }... Neither CoreMetdata nor OrbitNumber is a variable. So that means you want these inserted as some kind of global attribute, correct? How do you think that the OrbitNumber information should be represented in the netcdf file?
Yes, I want them inserted as global attributes. You can follow what netCDF-Java does. For example,
int32 CoreMetadata.Orbit_number.Value 375
Fixed and merged.
Would you please handle attributes as well by parsing DAS output, not just DDS?