[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: NCDC interest in swath CDM





Ethan Davis wrote:
Hi Ken,

Sorry for the delayed response, I was out on vacation all last week.

Ken Knapp wrote:

Hi Ethan
We are still interested in the development of some sort of swath CDM. What is the current status or plan?

It is still on our list of things we are interested in but we don't have any specific plans at this time.


Also, we have a few questions you might be able to answer:
1. Can (or will sometime in the future) netCDF Fortran/C APIs access the IOSPs written in Java?

I'm CCing John Caron so he can correct me on this one.
I believe there are no plans for the C, C++, or Fortran APIs to access the IOSPs written in Java. Also, I don't see any mention of the IOSP capabilities to be reimplemented in the C library. I'm looking at the requirements and schedules for netCDF-4 (see the url given below) and I see discussion of implementing CDM coordinate systems and data types but nothing on IOSP capabilities.

1a. If not, then why spend time writing IOSPs for Java, ... for the few people who know Java?

Do you mean why do we (Unidata) write IOSPs? Or, why would you write IOSP's? We do it because Unidata provides a number of Java applications and tools that use the netCDF-java library for data access. This includes the THREDDS Data Server (TDS) which can serve any data the netCDF-java library can read through the TDS OPeNDAP server and many of them through the WCS server. Unidata's Integrated Data Viewer (IDV) is a data analysis and visualization package that uses the netCDF-java library. There are also a fair number of external groups using the netCDF-java library extensively.

If you don't have Java developers or use (or have users that use) Java based applications to access your data, then you might not want to write IOSPs for Java. On the other hand, if you or your users do write/use Java applications, the IOSP framework is a handy way to make non-netCDF data available in a very structured (netCDF API) way.

I would add 2 things. First, Java is a much more productive environment than C/Fortran, 
so we are able to accomplish things, like IOSPs to read non-netcdf files, that we cant do 
in other languages with our limited resources. Second, "Java on the server" is 
a clear win, and we are providing both OpenDAP and WCS access to netcdf and non-netcdf 
files in the TDS. We are considering adding opendap access to the NetCDF C library in a 
way that will be transparent to the client that they are accessing remote files. This is 
probably the main way that C clients will (eventually) take advantage of all the Java 
development we are doing.



2. What is the future of the Fortran/C APIs for netCDF?

The netCDF-4 project web page (http://www.unidata.ucar.edu/software/netcdf/netcdf-4/) gives requirements and schedules for netCDF 4.0 and 4.1 which includes 3.x and 2.x API and file format backward compatibility.

Ethan


These answers will help our understanding of the future. Many thanks, and if you don't mind, you can call me (EDT) with answers ... because I'll probably have more questions.
Thanks-
-Ken

Ethan Davis wrote:

Hi Ken,

Other than what I'm attaching, I not sure what documentation is available for the DMSP archive data format. I just took a look at their web page (http://www.ngdc.noaa.gov/dmsp/) and didn't find much that went into that much detail. I got the three attached files some time back; they are a very low-level description of the format. The first one, "data.description", basically says that a dataset starts with an ASCII header that contains a bunch of metadata followed by binary XDR encoded data. The "dmsp_dda.x" file is an XDR description of the archive data. It includes descriptions for all the different sensors, the code we have only supports OIS data. The last attached file, "sample.header", is an example of an OIS data file's ASCII header. If the netCDF-java source distribution you have has a test/data/dmsp directory, there should be some sample data files in there. Not sure if that is included in our distribution.

You might contact the NGDC DMSP folks (address@hidden) to see what other documentation they have.

One thing, the DMSPiosp provides access to the data at the CDM "data access" level not at the CDM "scientific datatype" level. Which means that the data is really just attributes, dimensions, and variables (arrays). We haven't really worked on the swath scientific datatype yet. I kind of see the swath as related in some way to all of these: a 2-D geo grid, a geolocated image, and a trajectory. We've worked on the grid and trajectory (see the ucar.nc2.dt package for our current code for these) but not the image.

Let me know if you have more questions on the DMSP data. Also, I'm very interested in hearing what you think about swath data in general and the particulars about a java API to swath data. Also, beyond a generic swath dataset, there is the specifics of a collection of swath data for a polar orbiting satellite.

Anyway, lots of interesting stuff that we haven't delved into yet. Let me know how it goes and what you are thinking.

Ethan

Ken Knapp wrote:

Hi Ethan
I am working with John Bates here at NCDC on swath data and am interested in helping with swath CDM development (we spoke briefly at the AMS conference in Atlanta). Ted H suggested I start by looking at what you've done with the DMSP and seeing how it might be shoehorned to work with other satellite data (that is, data I am more familiar with). So I am looking at the code, and I think it might make more sense if I had a document in front of me that described the DMSP data format. Do you have a pdf you can send me?
Thanks ... and I'm sure I'll be in contact again.
-Ken


------------------------------------------------------------------------


        Structure of data files
Each data file has an ascii header and binary data. The length of each record in the data file is specified in the ascii header as "record bytes". For example, each record in the OIS data files is 3,040 bytes. Also contained in the ascii header is how many records comprise the header record. The field name is "number of header records". For example, there are 2 header records in the T1 data files. The data files are all in External Data Representation (XDR) format which is machine independent. To use XDR to read the data you must have the file dda.x (which is also included on this tape) which describes the data fields in XDR format. You must also have the Remote Procedure Calls protocol compiler (rpcgen) on your system which is usually included with the operating system software for your system. First, you must create the XDR code for the system you are reading the data on. To do this, type:
rpcgen dda.x
This will create the following files: dda.h and dda_xdr.c. The dda_xdr.c code will need to be included in the program that reads the data files. Using some of the xdr functions, a simple program can be written to print out the actual data values that are contained in the data file. ------------------------------------------------------------------------

/*
 * $Id: dda.x,v 1.1 1995/04/19 23:59:25 dzirkle Exp dzirkle $
 *
 *                  DMSP Digital Archive Data Formats
 *
 *
 *                               DRAFT
 *                            version 0.93
 *                          December 28, 1993
 *       */



/*
 *  Moment in time
 */
struct DDAEpoch {
short Year; /* 4 digit year */ short DayOfYear; /* day of year (January 1 = 1) */ double SecondsOfDay; /* seconds of day [0.0 - 86400.0) */
};



/*
 *  Spacecraft ephemeris
 */
struct DDAEphemeride {
float Latitude; /* Geodetic Latitude in degrees */ float Longitude; /* Longitude in degrees (0 - 360) */ float Altitude; /* Altitude in kilometers */ float Heading; /* Heading west of north */
};



/*
 *  Spacecraft information
 */
struct DDASpacecraftInfo {
  DDAEpoch      Epoch;
  DDAEphemeride Ephemeride;
};


/* ======================================================= */
/* ========================= OIS ========================= */
/* ======================================================= */

/*
 *  Scan line related information
 */
struct DDA_OLSScanPrefix {
  DDASpacecraftInfo SpacecraftInfo;        /* Time and ephemeris info */

float ScannerOffset; /* Scanner offset in radians */ u_char ScanDirection; /* Actual scan direction */

float SolarElevation; /* Solar elevation in degrees */ float SolarAzimuth; /* Solar azimuth in degrees */ float LunarElevation; /* Lunar elevation in degrees */ float LunarAzimuth; /* Lunar azimuth in degrees */ float LunarPhase; /* Lunar phase in degrees */

float GainCode; /* Gain code in decibels */ u_char GainMode; /* Gain mode: 0 = lin, 1 = log */ u_char GainSubMode; /* Gain sub-mode */

u_char HotTCalSegmentID; /* Hot T cal seg ID: 0 = right, 1 = left */ u_char ColdTCalSegmentID; /* Cold T cal seg ID: 0 = right, 1 = left */

u_char HotTCal; /* Hot T calibration */ u_char ColdTCal; /* Cold T calibration */ u_char PMTCal; /* Photomultiplier tube calibration */ float TChannelGain; /* T channel gain in decibels */
};



/*
 *  Number of video samples per smooth scan line
 */
const DDA_SMOOTH_OLS_SAMPLES = 1465;



/*
 *  OLS Smooth scan line
 */
struct DDA_OLSSmoothVideo {
u_int QualityFlag; /* scan line quality flag */ opaque Pixels [ DDA_SMOOTH_OLS_SAMPLES ]; /* scan line pixels */
};



/*
 *  OLS Interleaved Smooth scan line
 */
struct DDA_OISScanline {
DDA_OLSScanPrefix ScanPrefix; /* Scan line prefix */ DDA_OLSSmoothVideo LightVideoData; /* 6 bit visible data */ DDA_OLSSmoothVideo ThermalVideoData; /* 8 bit thermal data */
};



/*
 *  Number of video samples per fine scan line
 */
const DDA_FINE_OLS_SAMPLES = 7322;



/*
 *  OLS Fine scan line
 */
struct DDA_OLSFineVideo {
u_int QualityFlag; /* scan line quality flag */ opaque Pixels [ DDA_FINE_OLS_SAMPLES ]; /* scan line pixels */
};



/*
 *  OLS NonInterleaved Fine Light scan line
 */
struct DDA_OLFScanline {
DDA_OLSScanPrefix ScanPrefix; /* Scan line prefix */ DDA_OLSFineVideo VideoData; /* 6 bit fine data */
};

/*
 *  OLS NonInterleaved Fine Thermal scan line
 */
struct DDA_OTFScanline {
DDA_OLSScanPrefix ScanPrefix; /* Scan line prefix */ DDA_OLSFineVideo VideoData; /* 6 bit fine data */
};


/*
 *  OLS Interleaved Fine scan line
 */
struct DDA_OIFScanline {
DDA_OLSScanPrefix ScanPrefix; /* Scan line prefix */ DDA_OLSFineVideo LightVideoData; /* 6 bit visible data */ DDA_OLSFineVideo ThermalVideoData; /* 6 bit thermal data */
};


/*
 *  Number of video samples per browse scan line
 */
const DDA_BROWSE_OLS_SAMPLES = 293;



/*
 *  OLS Browse scan line
 */
struct DDA_OLSBrowseVideo {
u_int QualityFlag; /* scan line quality flag */ opaque Pixels [ DDA_BROWSE_OLS_SAMPLES ]; /* scan line pixels */
};



/*
 *  OLS Interleaved Smooth Browse scan line
 */
struct DDA_OIBScanline {
  DDA_OLSScanPrefix  ScanPrefix;
DDA_OLSBrowseVideo LightVideoData; /* 6 bit visible data */ DDA_OLSBrowseVideo ThermalVideoData; /* 6 bit thermal data */
};



/* ======================================================= */
/* ========================= SSM/I ======================= */
/* ======================================================= */


/*
 *
 *  SSM/I Archive Format Terminology
 *  --------------------------------
 *
 *  channel - 1 of the 7 frequency/polarization pairs:
 *            19V, 19H, 22V, 37V, 37H, 85V, 85H
 *
 *  low channels - 19V, 19H, 22V, 37V, 37H
 *  high channels - 85V, 85H
 *
 *  scan  - 1 of the 4 measurement sweeps (A, B, A', B')
* cycle - 4 contiguous scans; minimum required to contain all measurements
 *          taken by the instrument
 *
 */




/*
 *  Number of hot and cold load readings taken in an SSM/I scan
 */
const DDA_SSMI_LOADS = 5;

/*
 *  Number of automatic gain control readings per SSM/I scan
 */
const DDA_SSMI_GAINS = 3;

/*
 *  Number of scene stations per SSM/I scan
 */
const DDA_SSMI_SCENE_STATIONS = 128;



/*
 *  SSM/I calibration information
 */
struct DDA_SSMICalibration {

float HotLoadTemp1; /* hot load 1 temperature, Kelvins */ float HotLoadTemp2; /* hot load 2 temperature, Kelvins */ float HotLoadTemp3; /* hot load 3 temperature, Kelvins */ float RFMixerTemp; /* RF mixer temperature, Kelvins */ float ForwardRadiatorTemp; /* fwd. radiator temperature, Kelvins */ float Scale85V; /* 85V counts-to-Ta scale, Kelvins/count */ float Scale85H; /* 85H counts-to-Ta scale, Kelvins/count */ float Scale37V; /* 37V counts-to-Ta scale, Kelvins/count */ float Scale37H; /* 37H counts-to-Ta scale, Kelvins/count */ float Scale22V; /* 22V counts-to-Ta scale, Kelvins/count */ float Scale19V; /* 19V counts-to-Ta scale, Kelvins/count */ float Scale19H; /* 19H counts-to-Ta scale, Kelvins/count */ float Bias85V; /* 85V counts-to-Ta bias, Kelvins */ float Bias85H; /* 85H counts-to-Ta bias, Kelvins */ float Bias37V; /* 37V counts-to-Ta bias, Kelvins */ float Bias37H; /* 37H counts-to-Ta bias, Kelvins */ float Bias22V; /* 22V counts-to-Ta bias, Kelvins */ float Bias19V; /* 19V counts-to-Ta bias, Kelvins */ float Bias19H; /* 19H counts-to-Ta bias, Kelvins */ u_int ReferenceVoltage; /* reference voltage, counts */ u_int ReferenceReturn; /* return voltage, counts */

u_int AAGC[ DDA_SSMI_GAINS ]; /* A automatic gain control, counts */ u_int BAGC[ DDA_SSMI_GAINS ]; /* B automatic gain control, counts */ u_int APrimeAGC[ DDA_SSMI_GAINS ]; /* A' automatic gain control, counts */ u_int BPrimeAGC[ DDA_SSMI_GAINS ]; /* B' automatic gain control, counts */
};



/*
 *  A (and A') scan parameters
 *
 * In the A and A' scans of a cycle, both the high and low frequencies
 * are sampled.  Each of the 128 scene stations has an 85 GHz sample,
 * and every other scene station has the low frequency samples, starting
 * with the first scene station in the scan.  The 85 GHz scene stations
 * which are in register with the low frequency are commonly known as
 * the "odd" scene stations, even though in this format they are indexed
 * with even values.
 *
 * Example:
* * Latitude[0],Longitude[0] : Ta85V[0] Ta85H[0] ... Ta19V[0] Ta19H[0]
 *   Latitude[1],Longitude[1] : Ta85V[1] Ta85H[1]
 *   Latitude[2],Longitude[2] : Ta85V[2] Ta85H[2] ... Ta19V[1] Ta19H[1]
 *   Latitude[3],Longitude[3] : Ta85V[3] Ta85H[3]
 *   Latitude[4],Longitude[4] : Ta85V[4] Ta85H[4] ... Ta19V[2] Ta19H[2]
 *              .
 *              .
 *              .
 */
struct AScan {
DDAEpoch StartOfScan; /* epoch of start of scan */ float Latitude[128]; /* geodetic latitudes, degrees */ float Longitude[128]; /* longitudes, 0-360 degrees */ float Ta85V[128]; /* 85V antenna temperatures, Kelvins */ float Ta85H[128]; /* 85H antenna temperatures, Kelvins */ float Ta37V[64]; /* 37V antenna temperatures, Kelvins */ float Ta37H[64]; /* 37H antenna temperatures, Kelvins */ float Ta22V[64]; /* 22V antenna temperatures, Kelvins */ float Ta19V[64]; /* 19V antenna temperatures, Kelvins */ float Ta19H[64]; /* 19H antenna temperatures, Kelvins */

u_int QualityFlag85V[128]; /* 85V quality flags */ u_int QualityFlag85H[128]; /* 85H quality flags */ u_int QualityFlag37V[64]; /* 37V quality flags */ u_int QualityFlag37H[64]; /* 37H quality flags */ u_int QualityFlag22V[64]; /* 22V quality flags */ u_int QualityFlag19V[64]; /* 19V quality flags */ u_int QualityFlag19H[64]; /* 19H quality flags */ u_int HotLoad85V[ DDA_SSMI_LOADS ]; /* 85V hot load readings, counts */ u_int HotLoad85H[ DDA_SSMI_LOADS ]; /* 85H hot load readings, counts */ u_int HotLoad37V[ DDA_SSMI_LOADS ]; /* 37V hot load readings, counts */ u_int HotLoad37H[ DDA_SSMI_LOADS ]; /* 37H hot load readings, counts */ u_int HotLoad22V[ DDA_SSMI_LOADS ]; /* 22V hot load readings, counts */ u_int HotLoad19V[ DDA_SSMI_LOADS ]; /* 19V hot load readings, counts */ u_int HotLoad19H[ DDA_SSMI_LOADS ]; /* 19H hot load readings, counts */ u_int ColdLoad85V[ DDA_SSMI_LOADS ]; /* 85V cold load readings, counts */ u_int ColdLoad85H[ DDA_SSMI_LOADS ]; /* 85H cold load readings, counts */ u_int ColdLoad37V[ DDA_SSMI_LOADS ]; /* 37V cold load readings, counts */ u_int ColdLoad37H[ DDA_SSMI_LOADS ]; /* 37H cold load readings, counts */ u_int ColdLoad22V[ DDA_SSMI_LOADS ]; /* 22V cold load readings, counts */ u_int ColdLoad19V[ DDA_SSMI_LOADS ]; /* 19V cold load readings, counts */ u_int ColdLoad19H[ DDA_SSMI_LOADS ]; /* 19H cold load readings, counts */
};


/*
 *  B (and B') scan parameters
 */
struct BScan {
DDAEpoch StartOfScan; /* epoch of start of scan */ float Latitude[128]; /* geodetic latitudes, degrees */ float Longitude[128]; /* longitudes, 0-360 degrees */ float Ta85V[128]; /* 85V antenna temperatures, Kelvins */ float Ta85H[128]; /* 85H antenna temperatures, Kelvins */

u_int QualityFlag85V[128]; /* 85V quality flags */ u_int QualityFlag85H[128]; /* 85H quality flags */ u_int HotLoad85V[ DDA_SSMI_LOADS ]; /* 85V hot load readings, counts */ u_int HotLoad85H[ DDA_SSMI_LOADS ]; /* 85H hot load readings, counts */ u_int ColdLoad85V[ DDA_SSMI_LOADS ]; /* 85V cold load readings, counts */ u_int ColdLoad85H[ DDA_SSMI_LOADS ]; /* 85H cold load readings, counts */
};



/*
 *  SSM/I Cycle (antenna temperatures)
 */
struct DDA_SSMICycle {
DDASpacecraftInfo SpacecraftInfo; /* Time and ephemeris info */ DDA_SSMICalibration Calibration; /* Ta calibration coefficients */ AScan A; /* A scan antenna temperatures */ BScan B; /* B scan antenna temperatures */ AScan APrime; /* A' scan antenna temperatures */ BScan BPrime; /* B' scan antenna temperatures */
};

/* ======================================================= */
/* ====================== SSM/I Tb ======================= */
/* ======================================================= */

/*
 *  A (and A') scan parameters (Tb)
 */
struct AScanTb {
DDAEpoch StartOfScan; /* epoch of start of scan */ float Latitude[128]; /* geodetic latitudes, degrees */ float Longitude[128]; /* longitudes, 0-360 degrees */ float Tb85V[128]; /* 85V brightness temperatures, Kelvins */ float Tb85H[128]; /* 85H brightness temperatures, Kelvins */ float Tb37V[64]; /* 37V brightness temperatures, Kelvins */ float Tb37H[64]; /* 37H brightness temperatures, Kelvins */ float Tb22V[64]; /* 22V brightness temperatures, Kelvins */ float Tb19V[64]; /* 19V brightness temperatures, Kelvins */ float Tb19H[64]; /* 19H brightness temperatures, Kelvins */

u_int QualityFlag85V[128]; /* 85V quality flags */ u_int QualityFlag85H[128]; /* 85H quality flags */ u_int QualityFlag37V[64]; /* 37V quality flags */ u_int QualityFlag37H[64]; /* 37H quality flags */ u_int QualityFlag22V[64]; /* 22V quality flags */ u_int QualityFlag19V[64]; /* 19V quality flags */ u_int QualityFlag19H[64]; /* 19H quality flags */
};


/*
 *  B (and B') scan parameters (Tb)
 */
struct BScanTb {
DDAEpoch StartOfScan; /* epoch of start of scan */ float Latitude[128]; /* geodetic latitudes, degrees */ float Longitude[128]; /* longitudes, 0-360 degrees */ float Tb85V[128]; /* 85V brightness temperatures, Kelvins */ float Tb85H[128]; /* 85H brightness temperatures, Kelvins */

u_int QualityFlag85V[128]; /* 85V quality flags */ u_int QualityFlag85H[128]; /* 85H quality flags */
};


/*
 *  SSM/I Cycle (brightness temperatures)
 */
struct DDA_SSMICycle_Tb {
DDASpacecraftInfo SpacecraftInfo; /* Time and ephemeris info */ AScanTb A; /* A scan brightness temperatures */ BScanTb B; /* B scan brightness temperatures */ AScanTb APrime; /* A' scan brightness temperatures */ BScanTb BPrime; /* B' scan brightness temperatures */
};



/* ======================================================= */
/* ========================= SSM/T-2 ===================== */
/* ======================================================= */



/*
 *  SSM/T-2 Scan
 */
struct DDA_SSMT2Scan {
DDASpacecraftInfo SpacecraftInfo; /* Time and ephemeris info */ DDAEpoch StartOfScan; /* epoch of start of scan */ float Latitude[28]; /* geodetic latitudes, degrees */ float Longitude[28]; /* longitudes, 0-360 degrees */ float Tb183_3[28]; /* 183 (+- 3) GHz brightness temperatures, Kelvins */ float Tb183_1[28]; /* 183 (+- 1) GHz brightness temperatures, Kelvins */ float Tb183_7[28]; /* 183 (+- 7) GHz brightness temperatures, Kelvins */ float Tb91_1[28]; /* 91 (+- 1) GHz brightness temperatures, Kelvins */ float Tb150_1[28]; /* 150 (+- 1) GHz brightness temperatures, Kelvins */ u_int QualityFlag183_3[28]; /* 183 (+- 3) GHz quality flags */ u_int QualityFlag183_1[28]; /* 183 (+- 1) GHz quality flags */ u_int QualityFlag183_7[28]; /* 183 (+- 7) GHz quality flags */ u_int QualityFlag91_1[28]; /* 91 (+- 1) GHz quality flags */ u_int QualityFlag150_1[28]; /* 150 (+- 1) GHz quality flags */ u_int SAGC183_3; /* 183 (+- 3) GHz gain control, counts */ u_int SAGC183_1; /* 183 (+- 1) GHz gain control, counts */ u_int SAGC183_7; /* 183 (+- 7) GHz gain control, counts */ u_int SAGC91_1; /* 91 (+- 1) GHz gain control, counts */ u_int SAGC150_1; /* 150 (+- 1) GHz gain control, counts */

float Gain183_3; /* 183 (+- 3) GHz counts-to-Tb gain, Kelvins/count */ float Gain183_1; /* 183 (+- 1) GHz counts-to-Tb gain, Kelvins/count */ float Gain183_7; /* 183 (+- 7) GHz counts-to-Tb gain, Kelvins/count */ float Gain91_1; /* 91 (+- 1) GHz counts-to-Tb gain, Kelvins/count */ float Gain150_1; /* 150 (+- 1) GHz counts-to-Tb gain, Kelvins/count */ float Offset183_3; /* 183 (+- 3) GHz counts-to-Tb offset, Kelvins */ float Offset183_1; /* 183 (+- 1) GHz counts-to-Tb offset, Kelvins */ float Offset183_7; /* 183 (+- 7) GHz counts-to-Tb offset, Kelvins */ float Offset91_1; /* 91 (+- 1) GHz counts-to-Tb offset, Kelvins */ float Offset150_1; /* 150 (+- 1) GHz counts-to-Tb offset, Kelvins */

  u_int ThermalReference;      /* thermal reference, counts */

  u_int Temperatures[18];      /* miscellaneous housekeeping, counts */

u_int WarmCounts183_3[4]; /* 183 (+- 3) GHz warm load counts, counts */ u_int WarmCounts183_1[4]; /* 183 (+- 1) GHz warm load counts, counts */ u_int WarmCounts183_7[4]; /* 183 (+- 7) GHz warm load counts, counts */ u_int WarmCounts91_1[4]; /* 91 (+- 1) GHz warm load counts, counts */ u_int WarmCounts150_1[4]; /* 150 (+- 1) GHz warm load counts, counts */ u_int ColdCounts183_3[4]; /* 183 (+- 3) GHz cold load counts, counts */ u_int ColdCounts183_1[4]; /* 183 (+- 1) GHz cold load counts, counts */ u_int ColdCounts183_7[4]; /* 183 (+- 7) GHz cold load counts, counts */ u_int ColdCounts91_1[4]; /* 91 (+- 1) GHz cold load counts, counts */ u_int ColdCounts150_1[4]; /* 150 (+- 1) GHz cold load counts, counts */
};



/* ======================================================= */
/* ========================= SSM/T-1 ===================== */
/* ======================================================= */



/*
 *  SSM/T-1 Scan
 *
 * Notes:
 * ------
 * Thermistor[ 0] = Warm Load 1 Temp
 * Thermistor[ 1] = Warm Load 2 Temp
 * Thermistor[ 2] = Warm Load 3 Temp
 * Thermistor[ 3] = Cold Load 1 Temp
 * Thermistor[ 4] = Cold Load 2 Temp
 * Thermistor[ 5] = Cold Load 3 Temp
 * Thermistor[ 6] = Diplexer Temp
 * Thermistor[ 7] = V Modulator Temp
 * Thermistor[ 8] = H Modulator Temp
 * Thermistor[ 9] = RF Filter Temp
 * Thermistor[10] = GMT Temp
 * Thermistor[11] = Mixer 1 Temp
 * Thermistor[12] = Mixer 2 Temp
 * Thermistor[13] = Mixer 3 Temp
 * Thermistor[14] = Local Oscillator Temp
 * Thermistor[15] = IF Amplifier 1 Temp
 * Thermistor[16] = IF Amplifier 2 Temp
 * Thermistor[17] = IF Amplifier 3 Temp
 * Thermistor[18] = Antenna Temp
 * Thermistor[19] = DC/DC Connector Temp
 *
 */

/*
 *  Number of video samples per smooth scan line
 */
const SSMT1_CHANNELS = 7;
const SSMT1_BEAM_POSITIONS  = 7;

struct DDA_SSMT1Scan {
DDASpacecraftInfo SpacecraftInfo; /* Time and ephemeris info */ DDAEpoch StartOfScan; /* epoch of start of scan */ float Latitude[SSMT1_BEAM_POSITIONS]; /* geodetic latitudes, degrees */ float Longitude[SSMT1_BEAM_POSITIONS]; /* longitudes, 0-360 degrees */ float Tb50_5[SSMT1_BEAM_POSITIONS]; /* 50.5 GHz brightness temp, Kelvins */ float Tb53_2[SSMT1_BEAM_POSITIONS]; /* 53.2 GHz brightness temp, Kelvins */ float Tb54_3[SSMT1_BEAM_POSITIONS]; /* 54.35 GHz brightness temp, Kelvins */ float Tb54_9[SSMT1_BEAM_POSITIONS]; /* 54.9 GHz brightness temp, Kelvins */ float Tb58_4[SSMT1_BEAM_POSITIONS]; /* 58.4 GHz brightness temp, Kelvins */ float Tb58_8[SSMT1_BEAM_POSITIONS]; /* 58.825 GHz brightness temp, Kelvins */ float Tb59_4[SSMT1_BEAM_POSITIONS]; /* 59.4 GHz brightness temp, Kelvins */ u_int QualityFlag50_5[SSMT1_BEAM_POSITIONS]; /* 50.5 GHz quality flags */ u_int QualityFlag53_2[SSMT1_BEAM_POSITIONS]; /* 53.2 GHz quality flags */ u_int QualityFlag54_3[SSMT1_BEAM_POSITIONS]; /* 54.35 GHz quality flags */ u_int QualityFlag54_9[SSMT1_BEAM_POSITIONS]; /* 54.9 GHz quality flags */ u_int QualityFlag58_4[SSMT1_BEAM_POSITIONS]; /* 58.4 GHz quality flags */ u_int QualityFlag58_8[SSMT1_BEAM_POSITIONS]; /* 58.825 GHz quality flags */ u_int QualityFlag59_4[SSMT1_BEAM_POSITIONS]; /* 59.4 GHz quality flags */ float Gain50_5; /* 50.5 GHz counts-to-Ta gain, Kelvins/count */ float Gain53_2; /* 53.2 GHz counts-to-Ta gain, Kelvins/count */ float Gain54_3; /* 54.35 GHz counts-to-Ta gain, Kelvins/count */ float Gain54_9; /* 54.9 GHz counts-to-Ta gain, Kelvins/count */ float Gain58_4; /* 58.4 GHz counts-to-Ta gain, Kelvins/count */ float Gain58_8; /* 58.825 GHz counts-to-Ta gain, Kelvins/count */ float Gain59_4; /* 59.4 GHz counts-to-Ta gain, Kelvins/count */ float Offset50_5; /* 50.5 GHz counts-to-Ta offset, Kelvins */ float Offset53_2; /* 53.2 GHz counts-to-Ta offset, Kelvins */ float Offset54_3; /* 54.35 GHz counts-to-Ta offset, Kelvins */ float Offset54_9; /* 54.9 GHz counts-to-Ta offset, Kelvins */ float Offset58_4; /* 58.4 GHz counts-to-Ta offset, Kelvins */ float Offset58_8; /* 58.825 GHz counts-to-Ta offset, Kelvins */ float Offset59_4; /* 59.4 GHz counts-to-Ta offset, Kelvins */

u_int SAGC_Channel1[SSMT1_BEAM_POSITIONS]; /* SAGC for channel 1 */ u_int SAGC_Channel234[SSMT1_BEAM_POSITIONS]; /* SAGC for channels 2-4 */ u_int SAGC_Channel567[SSMT1_BEAM_POSITIONS]; /* SAGC for channels 5-7 */ u_int WarmCal[SSMT1_CHANNELS]; /* beam position 15, counts */ u_int WarmCalSAGC_Channel1; /* SAGC, beam position 15, channel 1 */ u_int WarmCalSAGC_Channel234; /* SAGC, beam position 15, channels 2-4 */ u_int WarmCalSAGC_Channel567; /* SAGC, beam position 15, channels 5-7 */ u_int ColdCal[SSMT1_CHANNELS]; /* beam position 23, counts */ u_int ColdCalSAGC_Channel1; /* SAGC, beam position 23, channel 1 */ u_int ColdCalSAGC_Channel234; /* SAGC, beam position 23, channels 2-4 */ u_int ColdCalSAGC_Channel567; /* SAGC, beam position 23, channels 5-7 */ u_int Thermistors[20]; /* MUX data, counts */
  u_int IRSync;
  u_int MUXZero;
  u_int MUXCal;
  u_int MUXFlag;
};


/* ======================================================= */
/* ========================= SSJ/4 ======================= */
/* ======================================================= */


const DDA_SSJ4_CHANNELS = 20;

/*
 *  SSJ/4 Scan
 *
 * Notes:
 * ------
 * Channel    Channel
 * Index      Energy
 * -------  ----------
 *   [ 0] : 30.000 KeV
 *   [ 1] : 20.440 KeV
 *   [ 2] : 13.920 KeV
 *   [ 3] :  9.480 KeV
 *   [ 4] :  6.460 KeV
 *   [ 5] :  4.400 KeV
 *   [ 6] :  3.000 KeV
 *   [ 7] :  2.040 KeV
 *   [ 8] :  1.390 KeV
 *   [ 9] :  0.948 KeV
 *   [10] : 948.0 eV
 *   [11] : 646.0 eV
 *   [12] : 440.0 eV
 *   [13] : 300.0 eV
 *   [14] : 204.4 eV
 *   [15] : 139.2 eV
 *   [16] :  94.9 eV
 *   [17] :  64.6 eV
 *   [18] :  44.0 eV
 *   [19] :  30.0 eV
 */
struct DDA_SSJ4Scan {

DDASpacecraftInfo SpacecraftInfo; /* Time and ephemeris info */ float CorrGeomLatitude; /* degrees (from PACE model) */ float CorrGeomLongitude; /* degrees east (from PACE model) */ float MagneticLocalTime; /* 0.0,,24.0 (from PACE model) */

  float DiffNumberFluxE[DDA_SSJ4_CHANNELS];
  float DiffNumberFluxP[DDA_SSJ4_CHANNELS];

  u_int CountsE[ DDA_SSJ4_CHANNELS ];
  u_int CountsP[ DDA_SSJ4_CHANNELS ];

  u_int QualityFlagE[DDA_SSJ4_CHANNELS];
  u_int QualityFlagP[DDA_SSJ4_CHANNELS];
};



/* ======================================================= */
/* ========================= SSM ========================= */
/* ======================================================= */


const DDA_SSM_AXES     =  3;
const DDA_SSM_X_DIFFS  =  9;
const DDA_SSM_YZ_DIFFS = 11;


struct DDA_SSMScan {

DDASpacecraftInfo SpacecraftInfo; /* Time and ephemeris info */ float CorrGeomLatitude; /* degrees (from PACE model) */ float CorrGeomLongitude; /* degrees east (from PACE model) */ float MagneticLocalTime; /* 0.0,,24.0 (from PACE model) */

u_int Mode; /* 1 = normal operating mode, 0 = test mode */ u_int Delta; /* 1 = delta exceeded, 0 = delta in range */ u_int Calibrate; /* 1 = calibrate on, 0 = calibrate off */

  /*
   *   The bias counts range in value from 0 through 31, in units of
   *   approximately 4096 gammas.
   */
  u_int XBias;
  u_int YBias;
  u_int ZBias;

  /*
   *  The fine counts range in value from 0 through 4095, in units of
   *  approximately 2 gammas.
   */
  u_int XFine;   u_int YFine;
  u_int ZFine;

  /*
* The difference counts range in value from -32 through 31. 9 are sent for
   *  the X axis and 11 are sent for the Y and Z axes.
   */
  u_int XDiffs[ DDA_SSM_X_DIFFS ];
  u_int YDiffs[ DDA_SSM_YZ_DIFFS ];
  u_int ZDiffs[ DDA_SSM_YZ_DIFFS ];

/*  u_int QualityFlagE[ DDA_SSJ4_CHANNELS ]; */
/*  u_int QualityFlagP[ DDA_SSJ4_CHANNELS ]; */
};



/* ======================================================= */
/* ========================= SSIES-1 ===================== */
/* ======================================================= */

const DDA_SSIES1_WORDS = 120;

/*
 *  SSIES-1 Scan
 *
 * Note: SSIES-1 data currently archived as raw counts.
 */
struct DDA_SSIES1Scan {

DDASpacecraftInfo SpacecraftInfo; /* Time and ephemeris info */ float CorrGeomLatitude; /* degrees (from PACE model) */ float CorrGeomLongitude; /* degrees east (from PACE model) */ float MagneticLocalTime; /* 0.0,24.0 (from PACE model) */

  unsigned Counts[DDA_SSIES1_WORDS];      /* raw counts for 1 second */
  u_int QualityFlag;                      /* scan quality flag       */
};



/*
 *  SSIES Drift Meter data
 */
struct DDA_DriftMeter {

  DDASpacecraftInfo StartOfCycle;

float CorrGeomLatitude; /* degrees (from PACE model) */ float CorrGeomLongitude; /* degrees east (from PACE model) */ float MagneticLocalTime; /* 0.0,24.0 (from PACE model) */

u_int DriftMeterMode; /* normal(0) or H+(1) */ float VX[6]; /* vertical velocities (meters/sec) */ float VZ[6]; /* horizontal velocities (meters/sec) */ u_int VXQualityFlag; /* sample quality flags */ u_int VZQualityFlag; /* sample quality flags */
};

struct DDA_SSIESDriftMeter {
DDA_DriftMeter Cycle1; /* 1st second of drift meter data */ DDA_DriftMeter Cycle2; /* 2nd second of drift meter data */
};



/* ======================================================= */
/* ========================= SSIES-2 ===================== */
/* ======================================================= */

const DDA_SSIES2_WORDS = 84;

/*
 *  SSIES-2 Scan
 */
struct DDA_SSIES2Scan {

DDASpacecraftInfo SpacecraftInfo; /* Time and ephemeris info */ float CorrGeomLatitude; /* degrees (from PACE model) */ float CorrGeomLongitude; /* degrees east (from PACE model) */ float MagneticLocalTime; /* 0.0,24.0 (from PACE model) */

  unsigned Counts[DDA_SSIES2_WORDS];     /* raw counts for 1 second */
  u_int QualityFlag;                     /* scan quality flag       */
};

------------------------------------------------------------------------

file ID: /dmsp/moby-1-3/subscriptions/IBAMA/1353226646955.tmp
data set ID: DMSP F14 OLS LS & TS
record bytes: 3040
number of header records: 1
number of records: 692
suborbit history: F14200307192230.OIS (1,691)
processing system: v2.1b
processing date: Sat Jul 19 19:33:23 2003
spacecraft ID: F14
NORAD ID: 24753
start date UTC: 2003-07-19
start time UTC: 22:30:31.37112
end date UTC: 2003-07-19
end time UTC: 22:35:21.83694
start date local: 2003-07-19
start time local: 19:52:42.03518
start lat,lon: 0.00 320.54
end lat,lon: 16.99 316.69
start sub-solar coord: 20.87 202.37
end sub-solar coord: 20.87 201.16
start lunar coord: UNKNOWN
end lunar coord: UNKNOWN
ascending node: 320.55
node heading: 8.64
ephemeris source: NORAD
number of data records: 691
number of artificial data records: 0
nominal resolution: 2.7 km
bands per scanline: 2
samples per band: 1465
bytes per sample: 1
byte offset band 1: 96
byte offset band 2: 1568
band 1: OLS Visible .4-1.1um
band 2: OLS Thermal 10.5-12.6um
organization: band interleaved by line
thermal offset: 190.00 K
thermal scale: 0.47
QC flags: 0=not QC'ed  1=artificial  2=bad vis
% daylight: 0.0
% full moon: 57.8
% terminator evident: 0.0
end header


--
Ken Knapp, Ph.D.      address@hidden
Remote Sensing and Applications Division
National Climatic Data Center
151 Patton Ave
Asheville, NC 28801-5001
828-271-4339 (voice) 828-271-4328 (fax)