Common Sensor Data Record Science Processing Algorithm (C-SDR - SPA) User's Guide
Common Sensor Data Record Science Processing Algorithm (C-SDR - SPA) User's Guide
Common Sensor Data Record Science Processing Algorithm (C-SDR - SPA) User's Guide
May 2015
Users must agree to all terms and conditions in the Software Usage Agreement on the DRL
Web Portal before downloading this software.
Software and documentation published on the DRL Web Portal may occasionally be updated
or modified. The most current versions of DRL software are available at the DRL Web Portal:
http://directreadout.sci.gsfc.nasa.gov/?id=software
Questions relating to the contents or status of this software and its documentation should be
addressed to the DRL via the Contact DRL mechanism at the DRL Web Portal:
http://directreadout.sci.gsfc.nasa.gov/?id=dspContent&cid=66
A Science Processing Algorithm (SPA) is defined as a wrapper and its contained algorithm.
SPAs will function in a standalone, cross-platform environment to serve the needs of the broad
Direct Readout community. Detailed information about SPAs and other DRL technologies is
available at the DRL Web Portal.
Software Description
This software package contains the Common Sensor Data Record Science Processing
Algorithm (C-SDR_SPA). The C-SDR_SPA software package processes Suomi NPP Visible
Infrared Imaging Radiometer Suite (VIIRS), Advanced Technology Microwave Sounder
(ATMS), and Cross-track Infrared Sounder (CrIS) Raw Data Record (RDR) HDF5 products
into corresponding instrument-specific and mission-compliant HDF5 Sensor Data Record
(SDR) and Geolocation swath products. The SPA functions in two modes: standalone, or as
an IPOPP plug-in.
Software Version
Version 2.1of the DRL algorithm wrapper was used to package the SPA described in this
The DRO Algorithm software is a standalone process consisting of reuse from Algorithm
Development Library (ADL), Processing Subsystem (PRO), Data Delivery Subsystem (DDS),
and Ingest Subsystem (ING) code, which has been extended and specialized with additional
code. This software, collectively referred to as DRO, is an implementation of NPP Algorithm
support using NPP ADL packaging for standalone use in a Direct Readout environment.
Copyright 1999-2007, United States Government as represented by the Administrator for the
National Aeronautics and Space Administration. All Rights Reserved.
Credits
The Direct Readout SDR algorithms within C-SDR_SPA were provided to the DRL by the
JPSS Ground Project.
Prerequisites
To run this package, you must have the Java Development Kit (JDK) or Java Runtime
Engine (JRE) (Java 1.6.0_25 or higher) installed on your computer, and have the Java
installation bin/ subdirectory in your PATH environment variable. You must also have Perl
installed on your computer (5.12.4 or higher; also install the Perl Data Dumper if it is not
included in your computer’s Perl installation). This package contains 64-bit binaries statically
pre-compiled on an x86-compatible 64-bit computer running under CentOS 7, using
gcc4.5.1. The C-SDR_SPA also requires at least 8 GB of memory to run successfully,
although more is recommended for improved performance.
The VIIRS SDR algorithm takes a VIIRS RDR file (containing VIIRS Science RDR and
Spacecraft Diary RDR) and required ancillaries as input and outputs the VIIRS Imagery
resolution SDRs, VIIRS Moderate resolution SDRs, the VIIRS Day/Night Band (DNB) SDR,
the VIIRS On Board Calibrator Intermediate Product (IP), the VIIRS Calibrated Dual Gain IP,
and the VIIRS Geolocation products.
The ATMS SDR algorithm takes an ATMS RDR file (containing ATMS Science RDR and
Spacecraft Diary RDR) and required ancillaries as input and outputs the ATMS SDR, the
ATMS Temperature Data Record (TDR), and the ATMS Geolocation products.
The CrIS SDR algorithm takes a CrIS RDR file (containing CrIS Science RDR and Spacecraft
Diary RDR) and required ancillaries as input and outputs the CrIS SDR and Geolocation
products.
$ tar –xzfC-SDR_2.1_SPA_2.1.tar.gz
$ tar –xzfC-SDR_2.1_SPA_2.1_testdata.tar.gz
Installing into an IPOPP Framework: This SPA can also be installed dynamically into an
IPOPP framework to automate production of ATMS SDR/TDR/Geolocation, CrIS
SDR/Geolocation, and VIIRS SDR/Geolocation products. The SPA installation process will
install SPA service(s) into IPOPP. An SPA service is an IPOPP agent that provides the
mechanism necessary for running an SPA automatically within the IPOPP framework. Once
$ ./run-viirs.sh
A successful execution usually requires 2 minutes or more, depending on the speed of your
computer and the size of the input. If everything is working properly, the script will terminate
with a message such as:
$ ./run-atms.sh
A successful execution usually requires 1 minute or more, depending on the speed of your
computer and the size of the input. If everything is working properly, the script will terminate
with a message such as:
$ ./run-cris.sh
A successful execution usually requires 7 minutes or more, depending on the speed of your
computer and the size of the input. If everything is working properly, the script will terminate
with a message such as:
You can cd to the output directory to verify that the science products exist. Test output
product(s) are available for comparison in the testdata/output directory. These test output
product(s) were generated on a 64-bit PC architecture computer running CentOS 7. The
output products serve as an indicator of expected program output. Use a comparison utility
(such as diff, h5diff, etc.) to compare your output product(s) to those provided in the
testdata/output directory. Locally generated files may differ slightly from the provided output
files because of differences in machine architecture or operating systems.
If there is a problem and the code terminates abnormally, the problem can be identified using
the log files. Log files are automatically generated within the directory used for execution.
They start with stdfile* and errfile*. Other log and intermediate files may be generated
automatically within the directory used for execution. They are useful for traceability and
debugging purposes. However it is strongly recommended that users clean up log files and
intermediate files left behind in the run directory before initiating a fresh execution of the SPA.
Intermediate files from a previous run may affect a successive run and produce ambiguous
results. Please report any errors that cannot be fixed to the DRL.
Specify input parameters using <label value> pairs: To execute the 'run' scripts, you must
supply the required input and output parameters. Input and output parameters are usually file
paths or other values (e.g., an automatic search flag). Each parameter is specified on the
command line by a <label value> pair. Labels are simply predefined names for parameters.
Each label must be followed by its actual value. Each process has its own set of <label value>
pairs that must be specified in order for it to execute. Some of these pairs are optional,
meaning the process would still be able to execute even if that parameter is not supplied. The
types of <label value> pairs that the C-SDR_SPA uses are:
a) Input file label/values. These are input file paths. Values are absolute or relative paths
to the corresponding input file.
b) Output file label/values. These are output files that are produced by the SPA. Values
are absolute or relative paths of the files you want to generate.
c) Optional parameter label/values. These are parameters that may be optionally passed
to the SPA (e.g., enabling/disabling compression of output products).
This version of the C-SDR_SPA provides an optional interface for cross-granule RDR file
inputs to the VIIRS SDR algorithm. Use of cross-granule RDR file inputs improves processing
at the granule boundaries of the dual-gain (M1 – M5, M7, M13) SDR output products. The
granule start/end boundaries of the optional cross-granule RDR file inputs must be temporally
adjacent (not overlapping) to the granule start/end boundaries of the primary RDR file input.
The "previous" RDR file should be the one that is adjacent and precedes the first granule of
the primary RDR file while the "next" RDR file should be the one that is adjacent and follows
the last granule of the primary RDR file input.
To provide the optional cross-granule RDR file inputs, the files need to be specified as input
parameters by using the optional ".prev" and ".next" file labels; the file label designated as
".prev" corresponds to the cross-granule RDR file that is temporally adjacent and precedes
the first granule of the primary RDR file, and ".next" corresponds to the cross-granule RDR
file that is temporally adjacent and follows the last granule of the primary RDR file.
The following tables contain labels, and their descriptions, required by the C-SDR_SPA.
tle Two Line Element file For recent TLE files go to:
ftp://is.sci.gsfc.nasa.gov/ancillary/ephemeris/tle/
drl.tle.yyyymmddhh
ftp://is.sci.gsfc.nasa.gov/ArchivedAncillary/LUT
s/npp/viirs/VIIRS-
SDR_BE_LUTs_yymmdd.tar.gz
If this optional parameter is not provided, C-SDR_SPA uses ‘off’ by default and
produces non-compressed HDF5 output products.
viirs.svixx VIIRS 375m Ix {x=01 to 05} Band SDR output HDF file path
{xx= 01 to 05}
viirs.svmxx VIIRS 750m Mx {x=01 to 16} Band SDR output HDF file path
{xx= 01 to 16}
tle Two Line Element file For recent TLE files go to:
ftp://is.sci.gsfc.nasa.gov/ancillary/ephemeris/tle/
drl.tle.yyyymmddhh
ftp://is.sci.gsfc.nasa.gov/ArchivedAncillary/LUT
s/npp/atms/ATMS-
SDR_BE_LUTs_yymmdd.tar.gz
If this optional parameter is not provided, C-SDR_SPA uses ‘off’ by default and
produces non-compressed HDF5 output products.
atms.fatms ATMS SDR (full-sized, floating-point version) output HDF file path
tle Two Line Element file For recent TLE files go to:
ftp://is.sci.gsfc.nasa.gov/ancillary/ephemeris/tle/
drl.tle.yyyymmddhh
ftp://is.sci.gsfc.nasa.gov/ArchivedAncillary/LUT
s/npp/cris/CRIS-
SDR_BE_LUTs_yymmdd.tar.gz
If this optional parameter is not provided, C-SDR_SPA uses ‘off’ by default and
produces non-compressed HDF5 output products.
cris.rgtrs CrIS Geolocation (radians and terrain-corrected version) output HDF file path
Execute the 'run': The following script shows an example of a command line to run the VIIRS
SDR algorithm from the testscripts directory:
$ ../wrapper/VIIRS_C-SDR/run \
viirs.rdr \
../testdata/input/RNSCA-RVIRS_npp_d20150416_t1824585_e1826239_b17967_c20150417193653965556_noaa_ops.h5\
viirs.gdnbo ../testdata/output/GDNBO.h5 \
viirs.gimgo ../testdata/output/GIMGO.h5 \
viirs.gitco ../testdata/output/GITCO.h5 \
viirs.gmodo ../testdata/output/GMODO.h5 \
viirs.gmtco ../testdata/output/GMTCO.h5 \
viirs.icdbg ../testdata/output/ICDBG.h5 \
viirs.ivcdb ../testdata/output/IVCDB.h5 \
viirs.ivobc ../testdata/output/IVOBC.h5 \
viirs.svdnb ../testdata/output/SVDNB.h5 \
viirs.svi01 ../testdata/output/SVI01.h5 \
viirs.svi02 ../testdata/output/SVI02.h5 \
The following script shows an example of a command line to run the ATMS SDR algorithm
from the testscripts directory:
$ ../wrapper/ATMS_C-SDR/run \
atms.rdr \
../testdata/input/RATMS-RNSCA_npp_d20150416_t1822247_e1830246_b17967_c20150417003042803363_noaa_ops.h5\
atms.fatms ../testdata/output/FATMS.h5 \
atms.gatmo ../testdata/output/GATMO.h5 \
atms.satms ../testdata/output/SATMS.h5 \
atms.tatms ../testdata/output/TATMS.h5 \
sdr.lut ../testdata/input/ATMS-SDR_BE_LUTs_150416.tar.gz\
tle ../testdata/input/drl.tle.2015041613\
polar ../testdata/input/off_USNO-PolarWander-UT1-ANC_Ser7_USNO_000f_20150410_201504100000Z_20150410002503Z_ee20150417120000Z_np.ascii\
leapsec../testdata/input/leapsec.2015041701.dat\
compress off
The following script shows an example of a command line to run the CrIS SDR algorithm from
the testscripts directory:
$ ../wrapper/CRIS_C-SDR/run \
cris.rdr../testdata/input/RCRIS-RNSCA_npp_d20150416_t1822247_e1830246_b17967_c20150417003039305406_noaa_ops.h5\
cris.gcrso ../testdata/output/GCRSO.h5 \
cris.rgcrs ../testdata/output/RGCRS.h5 \
cris.rgtrs ../testdata/output/RGTRS.h5 \
cris.scris ../testdata/output/SCRIS.h5 \
sdr.lut ../testdata/input/CRIS-SDR_BE_LUTs_150416.tar.gz \
tle ../testdata/input/drl.tle.2015041613\
polar ../testdata/input/off_USNO-PolarWander-UT1-ANC_Ser7_USNO_000f_20150410_201504100000Z_20150410002503Z_ee20150417120000Z_np.ascii \
leapsec../testdata/input/leapsec.2015041701.dat \
compress off
NOTES:
1. The optional interface for cross-granule RDR file inputs for VIIRS_C-SDR currently
requires that all RDRs used are single-granule RDRs only (viirs.rdr.prev, viirs.rdr,
viirs.rdr.next).
2. In order for the cross-granule RDR file inputs to be used in processing, both ".prev"
and ".next" RDR files must be provided. An "all-or-nothing" approach is used in which
both ".prev" and ".next" must be provided, or neither of them are used during
processing.
3. The input ATMS RDR must have a minimum of 3 granules for successful ATMS SDR
generation.
4. The input CrIS RDR must have a minimum of 9 granules for successful CrIS SDR
generation.
5. The TLE file must be within 14 days of the input RDR file. Use the TLE closest to, but
prior, to the date of the input RDR file. The TLE files provided by the DRL are time-
stamped as follows: drl.tle.yyyymmddhh.
6. The Polar Wander file must be within 30 days of the input RDR file. Use the Polar
Wander file closest to, but prior, to the date of the input RDR file. The Polar Wander
files provided by the DRL are time-stamped as follows: off_USNO-PolarWander-UT1-
ANC_Ser7_USNO_000f_yyyymmdd*.ascii
7. If the Big-Endian (BE) LUT collection set tar file is not provided in the command line,
the SPA uses the default SDR BE LUT collection set included with this release. Use
the SDR BE LUT collection set that is closest to, but prior, to the date of the input RDR
file. The LUT collection sets are time-stamped as follows: {Sensor}-
SDR_BE_LUTs_yymmdd.tar.gz, where {Sensor} is 'VIIRS', 'CRIS', or 'ATMS'.
8. Leapsec ancillary files are cumulative. Use the latest leapsec file available regardless
of the RDR date. The leapsec files provided by the DRL are time-stamped as follows:
leapsec.yyyymmddhh.dat
* Where yyyy, mm, dd, hh represents the year, month and day of month for start of swath; the
first hh, mm, ss, S represents the hour, minutes, seconds and 10th of a second for the start
of swath and the second hh, mm, ss, S represents the end time of the swath.