From owner-techies@unidata.ucar.edu Thu Feb 9 15:53:18 1995 Received: by unidata.ucar.edu id AA19195 (5.65c/IDA-1.4.4 for techies-out); Thu, 9 Feb 1995 15:52:56 -0700 Received: from comet.ucar.edu by unidata.ucar.edu with SMTP id AA19166 (5.65c/IDA-1.4.4 for ); Thu, 9 Feb 1995 15:52:48 -0700 Organization: . Keywords: 199502092252.AA19166 Received: by comet.ucar.edu id AA28547 (5.67b/IDA-1.4.4 for techies@unidata.ucar.edu); Thu, 9 Feb 1995 15:48:39 -0700 Received: by comet.ucar.edu id AA28543 (5.67b/IDA-1.4.4 for /usr/lib/sendmail -oi -fowner-nuwg nuwg-out); Thu, 9 Feb 1995 15:48:39 -0700 Date: Thu, 9 Feb 1995 15:48:37 -0700 (MST) From: "Susan Jesuroga (CSDG)" X-Sender: jesuroga@spike To: nuwg@comet.ucar.edu Subject: NUWG meeting topics, part 3 Message-Id: Mime-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Status: RO NUWGos, Part 3 as promised. Andrew Sundelin of FSL so kindly submitted two different CDLs for satellite. Note the differences listed in the forward of each. We may not get far on the topic, but I hope to at least get some background on issues they've faced with images and identify topics for further thought and discussion. Happy reading! Susan NUWG Scribe _____________________________________________________________ Susan Jesuroga phone: (303) 497-8493 UCAR-COMET fax: (303) 497-8491 P.O. Box 3000 email: jesuroga@comet.ucar.edu Boulder, CO 80307-3000 >From sundelin@fsl.noaa.govThu Feb 9 15:29:30 1995 Date: Thu, 9 Feb 1995 11:11:03 -0700 From: Andrew Sundelin To: "Susan Jesuroga (CSDG)" Cc: sundelin@fsl.noaa.gov Subject: Re: image CDL for NUWG Hi Susan, Sorry I didn't get back to you sooner. Yes, we have a couple of image CDL's that might be interesting to talk about at NUWG next week. One we are using for ISPAN/AWIPS remapped GOES data and one we are planning to use as the output format from our GOES-8 groundstation when it goes on-line (this is in satellite projection). Use your judgement on which you think is more appropriate to pass out to the NUWG or use both or neither. They are attached. See you next week, Andrew PS. If your mailer has trouble with these I can resend them. [ Part 2: "plain text" ] //------------------------------------------------------------------------------ // NOAA/ERL // Forecast Systems Laboratory // Facility Division // Remote Sensor Systems Branch // // sample_nh.cdl // // This is version 2.0 of the netCDF CDL definition of ISPAN/AWIPS remapped // satellite data. // // ** NOT A GENERIC ISPAN/AWIPS CDL -- JUST A REPRESENTATION OF A SAMPLE CASE ** // //------------------------------------------------------------------------------ netcdf ispan { // netCDF definition for ISPAN/AWIPS Mercator satellite data // using Northern Hemisphere Polar Stereographic as an example dimensions: y = 891; // note: the actual value will change x = 1352; // depending on the sector & resolution // and may not be consistant between // instances of the same sector nav = 1; // For georeferencing -- variables that use // this dimension define a mapping between // (x, y) indices and (latitude, longitude) channelsIR = 8; // # of IR channels w/ cal info name_length = 50; // Length of name strings centerLength = 5; // Length of center string scanModeLength = 30; // Length of scan mode string pixelValues = 256; // The number of possible pixel values variables: // Image Information // Note: values from 6 bit imagers are multiplied by 4 byte image(y, x); image:units = "counts"; image:long_name = "Image Pixel Values"; image:navigation_dim = "nav"; image:missing_value = 255; // Time Information double valtime; // FSL conventionalized name a la NUWG "reftime" valtime:units = "seconds since 1970-1-1 00:00:00.00"; valtime:long_name = "Valid Time"; // IR Calibration Information short bias(channelsIR); bias:_FillValue = 0; bias:long_name = "Radiance Bias"; short gain(channelsIR); gain:_FillValue = 0; gain:long_name = "Radiance Gain"; short quadratic(channelsIR); quadratic:_FillValue = 0; quadratic:long_name = "Quadratic Non-Linearity Coefficient"; // Calibrated Data LUTs double countValue(pixelValues); countValue:units = "counts"; countValue:missing_value = -9999.99; countValue:_FillValue = -9999.99; countValue:long_name = "Approximate 10-bit Count LUT"; // Note: ISPAN data has reduced numerical resolution from // the actual satellite and countValue helps to convert things // to approximate "satellite counts" double radiance(pixelValues); radiance:units = "(mW cm)/(m^2 steradian)"; radiance:missing_value = -9999.99; radiance:_FillValue = -9999.99; radiance:long_name = "Radiance LUT"; double brightTemp(pixelValues); brightTemp:units = "Kelvin"; brightTemp:missing_value = -9999.99; brightTemp:_FillValue = -9999.99; brightTemp:long_name = "Brightness Temperature LUT"; double calLutTime; calLutTime:units = "seconds since 1970-1-1 00:00:00.00"; calLutTime:long_name = "Time Calibration LUT Values Implemented"; // Channel Description Information byte detectorFilterId; detectorFilterId:long_name = "Filter/Detector Combination Identifier"; detectorFilterId:units = "FSL Local BUFR Table (0 02 192)"; // Other Scalar Descriptive Variables byte imageRes; imageRes:long_name = "Image Resolution"; imageRes:units = "km"; short satid; // NUWG conventionalized name satid:long_name = "Satellite Identifier"; satid:units = "WMO Table (0 01 007 - BUFR Supl #3 (VIII,1991))"; byte sectorId; sectorId:long_name = "ISPAN Sector Identifier"; sectorId:units = "NWS/ISPAN Standard Table (Table D.3)"; // Navigation Variables (basically uses GRIB names which are also NUWG names) char grid_type(nav, name_length); grid_type:long_name = "NWS/ISPAN Grid Type"; char grid_name(nav, name_length); grid_name:long_name = "Grid Name"; char y_dim(nav, name_length); y_dim:long_name = "Latitude Dimension"; char x_dim(nav, name_length); x_dim:long_name = "Longitude Dimension"; short Nx(nav); Nx:long_name = "Number of x Points"; short Ny(nav); Ny:long_name = "Number of y Points"; float La1(nav); La1:float_name = "Latitude of First Point"; La1:units = "degrees_north"; La1:missing_value = -9999.99; La1:valid_min = -90.0; La1:valid_max = +90.0; float Lo1(nav); Lo1:float_name = "Longitude of First Point"; Lo1:units = "degrees_east"; Lo1:missing_value = -9999.99; Lo1:valid_min = -180.0; Lo1:valid_max = +180.0; float La2(nav); La2:float_name = "Latitude of Last Point"; La2:units = "degrees_north"; La2:missing_value = -9999.99; La2:valid_min = -90.0; La2:valid_max = +90.0; float Lo2(nav); Lo2:float_name = "Longitude of Last Point"; Lo2:units = "degrees_east"; Lo2:missing_value = -9999.99; Lo2:valid_min = -180.0; Lo2:valid_max = +180.0; float Dx(nav); Dx:float_name = "x Grid Increment"; Dx:units = "meters"; Dx:missing_value = -9999.99; float Dy(nav); Dy:float_name = "y Grid Increment"; Dy:units = "meters"; Dy:missing_value = -9999.99; float Latin(nav); Latin:float_name = "Latitude of Tangent"; Latin:units = "degrees_north"; Latin:missing_value = -9999.99; Latin:valid_min = -90.0; Latin:valid_max = +90.0; float LoV(nav); LoV:float_name = "Longitude of Vertical"; LoV:units = "degrees_east"; LoV:missing_value = -9999.99; LoV:valid_min = -180.0; LoV:valid_max = +180.0; // The next four items do not conform to any current convention and are // subject to change. byte center(nav); center:units = "NWS/ISPAN Standard Table (Table D.1A Notes)"; center:long_name = "ISPAN Code for Image Projection Center"; char centerStr(nav, centerLength); center:units = "Name of pole on projection plane"; center:long_name = "Image Projection Center String"; byte scanMode(nav); scanMode:units = "NWS/ISPAN Standard Table (Table D.1B Notes)"; scanMode:long_name = "Satellite Scanning Mode"; char scanModeStr(nav, scanModeLength); scanMode:units = "Description of image scanning method"; scanMode:long_name = "Satellite Scanning Mode String"; // Standard Supplementary Information :history = "Encoded into netCDF by NOAA/FSL from NWS/ISPAN feed"; :title = "ISPAN Satellite Data"; :Conventions = "NUWG"; :origin = "NOAA/ERL Forecast Systems Laboratory, Boulder, CO"; :version = 2.0; // 3rd operational ed data: grid_type = "Polar Stereographic Projection Grid"; grid_name = "Northern Hemisphere Composite PSG"; x_dim = "x"; y_dim = "y"; Nx = 1352; Ny = 891; La1 = 7.838; Lo1 = -141.0279; La2 = -9999.99; // not used by ISPAN polar stereographic Lo2 = -9999.99; // not used by ISPAN polar stereographic Dx = 9087.1; Dy = 9087.1; Latin = 0; LoV = -105; } [ Part 3: "plain text" ] //------------------------------------------------------------------------------ // NOAA/ERL // Forecast Systems Laboratory // Facility Division // Data Acquisition Branch // Posix Data Services Software // // gvarImage.cdl // // This cdl describes FSL's proposed format for GOES-Next data in space // view or orthographic projection. It's intent is to keep the data as // close as possible to that which was received from the satellite. Thus // the data is not remapped in anyway, but the scan lines from the satellite // are ordered appropriately so that an image can be displayed without // difficulty. // // Two different forms of navigation information are included with the image // data. The first is the satellite orbit and attitude information which // can be used in conjunction with a SOCC subroutine library to navigate the // image. The second set of navigation information consists of all of the // variables present in the WMO GRIB specification for space view projections. // This is the NUWG convention and allows users who have libraries familiar // with these quantities to navigate the data easily. Most of these numbers // are calculated from the satellite orbit and attitude information. // // Please note that while we have defined a "target" CDL we have not completed // work on this project and expect that this CDL may evolve with the project // itself. // // John Lewis & Andrew Sundelin // //------------------------------------------------------------------------------ netcdf gvarImage { // netCDF definition for GOES Space View or Orthogroaphic dimensions: y = 891; // note: the actual value will change x = 1352; // depending on the sector & resolution nav = 1; // For geo-referencing: variables that use // this dimension define a mapping between // (x, y) indices and (latitude, longitude) irCalDim = 2; // number of IR detectors with calibration // coefficents sinOrbtYawTotal = 9; // Needed for Sine Orbit Yaw orbitAttitudeLen = 336; // bytes of orbit and attitude information name_length = 200; // Length of name strings centerLength = 5; // Length of center string scanModeLength = 30; // Length of scan mode string variables: // Image Information short image(x, y); image:units = "counts"; image:long_name = "Image Pixel Values"; image:navigation_dim = "nav"; image:missing_value = 0; image:_FillValue = 0; // Dark byte curChannel; curChannel:long_name = "Current Channel Number"; curChannel:gvar_name = "LICHA, word 5, blocks 1 - 10"; double waveLength; waveLength:units = "microns"; waveLength:long_name = "Channel Wavelength"; byte frameTypeFlag; frameTypeFlag:long_name = "Priority Frame Flag"; int scanStatus; scanStatus:long_name = "Imager Scan Status of Last Line"; scanStatus:gvar_name = "ISCAN: words 3 - 6"; byte satid; satid:long_name = "Satellite Identifier"; satid:gvar_name = "SPCID, words 1"; // Time double frameStartTime; frameStartTime:units ="seconds since 1970-1-1 00:00:00.00 0:00"; frameStartTime:long_name = "Valid Time Frame Start"; frameStartTime:gvar_name = "TIPFS (priorty: words 63 - 70) or TINFS (normal: words 71 - 78)"; // --> we actually plan to put many more times here, but in the // interest of brevity decided to leave them out. // IR Calibration Variables float bias(irCalDim); bias:long_name = "IR calibration bias term"; bias:gvar_name = "IWBIAS, words 5587 - 5614"; float firstOrderGain(irCalDim); firstOrderGain:long_name = "IR calibration 1st order gain"; firstOrderGain:gvar_name = "IGAIN1, words 5615 - 5642"; float secondOrderGain(irCalDim); secondOrderGain:long_name = "IR calibration 2nd order gain"; secondOrderGain:gvar_name = "IGAIN2, words 5643 - 5670"; float biasRate(irCalDim); biasRate:long_name = "IR calibration bias rate"; biasRate:gvar_name = "IBRATE, words 5671 - 5698"; //////////////////////////////////////////////////////////////////////////// // GVAR Satellite Navigation Information (broken out) // These are needed for the GOES-Next Earth Referencing Subroutine Library //////////////////////////////////////////////////////////////////////////// char imc; imc:long_name = "Image Motion Compensation (IMC) Identifier"; imc:gvar_name = "words 279 - 282"; double roll(nav); roll:units = "radians"; roll:long_name = "Reference Attitude Roll"; roll:gvar_name = "words 311 - 314"; double pitch(nav); pitch:units = "radians"; pitch:long_name = "Reference Attitude Pitch"; pitch:gvar_name = "words 315 - 318"; double yaw(nav); yaw:units = "radians"; yaw:long_name = "Reference Attitude Yaw"; yaw:gvar_name = "words 319 - 322"; double wa(nav, sinOrbtYawTotal); wa:long_name = "Sine Orbit Yaw"; wa:gvar_name = "words 479 - 514"; double epochTimeDelay; epochTimeDelay:units = "minutes"; epochTimeDelay:long_name = "Exponential time delay from epoch"; epochTimeDelay:gvar_name = "words 519 - 522"; short eastWestCycles; eastWestCycles:units = "cycles"; eastWestCycles:long_name = "East West Cycles"; eastWestCycles:gvar_name = "IOFEC, words 6306"; short eastWestIncs; eastWestIncs:units = "increments"; eastWestIncs:long_name = "East West Increments"; eastWestIncs:gvar_name = "IOFEI, words 6309 - 6310"; short northSouthCycles; northSouthCycles:units = "cycles"; northSouthCycles:long_name = "North South Cycles"; northSouthCycles:gavr_name = "IOFNC, words 6305"; short northSouthIncs; northSouthIncs:units = "increments"; northSouthIncs:long_name = "North South Increments"; northSouthIncs:gvar_name = "IOFNI, words 6307 - 6308"; // GVAR Navigational Variables - in one chunk (converted to IEEE-754) double orbitAttitude(nav, orbitAttitudeLen); orbitAttitude:long_name = "Orbit and Attitude Info Block"; orbitAttitude:gvar_name = "words 279 - 1626"; //////////////////////////////////////////////////////////////////////////// // Navigational Variables - similar to WMO GRIB Standard //////////////////////////////////////////////////////////////////////////// short Nx(nav); Nx:long_name = "Number of points along x-axis"; Nx:grib_name = "octet 7 - 8"; short Ny(nav); Ny:long_name = "Number of points along y-axis"; Ny:grib_name = "octet 9 - 10"; float Lap(nav); Lap:long_name = "Latitude of sub-satellite point"; Lap:units = "radians"; Lap:grib_name = "octet 11 - 13"; float Lop(nav); Lop:long_name = "Longitude of sub-satellite point"; Lop:units = "radians"; Lop:grib_name = "octet 14 - 16"; // resCompFlag is a series of three flags. It has no units. // Bit 1: Direction increments flag // Bit 2: Earth Shape Flag (i.e. Spherical or oblate spheroid) // Bits 3 - 4: reserved (set to zero) // Bit 5: resolution of the u-v vector components // Bits 6 - 8: reserved (set to zero) byte resCompFlag(nav); resCompFlag:units = "WMO Resolution and Component Flag (GRIB Table 7)"; resCompFlag:long_name = "Resolution and Component Flag"; resCompFlag:grib_name = "octet 17"; // Bit 1 of resCompFlag. byte dirIncsFlag(nav); dirIncsFlag:long_name = "Direction increments"; // Bit 2 of resCompFlag. byte earthSphereFlag(nav); earthSphereFlag:long_name = "Earth Shape Flag"; // Bit 5 of resCompFlag. byte componentFlag(nav); componentFlag:long_name = "Component Flag"; float dx(nav); dx:long_name = "Apparent diameter of Earth in grid lengths"; dx:units = "meters"; dx:grib_name = "octet 18 - 20"; float dy(nav); dy:long_name = "Apparent diameter of Earth in grid lengths"; dy:units = "meters"; dy:grib_name = "octet 21 - 23"; float Xp(nav); Xp:long_name = "X-coordinate of sub-satellite point"; Xp:units = "degrees"; Xp:gvar_name = "SUBLA: words 175 - 178"; Xp:grib_name = "octet 24 - 25"; float Yp(nav); Yp:long_name = "Y-coordinate of sub-satellite point"; Yp:units = "degrees"; Yp:gvar_name = "SUBLO: words 179 - 182"; Yp:grib_name = "octet 26 - 27"; byte scanMode(nav); scanMode:units = "WMO Scan Mode Flag (GRIB Table 8)"; scanMode:long_name = "Scanning Mode"; scanMode:grib_name = "octet 28"; char scanModeStr(nav, scanModeLength); scanModeStr:units = "Description of image scanning method"; scanModeStr:long_name = "Satellite Scanning Mode String"; // Note: See also scanMode in GRIB section char orientation(nav); orientation:long_name = "Grid Orientation"; orientation:units = "millidegrees"; orientation:grib_name = "octet 29 - 31"; float Nr(nav); Nr:long_name = "Camera Altitude"; Nr:units = "Earth Equatorial Radii"; Nr:grib_name = "octet 32 - 34"; // Navigational Variables - Misc // Note: The apparent angular size of the Earth is: 2.0 * asin (1/Nr) [radians] // Calculated from equation: Rx = 2.0 * asin (1/Nr) / dx float Rx(nav); Rx:long_name = "Horizontal Angular Resolution"; Rx:units = "radians"; // Calculated from equation: Ry = 2.0 * asin (1/Nr) / dy float Ry(nav); Ry:long_name = "Vertical Angular Resolution"; Ry:units = "radians"; // Standard Supplementary Information :history = "Encoded into netCDF by NOAA/FSL from local GOES/GVAR feed"; :title = "GOES-Next Satellite Image Data"; :Conventions = "NUWG"; :origin = "NOAA/ERL Forecast Systems Laboratory, Boulder, CO"; :version = 1.0; // 1st operational ed }